<html>
<head>
<!-- you don't need ignore=notused in your code, this is just here to trick the cache -->
<script src="ag-grid.js"></script>
<script src="virtualPagingServerSide.js"></script>
</head>
<body>
<div id="myGrid" style="height: 100%;" class="ag-fresh"></div>
</body>
</html>
/* Styles go here */
.ag-fresh .ag-root {
border: 1px solid #808080;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.ag-fresh .ag-cell {
padding: 2px;
}
.ag-fresh .ag-cell-focus {
border: 1px solid #a9a9a9;
}
.ag-fresh .ag-cell-no-focus {
border-right: 1px dotted #808080;
border-top: 1px solid transparent;
border-left: 1px solid transparent;
border-bottom: 1px solid transparent;
}
.ag-fresh .ag-pinned-header {
background: -webkit-linear-gradient(#fff, #d3d3d3);
background: -moz-linear-gradient(#fff, #d3d3d3);
background: -o-linear-gradient(#fff, #d3d3d3);
background: -ms-linear-gradient(#fff, #d3d3d3);
background: linear-gradient(#fff, #d3d3d3);
border-bottom: 1px solid #808080;
}
.ag-fresh .ag-header-container {
background: -webkit-linear-gradient(#fff, #d3d3d3);
background: -moz-linear-gradient(#fff, #d3d3d3);
background: -o-linear-gradient(#fff, #d3d3d3);
background: -ms-linear-gradient(#fff, #d3d3d3);
background: linear-gradient(#fff, #d3d3d3);
border-bottom: 1px solid #808080;
}
.ag-fresh .ag-header-cell {
border-right: 1px solid #808080;
}
.ag-fresh .ag-header-group-cell {
border-right: 1px solid #808080;
}
.ag-fresh .ag-header-group-cell-with-group {
border-bottom: 1px solid #808080;
}
.ag-fresh .ag-header-cell-label {
padding: 4px 2px 4px 2px;
}
.ag-fresh .ag-header-cell-text {
padding-left: 2px;
}
.ag-fresh .ag-header-group-cell-label {
padding: 4px;
font-weight: bold;
}
.ag-fresh .ag-header-group-text {
margin-right: 2px;
}
.ag-fresh .ag-header-cell-menu-button {
padding: 2px;
margin-top: 4px;
border: 1px solid transparent;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box; /* When using bootstrap, box-sizing was set to 'border-box' */
}
.ag-fresh .ag-header-cell-menu-button:hover {
border: 1px solid #000;
}
.ag-fresh .ag-header-icon {
color: #800000;
}
.ag-fresh .ag-row-selected {
background-color: #b0e0e6 !important;
}
.ag-fresh .ag-body .ag-row-odd {
background-color: #f6f6f6;
}
.ag-fresh .ag-body .ag-row-even {
background-color: #fff;
}
.ag-fresh .ag-floating-top .ag-row {
background-color: #f0f0f0;
}
.ag-fresh .ag-floating-bottom .ag-row {
background-color: #f0f0f0;
}
.ag-fresh .ag-overlay-loading-wrapper {
background-color: rgba(255,255,255,0.5);
}
.ag-fresh .ag-overlay-loading-center {
background-color: #fff;
border: 1px solid #a9a9a9;
-webkit-border-radius: 10px;
border-radius: 10px;
padding: 10px;
}
.ag-fresh .ag-overlay-no-rows-center {
background-color: #fff;
border: 1px solid #a9a9a9;
-webkit-border-radius: 10px;
border-radius: 10px;
padding: 10px;
}
.ag-fresh .ag-body {
background-color: #fafafa;
}
.ag-fresh .ag-group-cell-entire-row {
background-color: #aaa;
padding: 4px;
}
.ag-fresh .ag-footer-cell-entire-row {
background-color: #aaa;
padding: 4px;
}
.ag-fresh .ag-group-cell {
font-style: italic;
}
.ag-fresh .ag-group-expand {
padding-right: 2px;
}
.ag-fresh .ag-footer-cell {
font-style: italic;
}
.ag-fresh .ag-filter-checkbox {
position: relative;
top: 2px;
left: 2px;
}
.ag-fresh .ag-filter-header-container {
border-bottom: 1px solid #d3d3d3;
}
.ag-fresh .ag-filter-apply-panel {
border-top: 1px solid #d3d3d3;
padding: 2px;
}
.ag-fresh .ag-filter {
border: 1px solid #000;
background-color: #f0f0f0;
}
.ag-fresh .ag-filter-value {
margin-left: 4px;
}
.ag-fresh .ag-selection-checkbox {
margin-left: 4px;
}
.ag-fresh .ag-paging-panel {
padding: 4px;
}
.ag-fresh .ag-paging-button {
margin-left: 4px;
margin-right: 4px;
}
.ag-fresh .ag-paging-row-summary-panel {
display: inline-block;
width: 300px;
}
.ag-fresh .ag-column-not-visible {
opacity: 0.75;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
filter: alpha(opacity=75);
}
.ag-fresh .ag-not-dragging {
border: 1px solid transparent;
}
.ag-fresh .ag-drop-target-above {
border-top: 5px solid #a9a9a9;
}
.ag-fresh .ag-drop-target-below {
border-bottom: 5px solid #a9a9a9;
}
.ag-fresh .ag-dragging {
border: 1px dotted #a9a9a9;
}
.ag-fresh .ag-list-item-selected {
color: #f0f0f0;
}
.ag-fresh .ag-list-item-not-selected {
font-style: italic;
color: #a0a0a0;
}
.ag-fresh .ag-tool-panel-container {
background-color: #eee;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
border: 1px solid #a9a9a9;
padding: 4px;
}
.ag-fresh .ag-list-selection {
background-color: #fff;
border: 1px solid #a9a9a9;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.ag-fresh .ag-popup-list .ag-list-item:hover {
background-color: #add8e6;
}
.ag-fresh .ag-visible-icons {
padding-left: 2px;
padding-right: 2px;
}
var columnDefs = [
// this row shows the row index, doesn't use any data from the row
{headerName: "#", width: 50, cellRenderer: function(params) {
return params.node.id + 1;
} },
{headerName: "Athlete", field: "athlete", width: 150},
{headerName: "Age", field: "age", width: 90},
{headerName: "Country", field: "country", width: 120},
{headerName: "Year", field: "year", width: 90},
{headerName: "Date", field: "date", width: 110},
{headerName: "Sport", field: "sport", width: 110},
{headerName: "Gold", field: "gold", width: 100},
{headerName: "Silver", field: "silver", width: 100},
{headerName: "Bronze", field: "bronze", width: 100},
{headerName: "Total", field: "total", width: 100}
];
var gridOptions = {
enableColResize: true,
virtualPaging: true, // this is important, if not set, normal paging will be done
rowSelection: 'single',
rowDeselection: true,
showToolPanel: true,
columnDefs: columnDefs
};
function setRowData(allOfTheData) {
var dataSource = {
rowCount: null, // behave as infinite scroll
pageSize: 100,
overflowSize: 100,
maxConcurrentRequests: 2,
maxPagesInCache: 2,
getRows: function (params) {
console.log('asking for ' + params.startRow + ' to ' + params.endRow);
// At this point in your code, you would call the server, using $http if in AngularJS.
// To make the demo look real, wait for 500ms before returning
setTimeout( function() {
// take a slice of the total rows
var rowsThisPage = allOfTheData.slice(params.startRow, params.endRow);
// if on or after the last page, work out the last row.
var lastRow = -1;
if (allOfTheData.length <= params.endRow) {
lastRow = allOfTheData.length;
}
// call the success callback
params.successCallback(rowsThisPage, lastRow);
}, 500);
}
};
gridOptions.api.setDatasource(dataSource);
}
// setup the grid after the page has finished loading
document.addEventListener('DOMContentLoaded', function() {
var gridDiv = document.querySelector('#myGrid');
new agGrid.Grid(gridDiv, gridOptions);
// do http request to get our sample data - not using any framework to keep the example self contained.
// you will probably use a framework like JQuery, Angular or something else to do your HTTP calls.
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', 'olympicWinners.json');
httpRequest.send();
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var httpResponse = JSON.parse(httpRequest.responseText);
setRowData(httpResponse);
}
};
});
[{"athlete":"Michael Phelps","age":23,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":8,"silver":0,"bronze":0,"total":8},
{"athlete":"Michael Phelps","age":19,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":6,"silver":0,"bronze":2,"total":8},
{"athlete":"Michael Phelps","age":27,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":4,"silver":2,"bronze":0,"total":6},
{"athlete":"Natalie Coughlin","age":25,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":2,"bronze":3,"total":6},
{"athlete":"Aleksey Nemov","age":24,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":2,"silver":1,"bronze":3,"total":6},
{"athlete":"Alicia Coutts","age":24,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":3,"bronze":1,"total":5},
{"athlete":"Missy Franklin","age":17,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":4,"silver":0,"bronze":1,"total":5},
{"athlete":"Ryan Lochte","age":27,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":2,"bronze":1,"total":5},
{"athlete":"Allison Schmitt","age":22,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":3,"silver":1,"bronze":1,"total":5},
{"athlete":"Natalie Coughlin","age":21,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":2,"silver":2,"bronze":1,"total":5},
{"athlete":"Ian Thorpe","age":17,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":3,"silver":2,"bronze":0,"total":5},
{"athlete":"Dara Torres","age":33,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":3,"total":5},
{"athlete":"Cindy Klassen","age":26,"country":"Canada","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":2,"bronze":2,"total":5},
{"athlete":"Nastia Liukin","age":18,"country":"United States","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":1,"silver":3,"bronze":1,"total":5},
{"athlete":"Marit Bjørgen","age":29,"country":"Norway","year":2010,"date":"28/02/2010","sport":"Cross Country Skiing","gold":3,"silver":1,"bronze":1,"total":5},
{"athlete":"Sun Yang","age":20,"country":"China","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":1,"bronze":1,"total":4},
{"athlete":"Kirsty Coventry","age":24,"country":"Zimbabwe","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":3,"bronze":0,"total":4},
{"athlete":"Libby Lenton-Trickett","age":23,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":1,"bronze":1,"total":4},
{"athlete":"Ryan Lochte","age":24,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":2,"total":4},
{"athlete":"Inge de Bruijn","age":30,"country":"Netherlands","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":2,"total":4},
{"athlete":"Petria Thomas","age":28,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":3,"silver":1,"bronze":0,"total":4},
{"athlete":"Ian Thorpe","age":21,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":2,"silver":1,"bronze":1,"total":4},
{"athlete":"Inge de Bruijn","age":27,"country":"Netherlands","year":2000,"date":"01/10/2000","sport":"Swimming","gold":3,"silver":1,"bronze":0,"total":4},
{"athlete":"Gary Hall Jr.","age":25,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":1,"bronze":1,"total":4},
{"athlete":"Michael Klim","age":23,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":2,"bronze":0,"total":4},
{"athlete":"Susie O'Neill","age":27,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":3,"bronze":0,"total":4},
{"athlete":"Jenny Thompson","age":27,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":3,"silver":0,"bronze":1,"total":4},
{"athlete":"Pieter van den Hoogenband","age":22,"country":"Netherlands","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":2,"total":4},
{"athlete":"An Hyeon-Su","age":20,"country":"South Korea","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":3,"silver":0,"bronze":1,"total":4},
{"athlete":"Aliya Mustafina","age":17,"country":"Russia","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":1,"silver":1,"bronze":2,"total":4},
{"athlete":"Shawn Johnson","age":16,"country":"United States","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":1,"silver":3,"bronze":0,"total":4},
{"athlete":"Dmitry Sautin","age":26,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Diving","gold":1,"silver":1,"bronze":2,"total":4},
{"athlete":"Leontien Zijlaard-van Moorsel","age":30,"country":"Netherlands","year":2000,"date":"01/10/2000","sport":"Cycling","gold":3,"silver":1,"bronze":0,"total":4},
{"athlete":"Petter Northug Jr.","age":24,"country":"Norway","year":2010,"date":"28/02/2010","sport":"Cross Country Skiing","gold":2,"silver":1,"bronze":1,"total":4},
{"athlete":"Ole Einar Bjørndalen","age":28,"country":"Norway","year":2002,"date":"24/02/2002","sport":"Biathlon","gold":4,"silver":0,"bronze":0,"total":4},
{"athlete":"Janica Kostelic","age":20,"country":"Croatia","year":2002,"date":"24/02/2002","sport":"Alpine Skiing","gold":3,"silver":1,"bronze":0,"total":4},
{"athlete":"Nathan Adrian","age":23,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Yannick Agnel","age":20,"country":"France","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Brittany Elmslie","age":18,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Matt Grevers","age":27,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Ryosuke Irie","age":22,"country":"Japan","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Cullen Jones","age":28,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Ranomi Kromowidjojo","age":21,"country":"Netherlands","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Camille Muffat","age":22,"country":"France","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Mel Schlanger","age":25,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Emily Seebohm","age":20,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Rebecca Soni","age":25,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Satomi Suzuki","age":21,"country":"Japan","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":2,"total":3},
{"athlete":"Dana Vollmer","age":24,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Alain Bernard","age":25,"country":"France","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"László Cseh Jr.","age":22,"country":"Hungary","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":3,"bronze":0,"total":3},
{"athlete":"Matt Grevers","age":23,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Margaret Hoelzer","age":25,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Katie Hoff","age":19,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":2,"total":3},
{"athlete":"Leisel Jones","age":22,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Kosuke Kitajima","age":25,"country":"Japan","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Andrew Lauterstein","age":21,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":2,"total":3},
{"athlete":"Jason Lezak","age":32,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Pang Jiaying","age":23,"country":"China","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":2,"total":3},
{"athlete":"Aaron Peirsol","age":25,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Steph Rice","age":20,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Jess Schipper","age":21,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Rebecca Soni","age":21,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Eamon Sullivan","age":22,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Dara Torres","age":41,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":3,"bronze":0,"total":3},
{"athlete":"Amanda Beard","age":22,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Antje Buschschulte","age":25,"country":"Germany","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":0,"bronze":3,"total":3},
{"athlete":"Kirsty Coventry","age":20,"country":"Zimbabwe","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Ian Crocker","age":21,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Grant Hackett","age":24,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Brendan Hansen","age":22,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Jodie Henry","age":20,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Otylia Jedrzejczak","age":20,"country":"Poland","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Leisel Jones","age":18,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Kosuke Kitajima","age":21,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Swimming","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Laure Manaudou","age":17,"country":"France","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Aaron Peirsol","age":21,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Kaitlin Sandeno","age":21,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Roland Schoeman","age":24,"country":"South Africa","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Pieter van den Hoogenband","age":26,"country":"Netherlands","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Therese Alshammar","age":23,"country":"Sweden","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Yana Klochkova","age":18,"country":"Ukraine","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Lenny Krayzelburg","age":24,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Massimiliano Rosolino","age":22,"country":"Italy","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Petria Thomas","age":25,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Matt Welsh","age":23,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Lee Jeong-Su","age":20,"country":"South Korea","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Apolo Anton Ohno","age":27,"country":"United States","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":2,"total":3},
{"athlete":"Wang Meng","age":24,"country":"China","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Jin Seon-Yu","age":17,"country":"South Korea","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Lee Ho-Seok","age":19,"country":"South Korea","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Apolo Anton Ohno","age":23,"country":"United States","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Wang Meng","age":20,"country":"China","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Marc Gagnon","age":26,"country":"Canada","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Yang Yang (A)","age":25,"country":"China","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Stephanie Beckert","age":21,"country":"Germany","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Martina Sáblíková","age":22,"country":"Czech Republic","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Enrico Fabris","age":24,"country":"Italy","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Chad Hedrick","age":28,"country":"United States","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Jochem Uytdehaage","age":25,"country":"Netherlands","year":2002,"date":"24/02/2002","sport":"Speed Skating","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Sabine Völker","age":28,"country":"Germany","year":2002,"date":"24/02/2002","sport":"Speed Skating","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Gregor Schlierenzauer","age":20,"country":"Austria","year":2010,"date":"28/02/2010","sport":"Ski Jumping","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Lars Bystøl","age":27,"country":"Norway","year":2006,"date":"26/02/2006","sport":"Ski Jumping","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Johnny Spillane","age":29,"country":"United States","year":2010,"date":"28/02/2010","sport":"Nordic Combined","gold":0,"silver":3,"bronze":0,"total":3},
{"athlete":"Felix Gottwald","age":30,"country":"Austria","year":2006,"date":"26/02/2006","sport":"Nordic Combined","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Georg Hettich","age":27,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Nordic Combined","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Felix Gottwald","age":26,"country":"Austria","year":2002,"date":"24/02/2002","sport":"Nordic Combined","gold":0,"silver":0,"bronze":3,"total":3},
{"athlete":"Samppa Lajunen","age":22,"country":"Finland","year":2002,"date":"24/02/2002","sport":"Nordic Combined","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Aly Raisman","age":18,"country":"United States","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Kohei Uchimura","age":23,"country":"Japan","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Zou Kai","age":24,"country":"China","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Cheng Fei","age":20,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Yang Wei","age":28,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Yang Yilin","age":15,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Zou Kai","age":20,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Marian Dragulescu","age":23,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":1,"bronze":2,"total":3},
{"athlete":"Paul Hamm","age":21,"country":"United States","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Carly Patterson","age":16,"country":"United States","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Catalina Ponor","age":16,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Simona Amânar","age":20,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Svetlana Khorkina","age":21,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Yekaterina Lobaznyuk","age":17,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Yelena Zamolodchikova","age":17,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Guo Shuang","age":26,"country":"China","year":2012,"date":"12/08/2012","sport":"Cycling","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Chris Hoy","age":32,"country":"Great Britain","year":2008,"date":"24/08/2008","sport":"Cycling","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Bradley Wiggins","age":24,"country":"Great Britain","year":2004,"date":"29/08/2004","sport":"Cycling","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Florian Rousseau","age":26,"country":"France","year":2000,"date":"01/10/2000","sport":"Cycling","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Justyna Kowalczyk","age":27,"country":"Poland","year":2010,"date":"28/02/2010","sport":"Cross Country Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Johan Olsson","age":29,"country":"Sweden","year":2010,"date":"28/02/2010","sport":"Cross Country Skiing","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Stefania Belmondo","age":33,"country":"Italy","year":2002,"date":"24/02/2002","sport":"Cross Country Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Yuliya Chepalova","age":25,"country":"Russia","year":2002,"date":"24/02/2002","sport":"Cross Country Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Frode Estil","age":29,"country":"Norway","year":2002,"date":"24/02/2002","sport":"Cross Country Skiing","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Bente Skari-Martinsen","age":29,"country":"Norway","year":2002,"date":"24/02/2002","sport":"Cross Country Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Magdalena Neuner","age":23,"country":"Germany","year":2010,"date":"28/02/2010","sport":"Biathlon","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Emil Hegle Svendsen","age":24,"country":"Norway","year":2010,"date":"28/02/2010","sport":"Biathlon","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Albina Akhatova","age":29,"country":"Russia","year":2006,"date":"26/02/2006","sport":"Biathlon","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Ole Einar Bjørndalen","age":32,"country":"Norway","year":2006,"date":"26/02/2006","sport":"Biathlon","gold":0,"silver":2,"bronze":1,"total":3},
{"athlete":"Sven Fischer","age":34,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Biathlon","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Martina Glagow-Beck","age":26,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Biathlon","gold":0,"silver":3,"bronze":0,"total":3},
{"athlete":"Michael Greis","age":29,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Biathlon","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Kati Wilhelm","age":29,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Biathlon","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Kati Wilhelm","age":25,"country":"Germany","year":2002,"date":"24/02/2002","sport":"Biathlon","gold":2,"silver":1,"bronze":0,"total":3},
{"athlete":"Yohan Blake","age":22,"country":"Jamaica","year":2012,"date":"12/08/2012","sport":"Athletics","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Usain Bolt","age":25,"country":"Jamaica","year":2012,"date":"12/08/2012","sport":"Athletics","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Allyson Felix","age":26,"country":"United States","year":2012,"date":"12/08/2012","sport":"Athletics","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Shelly-Ann Fraser-Pryce","age":25,"country":"Jamaica","year":2012,"date":"12/08/2012","sport":"Athletics","gold":1,"silver":2,"bronze":0,"total":3},
{"athlete":"Carmelita Jeter","age":32,"country":"United States","year":2012,"date":"12/08/2012","sport":"Athletics","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Usain Bolt","age":21,"country":"Jamaica","year":2008,"date":"24/08/2008","sport":"Athletics","gold":3,"silver":0,"bronze":0,"total":3},
{"athlete":"Veronica Campbell-Brown","age":22,"country":"Jamaica","year":2004,"date":"29/08/2004","sport":"Athletics","gold":2,"silver":0,"bronze":1,"total":3},
{"athlete":"Justin Gatlin","age":22,"country":"United States","year":2004,"date":"29/08/2004","sport":"Athletics","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Bode Miller","age":32,"country":"United States","year":2010,"date":"28/02/2010","sport":"Alpine Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Aksel Lund Svindal","age":27,"country":"Norway","year":2010,"date":"28/02/2010","sport":"Alpine Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Anja Pärson","age":24,"country":"Sweden","year":2006,"date":"26/02/2006","sport":"Alpine Skiing","gold":1,"silver":0,"bronze":2,"total":3},
{"athlete":"Stephan Eberharter","age":32,"country":"Austria","year":2002,"date":"24/02/2002","sport":"Alpine Skiing","gold":1,"silver":1,"bronze":1,"total":3},
{"athlete":"Ding Ning","age":22,"country":"China","year":2012,"date":"12/08/2012","sport":"Table Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Feng Tian Wei","age":25,"country":"Singapore","year":2012,"date":"12/08/2012","sport":"Table Tennis","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Li Xiaoxia","age":24,"country":"China","year":2012,"date":"12/08/2012","sport":"Table Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Dmitrij Ovtcharov","age":23,"country":"Germany","year":2012,"date":"12/08/2012","sport":"Table Tennis","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Wang Hao","age":28,"country":"China","year":2012,"date":"12/08/2012","sport":"Table Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Zhang Jike","age":24,"country":"China","year":2012,"date":"12/08/2012","sport":"Table Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Guo Yue","age":20,"country":"China","year":2008,"date":"24/08/2008","sport":"Table Tennis","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Ma Lin","age":28,"country":"China","year":2008,"date":"24/08/2008","sport":"Table Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Wang Hao","age":24,"country":"China","year":2008,"date":"24/08/2008","sport":"Table Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Wang Liqin","age":30,"country":"China","year":2008,"date":"24/08/2008","sport":"Table Tennis","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Wang Nan","age":29,"country":"China","year":2008,"date":"24/08/2008","sport":"Table Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Zhang Yining","age":26,"country":"China","year":2008,"date":"24/08/2008","sport":"Table Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Zhang Yining","age":22,"country":"China","year":2004,"date":"29/08/2004","sport":"Table Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Kong Linghui","age":24,"country":"China","year":2000,"date":"01/10/2000","sport":"Table Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Li Ju","age":24,"country":"China","year":2000,"date":"01/10/2000","sport":"Table Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Liu Guoliang","age":24,"country":"China","year":2000,"date":"01/10/2000","sport":"Table Tennis","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Wang Nan","age":21,"country":"China","year":2000,"date":"01/10/2000","sport":"Table Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Viktoriya Azarenko","age":22,"country":"Belarus","year":2012,"date":"12/08/2012","sport":"Tennis","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Mike Bryan","age":34,"country":"United States","year":2012,"date":"12/08/2012","sport":"Tennis","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Andy Murray","age":25,"country":"Great Britain","year":2012,"date":"12/08/2012","sport":"Tennis","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Serena Williams","age":30,"country":"United States","year":2012,"date":"12/08/2012","sport":"Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Fernando González","age":24,"country":"Chile","year":2004,"date":"29/08/2004","sport":"Tennis","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Nicolás Massú","age":26,"country":"Chile","year":2004,"date":"29/08/2004","sport":"Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Venus Williams","age":20,"country":"United States","year":2000,"date":"01/10/2000","sport":"Tennis","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Ona Carbonell","age":22,"country":"Spain","year":2012,"date":"12/08/2012","sport":"Synchronized Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Andrea Fuentes","age":29,"country":"Spain","year":2012,"date":"12/08/2012","sport":"Synchronized Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Huang Xuechen","age":22,"country":"China","year":2012,"date":"12/08/2012","sport":"Synchronized Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Nataliya Ishchenko","age":26,"country":"Russia","year":2012,"date":"12/08/2012","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Liu Ou","age":25,"country":"China","year":2012,"date":"12/08/2012","sport":"Synchronized Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Svetlana Romashina","age":22,"country":"Russia","year":2012,"date":"12/08/2012","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Anastasiya Davydova","age":25,"country":"Russia","year":2008,"date":"24/08/2008","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Andrea Fuentes","age":25,"country":"Spain","year":2008,"date":"24/08/2008","sport":"Synchronized Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Gemma Mengual","age":31,"country":"Spain","year":2008,"date":"24/08/2008","sport":"Synchronized Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Anastasiya Yermakova","age":25,"country":"Russia","year":2008,"date":"24/08/2008","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Alison Bartosik","age":21,"country":"United States","year":2004,"date":"29/08/2004","sport":"Synchronized Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Anastasiya Davydova","age":21,"country":"Russia","year":2004,"date":"29/08/2004","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Anna Kozlova","age":31,"country":"United States","year":2004,"date":"29/08/2004","sport":"Synchronized Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Miya Tachibana","age":29,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Synchronized Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Miho Takeda","age":27,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Synchronized Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Anastasiya Yermakova","age":21,"country":"Russia","year":2004,"date":"29/08/2004","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Olga Brusnikina","age":21,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Mariya Kiselyova","age":25,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Synchronized Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Miya Tachibana","age":25,"country":"Japan","year":2000,"date":"01/10/2000","sport":"Synchronized Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Miho Takeda","age":24,"country":"Japan","year":2000,"date":"01/10/2000","sport":"Synchronized Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Becky Adlington","age":23,"country":"Great Britain","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Bronte Barratt","age":23,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Elizabeth Beisel","age":19,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Mireia Belmonte","age":21,"country":"Spain","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Ricky Berens","age":24,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Aleksandra Gerasimenya","age":26,"country":"Belarus","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Brendan Hansen","age":30,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Jessica Hardy","age":25,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Chad le Clos","age":20,"country":"South Africa","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Clément Lefert","age":24,"country":"France","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Amaury Leveaux","age":26,"country":"France","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"James Magnussen","age":21,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Takeshi Matsuda","age":28,"country":"Japan","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Oussama Mellouli","age":28,"country":"Tunisia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Park Tae-Hwan","age":22,"country":"South Korea","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Christian Sprenger","age":26,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Jeremy Stravius","age":24,"country":"France","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Aya Terakawa","age":27,"country":"Japan","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Nick Thoman","age":26,"country":"United States","year":2012,"date":"12/08/2012","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Marleen Veldhuis","age":33,"country":"Netherlands","year":2012,"date":"12/08/2012","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Ye Shiwen","age":16,"country":"China","year":2012,"date":"12/08/2012","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Becky Adlington","age":19,"country":"Great Britain","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Leith Brodie","age":22,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Cate Campbell","age":16,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"César Cielo Filho","age":21,"country":"Brazil","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Hugues Duboscq","age":26,"country":"France","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Felicity Galvez","age":23,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Grant Hackett","age":28,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Kara Lynn Joyce","age":22,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Amaury Leveaux","age":22,"country":"France","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Christine Magnuson","age":22,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Patrick Murphy","age":24,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Park Tae-Hwan","age":18,"country":"South Korea","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Shayne Reese","age":25,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Brenton Rickard","age":24,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Mel Schlanger","age":21,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Julia Smit","age":20,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Britta Steffen","age":24,"country":"Germany","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Hayden Stoeckel","age":24,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Matt Targett","age":22,"country":"Australia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Peter Vanderkaay","age":24,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Arkady Vyachanin","age":24,"country":"Russia","year":2008,"date":"24/08/2008","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Garrett Weber-Gale","age":23,"country":"United States","year":2008,"date":"24/08/2008","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Lindsay Benko","age":27,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Gary Hall Jr.","age":29,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Brooke Hanson","age":26,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Kara Lynn Joyce","age":18,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Klete Keller","age":22,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Yana Klochkova","age":22,"country":"Ukraine","year":2004,"date":"29/08/2004","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Rachel Komisarz","age":27,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Libby Lenton-Trickett","age":19,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Jason Lezak","age":28,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Ryan Lochte","age":20,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Alice Mills","age":18,"country":"Australia","year":2004,"date":"29/08/2004","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Tomomi Morita","age":19,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Markus Rogan","age":22,"country":"Austria","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Jenny Thompson","age":31,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Franziska van Almsick","age":26,"country":"Germany","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Neil Walker","age":28,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Amanda Weir","age":18,"country":"United States","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Takashi Yamamoto","age":26,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Brooke Bennett","age":20,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Beatrice Coada-Caslaru","age":25,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Josh Davis","age":28,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Tom Dolan","age":25,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Anthony Ervin","age":19,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Domenico Fioravanti","age":23,"country":"Italy","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Grant Hackett","age":20,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Geoff Huegill","age":21,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Leisel Jones","age":15,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Klete Keller","age":18,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Jason Lezak","age":24,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Diana Mocanu","age":16,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Martina Moravcová","age":24,"country":"Slovakia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Ed Moses","age":20,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Diana Munz","age":18,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Mai Nakamura","age":21,"country":"Japan","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Todd Pearson","age":22,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Adam Pine","age":24,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Claudia Poll","age":27,"country":"Costa Rica","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Megan Quann-Jendrick","age":16,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Giaan Rooney","age":17,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Courtney Shealy","age":22,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Ashley Tappin","age":25,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Stev Theloke","age":22,"country":"Germany","year":2000,"date":"01/10/2000","sport":"Swimming","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Amy Van Dyken","age":27,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Neil Walker","age":24,"country":"United States","year":2000,"date":"01/10/2000","sport":"Swimming","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"J. R. Celski","age":19,"country":"United States","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Charles Hamelin","age":25,"country":"Canada","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Lee Ho-Seok","age":23,"country":"South Korea","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Park Seung-Hui","age":17,"country":"South Korea","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Katherine Reutter","age":21,"country":"United States","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Seong Si-Baek","age":22,"country":"South Korea","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Marianne St-Gelais","age":19,"country":"Canada","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"François-Louis Tremblay","age":29,"country":"Canada","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Zhou Yang","age":18,"country":"China","year":2010,"date":"28/02/2010","sport":"Short-Track Speed Skating","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Choi Eun-Gyeong","age":21,"country":"South Korea","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Anouk Leblanc-Boucher","age":21,"country":"Canada","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"François-Louis Tremblay","age":25,"country":"Canada","year":2006,"date":"26/02/2006","sport":"Short-Track Speed Skating","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Choi Eun-Gyeong","age":17,"country":"South Korea","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Go Gi-Hyeon","age":15,"country":"South Korea","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Jonathan Guilmette","age":23,"country":"Canada","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Li Jiajun","age":26,"country":"China","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Apolo Anton Ohno","age":19,"country":"United States","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Evgeniya Radanova","age":24,"country":"Bulgaria","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Mathieu Turcotte","age":25,"country":"Canada","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Wang Chunlu","age":23,"country":"China","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Yang Yang (S)","age":24,"country":"China","year":2002,"date":"24/02/2002","sport":"Short-Track Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Shani Davis","age":27,"country":"United States","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Kristina Groves","age":33,"country":"Canada","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Chad Hedrick","age":32,"country":"United States","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Sven Kramer","age":23,"country":"Netherlands","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Lee Seung-Hun","age":21,"country":"South Korea","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Mo Tae-Beom","age":21,"country":"South Korea","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Ivan Skobrev","age":27,"country":"Russia","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Mark Tuitert","age":29,"country":"Netherlands","year":2010,"date":"28/02/2010","sport":"Speed Skating","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Joey Cheek","age":26,"country":"United States","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Shani Davis","age":23,"country":"United States","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Anni Friesinger-Postma","age":29,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Kristina Groves","age":29,"country":"Canada","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Clara Hughes","age":33,"country":"Canada","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Sven Kramer","age":19,"country":"Netherlands","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Claudia Pechstein","age":33,"country":"Germany","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Carl Verheijen","age":30,"country":"Netherlands","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Erben Wennemars","age":30,"country":"Netherlands","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Ireen Wüst","age":19,"country":"Netherlands","year":2006,"date":"26/02/2006","sport":"Speed Skating","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Derek Parra","age":31,"country":"United States","year":2002,"date":"24/02/2002","sport":"Speed Skating","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Claudia Pechstein","age":29,"country":"Germany","year":2002,"date":"24/02/2002","sport":"Speed Skating","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Jennifer Rodriguez","age":25,"country":"United States","year":2002,"date":"24/02/2002","sport":"Speed Skating","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Simon Ammann","age":28,"country":"Switzerland","year":2010,"date":"28/02/2010","sport":"Ski Jumping","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Adam Malysz","age":32,"country":"Poland","year":2010,"date":"28/02/2010","sport":"Ski Jumping","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Matti Hautamäki","age":24,"country":"Finland","year":2006,"date":"26/02/2006","sport":"Ski Jumping","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Andreas Kofler","age":21,"country":"Austria","year":2006,"date":"26/02/2006","sport":"Ski Jumping","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Roar Ljøkelsøy","age":29,"country":"Norway","year":2006,"date":"26/02/2006","sport":"Ski Jumping","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Thomas Morgenstern","age":19,"country":"Austria","year":2006,"date":"26/02/2006","sport":"Ski Jumping","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Simon Ammann","age":20,"country":"Switzerland","year":2002,"date":"24/02/2002","sport":"Ski Jumping","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Sven Hannawald","age":27,"country":"Germany","year":2002,"date":"24/02/2002","sport":"Ski Jumping","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Matti Hautamäki","age":20,"country":"Finland","year":2002,"date":"24/02/2002","sport":"Ski Jumping","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Adam Malysz","age":24,"country":"Poland","year":2002,"date":"24/02/2002","sport":"Ski Jumping","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Niccolò Campriani","age":24,"country":"Italy","year":2012,"date":"12/08/2012","sport":"Shooting","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Jin Jong-O","age":32,"country":"South Korea","year":2012,"date":"12/08/2012","sport":"Shooting","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Olena Kostevych","age":27,"country":"Ukraine","year":2012,"date":"12/08/2012","sport":"Shooting","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Jin Jong-O","age":28,"country":"South Korea","year":2008,"date":"24/08/2008","sport":"Shooting","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Katerina Kurková-Emmons","age":24,"country":"Czech Republic","year":2008,"date":"24/08/2008","sport":"Shooting","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Lyubov Galkina","age":31,"country":"Russia","year":2004,"date":"29/08/2004","sport":"Shooting","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Mariya Grozdeva","age":32,"country":"Bulgaria","year":2004,"date":"29/08/2004","sport":"Shooting","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Lee Bo-Na","age":23,"country":"South Korea","year":2004,"date":"29/08/2004","sport":"Shooting","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Mikhail Nestruyev","age":35,"country":"Russia","year":2004,"date":"29/08/2004","sport":"Shooting","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Igor Basinsky","age":37,"country":"Belarus","year":2000,"date":"01/10/2000","sport":"Shooting","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Tao Luna","age":26,"country":"China","year":2000,"date":"01/10/2000","sport":"Shooting","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Kim Crow","age":26,"country":"Australia","year":2012,"date":"12/08/2012","sport":"Rowing","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Georgeta Damian-Andrunache","age":32,"country":"Romania","year":2008,"date":"24/08/2008","sport":"Rowing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Viorica Susanu","age":32,"country":"Romania","year":2008,"date":"24/08/2008","sport":"Rowing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Georgeta Damian-Andrunache","age":28,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Rowing","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Viorica Susanu","age":28,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Rowing","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Georgeta Damian-Andrunache","age":24,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Rowing","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Doina Ignat","age":31,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Rowing","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Pieta van Dishoeck","age":28,"country":"Netherlands","year":2000,"date":"01/10/2000","sport":"Rowing","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Eeke van Nes","age":31,"country":"Netherlands","year":2000,"date":"01/10/2000","sport":"Rowing","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Bill Demong","age":29,"country":"United States","year":2010,"date":"28/02/2010","sport":"Nordic Combined","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Bernhard Gruber","age":27,"country":"Austria","year":2010,"date":"28/02/2010","sport":"Nordic Combined","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Magnus Moan","age":22,"country":"Norway","year":2006,"date":"26/02/2006","sport":"Nordic Combined","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Ronny Ackermann","age":24,"country":"Germany","year":2002,"date":"24/02/2002","sport":"Nordic Combined","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Jaakko Tallus","age":20,"country":"Finland","year":2002,"date":"24/02/2002","sport":"Nordic Combined","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Denis Ablyazin","age":19,"country":"Russia","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Chen Yibing","age":27,"country":"China","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Gabby Douglas","age":16,"country":"United States","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Feng Zhe","age":24,"country":"China","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Sandra Izbasa","age":22,"country":"Romania","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Viktoriya Komova","age":17,"country":"Russia","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"McKayla Maroney","age":16,"country":"United States","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Marcel Nguyen","age":24,"country":"Germany","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Mariya Paseka","age":17,"country":"Russia","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Catalina Ponor","age":24,"country":"Romania","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Louis Smith","age":23,"country":"Great Britain","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Max Whitlock","age":19,"country":"Great Britain","year":2012,"date":"12/08/2012","sport":"Gymnastics","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Chen Yibing","age":23,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Anton Golotsutskov","age":23,"country":"Russia","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"He Kexin","age":16,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Jonathan Horton","age":22,"country":"United States","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Sandra Izbasa","age":18,"country":"Romania","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Li Xiaopeng","age":27,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Kohei Uchimura","age":19,"country":"Japan","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Xiao Qin","age":23,"country":"China","year":2008,"date":"24/08/2008","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Alexandra Eremia","age":17,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Annia Hatch","age":26,"country":"United States","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Terin Humphrey","age":18,"country":"United States","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Takehiro Kashima","age":24,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Svetlana Khorkina","age":25,"country":"Russia","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Courtney Kupets","age":18,"country":"United States","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Anna Pavlova","age":16,"country":"Russia","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Monica Rosu","age":17,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Dana Sofronie","age":16,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Hiroyuki Tomita","age":23,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Marius Urzica","age":28,"country":"Romania","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Isao Yoneda","age":26,"country":"Japan","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Yordan Yovchev","age":31,"country":"Bulgaria","year":2004,"date":"29/08/2004","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Oleksandr Beresh","age":22,"country":"Ukraine","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Aleksey Bondarenko","age":22,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Lee Ju-Hyeong","age":27,"country":"South Korea","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Li Xiaopeng","age":19,"country":"China","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Liu Xuan","age":21,"country":"China","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Maria Olaru","age":18,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Yelena Produnova","age":20,"country":"Russia","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Andreea Raducan","age":16,"country":"Romania","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Yang Wei","age":20,"country":"China","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Yordan Yovchev","age":27,"country":"Bulgaria","year":2000,"date":"01/10/2000","sport":"Gymnastics","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Elisa Di Francisca","age":29,"country":"Italy","year":2012,"date":"12/08/2012","sport":"Fencing","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Arianna Errigo","age":24,"country":"Italy","year":2012,"date":"12/08/2012","sport":"Fencing","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Diego Occhiuzzi","age":31,"country":"Italy","year":2012,"date":"12/08/2012","sport":"Fencing","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Sun Yujie","age":19,"country":"China","year":2012,"date":"12/08/2012","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Valentina Vezzali","age":38,"country":"Italy","year":2012,"date":"12/08/2012","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Stefano Carozzo","age":29,"country":"Italy","year":2008,"date":"24/08/2008","sport":"Fencing","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Margherita Granbassi","age":28,"country":"Italy","year":2008,"date":"24/08/2008","sport":"Fencing","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Sada Jacobson","age":25,"country":"United States","year":2008,"date":"24/08/2008","sport":"Fencing","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Fabrice Jeannet","age":27,"country":"France","year":2008,"date":"24/08/2008","sport":"Fencing","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Nicolas Lopez","age":27,"country":"France","year":2008,"date":"24/08/2008","sport":"Fencing","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Matteo Tagliariol","age":25,"country":"Italy","year":2008,"date":"24/08/2008","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Valentina Vezzali","age":34,"country":"Italy","year":2008,"date":"24/08/2008","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Becca Ward","age":18,"country":"United States","year":2008,"date":"24/08/2008","sport":"Fencing","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Mariel Zagunis","age":23,"country":"United States","year":2008,"date":"24/08/2008","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Andrea Cassarà","age":20,"country":"Italy","year":2004,"date":"29/08/2004","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Laura Flessel-Colovic","age":32,"country":"France","year":2004,"date":"29/08/2004","sport":"Fencing","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Aldo Montano","age":25,"country":"Italy","year":2004,"date":"29/08/2004","sport":"Fencing","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Maureen Nisima","age":23,"country":"France","year":2004,"date":"29/08/2004","sport":"Fencing","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Salvatore Sanzo","age":28,"country":"Italy","year":2004,"date":"29/08/2004","sport":"Fencing","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Mathieu Gourdain","age":26,"country":"France","year":2000,"date":"01/10/2000","sport":"Fencing","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Gianna Hablützel-Bürki","age":30,"country":"Switzerland","year":2000,"date":"01/10/2000","sport":"Fencing","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Rita König","age":23,"country":"Germany","year":2000,"date":"01/10/2000","sport":"Fencing","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Wiradech Kothny","age":21,"country":"Germany","year":2000,"date":"01/10/2000","sport":"Fencing","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Hugues Obry","age":27,"country":"France","year":2000,"date":"01/10/2000","sport":"Fencing","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Giovanna Trillini","age":30,"country":"Italy","year":2000,"date":"01/10/2000","sport":"Fencing","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Valentina Vezzali","age":26,"country":"Italy","year":2000,"date":"01/10/2000","sport":"Fencing","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Sandra Auffarth","age":25,"country":"Germany","year":2012,"date":"12/08/2012","sport":"Equestrian","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Laura Bechtolsheimer","age":27,"country":"Great Britain","year":2012,"date":"12/08/2012","sport":"Equestrian","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Adelinde Cornelissen","age":33,"country":"Netherlands","year":2012,"date":"12/08/2012","sport":"Equestrian","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Charlotte Dujardin","age":27,"country":"Great Britain","year":2012,"date":"12/08/2012","sport":"Equestrian","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Michael Jung","age":29,"country":"Germany","year":2012,"date":"12/08/2012","sport":"Equestrian","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Gerco Schröder","age":34,"country":"Netherlands","year":2012,"date":"12/08/2012","sport":"Equestrian","gold":0,"silver":2,"bronze":0,"total":2},
{"athlete":"Tina Cook","age":37,"country":"Great Britain","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Heike Kemmer","age":46,"country":"Germany","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Eric Lamaze","age":40,"country":"Canada","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Beezie Madden","age":44,"country":"United States","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Hinrich Romeike","age":45,"country":"Germany","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":2,"silver":0,"bronze":0,"total":2},
{"athlete":"Anky van Grunsven","age":40,"country":"Netherlands","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Isabell Werth","age":39,"country":"Germany","year":2008,"date":"24/08/2008","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Beatriz Ferrer-Salat","age":38,"country":"Spain","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Pippa Funnell","age":35,"country":"Great Britain","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Chris Kappler","age":37,"country":"United States","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Marco Kutscher","age":29,"country":"Germany","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":0,"silver":0,"bronze":2,"total":2},
{"athlete":"Leslie Law","age":39,"country":"Great Britain","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Ulla Salzgeber","age":46,"country":"Germany","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Kim Severson","age":30,"country":"United States","year":2004,"date":"29/08/2004","sport":"Equestrian","gold":0,"silver":1,"bronze":1,"total":2},
{"athlete":"Andrew Hoy","age":41,"country":"Australia","year":2000,"date":"01/10/2000","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"David O'Connor","age":38,"country":"United States","year":2000,"date":"01/10/2000","sport":"Equestrian","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Ulla Salzgeber","age":42,"country":"Germany","year":2000,"date":"01/10/2000","sport":"Equestrian","gold":1,"silver":0,"bronze":1,"total":2},
{"athlete":"Anky van Grunsven","age":32,"country":"Netherlands","year":2000,"date":"01/10/2000","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"Isabell Werth","age":31,"country":"Germany","year":2000,"date":"01/10/2000","sport":"Equestrian","gold":1,"silver":1,"bronze":0,"total":2},
{"athlete":"David Boudia","age":23,"country":"United States","year":2012,"date":"12/08/2012","sport":"Diving","gold":1,"silver":0,"bronze":1,"total":2}]
// ag-grid v3.3.3
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["agGrid"] = factory();
else
root["agGrid"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
// same as main.js, except also includes the styles, so webpack includes the css in the bundle
exports.Grid = __webpack_require__(1).Grid;
exports.GridApi = __webpack_require__(43).GridApi;
exports.Events = __webpack_require__(5).Events;
exports.ComponentUtil = __webpack_require__(4).ComponentUtil;
exports.ColumnController = __webpack_require__(14).ColumnController;
exports.initialiseAgGridWithAngular1 = __webpack_require__(65).initialiseAgGridWithAngular1;
exports.initialiseAgGridWithWebComponents = __webpack_require__(66).initialiseAgGridWithWebComponents;
exports.defaultGroupComparator = __webpack_require__(19).defaultGroupComparator;
exports.GridOptions = __webpack_require__(67).GridOptions;
exports.AbstractColDef = __webpack_require__(68).AbstractColDef;
exports.ColDef = __webpack_require__(68).ColDef;
exports.ColGroupDef = __webpack_require__(68).ColGroupDef;
exports.Column = __webpack_require__(8).Column;
exports.ColumnGroup = __webpack_require__(15).ColumnGroup;
exports.ColumnGroupChild = __webpack_require__(69).ColumnGroupChild;
exports.OriginalColumnGroup = __webpack_require__(17).OriginalColumnGroup;
exports.OriginalColumnGroupChild = __webpack_require__(70).OriginalColumnGroupChild;
exports.RowNode = __webpack_require__(71).RowNode;
exports.SetFilterParameters = __webpack_require__(72).SetFilterParameters;
exports.TextAndNumberFilterParameters = __webpack_require__(73).TextAndNumberFilterParameters;
__webpack_require__(74);
__webpack_require__(78);
__webpack_require__(80);
__webpack_require__(82);
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var gridOptionsWrapper_1 = __webpack_require__(2);
var inMemoryRowController_1 = __webpack_require__(7);
var paginationController_1 = __webpack_require__(10);
var virtualPageRowController_1 = __webpack_require__(11);
var floatingRowModel_1 = __webpack_require__(12);
var selectionController_1 = __webpack_require__(13);
var columnController_1 = __webpack_require__(14);
var rowRenderer_1 = __webpack_require__(20);
var headerRenderer_1 = __webpack_require__(28);
var filterManager_1 = __webpack_require__(33);
var valueService_1 = __webpack_require__(38);
var masterSlaveService_1 = __webpack_require__(39);
var eventService_1 = __webpack_require__(9);
var dragAndDropService_1 = __webpack_require__(40);
var gridPanel_1 = __webpack_require__(41);
var gridApi_1 = __webpack_require__(43);
var constants_1 = __webpack_require__(3);
var headerTemplateLoader_1 = __webpack_require__(45);
var balancedColumnTreeBuilder_1 = __webpack_require__(46);
var displayedGroupCreator_1 = __webpack_require__(48);
var selectionRendererFactory_1 = __webpack_require__(49);
var expressionService_1 = __webpack_require__(50);
var templateService_1 = __webpack_require__(51);
var agPopupService_1 = __webpack_require__(52);
var groupCreator_1 = __webpack_require__(53);
var logger_1 = __webpack_require__(54);
var columnUtils_1 = __webpack_require__(55);
var autoWidthCalculator_1 = __webpack_require__(56);
var events_1 = __webpack_require__(5);
var toolPanel_1 = __webpack_require__(57);
var borderLayout_1 = __webpack_require__(42);
var dragService_1 = __webpack_require__(64);
var Grid = (function () {
function Grid(eGridDiv, gridOptions, globalEventListener, $scope, $compile, quickFilterOnScope) {
if (globalEventListener === void 0) { globalEventListener = null; }
if ($scope === void 0) { $scope = null; }
if ($compile === void 0) { $compile = null; }
if (quickFilterOnScope === void 0) { quickFilterOnScope = null; }
this.virtualRowListeners = {
virtualRowRemoved: {},
virtualRowSelected: {}
};
if (!eGridDiv) {
console.warn('ag-Grid: no div element provided to the grid');
}
if (!gridOptions) {
console.warn('ag-Grid: no gridOptions provided to the grid');
}
this.gridOptions = gridOptions;
this.setupComponents($scope, $compile, eGridDiv, globalEventListener);
this.gridOptions.api = new gridApi_1.GridApi(this, this.rowRenderer, this.headerRenderer, this.filterManager, this.columnController, this.inMemoryRowController, this.selectionController, this.gridOptionsWrapper, this.gridPanel, this.valueService, this.masterSlaveService, this.eventService, this.floatingRowModel);
this.gridOptions.columnApi = this.columnController.getColumnApi();
var that = this;
// if using angular, watch for quickFilter changes
if ($scope) {
$scope.$watch(quickFilterOnScope, function (newFilter) {
that.onQuickFilterChanged(newFilter);
});
}
if (!this.gridOptionsWrapper.isForPrint()) {
this.addWindowResizeListener();
}
this.inMemoryRowController.setAllRows(this.gridOptionsWrapper.getRowData());
this.setupColumns();
this.updateModelAndRefresh(constants_1.default.STEP_EVERYTHING);
this.decideStartingOverlay();
// if datasource provided, use it
if (this.gridOptionsWrapper.getDatasource()) {
this.setDatasource();
}
this.doLayout();
this.finished = false;
this.periodicallyDoLayout();
// if ready function provided, use it
var readyEvent = {
api: gridOptions.api,
columnApi: gridOptions.columnApi
};
this.eventService.dispatchEvent(events_1.Events.EVENT_GRID_READY, readyEvent);
this.logger.log('initialised');
}
Grid.prototype.decideStartingOverlay = function () {
// if not virtual paging, then we might need to show an overlay if no data
var notDoingVirtualPaging = !this.gridOptionsWrapper.isVirtualPaging();
if (notDoingVirtualPaging) {
var showLoading = !this.gridOptionsWrapper.getRowData();
var showNoData = this.gridOptionsWrapper.getRowData() && this.gridOptionsWrapper.getRowData().length == 0;
if (showLoading) {
this.showLoadingOverlay();
}
if (showNoData) {
this.showNoRowsOverlay();
}
}
};
Grid.prototype.addWindowResizeListener = function () {
var that = this;
// putting this into a function, so when we remove the function,
// we are sure we are removing the exact same function (i'm not
// sure what 'bind' does to the function reference, if it's safe
// the result from 'bind').
this.windowResizeListener = function resizeListener() {
that.doLayout();
};
window.addEventListener('resize', this.windowResizeListener);
};
Grid.prototype.getRowModel = function () {
return this.rowModel;
};
Grid.prototype.periodicallyDoLayout = function () {
if (!this.finished) {
var that = this;
setTimeout(function () {
that.doLayout();
that.gridPanel.periodicallyCheck();
that.periodicallyDoLayout();
}, 500);
}
};
Grid.prototype.setupComponents = function ($scope, $compile, eUserProvidedDiv, globalEventListener) {
this.eUserProvidedDiv = eUserProvidedDiv;
// create all the beans
var dragService = new dragService_1.DragService();
var headerTemplateLoader = new headerTemplateLoader_1.default();
var floatingRowModel = new floatingRowModel_1.default();
var balancedColumnTreeBuilder = new balancedColumnTreeBuilder_1.default();
var displayedGroupCreator = new displayedGroupCreator_1.default();
var eventService = new eventService_1.default();
var gridOptionsWrapper = new gridOptionsWrapper_1.default();
var selectionController = new selectionController_1.default();
var filterManager = new filterManager_1.default();
var selectionRendererFactory = new selectionRendererFactory_1.default();
var columnController = new columnController_1.ColumnController();
var rowRenderer = new rowRenderer_1.default();
var headerRenderer = new headerRenderer_1.default();
var inMemoryRowController = new inMemoryRowController_1.default();
var virtualPageRowController = new virtualPageRowController_1.default();
var expressionService = new expressionService_1.default();
var templateService = new templateService_1.default();
var gridPanel = new gridPanel_1.default();
var popupService = new agPopupService_1.default();
var valueService = new valueService_1.default();
var groupCreator = new groupCreator_1.default();
var masterSlaveService = new masterSlaveService_1.default();
var loggerFactory = new logger_1.LoggerFactory();
var dragAndDropService = new dragAndDropService_1.default();
var columnUtils = new columnUtils_1.default();
var autoWidthCalculator = new autoWidthCalculator_1.default();
// initialise all the beans
gridOptionsWrapper.init(this.gridOptions, eventService);
loggerFactory.init(gridOptionsWrapper);
this.logger = loggerFactory.create('Grid');
this.logger.log('initialising');
headerTemplateLoader.init(gridOptionsWrapper);
floatingRowModel.init(gridOptionsWrapper);
columnUtils.init(gridOptionsWrapper);
autoWidthCalculator.init(rowRenderer, gridPanel);
dragAndDropService.init(loggerFactory);
eventService.init(loggerFactory);
gridPanel.init(gridOptionsWrapper, columnController, rowRenderer, masterSlaveService, loggerFactory, floatingRowModel);
templateService.init($scope);
expressionService.init(loggerFactory);
selectionController.init(this, gridPanel, gridOptionsWrapper, $scope, rowRenderer, eventService);
filterManager.init(this, gridOptionsWrapper, $compile, $scope, columnController, popupService, valueService);
selectionRendererFactory.init(this, selectionController);
balancedColumnTreeBuilder.init(gridOptionsWrapper, loggerFactory, columnUtils);
displayedGroupCreator.init(columnUtils);
columnController.init(this, selectionRendererFactory, gridOptionsWrapper, expressionService, valueService, masterSlaveService, eventService, balancedColumnTreeBuilder, displayedGroupCreator, columnUtils, autoWidthCalculator, loggerFactory);
rowRenderer.init(columnController, gridOptionsWrapper, gridPanel, this, selectionRendererFactory, $compile, $scope, selectionController, expressionService, templateService, valueService, eventService, floatingRowModel);
headerRenderer.init(gridOptionsWrapper, columnController, gridPanel, this, filterManager, $scope, $compile, headerTemplateLoader, dragService);
inMemoryRowController.init(gridOptionsWrapper, columnController, this, filterManager, $scope, groupCreator, valueService, eventService);
virtualPageRowController.init(rowRenderer, gridOptionsWrapper, this);
valueService.init(gridOptionsWrapper, expressionService, columnController);
groupCreator.init(valueService, gridOptionsWrapper);
masterSlaveService.init(gridOptionsWrapper, columnController, gridPanel, loggerFactory, eventService);
if (globalEventListener) {
eventService.addGlobalListener(globalEventListener);
}
var toolPanelLayout = null;
var toolPanel = null;
if (!gridOptionsWrapper.isForPrint()) {
toolPanel = new toolPanel_1.default();
toolPanelLayout = toolPanel.layout;
toolPanel.init(columnController, inMemoryRowController, gridOptionsWrapper, popupService, eventService, dragAndDropService);
}
// this is a child bean, get a reference and pass it on
// CAN WE DELETE THIS? it's done in the setDatasource section
var rowModel = inMemoryRowController.getModel();
selectionController.setRowModel(rowModel);
filterManager.setRowModel(rowModel);
rowRenderer.setRowModel(rowModel);
gridPanel.setRowModel(rowModel);
// and the last bean, done in it's own section, as it's optional
var paginationController = null;
var paginationGui = null;
if (!gridOptionsWrapper.isForPrint()) {
paginationController = new paginationController_1.default();
paginationController.init(this, gridOptionsWrapper);
paginationGui = paginationController.getGui();
}
this.rowModel = rowModel;
this.usingInMemoryModel = true;
this.selectionController = selectionController;
this.columnController = columnController;
this.inMemoryRowController = inMemoryRowController;
this.virtualPageRowController = virtualPageRowController;
this.rowRenderer = rowRenderer;
this.headerRenderer = headerRenderer;
this.paginationController = paginationController;
this.filterManager = filterManager;
this.toolPanel = toolPanel;
this.gridPanel = gridPanel;
this.valueService = valueService;
this.masterSlaveService = masterSlaveService;
this.eventService = eventService;
this.gridOptionsWrapper = gridOptionsWrapper;
this.dragAndDropService = dragAndDropService;
this.floatingRowModel = floatingRowModel;
this.eRootPanel = new borderLayout_1.default({
center: gridPanel.getLayout(),
east: toolPanelLayout,
south: paginationGui,
dontFill: gridOptionsWrapper.isForPrint(),
name: 'eRootPanel'
});
popupService.init(this.eRootPanel.getGui());
// default is we don't show paging panel, this is set to true when datasource is set
this.eRootPanel.setSouthVisible(false);
// see what the grid options are for default of toolbar
this.showToolPanel(gridOptionsWrapper.isShowToolPanel());
eUserProvidedDiv.appendChild(this.eRootPanel.getGui());
this.logger.log('grid DOM added');
eventService.addEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_GROUP_OPENED, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_MOVED, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_RESIZED, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGE, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_VISIBLE, this.onColumnChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_PINNED, this.onColumnChanged.bind(this));
};
Grid.prototype.onColumnChanged = function (event) {
if (event.isRowGroupChanged()) {
this.inMemoryRowController.onRowGroupChanged();
}
if (event.isValueChanged()) {
this.inMemoryRowController.doAggregate();
}
if (event.isIndividualColumnResized()) {
this.onIndividualColumnResized(event.getColumn());
}
else if (event.getType() === events_1.Events.EVENT_COLUMN_MOVED) {
this.refreshHeader();
}
else {
this.refreshHeaderAndBody();
}
this.gridPanel.showPinnedColContainersIfNeeded();
};
Grid.prototype.refreshRowGroup = function () {
this.inMemoryRowController.onRowGroupChanged();
this.refreshHeaderAndBody();
};
Grid.prototype.onIndividualColumnResized = function (column) {
this.headerRenderer.onIndividualColumnResized(column);
//this.rowRenderer.onIndividualColumnResized(column);
if (column.isPinned()) {
this.updatePinnedColContainerWidthAfterColResize();
}
else {
this.updateBodyContainerWidthAfterColResize();
}
};
Grid.prototype.showToolPanel = function (show) {
if (!this.toolPanel) {
this.toolPanelShowing = false;
return;
}
this.toolPanelShowing = show;
this.eRootPanel.setEastVisible(show);
};
Grid.prototype.isToolPanelShowing = function () {
return this.toolPanelShowing;
};
Grid.prototype.isUsingInMemoryModel = function () {
return this.usingInMemoryModel;
};
Grid.prototype.setDatasource = function (datasource) {
// if datasource provided, then set it
if (datasource) {
this.gridOptions.datasource = datasource;
}
// get the set datasource (if null was passed to this method,
// then need to get the actual datasource from options
var datasourceToUse = this.gridOptionsWrapper.getDatasource();
this.doingVirtualPaging = this.gridOptionsWrapper.isVirtualPaging() && datasourceToUse;
this.doingPagination = datasourceToUse && !this.doingVirtualPaging;
var showPagingPanel;
if (this.doingVirtualPaging) {
this.paginationController.setDatasource(null);
this.virtualPageRowController.setDatasource(datasourceToUse);
this.rowModel = this.virtualPageRowController.getModel();
this.usingInMemoryModel = false;
showPagingPanel = false;
}
else if (this.doingPagination) {
this.paginationController.setDatasource(datasourceToUse);
this.virtualPageRowController.setDatasource(null);
this.rowModel = this.inMemoryRowController.getModel();
this.usingInMemoryModel = true;
showPagingPanel = true;
}
else {
this.paginationController.setDatasource(null);
this.virtualPageRowController.setDatasource(null);
this.rowModel = this.inMemoryRowController.getModel();
this.usingInMemoryModel = true;
showPagingPanel = false;
}
this.selectionController.setRowModel(this.rowModel);
this.filterManager.setRowModel(this.rowModel);
this.rowRenderer.setRowModel(this.rowModel);
this.gridPanel.setRowModel(this.rowModel);
this.eRootPanel.setSouthVisible(showPagingPanel);
// because we just set the rowModel, need to update the gui
this.rowRenderer.refreshView();
this.doLayout();
};
// gets called after columns are shown / hidden from groups expanding
Grid.prototype.refreshHeaderAndBody = function () {
this.logger.log('refreshHeaderAndBody');
this.refreshHeader();
this.refreshBody();
};
Grid.prototype.refreshHeader = function () {
this.headerRenderer.refreshHeader();
this.headerRenderer.updateFilterIcons();
this.headerRenderer.updateSortIcons();
this.headerRenderer.setPinnedColContainerWidth();
};
Grid.prototype.refreshBody = function () {
this.gridPanel.setBodyContainerWidth();
this.gridPanel.setPinnedColContainerWidth();
this.rowRenderer.refreshView();
};
Grid.prototype.destroy = function () {
if (this.windowResizeListener) {
window.removeEventListener('resize', this.windowResizeListener);
this.logger.log('Removing windowResizeListener');
}
this.finished = true;
this.dragAndDropService.destroy();
this.rowRenderer.destroy();
this.filterManager.destroy();
this.eUserProvidedDiv.removeChild(this.eRootPanel.getGui());
this.logger.log('Grid DOM removed');
};
Grid.prototype.onQuickFilterChanged = function (newFilter) {
var actuallyChanged = this.filterManager.setQuickFilter(newFilter);
if (actuallyChanged) {
this.onFilterChanged();
}
};
Grid.prototype.onFilterModified = function () {
this.eventService.dispatchEvent(events_1.Events.EVENT_FILTER_MODIFIED);
};
Grid.prototype.onFilterChanged = function () {
this.eventService.dispatchEvent(events_1.Events.EVENT_BEFORE_FILTER_CHANGED);
this.filterManager.onFilterChanged();
this.headerRenderer.updateFilterIcons();
if (this.gridOptionsWrapper.isEnableServerSideFilter()) {
// if doing server side filtering, changing the sort has the impact
// of resetting the datasource
this.setDatasource();
}
else {
// if doing in memory filtering, we just update the in memory data
this.updateModelAndRefresh(constants_1.default.STEP_FILTER);
}
this.eventService.dispatchEvent(events_1.Events.EVENT_AFTER_FILTER_CHANGED);
};
Grid.prototype.onRowClicked = function (multiSelectKeyPressed, rowIndex, node) {
// we do not allow selecting groups by clicking (as the click here expands the group)
// so return if it's a group row
if (node.group) {
return;
}
// we also don't allow selection of floating rows
if (node.floating) {
return;
}
// making local variables to make the below more readable
var gridOptionsWrapper = this.gridOptionsWrapper;
var selectionController = this.selectionController;
// if no selection method enabled, do nothing
if (!gridOptionsWrapper.isRowSelection()) {
return;
}
// if click selection suppressed, do nothing
if (gridOptionsWrapper.isSuppressRowClickSelection()) {
return;
}
var doDeselect = multiSelectKeyPressed
&& selectionController.isNodeSelected(node)
&& gridOptionsWrapper.isRowDeselection();
if (doDeselect) {
selectionController.deselectNode(node);
}
else {
selectionController.selectNode(node, multiSelectKeyPressed);
}
};
Grid.prototype.showLoadingOverlay = function () {
this.gridPanel.showLoadingOverlay();
};
Grid.prototype.showNoRowsOverlay = function () {
this.gridPanel.showNoRowsOverlay();
};
Grid.prototype.hideOverlay = function () {
this.gridPanel.hideOverlay();
};
Grid.prototype.setupColumns = function () {
this.columnController.onColumnsChanged();
this.gridPanel.showPinnedColContainersIfNeeded();
this.gridPanel.onBodyHeightChange();
};
// rowsToRefresh is at what index to start refreshing the rows. the assumption is
// if we are expanding or collapsing a group, then only he rows below the group
// need to be refresh. this allows the context (eg focus) of the other cells to
// remain.
Grid.prototype.updateModelAndRefresh = function (step, refreshFromIndex) {
this.inMemoryRowController.updateModel(step);
this.rowRenderer.refreshView(refreshFromIndex);
};
Grid.prototype.setRowData = function (rows, firstId) {
if (rows) {
this.gridOptions.rowData = rows;
}
var rowData = this.gridOptionsWrapper.getRowData();
this.inMemoryRowController.setAllRows(rowData, firstId);
this.selectionController.deselectAll();
this.filterManager.onNewRowsLoaded();
this.updateModelAndRefresh(constants_1.default.STEP_EVERYTHING);
this.headerRenderer.updateFilterIcons();
if (rowData && rowData.length > 0) {
this.hideOverlay();
}
else {
this.showNoRowsOverlay();
}
};
Grid.prototype.ensureNodeVisible = function (comparator) {
if (this.doingVirtualPaging) {
throw 'Cannot use ensureNodeVisible when doing virtual paging, as we cannot check rows that are not in memory';
}
// look for the node index we want to display
var rowCount = this.rowModel.getVirtualRowCount();
var comparatorIsAFunction = typeof comparator === 'function';
var indexToSelect = -1;
// go through all the nodes, find the one we want to show
for (var i = 0; i < rowCount; i++) {
var node = this.rowModel.getVirtualRow(i);
if (comparatorIsAFunction) {
if (comparator(node)) {
indexToSelect = i;
break;
}
}
else {
// check object equality against node and data
if (comparator === node || comparator === node.data) {
indexToSelect = i;
break;
}
}
}
if (indexToSelect >= 0) {
this.gridPanel.ensureIndexVisible(indexToSelect);
}
};
Grid.prototype.getFilterModel = function () {
return this.filterManager.getFilterModel();
};
Grid.prototype.setFocusedCell = function (rowIndex, colKey) {
this.gridPanel.ensureIndexVisible(rowIndex);
this.gridPanel.ensureColumnVisible(colKey);
var that = this;
setTimeout(function () {
that.rowRenderer.setFocusedCell(rowIndex, colKey);
}, 10);
};
Grid.prototype.getSortModel = function () {
return this.columnController.getSortModel();
};
Grid.prototype.setSortModel = function (sortModel) {
this.columnController.setSortModel(sortModel);
this.onSortingChanged();
};
Grid.prototype.onSortingChanged = function () {
this.eventService.dispatchEvent(events_1.Events.EVENT_BEFORE_SORT_CHANGED);
this.headerRenderer.updateSortIcons();
if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
// if doing server side sorting, changing the sort has the impact
// of resetting the datasource
this.setDatasource();
}
else {
// if doing in memory sorting, we just update the in memory data
this.updateModelAndRefresh(constants_1.default.STEP_SORT);
}
this.eventService.dispatchEvent(events_1.Events.EVENT_AFTER_SORT_CHANGED);
};
Grid.prototype.addVirtualRowListener = function (eventName, rowIndex, callback) {
var listenersMap = this.virtualRowListeners[eventName];
if (!listenersMap) {
console.warn('ag-Grid: invalid listener type ' + eventName + ', expected values are ' + Object.keys(this.virtualRowListeners));
return;
}
if (!listenersMap[rowIndex]) {
listenersMap[rowIndex] = [];
}
listenersMap[rowIndex].push(callback);
};
Grid.prototype.onVirtualRowSelected = function (rowIndex, selected) {
// inform the callbacks of the event
var listenersMap = this.virtualRowListeners[Grid.VIRTUAL_ROW_SELECTED];
if (listenersMap[rowIndex]) {
listenersMap[rowIndex].forEach(function (callback) {
if (typeof callback === 'function') {
callback(selected);
}
});
}
this.rowRenderer.onRowSelected(rowIndex, selected);
};
Grid.prototype.onVirtualRowRemoved = function (rowIndex) {
// inform the callbacks of the event
var listenersMap = this.virtualRowListeners[Grid.VIRTUAL_ROW_REMOVED];
if (listenersMap[rowIndex]) {
listenersMap[rowIndex].forEach(function (callback) {
if (typeof callback === 'function') {
callback();
}
});
}
this.removeVirtualCallbacksForRow(rowIndex);
};
Grid.prototype.removeVirtualCallbacksForRow = function (rowIndex) {
delete this.virtualRowListeners[Grid.VIRTUAL_ROW_REMOVED][rowIndex];
delete this.virtualRowListeners[Grid.VIRTUAL_ROW_SELECTED][rowIndex];
};
Grid.prototype.setColumnDefs = function (colDefs) {
if (colDefs) {
this.gridOptions.columnDefs = colDefs;
}
this.setupColumns();
this.updateModelAndRefresh(constants_1.default.STEP_EVERYTHING);
// found that adding pinned column can upset the layout
this.doLayout();
};
Grid.prototype.updateBodyContainerWidthAfterColResize = function () {
this.rowRenderer.setMainRowWidths();
this.gridPanel.setBodyContainerWidth();
};
Grid.prototype.updatePinnedColContainerWidthAfterColResize = function () {
this.gridPanel.setPinnedColContainerWidth();
this.headerRenderer.setPinnedColContainerWidth();
};
Grid.prototype.doLayout = function () {
// need to do layout first, as drawVirtualRows and setPinnedColHeight
// need to know the result of the resizing of the panels.
var sizeChanged = this.eRootPanel.doLayout();
// both of the two below should be done in gridPanel, the gridPanel should register 'resize' to the panel
if (sizeChanged) {
this.rowRenderer.drawVirtualRows();
var event = {
clientWidth: this.eRootPanel.getGui().clientWidth,
clientHeight: this.eRootPanel.getGui().clientHeight
};
this.eventService.dispatchEvent(events_1.Events.EVENT_GRID_SIZE_CHANGED, event);
}
};
Grid.VIRTUAL_ROW_REMOVED = 'virtualRowRemoved';
Grid.VIRTUAL_ROW_SELECTED = 'virtualRowSelected';
return Grid;
})();
exports.Grid = Grid;
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var constants_1 = __webpack_require__(3);
var componentUtil_1 = __webpack_require__(4);
var DEFAULT_ROW_HEIGHT = 25;
function isTrue(value) {
return value === true || value === 'true';
}
var GridOptionsWrapper = (function () {
function GridOptionsWrapper() {
}
GridOptionsWrapper.prototype.init = function (gridOptions, eventService) {
this.gridOptions = gridOptions;
this.headerHeight = gridOptions.headerHeight;
eventService.addGlobalListener(this.globalEventHandler.bind(this));
this.checkForDeprecated();
};
GridOptionsWrapper.prototype.isRowSelection = function () { return this.gridOptions.rowSelection === "single" || this.gridOptions.rowSelection === "multiple"; };
GridOptionsWrapper.prototype.isRowDeselection = function () { return isTrue(this.gridOptions.rowDeselection); };
GridOptionsWrapper.prototype.isRowSelectionMulti = function () { return this.gridOptions.rowSelection === 'multiple'; };
GridOptionsWrapper.prototype.getContext = function () { return this.gridOptions.context; };
GridOptionsWrapper.prototype.isVirtualPaging = function () { return isTrue(this.gridOptions.virtualPaging); };
GridOptionsWrapper.prototype.isShowToolPanel = function () { return isTrue(this.gridOptions.showToolPanel); };
GridOptionsWrapper.prototype.isToolPanelSuppressGroups = function () { return isTrue(this.gridOptions.toolPanelSuppressGroups); };
GridOptionsWrapper.prototype.isToolPanelSuppressValues = function () { return isTrue(this.gridOptions.toolPanelSuppressValues); };
GridOptionsWrapper.prototype.isRowsAlreadyGrouped = function () { return isTrue(this.gridOptions.rowsAlreadyGrouped); };
GridOptionsWrapper.prototype.isGroupSelectsChildren = function () { return isTrue(this.gridOptions.groupSelectsChildren); };
GridOptionsWrapper.prototype.isGroupHideGroupColumns = function () { return isTrue(this.gridOptions.groupHideGroupColumns); };
GridOptionsWrapper.prototype.isGroupIncludeFooter = function () { return isTrue(this.gridOptions.groupIncludeFooter); };
GridOptionsWrapper.prototype.isGroupSuppressBlankHeader = function () { return isTrue(this.gridOptions.groupSuppressBlankHeader); };
GridOptionsWrapper.prototype.isSuppressRowClickSelection = function () { return isTrue(this.gridOptions.suppressRowClickSelection); };
GridOptionsWrapper.prototype.isSuppressCellSelection = function () { return isTrue(this.gridOptions.suppressCellSelection); };
GridOptionsWrapper.prototype.isSuppressMultiSort = function () { return isTrue(this.gridOptions.suppressMultiSort); };
GridOptionsWrapper.prototype.isGroupSuppressAutoColumn = function () { return isTrue(this.gridOptions.groupSuppressAutoColumn); };
GridOptionsWrapper.prototype.isForPrint = function () { return isTrue(this.gridOptions.forPrint); };
GridOptionsWrapper.prototype.isSuppressHorizontalScroll = function () { return isTrue(this.gridOptions.suppressHorizontalScroll); };
GridOptionsWrapper.prototype.isSuppressLoadingOverlay = function () { return isTrue(this.gridOptions.suppressLoadingOverlay); };
GridOptionsWrapper.prototype.isSuppressNoRowsOverlay = function () { return isTrue(this.gridOptions.suppressNoRowsOverlay); };
GridOptionsWrapper.prototype.getFloatingTopRowData = function () { return this.gridOptions.floatingTopRowData; };
GridOptionsWrapper.prototype.getFloatingBottomRowData = function () { return this.gridOptions.floatingBottomRowData; };
GridOptionsWrapper.prototype.isUnSortIcon = function () { return isTrue(this.gridOptions.unSortIcon); };
GridOptionsWrapper.prototype.isSuppressMenuHide = function () { return isTrue(this.gridOptions.suppressMenuHide); };
GridOptionsWrapper.prototype.getRowStyle = function () { return this.gridOptions.rowStyle; };
GridOptionsWrapper.prototype.getRowClass = function () { return this.gridOptions.rowClass; };
GridOptionsWrapper.prototype.getRowStyleFunc = function () { return this.gridOptions.getRowStyle; };
GridOptionsWrapper.prototype.getRowClassFunc = function () { return this.gridOptions.getRowClass; };
GridOptionsWrapper.prototype.getBusinessKeyForNodeFunc = function () { return this.gridOptions.getBusinessKeyForNode; };
GridOptionsWrapper.prototype.getHeaderCellRenderer = function () { return this.gridOptions.headerCellRenderer; };
GridOptionsWrapper.prototype.getApi = function () { return this.gridOptions.api; };
GridOptionsWrapper.prototype.isEnableColResize = function () { return isTrue(this.gridOptions.enableColResize); };
GridOptionsWrapper.prototype.isSingleClickEdit = function () { return isTrue(this.gridOptions.singleClickEdit); };
GridOptionsWrapper.prototype.getGroupDefaultExpanded = function () { return this.gridOptions.groupDefaultExpanded; };
GridOptionsWrapper.prototype.getGroupAggFunction = function () { return this.gridOptions.groupAggFunction; };
GridOptionsWrapper.prototype.getRowData = function () { return this.gridOptions.rowData; };
GridOptionsWrapper.prototype.isGroupUseEntireRow = function () { return isTrue(this.gridOptions.groupUseEntireRow); };
GridOptionsWrapper.prototype.getGroupColumnDef = function () { return this.gridOptions.groupColumnDef; };
GridOptionsWrapper.prototype.isGroupSuppressRow = function () { return isTrue(this.gridOptions.groupSuppressRow); };
GridOptionsWrapper.prototype.isAngularCompileRows = function () { return isTrue(this.gridOptions.angularCompileRows); };
GridOptionsWrapper.prototype.isAngularCompileFilters = function () { return isTrue(this.gridOptions.angularCompileFilters); };
GridOptionsWrapper.prototype.isAngularCompileHeaders = function () { return isTrue(this.gridOptions.angularCompileHeaders); };
GridOptionsWrapper.prototype.isDebug = function () { return isTrue(this.gridOptions.debug); };
GridOptionsWrapper.prototype.getColumnDefs = function () { return this.gridOptions.columnDefs; };
GridOptionsWrapper.prototype.getDatasource = function () { return this.gridOptions.datasource; };
GridOptionsWrapper.prototype.isEnableSorting = function () { return isTrue(this.gridOptions.enableSorting) || isTrue(this.gridOptions.enableServerSideSorting); };
GridOptionsWrapper.prototype.isEnableCellExpressions = function () { return isTrue(this.gridOptions.enableCellExpressions); };
GridOptionsWrapper.prototype.isEnableServerSideSorting = function () { return isTrue(this.gridOptions.enableServerSideSorting); };
GridOptionsWrapper.prototype.isEnableFilter = function () { return isTrue(this.gridOptions.enableFilter) || isTrue(this.gridOptions.enableServerSideFilter); };
GridOptionsWrapper.prototype.isEnableServerSideFilter = function () { return this.gridOptions.enableServerSideFilter; };
GridOptionsWrapper.prototype.isSuppressScrollLag = function () { return isTrue(this.gridOptions.suppressScrollLag); };
GridOptionsWrapper.prototype.isSuppressMovableColumns = function () { return isTrue(this.gridOptions.suppressMovableColumns); };
GridOptionsWrapper.prototype.isSuppressMovingCss = function () { return isTrue(this.gridOptions.suppressMovingCss); };
GridOptionsWrapper.prototype.getIcons = function () { return this.gridOptions.icons; };
GridOptionsWrapper.prototype.getIsScrollLag = function () { return this.gridOptions.isScrollLag; };
GridOptionsWrapper.prototype.getSortingOrder = function () { return this.gridOptions.sortingOrder; };
GridOptionsWrapper.prototype.getSlaveGrids = function () { return this.gridOptions.slaveGrids; };
GridOptionsWrapper.prototype.getGroupRowRenderer = function () { return this.gridOptions.groupRowRenderer; };
GridOptionsWrapper.prototype.getOverlayLoadingTemplate = function () { return this.gridOptions.overlayLoadingTemplate; };
GridOptionsWrapper.prototype.getOverlayNoRowsTemplate = function () { return this.gridOptions.overlayNoRowsTemplate; };
GridOptionsWrapper.prototype.getCheckboxSelection = function () { return this.gridOptions.checkboxSelection; };
GridOptionsWrapper.prototype.isSuppressAutoSize = function () { return isTrue(this.gridOptions.suppressAutoSize); };
GridOptionsWrapper.prototype.isSuppressParentsInRowNodes = function () { return isTrue(this.gridOptions.suppressParentsInRowNodes); };
GridOptionsWrapper.prototype.getHeaderCellTemplate = function () { return this.gridOptions.headerCellTemplate; };
GridOptionsWrapper.prototype.getHeaderCellTemplateFunc = function () { return this.gridOptions.getHeaderCellTemplate; };
// properties
GridOptionsWrapper.prototype.getHeaderHeight = function () {
if (typeof this.headerHeight === 'number') {
return this.headerHeight;
}
else {
return 25;
}
};
GridOptionsWrapper.prototype.setHeaderHeight = function (headerHeight) { this.headerHeight = headerHeight; };
GridOptionsWrapper.prototype.isExternalFilterPresent = function () {
if (typeof this.gridOptions.isExternalFilterPresent === 'function') {
return this.gridOptions.isExternalFilterPresent();
}
else {
return false;
}
};
GridOptionsWrapper.prototype.doesExternalFilterPass = function (node) {
if (typeof this.gridOptions.doesExternalFilterPass === 'function') {
return this.gridOptions.doesExternalFilterPass(node);
}
else {
return false;
}
};
GridOptionsWrapper.prototype.getGroupRowInnerRenderer = function () {
return this.gridOptions.groupRowInnerRenderer;
};
GridOptionsWrapper.prototype.getMinColWidth = function () {
if (this.gridOptions.minColWidth > GridOptionsWrapper.MIN_COL_WIDTH) {
return this.gridOptions.minColWidth;
}
else {
return GridOptionsWrapper.MIN_COL_WIDTH;
}
};
GridOptionsWrapper.prototype.getMaxColWidth = function () {
if (this.gridOptions.maxColWidth > GridOptionsWrapper.MIN_COL_WIDTH) {
return this.gridOptions.maxColWidth;
}
else {
return null;
}
};
GridOptionsWrapper.prototype.getColWidth = function () {
if (typeof this.gridOptions.colWidth !== 'number' || this.gridOptions.colWidth < GridOptionsWrapper.MIN_COL_WIDTH) {
return 200;
}
else {
return this.gridOptions.colWidth;
}
};
GridOptionsWrapper.prototype.getRowBuffer = function () {
if (typeof this.gridOptions.rowBuffer === 'number') {
if (this.gridOptions.rowBuffer < 0) {
console.warn('ag-Grid: rowBuffer should not be negative');
}
return this.gridOptions.rowBuffer;
}
else {
return constants_1.default.ROW_BUFFER_SIZE;
}
};
GridOptionsWrapper.prototype.checkForDeprecated = function () {
// casting to generic object, so typescript compiles even though
// we are looking for attributes that don't exist
var options = this.gridOptions;
if (options.suppressUnSort) {
console.warn('ag-grid: as of v1.12.4 suppressUnSort is not used. Please use sortOrder instead.');
}
if (options.suppressDescSort) {
console.warn('ag-grid: as of v1.12.4 suppressDescSort is not used. Please use sortOrder instead.');
}
if (options.groupAggFields) {
console.warn('ag-grid: as of v3 groupAggFields is not used. Please add appropriate agg fields to your columns.');
}
if (options.groupHidePivotColumns) {
console.warn('ag-grid: as of v3 groupHidePivotColumns is not used as pivot columns are now called rowGroup columns. Please refer to the documentation');
}
if (options.groupKeys) {
console.warn('ag-grid: as of v3 groupKeys is not used. You need to set rowGroupIndex on the columns to group. Please refer to the documentation');
}
if (options.ready || options.onReady) {
console.warn('ag-grid: as of v3.3 ready event is now called gridReady, so the callback should be onGridReady');
}
if (typeof options.groupDefaultExpanded === 'boolean') {
console.warn('ag-grid: groupDefaultExpanded can no longer be boolean. for groupDefaultExpanded=true, use groupDefaultExpanded=9999 instead, to expand all the groups');
}
};
GridOptionsWrapper.prototype.getLocaleTextFunc = function () {
if (this.gridOptions.localeTextFunc) {
return this.gridOptions.localeTextFunc;
}
var that = this;
return function (key, defaultValue) {
var localeText = that.gridOptions.localeText;
if (localeText && localeText[key]) {
return localeText[key];
}
else {
return defaultValue;
}
};
};
// responsible for calling the onXXX functions on gridOptions
GridOptionsWrapper.prototype.globalEventHandler = function (eventName, event) {
var callbackMethodName = componentUtil_1.ComponentUtil.getCallbackForEvent(eventName);
if (typeof this.gridOptions[callbackMethodName] === 'function') {
this.gridOptions[callbackMethodName](event);
}
};
// we don't allow dynamic row height for virtual paging
GridOptionsWrapper.prototype.getRowHeightForVirtualPagiation = function () {
if (typeof this.gridOptions.rowHeight === 'number') {
return this.gridOptions.rowHeight;
}
else {
return DEFAULT_ROW_HEIGHT;
}
};
GridOptionsWrapper.prototype.getRowHeightForNode = function (rowNode) {
if (typeof this.gridOptions.rowHeight === 'number') {
return this.gridOptions.rowHeight;
}
else if (typeof this.gridOptions.getRowHeight === 'function') {
var params = {
node: rowNode,
data: rowNode.data,
api: this.gridOptions.api,
context: this.gridOptions.context
};
return this.gridOptions.getRowHeight(params);
}
else {
return DEFAULT_ROW_HEIGHT;
}
};
GridOptionsWrapper.MIN_COL_WIDTH = 10;
return GridOptionsWrapper;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = GridOptionsWrapper;
/***/ },
/* 3 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var Constants = (function () {
function Constants() {
}
Constants.STEP_EVERYTHING = 0;
Constants.STEP_FILTER = 1;
Constants.STEP_SORT = 2;
Constants.STEP_MAP = 3;
Constants.ROW_BUFFER_SIZE = 2;
Constants.KEY_TAB = 9;
Constants.KEY_ENTER = 13;
Constants.KEY_BACKSPACE = 8;
Constants.KEY_DELETE = 46;
Constants.KEY_ESCAPE = 27;
Constants.KEY_SPACE = 32;
Constants.KEY_DOWN = 40;
Constants.KEY_UP = 38;
Constants.KEY_LEFT = 37;
Constants.KEY_RIGHT = 39;
return Constants;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Constants;
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var events_1 = __webpack_require__(5);
var utils_1 = __webpack_require__(6);
var ComponentUtil = (function () {
function ComponentUtil() {
}
ComponentUtil.getEventCallbacks = function () {
if (!ComponentUtil.EVENT_CALLBACKS) {
ComponentUtil.EVENT_CALLBACKS = [];
ComponentUtil.EVENTS.forEach(function (eventName) {
ComponentUtil.EVENT_CALLBACKS.push(ComponentUtil.getCallbackForEvent(eventName));
});
}
return ComponentUtil.EVENT_CALLBACKS;
};
ComponentUtil.copyAttributesToGridOptions = function (gridOptions, component) {
checkForDeprecated(component);
// create empty grid options if none were passed
if (typeof gridOptions !== 'object') {
gridOptions = {};
}
// to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions'
var pGridOptions = gridOptions;
// add in all the simple properties
ComponentUtil.ARRAY_PROPERTIES
.concat(ComponentUtil.STRING_PROPERTIES)
.concat(ComponentUtil.OBJECT_PROPERTIES)
.concat(ComponentUtil.FUNCTION_PROPERTIES)
.forEach(function (key) {
if (typeof (component)[key] !== 'undefined') {
pGridOptions[key] = component[key];
}
});
ComponentUtil.BOOLEAN_PROPERTIES.forEach(function (key) {
if (typeof (component)[key] !== 'undefined') {
pGridOptions[key] = ComponentUtil.toBoolean(component[key]);
}
});
ComponentUtil.NUMBER_PROPERTIES.forEach(function (key) {
if (typeof (component)[key] !== 'undefined') {
pGridOptions[key] = ComponentUtil.toNumber(component[key]);
}
});
ComponentUtil.getEventCallbacks().forEach(function (funcName) {
if (typeof (component)[funcName] !== 'undefined') {
pGridOptions[funcName] = component[funcName];
}
});
return gridOptions;
};
ComponentUtil.getCallbackForEvent = function (eventName) {
if (!eventName || eventName.length < 2) {
return eventName;
}
else {
return 'on' + eventName[0].toUpperCase() + eventName.substr(1);
}
};
// change this method, the caller should know if it's initialised or not, plus 'initialised'
// is not relevant for all component types.
// maybe pass in the api and columnApi instead???
ComponentUtil.processOnChange = function (changes, gridOptions, api) {
//if (!component._initialised || !changes) { return; }
if (!changes) {
return;
}
checkForDeprecated(changes);
// to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions'
var pGridOptions = gridOptions;
// check if any change for the simple types, and if so, then just copy in the new value
ComponentUtil.ARRAY_PROPERTIES
.concat(ComponentUtil.OBJECT_PROPERTIES)
.concat(ComponentUtil.STRING_PROPERTIES)
.forEach(function (key) {
if (changes[key]) {
pGridOptions[key] = changes[key].currentValue;
}
});
ComponentUtil.BOOLEAN_PROPERTIES.forEach(function (key) {
if (changes[key]) {
pGridOptions[key] = ComponentUtil.toBoolean(changes[key].currentValue);
}
});
ComponentUtil.NUMBER_PROPERTIES.forEach(function (key) {
if (changes[key]) {
pGridOptions[key] = ComponentUtil.toNumber(changes[key].currentValue);
}
});
ComponentUtil.getEventCallbacks().forEach(function (funcName) {
if (changes[funcName]) {
pGridOptions[funcName] = changes[funcName].currentValue;
}
});
if (changes.showToolPanel) {
api.showToolPanel(changes.showToolPanel.currentValue);
}
if (changes.quickFilterText) {
api.setQuickFilter(changes.quickFilterText.currentValue);
}
if (changes.rowData) {
api.setRowData(changes.rowData.currentValue);
}
if (changes.floatingTopRowData) {
api.setFloatingTopRowData(changes.floatingTopRowData.currentValue);
}
if (changes.floatingBottomRowData) {
api.setFloatingBottomRowData(changes.floatingBottomRowData.currentValue);
}
if (changes.columnDefs) {
api.setColumnDefs(changes.columnDefs.currentValue);
}
if (changes.datasource) {
api.setDatasource(changes.datasource.currentValue);
}
if (changes.headerHeight) {
api.setHeaderHeight(changes.headerHeight.currentValue);
}
};
ComponentUtil.toBoolean = function (value) {
if (typeof value === 'boolean') {
return value;
}
else if (typeof value === 'string') {
// for boolean, compare to empty String to allow attributes appearing with
// not value to be treated as 'true'
return value.toUpperCase() === 'TRUE' || value == '';
}
else {
return false;
}
};
ComponentUtil.toNumber = function (value) {
if (typeof value === 'number') {
return value;
}
else if (typeof value === 'string') {
return Number(value);
}
else {
return undefined;
}
};
// all the events are populated in here AFTER this class (at the bottom of the file).
ComponentUtil.EVENTS = [];
ComponentUtil.STRING_PROPERTIES = [
'sortingOrder', 'rowClass', 'rowSelection', 'overlayLoadingTemplate',
'overlayNoRowsTemplate', 'headerCellTemplate', 'quickFilterText'];
ComponentUtil.OBJECT_PROPERTIES = [
'rowStyle', 'context', 'groupColumnDef', 'localeText', 'icons', 'datasource'
];
ComponentUtil.ARRAY_PROPERTIES = [
'slaveGrids', 'rowData', 'floatingTopRowData', 'floatingBottomRowData', 'columnDefs'
];
ComponentUtil.NUMBER_PROPERTIES = [
'rowHeight', 'rowBuffer', 'colWidth', 'headerHeight', 'groupDefaultExpanded',
'minColWidth', 'maxColWidth'
];
ComponentUtil.BOOLEAN_PROPERTIES = [
'virtualPaging', 'toolPanelSuppressGroups', 'toolPanelSuppressValues', 'rowsAlreadyGrouped',
'suppressRowClickSelection', 'suppressCellSelection', 'suppressHorizontalScroll', 'debug',
'enableColResize', 'enableCellExpressions', 'enableSorting', 'enableServerSideSorting',
'enableFilter', 'enableServerSideFilter', 'angularCompileRows', 'angularCompileFilters',
'angularCompileHeaders', 'groupSuppressAutoColumn', 'groupSelectsChildren', 'groupHideGroupColumns',
'groupIncludeFooter', 'groupUseEntireRow', 'groupSuppressRow', 'groupSuppressBlankHeader', 'forPrint',
'suppressMenuHide', 'rowDeselection', 'unSortIcon', 'suppressMultiSort', 'suppressScrollLag',
'singleClickEdit', 'suppressLoadingOverlay', 'suppressNoRowsOverlay', 'suppressAutoSize',
'suppressParentsInRowNodes', 'showToolPanel', 'suppressMovingCss', 'suppressMovableColumns'
];
ComponentUtil.FUNCTION_PROPERTIES = ['headerCellRenderer', 'localeTextFunc', 'groupRowInnerRenderer',
'groupRowRenderer', 'groupAggFunction', 'isScrollLag', 'isExternalFilterPresent',
'doesExternalFilterPass', 'getRowClass', 'getRowStyle', 'getHeaderCellTemplate'];
ComponentUtil.ALL_PROPERTIES = ComponentUtil.ARRAY_PROPERTIES
.concat(ComponentUtil.OBJECT_PROPERTIES)
.concat(ComponentUtil.STRING_PROPERTIES)
.concat(ComponentUtil.NUMBER_PROPERTIES)
.concat(ComponentUtil.FUNCTION_PROPERTIES)
.concat(ComponentUtil.BOOLEAN_PROPERTIES);
return ComponentUtil;
})();
exports.ComponentUtil = ComponentUtil;
utils_1.default.iterateObject(events_1.Events, function (key, value) {
ComponentUtil.EVENTS.push(value);
});
function checkForDeprecated(changes) {
if (changes.ready || changes.onReady) {
console.warn('ag-grid: as of v3.3 ready event is now called gridReady, so the callback should be onGridReady');
}
}
/***/ },
/* 5 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var Events = (function () {
function Events() {
}
/** A new set of columns has been entered, everything has potentially changed. */
Events.EVENT_COLUMN_EVERYTHING_CHANGED = 'columnEverythingChanged';
/** A row group column was added, removed or order changed. */
Events.EVENT_COLUMN_ROW_GROUP_CHANGE = 'columnRowGroupChanged';
/** A value column was added, removed or agg function was changed. */
Events.EVENT_COLUMN_VALUE_CHANGE = 'columnValueChanged';
/** A column was moved */
Events.EVENT_COLUMN_MOVED = 'columnMoved';
/** One or more columns was shown / hidden */
Events.EVENT_COLUMN_VISIBLE = 'columnVisible';
/** One or more columns was pinned / unpinned*/
Events.EVENT_COLUMN_PINNED = 'columnPinned';
/** A column group was opened / closed */
Events.EVENT_COLUMN_GROUP_OPENED = 'columnGroupOpened';
/** A column group was opened / closed */
Events.EVENT_ROW_GROUP_OPENED = 'rowGroupOpened';
/** One or more columns was resized. If just one, the column in the event is set. */
Events.EVENT_COLUMN_RESIZED = 'columnResized';
Events.EVENT_MODEL_UPDATED = 'modelUpdated';
Events.EVENT_CELL_CLICKED = 'cellClicked';
Events.EVENT_CELL_DOUBLE_CLICKED = 'cellDoubleClicked';
Events.EVENT_CELL_CONTEXT_MENU = 'cellContextMenu';
Events.EVENT_CELL_VALUE_CHANGED = 'cellValueChanged';
Events.EVENT_CELL_FOCUSED = 'cellFocused';
Events.EVENT_ROW_SELECTED = 'rowSelected';
Events.EVENT_ROW_DESELECTED = 'rowDeselected';
Events.EVENT_SELECTION_CHANGED = 'selectionChanged';
Events.EVENT_BEFORE_FILTER_CHANGED = 'beforeFilterChanged';
Events.EVENT_AFTER_FILTER_CHANGED = 'afterFilterChanged';
Events.EVENT_FILTER_MODIFIED = 'filterModified';
Events.EVENT_BEFORE_SORT_CHANGED = 'beforeSortChanged';
Events.EVENT_AFTER_SORT_CHANGED = 'afterSortChanged';
Events.EVENT_VIRTUAL_ROW_REMOVED = 'virtualRowRemoved';
Events.EVENT_ROW_CLICKED = 'rowClicked';
Events.EVENT_ROW_DOUBLE_CLICKED = 'rowDoubleClicked';
Events.EVENT_GRID_READY = 'gridReady';
Events.EVENT_GRID_SIZE_CHANGED = 'gridSizeChanged';
return Events;
})();
exports.Events = Events;
/***/ },
/* 6 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var FUNCTION_STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var FUNCTION_ARGUMENT_NAMES = /([^\s,]+)/g;
var Utils = (function () {
function Utils() {
}
Utils.iterateObject = function (object, callback) {
var keys = Object.keys(object);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = object[key];
callback(key, value);
}
};
Utils.cloneObject = function (object) {
var copy = {};
var keys = Object.keys(object);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = object[key];
copy[key] = value;
}
return copy;
};
Utils.map = function (array, callback) {
var result = [];
for (var i = 0; i < array.length; i++) {
var item = array[i];
var mappedItem = callback(item);
result.push(mappedItem);
}
return result;
};
Utils.forEach = function (array, callback) {
if (!array) {
return;
}
for (var i = 0; i < array.length; i++) {
var value = array[i];
callback(value, i);
}
};
Utils.filter = function (array, callback) {
var result = [];
array.forEach(function (item) {
if (callback(item)) {
result.push(item);
}
});
return result;
};
Utils.assign = function (object, source) {
Utils.iterateObject(source, function (key, value) {
object[key] = value;
});
};
Utils.getFunctionParameters = function (func) {
var fnStr = func.toString().replace(FUNCTION_STRIP_COMMENTS, '');
var result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(FUNCTION_ARGUMENT_NAMES);
if (result === null) {
return [];
}
else {
return result;
}
};
Utils.find = function (collection, predicate, value) {
if (collection === null || collection === undefined) {
return null;
}
for (var i = 0; i < collection.length; i++) {
if (collection[i][predicate] === value) {
return collection[i];
}
}
return null;
};
Utils.toStrings = function (array) {
return this.map(array, function (item) {
if (item === undefined || item === null || !item.toString) {
return null;
}
else {
return item.toString();
}
});
};
Utils.iterateArray = function (array, callback) {
for (var index = 0; index < array.length; index++) {
var value = array[index];
callback(value, index);
}
};
//Returns true if it is a DOM node
//taken from: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
Utils.isNode = function (o) {
return (typeof Node === "object" ? o instanceof Node :
o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");
};
//Returns true if it is a DOM element
//taken from: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
Utils.isElement = function (o) {
return (typeof HTMLElement === "object" ? o instanceof HTMLElement :
o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string");
};
Utils.isNodeOrElement = function (o) {
return this.isNode(o) || this.isElement(o);
};
//adds all type of change listeners to an element, intended to be a text field
Utils.addChangeListener = function (element, listener) {
element.addEventListener("changed", listener);
element.addEventListener("paste", listener);
element.addEventListener("input", listener);
// IE doesn't fire changed for special keys (eg delete, backspace), so need to
// listen for this further ones
element.addEventListener("keydown", listener);
element.addEventListener("keyup", listener);
};
//if value is undefined, null or blank, returns null, otherwise returns the value
Utils.makeNull = function (value) {
if (value === null || value === undefined || value === "") {
return null;
}
else {
return value;
}
};
Utils.removeAllChildren = function (node) {
if (node) {
while (node.hasChildNodes()) {
node.removeChild(node.lastChild);
}
}
};
Utils.removeElement = function (parent, cssSelector) {
this.removeFromParent(parent.querySelector(cssSelector));
};
Utils.removeFromParent = function (node) {
if (node && node.parentNode) {
node.parentNode.removeChild(node);
}
};
Utils.isVisible = function (element) {
return (element.offsetParent !== null);
};
/**
* loads the template and returns it as an element. makes up for no simple way in
* the dom api to load html directly, eg we cannot do this: document.createElement(template)
*/
Utils.loadTemplate = function (template) {
var tempDiv = document.createElement("div");
tempDiv.innerHTML = template;
return tempDiv.firstChild;
};
Utils.querySelectorAll_addCssClass = function (eParent, selector, cssClass) {
var eRows = eParent.querySelectorAll(selector);
for (var k = 0; k < eRows.length; k++) {
this.addCssClass(eRows[k], cssClass);
}
};
Utils.querySelectorAll_removeCssClass = function (eParent, selector, cssClass) {
var eRows = eParent.querySelectorAll(selector);
for (var k = 0; k < eRows.length; k++) {
this.removeCssClass(eRows[k], cssClass);
}
};
Utils.querySelectorAll_replaceCssClass = function (eParent, selector, cssClassToRemove, cssClassToAdd) {
var eRows = eParent.querySelectorAll(selector);
for (var k = 0; k < eRows.length; k++) {
this.removeCssClass(eRows[k], cssClassToRemove);
this.addCssClass(eRows[k], cssClassToAdd);
}
};
Utils.addOrRemoveCssClass = function (element, className, addOrRemove) {
if (addOrRemove) {
this.addCssClass(element, className);
}
else {
this.removeCssClass(element, className);
}
};
Utils.addCssClass = function (element, className) {
if (element.className && element.className.length > 0) {
var cssClasses = element.className.split(' ');
if (cssClasses.indexOf(className) < 0) {
cssClasses.push(className);
element.className = cssClasses.join(' ');
}
}
else {
element.className = className;
}
};
Utils.offsetHeight = function (element) {
return element && element.clientHeight ? element.clientHeight : 0;
};
Utils.offsetWidth = function (element) {
return element && element.clientWidth ? element.clientWidth : 0;
};
Utils.removeCssClass = function (element, className) {
if (element.className && element.className.length > 0) {
var cssClasses = element.className.split(' ');
var index = cssClasses.indexOf(className);
if (index >= 0) {
cssClasses.splice(index, 1);
element.className = cssClasses.join(' ');
}
}
};
Utils.removeFromArray = function (array, object) {
if (array.indexOf(object) >= 0) {
array.splice(array.indexOf(object), 1);
}
};
Utils.defaultComparator = function (valueA, valueB) {
var valueAMissing = valueA === null || valueA === undefined;
var valueBMissing = valueB === null || valueB === undefined;
if (valueAMissing && valueBMissing) {
return 0;
}
if (valueAMissing) {
return -1;
}
if (valueBMissing) {
return 1;
}
if (valueA < valueB) {
return -1;
}
else if (valueA > valueB) {
return 1;
}
else {
return 0;
}
};
Utils.formatWidth = function (width) {
if (typeof width === "number") {
return width + "px";
}
else {
return width;
}
};
/**
* Tries to use the provided renderer.
*/
Utils.useRenderer = function (eParent, eRenderer, params) {
var resultFromRenderer = eRenderer(params);
//TypeScript type inference magic
if (typeof resultFromRenderer === 'string') {
var eTextSpan = document.createElement('span');
eTextSpan.innerHTML = resultFromRenderer;
eParent.appendChild(eTextSpan);
}
else if (this.isNodeOrElement(resultFromRenderer)) {
//a dom node or element was returned, so add child
eParent.appendChild(resultFromRenderer);
}
};
/**
* If icon provided, use this (either a string, or a function callback).
* if not, then use the second parameter, which is the svgFactory function
*/
Utils.createIcon = function (iconName, gridOptionsWrapper, column, svgFactoryFunc) {
var eResult = document.createElement('span');
eResult.appendChild(this.createIconNoSpan(iconName, gridOptionsWrapper, column, svgFactoryFunc));
return eResult;
};
Utils.createIconNoSpan = function (iconName, gridOptionsWrapper, colDefWrapper, svgFactoryFunc) {
var userProvidedIcon;
// check col for icon first
if (colDefWrapper && colDefWrapper.getColDef().icons) {
userProvidedIcon = colDefWrapper.getColDef().icons[iconName];
}
// it not in col, try grid options
if (!userProvidedIcon && gridOptionsWrapper.getIcons()) {
userProvidedIcon = gridOptionsWrapper.getIcons()[iconName];
}
// now if user provided, use it
if (userProvidedIcon) {
var rendererResult;
if (typeof userProvidedIcon === 'function') {
rendererResult = userProvidedIcon();
}
else if (typeof userProvidedIcon === 'string') {
rendererResult = userProvidedIcon;
}
else {
throw 'icon from grid options needs to be a string or a function';
}
if (typeof rendererResult === 'string') {
return this.loadTemplate(rendererResult);
}
else if (this.isNodeOrElement(rendererResult)) {
return rendererResult;
}
else {
throw 'iconRenderer should return back a string or a dom object';
}
}
else {
// otherwise we use the built in icon
return svgFactoryFunc();
}
};
Utils.addStylesToElement = function (eElement, styles) {
Object.keys(styles).forEach(function (key) {
eElement.style[key] = styles[key];
});
};
Utils.getScrollbarWidth = function () {
var outer = document.createElement("div");
outer.style.visibility = "hidden";
outer.style.width = "100px";
outer.style.msOverflowStyle = "scrollbar"; // needed for WinJS apps
document.body.appendChild(outer);
var widthNoScroll = outer.offsetWidth;
// force scrollbars
outer.style.overflow = "scroll";
// add innerdiv
var inner = document.createElement("div");
inner.style.width = "100%";
outer.appendChild(inner);
var widthWithScroll = inner.offsetWidth;
// remove divs
outer.parentNode.removeChild(outer);
return widthNoScroll - widthWithScroll;
};
Utils.isKeyPressed = function (event, keyToCheck) {
var pressedKey = event.which || event.keyCode;
return pressedKey === keyToCheck;
};
Utils.setVisible = function (element, visible) {
if (visible) {
element.style.display = 'inline';
}
else {
element.style.display = 'none';
}
};
Utils.isBrowserIE = function () {
if (this.isIE === undefined) {
this.isIE = false || !!document.documentMode; // At least IE6
}
return this.isIE;
};
Utils.isBrowserSafari = function () {
if (this.isSafari === undefined) {
this.isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
}
return this.isSafari;
};
return Utils;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Utils;
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var constants_1 = __webpack_require__(3);
var events_1 = __webpack_require__(5);
var column_1 = __webpack_require__(8);
var RecursionType;
(function (RecursionType) {
RecursionType[RecursionType["Normal"] = 0] = "Normal";
RecursionType[RecursionType["AfterFilter"] = 1] = "AfterFilter";
RecursionType[RecursionType["AfterFilterAndSort"] = 2] = "AfterFilterAndSort";
})(RecursionType || (RecursionType = {}));
;
var InMemoryRowController = (function () {
function InMemoryRowController() {
this.createModel();
}
InMemoryRowController.prototype.init = function (gridOptionsWrapper, columnController, angularGrid, filterManager, $scope, groupCreator, valueService, eventService) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.columnController = columnController;
this.angularGrid = angularGrid;
this.filterManager = filterManager;
this.$scope = $scope;
this.groupCreator = groupCreator;
this.valueService = valueService;
this.eventService = eventService;
this.allRows = null;
this.rowsAfterGroup = null;
this.rowsAfterFilter = null;
this.rowsAfterSort = null;
this.rowsToDisplay = null;
};
InMemoryRowController.prototype.createModel = function () {
var that = this;
this.model = {
// this method is implemented by the inMemory model only,
// it gives the top level of the selection. used by the selection
// controller, when it needs to do a full traversal
getTopLevelNodes: function () {
return that.rowsAfterGroup;
},
getVirtualRow: function (index) {
return that.rowsToDisplay[index];
},
getVirtualRowCount: function () {
if (that.rowsToDisplay) {
return that.rowsToDisplay.length;
}
else {
return 0;
}
},
getRowAtPixel: function (pixel) {
return that.getRowAtPixel(pixel);
},
getVirtualRowCombinedHeight: function () {
return that.getVirtualRowCombinedHeight();
},
forEachInMemory: function (callback) {
that.forEachInMemory(callback);
},
forEachNode: function (callback) {
that.forEachNode(callback);
},
forEachNodeAfterFilter: function (callback) {
that.forEachNodeAfterFilter(callback);
},
forEachNodeAfterFilterAndSort: function (callback) {
that.forEachNodeAfterFilterAndSort(callback);
}
};
};
InMemoryRowController.prototype.getRowAtPixel = function (pixelToMatch) {
// do binary search of tree
// http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/
var bottomPointer = 0;
var topPointer = this.rowsToDisplay.length - 1;
// quick check, if the pixel is out of bounds, then return last row
if (pixelToMatch <= 0) {
// if pixel is less than or equal zero, it's always the first row
return 0;
}
var lastNode = this.rowsToDisplay[this.rowsToDisplay.length - 1];
if (lastNode.rowTop <= pixelToMatch) {
return this.rowsToDisplay.length - 1;
}
while (true) {
var midPointer = Math.floor((bottomPointer + topPointer) / 2);
var currentRowNode = this.rowsToDisplay[midPointer];
if (this.isRowInPixel(currentRowNode, pixelToMatch)) {
return midPointer;
}
else if (currentRowNode.rowTop < pixelToMatch) {
bottomPointer = midPointer + 1;
}
else if (currentRowNode.rowTop > pixelToMatch) {
topPointer = midPointer - 1;
}
}
};
InMemoryRowController.prototype.isRowInPixel = function (rowNode, pixelToMatch) {
var topPixel = rowNode.rowTop;
var bottomPixel = rowNode.rowTop + rowNode.rowHeight;
var pixelInRow = topPixel <= pixelToMatch && bottomPixel > pixelToMatch;
return pixelInRow;
};
InMemoryRowController.prototype.getVirtualRowCombinedHeight = function () {
if (this.rowsToDisplay && this.rowsToDisplay.length > 0) {
var lastRow = this.rowsToDisplay[this.rowsToDisplay.length - 1];
var lastPixel = lastRow.rowTop + lastRow.rowHeight;
return lastPixel;
}
else {
return 0;
}
};
InMemoryRowController.prototype.getModel = function () {
return this.model;
};
InMemoryRowController.prototype.forEachInMemory = function (callback) {
console.warn('ag-Grid: please use forEachNode instead of forEachInMemory, method is same, I just renamed it, forEachInMemory is deprecated');
this.forEachNode(callback);
};
InMemoryRowController.prototype.forEachNode = function (callback) {
this.recursivelyWalkNodesAndCallback(this.rowsAfterGroup, callback, RecursionType.Normal, 0);
};
InMemoryRowController.prototype.forEachNodeAfterFilter = function (callback) {
this.recursivelyWalkNodesAndCallback(this.rowsAfterFilter, callback, RecursionType.AfterFilter, 0);
};
InMemoryRowController.prototype.forEachNodeAfterFilterAndSort = function (callback) {
this.recursivelyWalkNodesAndCallback(this.rowsAfterSort, callback, RecursionType.AfterFilterAndSort, 0);
};
// iterates through each item in memory, and calls the callback function
// nodes - the rowNodes to traverse
// callback - the user provided callback
// recursion type - need this to know what child nodes to recurse, eg if looking at all nodes, or filtered notes etc
// index - works similar to the index in forEach in javascripts array function
InMemoryRowController.prototype.recursivelyWalkNodesAndCallback = function (nodes, callback, recursionType, index) {
if (nodes) {
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
callback(node, index++);
// go to the next level if it is a group
if (node.group) {
// depending on the recursion type, we pick a difference set of children
var nodeChildren;
switch (recursionType) {
case RecursionType.Normal:
nodeChildren = node.children;
break;
case RecursionType.AfterFilter:
nodeChildren = node.childrenAfterFilter;
break;
case RecursionType.AfterFilterAndSort:
nodeChildren = node.childrenAfterSort;
break;
}
if (nodeChildren) {
index = this.recursivelyWalkNodesAndCallback(nodeChildren, callback, recursionType, index);
}
}
}
}
return index;
};
InMemoryRowController.prototype.updateModel = function (step) {
var _this = this;
// fallthrough in below switch is on purpose
switch (step) {
case constants_1.default.STEP_EVERYTHING:
case constants_1.default.STEP_FILTER:
this.doFilter();
this.doAggregate();
case constants_1.default.STEP_SORT:
this.doSort();
case constants_1.default.STEP_MAP:
this.doRowsToDisplay();
}
this.eventService.dispatchEvent(events_1.Events.EVENT_MODEL_UPDATED);
if (this.$scope) {
setTimeout(function () {
_this.$scope.$apply();
}, 0);
}
};
InMemoryRowController.prototype.ensureRowHasHeight = function (rowNode) {
};
InMemoryRowController.prototype.defaultGroupAggFunctionFactory = function (valueColumns) {
// make closure of variable, so is available for methods below
var _valueService = this.valueService;
return function groupAggFunction(rows) {
var result = {};
for (var j = 0; j < valueColumns.length; j++) {
var valueColumn = valueColumns[j];
var colKey = valueColumn.getColDef().field;
if (!colKey) {
console.log('ag-Grid: you need to provide a field for all value columns so that ' +
'the grid knows what field to store the result in. so even if using a valueGetter, ' +
'the result will not be stored in a value getter.');
}
// at this point, if no values were numbers, the result is null (not zero)
result[colKey] = aggregateColumn(rows, valueColumn.getAggFunc(), colKey, valueColumn.getColDef());
}
return result;
};
// if colDef is passed in, we are working off a column value, if it is not passed in, we are
// working off colKeys passed in to the gridOptions
function aggregateColumn(rowNodes, aggFunc, colKey, colDef) {
var resultForColumn = null;
for (var i = 0; i < rowNodes.length; i++) {
var rowNode = rowNodes[i];
// if the row is a group, then it will only have an agg result value,
// which means valueGetter is never used.
var thisColumnValue;
if (colDef && !rowNode.group) {
thisColumnValue = _valueService.getValue(colDef, rowNode.data, rowNode);
}
else {
thisColumnValue = rowNode.data[colKey];
}
// only include if the value is a number
if (typeof thisColumnValue === 'number') {
switch (aggFunc) {
case column_1.default.AGG_SUM:
resultForColumn += thisColumnValue;
break;
case column_1.default.AGG_MIN:
if (resultForColumn === null) {
resultForColumn = thisColumnValue;
}
else if (resultForColumn > thisColumnValue) {
resultForColumn = thisColumnValue;
}
break;
case column_1.default.AGG_MAX:
if (resultForColumn === null) {
resultForColumn = thisColumnValue;
}
else if (resultForColumn < thisColumnValue) {
resultForColumn = thisColumnValue;
}
break;
}
}
}
return resultForColumn;
}
};
// it's possible to recompute the aggregate without doing the other parts
InMemoryRowController.prototype.doAggregate = function () {
var groupAggFunction = this.gridOptionsWrapper.getGroupAggFunction();
if (typeof groupAggFunction === 'function') {
this.recursivelyCreateAggData(this.rowsAfterFilter, groupAggFunction, 0);
return;
}
var valueColumns = this.columnController.getValueColumns();
if (valueColumns && valueColumns.length > 0) {
var defaultAggFunction = this.defaultGroupAggFunctionFactory(valueColumns);
this.recursivelyCreateAggData(this.rowsAfterFilter, defaultAggFunction, 0);
}
else {
// if no agg data, need to clear out any previous items, when can be left behind
// if use is creating / removing columns using the tool panel.
// one exception - don't do this if already grouped, as this breaks the File Explorer example!!
// to fix another day - how to we reset when the user provided the data??
if (!this.gridOptionsWrapper.isRowsAlreadyGrouped()) {
this.recursivelyClearAggData(this.rowsAfterFilter);
}
}
};
InMemoryRowController.prototype.expandOrCollapseAll = function (expand, rowNodes) {
var _this = this;
// if first call in recursion, we set list to parent list
if (rowNodes === null) {
rowNodes = this.rowsAfterGroup;
}
if (!rowNodes) {
return;
}
rowNodes.forEach(function (node) {
if (node.group) {
node.expanded = expand;
_this.expandOrCollapseAll(expand, node.children);
}
});
};
InMemoryRowController.prototype.recursivelyClearAggData = function (nodes) {
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
if (node.group) {
// agg function needs to start at the bottom, so traverse first
this.recursivelyClearAggData(node.childrenAfterFilter);
node.data = null;
}
}
};
InMemoryRowController.prototype.recursivelyCreateAggData = function (nodes, groupAggFunction, level) {
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
if (node.group) {
// agg function needs to start at the bottom, so traverse first
this.recursivelyCreateAggData(node.childrenAfterFilter, groupAggFunction, level++);
// after traversal, we can now do the agg at this level
var data = groupAggFunction(node.childrenAfterFilter, level);
node.data = data;
// if we are grouping, then it's possible there is a sibling footer
// to the group, so update the data here also if there is one
if (node.sibling) {
node.sibling.data = data;
}
}
}
};
InMemoryRowController.prototype.doSort = function () {
var sorting;
// if the sorting is already done by the server, then we should not do it here
if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
sorting = false;
}
else {
//see if there is a col we are sorting by
var sortingOptions = this.columnController.getSortForRowController();
sorting = sortingOptions.length > 0;
}
var rowNodesReadyForSorting = this.rowsAfterFilter ? this.rowsAfterFilter.slice(0) : null;
if (sorting) {
this.sortList(rowNodesReadyForSorting, sortingOptions);
}
else {
// if no sorting, set all group children after sort to the original list.
// note: it is important to do this, even if doing server side sorting,
// to allow the rows to pass to the next stage (ie set the node value
// childrenAfterSort)
this.recursivelyResetSort(rowNodesReadyForSorting);
}
this.rowsAfterSort = rowNodesReadyForSorting;
};
InMemoryRowController.prototype.recursivelyResetSort = function (rowNodes) {
if (!rowNodes) {
return;
}
for (var i = 0, l = rowNodes.length; i < l; i++) {
var item = rowNodes[i];
if (item.group && item.children) {
item.childrenAfterSort = item.childrenAfterFilter;
this.recursivelyResetSort(item.children);
}
}
this.updateChildIndexes(rowNodes);
};
InMemoryRowController.prototype.sortList = function (nodes, sortOptions) {
// sort any groups recursively
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
if (node.group && node.children) {
node.childrenAfterSort = node.childrenAfterFilter.slice(0);
this.sortList(node.childrenAfterSort, sortOptions);
}
}
var that = this;
function compare(nodeA, nodeB, column, isInverted) {
var valueA = that.valueService.getValue(column.getColDef(), nodeA.data, nodeA);
var valueB = that.valueService.getValue(column.getColDef(), nodeB.data, nodeB);
if (column.getColDef().comparator) {
//if comparator provided, use it
return column.getColDef().comparator(valueA, valueB, nodeA, nodeB, isInverted);
}
else {
//otherwise do our own comparison
return utils_1.default.defaultComparator(valueA, valueB);
}
}
nodes.sort(function (nodeA, nodeB) {
// Iterate columns, return the first that doesn't match
for (var i = 0, len = sortOptions.length; i < len; i++) {
var sortOption = sortOptions[i];
var compared = compare(nodeA, nodeB, sortOption.column, sortOption.inverter === -1);
if (compared !== 0) {
return compared * sortOption.inverter;
}
}
// All matched, these are identical as far as the sort is concerned:
return 0;
});
this.updateChildIndexes(nodes);
};
InMemoryRowController.prototype.updateChildIndexes = function (nodes) {
for (var j = 0; j < nodes.length; j++) {
var node = nodes[j];
node.firstChild = j === 0;
node.lastChild = j === nodes.length - 1;
node.childIndex = j;
}
};
// called by grid when row group cols change
InMemoryRowController.prototype.onRowGroupChanged = function () {
this.doRowGrouping();
this.updateModel(constants_1.default.STEP_EVERYTHING);
};
InMemoryRowController.prototype.doRowGrouping = function () {
var rowsAfterGroup;
var groupedCols = this.columnController.getRowGroupColumns();
var rowsAlreadyGrouped = this.gridOptionsWrapper.isRowsAlreadyGrouped();
var doingGrouping = !rowsAlreadyGrouped && groupedCols.length > 0;
if (doingGrouping) {
var expandByDefault;
if (this.gridOptionsWrapper.isGroupSuppressRow()) {
// 99999 means 'expand everything'
expandByDefault = -1;
}
else {
expandByDefault = this.gridOptionsWrapper.getGroupDefaultExpanded();
}
rowsAfterGroup = this.groupCreator.group(this.allRows, groupedCols, expandByDefault);
}
else {
rowsAfterGroup = this.allRows;
}
this.rowsAfterGroup = rowsAfterGroup;
};
InMemoryRowController.prototype.doFilter = function () {
var doingFilter;
if (this.gridOptionsWrapper.isEnableServerSideFilter()) {
doingFilter = false;
}
else {
doingFilter = this.filterManager.isAnyFilterPresent();
}
var rowsAfterFilter;
if (doingFilter) {
rowsAfterFilter = this.filterItems(this.rowsAfterGroup);
}
else {
// do it here
rowsAfterFilter = this.rowsAfterGroup;
this.recursivelyResetFilter(this.rowsAfterGroup);
}
this.rowsAfterFilter = rowsAfterFilter;
};
InMemoryRowController.prototype.filterItems = function (rowNodes) {
var result = [];
for (var i = 0, l = rowNodes.length; i < l; i++) {
var node = rowNodes[i];
if (node.group) {
// deal with group
node.childrenAfterFilter = this.filterItems(node.children);
if (node.childrenAfterFilter.length > 0) {
node.allChildrenCount = this.getTotalChildCount(node.childrenAfterFilter);
result.push(node);
}
}
else {
if (this.filterManager.doesRowPassFilter(node)) {
result.push(node);
}
}
}
return result;
};
InMemoryRowController.prototype.recursivelyResetFilter = function (nodes) {
if (!nodes) {
return;
}
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
if (node.group && node.children) {
node.childrenAfterFilter = node.children;
this.recursivelyResetFilter(node.children);
node.allChildrenCount = this.getTotalChildCount(node.childrenAfterFilter);
}
}
};
// rows: the rows to put into the model
// firstId: the first id to use, used for paging, where we are not on the first page
InMemoryRowController.prototype.setAllRows = function (rows, firstId) {
var nodes;
if (this.gridOptionsWrapper.isRowsAlreadyGrouped()) {
nodes = rows;
this.recursivelyCheckUserProvidedNodes(nodes, null, 0);
}
else {
// place each row into a wrapper
var nodes = [];
if (rows) {
for (var i = 0; i < rows.length; i++) {
var node = {};
node.data = rows[i];
nodes.push(node);
}
}
}
// if firstId provided, use it, otherwise start at 0
var firstIdToUse = firstId ? firstId : 0;
this.recursivelyAddIdToNodes(nodes, firstIdToUse);
this.allRows = nodes;
// group here, so filters have the agg data ready
if (this.columnController.isSetupComplete()) {
this.doRowGrouping();
}
};
// add in index - this is used by the selectionController - so quick
// to look up selected rows
InMemoryRowController.prototype.recursivelyAddIdToNodes = function (nodes, index) {
if (!nodes) {
return;
}
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
node.id = index++;
if (node.group && node.children) {
index = this.recursivelyAddIdToNodes(node.children, index);
}
}
return index;
};
// add in index - this is used by the selectionController - so quick
// to look up selected rows
InMemoryRowController.prototype.recursivelyCheckUserProvidedNodes = function (nodes, parent, level) {
if (!nodes) {
return;
}
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if (parent && !this.gridOptionsWrapper.isSuppressParentsInRowNodes()) {
node.parent = parent;
}
node.level = level;
if (node.group && node.children) {
this.recursivelyCheckUserProvidedNodes(node.children, node, level + 1);
}
}
};
InMemoryRowController.prototype.getTotalChildCount = function (rowNodes) {
var count = 0;
for (var i = 0, l = rowNodes.length; i < l; i++) {
var item = rowNodes[i];
if (item.group) {
count += item.allChildrenCount;
}
else {
count++;
}
}
return count;
};
InMemoryRowController.prototype.doRowsToDisplay = function () {
// even if not doing grouping, we do the mapping, as the client might
// of passed in data that already has a grouping in it somewhere
this.rowsToDisplay = [];
this.nextRowTop = 0;
this.recursivelyAddToRowsToDisplay(this.rowsAfterSort);
};
InMemoryRowController.prototype.recursivelyAddToRowsToDisplay = function (rowNodes) {
if (!rowNodes) {
return;
}
var groupSuppressRow = this.gridOptionsWrapper.isGroupSuppressRow();
for (var i = 0; i < rowNodes.length; i++) {
var rowNode = rowNodes[i];
var skipGroupNode = groupSuppressRow && rowNode.group;
if (!skipGroupNode) {
this.addRowNodeToRowsToDisplay(rowNode);
}
if (rowNode.group && rowNode.expanded) {
this.recursivelyAddToRowsToDisplay(rowNode.childrenAfterSort);
// put a footer in if user is looking for it
if (this.gridOptionsWrapper.isGroupIncludeFooter()) {
var footerNode = this.createFooterNode(rowNode);
this.addRowNodeToRowsToDisplay(footerNode);
}
}
}
};
// duplicated method, it's also in floatingRowModel
InMemoryRowController.prototype.addRowNodeToRowsToDisplay = function (rowNode) {
this.rowsToDisplay.push(rowNode);
rowNode.rowHeight = this.gridOptionsWrapper.getRowHeightForNode(rowNode);
rowNode.rowTop = this.nextRowTop;
this.nextRowTop += rowNode.rowHeight;
};
InMemoryRowController.prototype.createFooterNode = function (groupNode) {
var footerNode = {};
Object.keys(groupNode).forEach(function (key) {
footerNode[key] = groupNode[key];
});
footerNode.footer = true;
// get both header and footer to reference each other as siblings. this is never undone,
// only overwritten. so if a group is expanded, then contracted, it will have a ghost
// sibling - but that's fine, as we can ignore this if the header is contracted.
footerNode.sibling = groupNode;
groupNode.sibling = footerNode;
return footerNode;
};
return InMemoryRowController;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = InMemoryRowController;
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var eventService_1 = __webpack_require__(9);
// Wrapper around a user provide column definition. The grid treats the column definition as ready only.
// This class contains all the runtime information about a column, plus some logic (the definition has no logic).
// This class implements both interfaces ColumnGroupChild and OriginalColumnGroupChild as the class can
// appear as a child of either the original tree or the displayed tree. However the relevant group classes
// for each type only implements one, as each group can only appear in it's associated tree (eg OriginalColumnGroup
// can only appear in OriginalColumn tree).
var Column = (function () {
function Column(colDef, actualWidth, colId, globalMinWidth, globalMaxWidth) {
this.moving = false;
this.eventService = new eventService_1.default();
this.colDef = colDef;
this.actualWidth = actualWidth;
this.visible = !colDef.hide;
this.sort = colDef.sort;
this.sortedAt = colDef.sortedAt;
this.colId = colId;
if (colDef.pinned === true || colDef.pinned === 'left') {
this.pinned = 'left';
}
else if (colDef.pinned === 'right') {
this.pinned = 'right';
}
if (this.colDef.minWidth) {
this.minWidth = this.colDef.minWidth;
}
else {
this.minWidth = globalMinWidth;
}
if (this.colDef.maxWidth) {
this.maxWidth = this.colDef.maxWidth;
}
else {
this.maxWidth = globalMaxWidth;
}
}
Column.prototype.addEventListener = function (eventType, listener) {
this.eventService.addEventListener(eventType, listener);
};
Column.prototype.removeEventListener = function (eventType, listener) {
this.eventService.removeEventListener(eventType, listener);
};
Column.prototype.setMoving = function (moving) {
this.moving = moving;
this.eventService.dispatchEvent(Column.EVENT_MOVING_CHANGED);
};
Column.prototype.isMoving = function () {
return this.moving;
};
Column.prototype.getSort = function () {
return this.sort;
};
Column.prototype.setSort = function (sort) {
this.sort = sort;
};
Column.prototype.getSortedAt = function () {
return this.sortedAt;
};
Column.prototype.setSortedAt = function (sortedAt) {
this.sortedAt = sortedAt;
};
Column.prototype.setAggFunc = function (aggFunc) {
this.aggFunc = aggFunc;
};
Column.prototype.getAggFunc = function () {
return this.aggFunc;
};
Column.prototype.getLeft = function () {
return this.left;
};
Column.prototype.setLeft = function (left) {
if (this.left !== left) {
this.left = left;
this.eventService.dispatchEvent(Column.EVENT_LEFT_CHANGED);
}
};
Column.prototype.setPinned = function (pinned) {
if (pinned === true || pinned === Column.PINNED_LEFT) {
this.pinned = Column.PINNED_LEFT;
}
else if (pinned === Column.PINNED_RIGHT) {
this.pinned = Column.PINNED_RIGHT;
}
else {
this.pinned = null;
}
};
Column.prototype.isPinned = function () {
return this.pinned === Column.PINNED_LEFT || this.pinned === Column.PINNED_RIGHT;
};
Column.prototype.getPinned = function () {
return this.pinned;
};
Column.prototype.setVisible = function (visible) {
this.visible = visible === true;
};
Column.prototype.isVisible = function () {
return this.visible;
};
Column.prototype.getColDef = function () {
return this.colDef;
};
Column.prototype.getColumnGroupShow = function () {
return this.colDef.columnGroupShow;
};
Column.prototype.getColId = function () {
return this.colId;
};
Column.prototype.getDefinition = function () {
return this.colDef;
};
Column.prototype.getActualWidth = function () {
return this.actualWidth;
};
Column.prototype.setActualWidth = function (actualWidth) {
if (this.actualWidth !== actualWidth) {
this.actualWidth = actualWidth;
this.eventService.dispatchEvent(Column.EVENT_WIDTH_CHANGED);
}
};
Column.prototype.isGreaterThanMax = function (width) {
if (this.maxWidth) {
return width > this.maxWidth;
}
else {
return false;
}
};
Column.prototype.getMinWidth = function () {
return this.minWidth;
};
Column.prototype.getMaxWidth = function () {
return this.maxWidth;
};
Column.prototype.setMinimum = function () {
this.setActualWidth(this.minWidth);
};
Column.PINNED_RIGHT = 'right';
Column.PINNED_LEFT = 'left';
Column.AGG_SUM = 'sum';
Column.AGG_MIN = 'min';
Column.AGG_MAX = 'max';
Column.SORT_ASC = 'asc';
Column.SORT_DESC = 'desc';
Column.EVENT_MOVING_CHANGED = 'movingChanged';
Column.EVENT_LEFT_CHANGED = 'leftChanged';
Column.EVENT_WIDTH_CHANGED = 'widthChanged';
return Column;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Column;
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var EventService = (function () {
function EventService() {
this.allListeners = {};
this.globalListeners = [];
}
EventService.prototype.init = function (loggerFactory) {
this.logger = loggerFactory.create('EventService');
};
EventService.prototype.getListenerList = function (eventType) {
var listenerList = this.allListeners[eventType];
if (!listenerList) {
listenerList = [];
this.allListeners[eventType] = listenerList;
}
return listenerList;
};
EventService.prototype.addEventListener = function (eventType, listener) {
var listenerList = this.getListenerList(eventType);
if (listenerList.indexOf(listener) < 0) {
listenerList.push(listener);
}
};
EventService.prototype.addGlobalListener = function (listener) {
this.globalListeners.push(listener);
};
EventService.prototype.removeEventListener = function (eventType, listener) {
var listenerList = this.getListenerList(eventType);
utils_1.default.removeFromArray(listenerList, listener);
};
EventService.prototype.removeGlobalListener = function (listener) {
utils_1.default.removeFromArray(this.globalListeners, listener);
};
// why do we pass the type here? the type is in ColumnChangeEvent, so unless the
// type is not in other types of events???
EventService.prototype.dispatchEvent = function (eventType, event) {
if (!event) {
event = {};
}
//this.logger.log('dispatching: ' + event);
var listenerList = this.getListenerList(eventType);
listenerList.forEach(function (listener) {
listener(event);
});
this.globalListeners.forEach(function (listener) {
listener(eventType, event);
});
};
return EventService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = EventService;
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var template = '<div class="ag-paging-panel">' +
'<span id="pageRowSummaryPanel" class="ag-paging-row-summary-panel">' +
'<span id="firstRowOnPage"></span>' +
' [TO] ' +
'<span id="lastRowOnPage"></span>' +
' [OF] ' +
'<span id="recordCount"></span>' +
'</span>' +
'<span class="ag-paging-page-summary-panel">' +
'<button type="button" class="ag-paging-button" id="btFirst">[FIRST]</button>' +
'<button type="button" class="ag-paging-button" id="btPrevious">[PREVIOUS]</button>' +
'[PAGE] ' +
'<span id="current"></span>' +
' [OF] ' +
'<span id="total"></span>' +
'<button type="button" class="ag-paging-button" id="btNext">[NEXT]</button>' +
'<button type="button" class="ag-paging-button" id="btLast">[LAST]</button>' +
'</span>' +
'</div>';
var PaginationController = (function () {
function PaginationController() {
}
PaginationController.prototype.init = function (angularGrid, gridOptionsWrapper) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.angularGrid = angularGrid;
this.setupComponents();
this.callVersion = 0;
};
PaginationController.prototype.setDatasource = function (datasource) {
this.datasource = datasource;
if (!datasource) {
// only continue if we have a valid datasource to work with
return;
}
this.reset();
};
PaginationController.prototype.reset = function () {
// copy pageSize, to guard against it changing the the datasource between calls
if (this.datasource.pageSize && typeof this.datasource.pageSize !== 'number') {
console.warn('datasource.pageSize should be a number');
}
this.pageSize = this.datasource.pageSize;
// see if we know the total number of pages, or if it's 'to be decided'
if (typeof this.datasource.rowCount === 'number' && this.datasource.rowCount >= 0) {
this.rowCount = this.datasource.rowCount;
this.foundMaxRow = true;
this.calculateTotalPages();
}
else {
this.rowCount = 0;
this.foundMaxRow = false;
this.totalPages = null;
}
this.currentPage = 0;
// hide the summary panel until something is loaded
this.ePageRowSummaryPanel.style.visibility = 'hidden';
this.setTotalLabels();
this.loadPage();
};
// the native method number.toLocaleString(undefined, {minimumFractionDigits: 0}) puts in decimal places in IE
PaginationController.prototype.myToLocaleString = function (input) {
if (typeof input !== 'number') {
return '';
}
else {
// took this from: http://blog.tompawlak.org/number-currency-formatting-javascript
return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
}
};
PaginationController.prototype.setTotalLabels = function () {
if (this.foundMaxRow) {
this.lbTotal.innerHTML = this.myToLocaleString(this.totalPages);
this.lbRecordCount.innerHTML = this.myToLocaleString(this.rowCount);
}
else {
var moreText = this.gridOptionsWrapper.getLocaleTextFunc()('more', 'more');
this.lbTotal.innerHTML = moreText;
this.lbRecordCount.innerHTML = moreText;
}
};
PaginationController.prototype.calculateTotalPages = function () {
this.totalPages = Math.floor((this.rowCount - 1) / this.pageSize) + 1;
};
PaginationController.prototype.pageLoaded = function (rows, lastRowIndex) {
var firstId = this.currentPage * this.pageSize;
this.angularGrid.setRowData(rows, firstId);
// see if we hit the last row
if (!this.foundMaxRow && typeof lastRowIndex === 'number' && lastRowIndex >= 0) {
this.foundMaxRow = true;
this.rowCount = lastRowIndex;
this.calculateTotalPages();
this.setTotalLabels();
// if overshot pages, go back
if (this.currentPage > this.totalPages) {
this.currentPage = this.totalPages - 1;
this.loadPage();
}
}
this.enableOrDisableButtons();
this.updateRowLabels();
};
PaginationController.prototype.updateRowLabels = function () {
var startRow;
var endRow;
if (this.isZeroPagesToDisplay()) {
startRow = 0;
endRow = 0;
}
else {
startRow = (this.pageSize * this.currentPage) + 1;
endRow = startRow + this.pageSize - 1;
if (this.foundMaxRow && endRow > this.rowCount) {
endRow = this.rowCount;
}
}
this.lbFirstRowOnPage.innerHTML = this.myToLocaleString(startRow);
this.lbLastRowOnPage.innerHTML = this.myToLocaleString(endRow);
// show the summary panel, when first shown, this is blank
this.ePageRowSummaryPanel.style.visibility = "";
};
PaginationController.prototype.loadPage = function () {
this.enableOrDisableButtons();
var startRow = this.currentPage * this.datasource.pageSize;
var endRow = (this.currentPage + 1) * this.datasource.pageSize;
this.lbCurrent.innerHTML = this.myToLocaleString(this.currentPage + 1);
this.callVersion++;
var callVersionCopy = this.callVersion;
var that = this;
this.angularGrid.showLoadingOverlay();
var sortModel;
if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
sortModel = this.angularGrid.getSortModel();
}
var filterModel;
if (this.gridOptionsWrapper.isEnableServerSideFilter()) {
filterModel = this.angularGrid.getFilterModel();
}
var params = {
startRow: startRow,
endRow: endRow,
successCallback: successCallback,
failCallback: failCallback,
sortModel: sortModel,
filterModel: filterModel
};
// check if old version of datasource used
var getRowsParams = utils_1.default.getFunctionParameters(this.datasource.getRows);
if (getRowsParams.length > 1) {
console.warn('ag-grid: It looks like your paging datasource is of the old type, taking more than one parameter.');
console.warn('ag-grid: From ag-grid 1.9.0, now the getRows takes one parameter. See the documentation for details.');
}
this.datasource.getRows(params);
function successCallback(rows, lastRowIndex) {
if (that.isCallDaemon(callVersionCopy)) {
return;
}
that.pageLoaded(rows, lastRowIndex);
}
function failCallback() {
if (that.isCallDaemon(callVersionCopy)) {
return;
}
// set in an empty set of rows, this will at
// least get rid of the loading panel, and
// stop blocking things
that.angularGrid.setRowData([]);
}
};
PaginationController.prototype.isCallDaemon = function (versionCopy) {
return versionCopy !== this.callVersion;
};
PaginationController.prototype.onBtNext = function () {
this.currentPage++;
this.loadPage();
};
PaginationController.prototype.onBtPrevious = function () {
this.currentPage--;
this.loadPage();
};
PaginationController.prototype.onBtFirst = function () {
this.currentPage = 0;
this.loadPage();
};
PaginationController.prototype.onBtLast = function () {
this.currentPage = this.totalPages - 1;
this.loadPage();
};
PaginationController.prototype.isZeroPagesToDisplay = function () {
return this.foundMaxRow && this.totalPages === 0;
};
PaginationController.prototype.enableOrDisableButtons = function () {
var disablePreviousAndFirst = this.currentPage === 0;
this.btPrevious.disabled = disablePreviousAndFirst;
this.btFirst.disabled = disablePreviousAndFirst;
var zeroPagesToDisplay = this.isZeroPagesToDisplay();
var onLastPage = this.foundMaxRow && this.currentPage === (this.totalPages - 1);
var disableNext = onLastPage || zeroPagesToDisplay;
this.btNext.disabled = disableNext;
var disableLast = !this.foundMaxRow || zeroPagesToDisplay || this.currentPage === (this.totalPages - 1);
this.btLast.disabled = disableLast;
};
PaginationController.prototype.createTemplate = function () {
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
return template
.replace('[PAGE]', localeTextFunc('page', 'Page'))
.replace('[TO]', localeTextFunc('to', 'to'))
.replace('[OF]', localeTextFunc('of', 'of'))
.replace('[OF]', localeTextFunc('of', 'of'))
.replace('[FIRST]', localeTextFunc('first', 'First'))
.replace('[PREVIOUS]', localeTextFunc('previous', 'Previous'))
.replace('[NEXT]', localeTextFunc('next', 'Next'))
.replace('[LAST]', localeTextFunc('last', 'Last'));
};
PaginationController.prototype.getGui = function () {
return this.eGui;
};
PaginationController.prototype.setupComponents = function () {
this.eGui = utils_1.default.loadTemplate(this.createTemplate());
this.btNext = this.eGui.querySelector('#btNext');
this.btPrevious = this.eGui.querySelector('#btPrevious');
this.btFirst = this.eGui.querySelector('#btFirst');
this.btLast = this.eGui.querySelector('#btLast');
this.lbCurrent = this.eGui.querySelector('#current');
this.lbTotal = this.eGui.querySelector('#total');
this.lbRecordCount = this.eGui.querySelector('#recordCount');
this.lbFirstRowOnPage = this.eGui.querySelector('#firstRowOnPage');
this.lbLastRowOnPage = this.eGui.querySelector('#lastRowOnPage');
this.ePageRowSummaryPanel = this.eGui.querySelector('#pageRowSummaryPanel');
var that = this;
this.btNext.addEventListener('click', function () {
that.onBtNext();
});
this.btPrevious.addEventListener('click', function () {
that.onBtPrevious();
});
this.btFirst.addEventListener('click', function () {
that.onBtFirst();
});
this.btLast.addEventListener('click', function () {
that.onBtLast();
});
};
return PaginationController;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = PaginationController;
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
/*
* This row controller is used for infinite scrolling only. For normal 'in memory' table,
* or standard pagination, the inMemoryRowController is used.
*/
var logging = false;
var VirtualPageRowController = (function () {
function VirtualPageRowController() {
}
VirtualPageRowController.prototype.init = function (rowRenderer, gridOptionsWrapper, angularGrid) {
this.rowRenderer = rowRenderer;
this.datasourceVersion = 0;
this.gridOptionsWrapper = gridOptionsWrapper;
this.angularGrid = angularGrid;
};
VirtualPageRowController.prototype.setDatasource = function (datasource) {
this.datasource = datasource;
if (!datasource) {
// only continue if we have a valid datasource to working with
return;
}
this.reset();
};
VirtualPageRowController.prototype.reset = function () {
// see if datasource knows how many rows there are
if (typeof this.datasource.rowCount === 'number' && this.datasource.rowCount >= 0) {
this.virtualRowCount = this.datasource.rowCount;
this.foundMaxRow = true;
}
else {
this.virtualRowCount = 0;
this.foundMaxRow = false;
}
// in case any daemon requests coming from datasource, we know it ignore them
this.datasourceVersion++;
// map of page numbers to rows in that page
this.pageCache = {};
this.pageCacheSize = 0;
// if a number is in this array, it means we are pending a load from it
this.pageLoadsInProgress = [];
this.pageLoadsQueued = [];
this.pageAccessTimes = {}; // keeps a record of when each page was last viewed, used for LRU cache
this.accessTime = 0; // rather than using the clock, we use this counter
// the number of concurrent loads we are allowed to the server
if (typeof this.datasource.maxConcurrentRequests === 'number' && this.datasource.maxConcurrentRequests > 0) {
this.maxConcurrentDatasourceRequests = this.datasource.maxConcurrentRequests;
}
else {
this.maxConcurrentDatasourceRequests = 2;
}
// the number of pages to keep in browser cache
if (typeof this.datasource.maxPagesInCache === 'number' && this.datasource.maxPagesInCache > 0) {
this.maxPagesInCache = this.datasource.maxPagesInCache;
}
else {
// null is default, means don't have any max size on the cache
this.maxPagesInCache = null;
}
this.pageSize = this.datasource.pageSize; // take a copy of page size, we don't want it changing
this.overflowSize = this.datasource.overflowSize; // take a copy of page size, we don't want it changing
this.doLoadOrQueue(0);
};
VirtualPageRowController.prototype.createNodesFromRows = function (pageNumber, rows) {
var nodes = [];
if (rows) {
for (var i = 0, j = rows.length; i < j; i++) {
var virtualRowIndex = (pageNumber * this.pageSize) + i;
var node = this.createNode(rows[i], virtualRowIndex);
nodes.push(node);
}
}
return nodes;
};
VirtualPageRowController.prototype.createNode = function (data, virtualRowIndex) {
var rowHeight = this.getRowHeightAsNumber();
var top = rowHeight * virtualRowIndex;
var rowNode = {
data: data,
id: virtualRowIndex,
rowTop: top,
rowHeight: rowHeight
};
return rowNode;
};
VirtualPageRowController.prototype.removeFromLoading = function (pageNumber) {
var index = this.pageLoadsInProgress.indexOf(pageNumber);
this.pageLoadsInProgress.splice(index, 1);
};
VirtualPageRowController.prototype.pageLoadFailed = function (pageNumber) {
this.removeFromLoading(pageNumber);
this.checkQueueForNextLoad();
};
VirtualPageRowController.prototype.pageLoaded = function (pageNumber, rows, lastRow) {
this.putPageIntoCacheAndPurge(pageNumber, rows);
this.checkMaxRowAndInformRowRenderer(pageNumber, lastRow);
this.removeFromLoading(pageNumber);
this.checkQueueForNextLoad();
};
VirtualPageRowController.prototype.putPageIntoCacheAndPurge = function (pageNumber, rows) {
this.pageCache[pageNumber] = this.createNodesFromRows(pageNumber, rows);
this.pageCacheSize++;
if (logging) {
console.log('adding page ' + pageNumber);
}
var needToPurge = this.maxPagesInCache && this.maxPagesInCache < this.pageCacheSize;
if (needToPurge) {
// find the LRU page
var youngestPageIndex = this.findLeastRecentlyAccessedPage(Object.keys(this.pageCache));
if (logging) {
console.log('purging page ' + youngestPageIndex + ' from cache ' + Object.keys(this.pageCache));
}
delete this.pageCache[youngestPageIndex];
this.pageCacheSize--;
}
};
VirtualPageRowController.prototype.checkMaxRowAndInformRowRenderer = function (pageNumber, lastRow) {
if (!this.foundMaxRow) {
// if we know the last row, use if
if (typeof lastRow === 'number' && lastRow >= 0) {
this.virtualRowCount = lastRow;
this.foundMaxRow = true;
}
else {
// otherwise, see if we need to add some virtual rows
var thisPagePlusBuffer = ((pageNumber + 1) * this.pageSize) + this.overflowSize;
if (this.virtualRowCount < thisPagePlusBuffer) {
this.virtualRowCount = thisPagePlusBuffer;
}
}
// if rowCount changes, refreshView, otherwise just refreshAllVirtualRows
this.rowRenderer.refreshView();
}
else {
this.rowRenderer.refreshAllVirtualRows();
}
};
VirtualPageRowController.prototype.isPageAlreadyLoading = function (pageNumber) {
var result = this.pageLoadsInProgress.indexOf(pageNumber) >= 0 || this.pageLoadsQueued.indexOf(pageNumber) >= 0;
return result;
};
VirtualPageRowController.prototype.doLoadOrQueue = function (pageNumber) {
// if we already tried to load this page, then ignore the request,
// otherwise server would be hit 50 times just to display one page, the
// first row to find the page missing is enough.
if (this.isPageAlreadyLoading(pageNumber)) {
return;
}
// try the page load - if not already doing a load, then we can go ahead
if (this.pageLoadsInProgress.length < this.maxConcurrentDatasourceRequests) {
// go ahead, load the page
this.loadPage(pageNumber);
}
else {
// otherwise, queue the request
this.addToQueueAndPurgeQueue(pageNumber);
}
};
VirtualPageRowController.prototype.addToQueueAndPurgeQueue = function (pageNumber) {
if (logging) {
console.log('queueing ' + pageNumber + ' - ' + this.pageLoadsQueued);
}
this.pageLoadsQueued.push(pageNumber);
// see if there are more pages queued that are actually in our cache, if so there is
// no point in loading them all as some will be purged as soon as loaded
var needToPurge = this.maxPagesInCache && this.maxPagesInCache < this.pageLoadsQueued.length;
if (needToPurge) {
// find the LRU page
var youngestPageIndex = this.findLeastRecentlyAccessedPage(this.pageLoadsQueued);
if (logging) {
console.log('de-queueing ' + pageNumber + ' - ' + this.pageLoadsQueued);
}
var indexToRemove = this.pageLoadsQueued.indexOf(youngestPageIndex);
this.pageLoadsQueued.splice(indexToRemove, 1);
}
};
VirtualPageRowController.prototype.findLeastRecentlyAccessedPage = function (pageIndexes) {
var youngestPageIndex = -1;
var youngestPageAccessTime = Number.MAX_VALUE;
var that = this;
pageIndexes.forEach(function (pageIndex) {
var accessTimeThisPage = that.pageAccessTimes[pageIndex];
if (accessTimeThisPage < youngestPageAccessTime) {
youngestPageAccessTime = accessTimeThisPage;
youngestPageIndex = pageIndex;
}
});
return youngestPageIndex;
};
VirtualPageRowController.prototype.checkQueueForNextLoad = function () {
if (this.pageLoadsQueued.length > 0) {
// take from the front of the queue
var pageToLoad = this.pageLoadsQueued[0];
this.pageLoadsQueued.splice(0, 1);
if (logging) {
console.log('dequeueing ' + pageToLoad + ' - ' + this.pageLoadsQueued);
}
this.loadPage(pageToLoad);
}
};
VirtualPageRowController.prototype.loadPage = function (pageNumber) {
this.pageLoadsInProgress.push(pageNumber);
var startRow = pageNumber * this.pageSize;
var endRow = (pageNumber + 1) * this.pageSize;
var that = this;
var datasourceVersionCopy = this.datasourceVersion;
var sortModel;
if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
sortModel = this.angularGrid.getSortModel();
}
var filterModel;
if (this.gridOptionsWrapper.isEnableServerSideFilter()) {
filterModel = this.angularGrid.getFilterModel();
}
var params = {
startRow: startRow,
endRow: endRow,
successCallback: successCallback,
failCallback: failCallback,
sortModel: sortModel,
filterModel: filterModel
};
// check if old version of datasource used
var getRowsParams = utils_1.default.getFunctionParameters(this.datasource.getRows);
if (getRowsParams.length > 1) {
console.warn('ag-grid: It looks like your paging datasource is of the old type, taking more than one parameter.');
console.warn('ag-grid: From ag-grid 1.9.0, now the getRows takes one parameter. See the documentation for details.');
}
this.datasource.getRows(params);
function successCallback(rows, lastRowIndex) {
if (that.requestIsDaemon(datasourceVersionCopy)) {
return;
}
that.pageLoaded(pageNumber, rows, lastRowIndex);
}
function failCallback() {
if (that.requestIsDaemon(datasourceVersionCopy)) {
return;
}
that.pageLoadFailed(pageNumber);
}
};
// check that the datasource has not changed since the lats time we did a request
VirtualPageRowController.prototype.requestIsDaemon = function (datasourceVersionCopy) {
return this.datasourceVersion !== datasourceVersionCopy;
};
VirtualPageRowController.prototype.getVirtualRow = function (rowIndex) {
if (rowIndex > this.virtualRowCount) {
return null;
}
var pageNumber = Math.floor(rowIndex / this.pageSize);
var page = this.pageCache[pageNumber];
// for LRU cache, track when this page was last hit
this.pageAccessTimes[pageNumber] = this.accessTime++;
if (!page) {
this.doLoadOrQueue(pageNumber);
// return back an empty row, so table can at least render empty cells
var dummyNode = this.createNode({}, rowIndex);
return dummyNode;
}
else {
var indexInThisPage = rowIndex % this.pageSize;
return page[indexInThisPage];
}
};
VirtualPageRowController.prototype.forEachNode = function (callback) {
var pageKeys = Object.keys(this.pageCache);
for (var i = 0; i < pageKeys.length; i++) {
var pageKey = pageKeys[i];
var page = this.pageCache[pageKey];
for (var j = 0; j < page.length; j++) {
var node = page[j];
callback(node);
}
}
};
VirtualPageRowController.prototype.getRowHeightAsNumber = function () {
var rowHeight = this.gridOptionsWrapper.getRowHeightForVirtualPagiation();
if (typeof rowHeight === 'number') {
return rowHeight;
}
else {
console.warn('ag-Grid row height must be a number when doing virtual paging');
return 25;
}
};
VirtualPageRowController.prototype.getVirtualRowCombinedHeight = function () {
return this.virtualRowCount * this.getRowHeightAsNumber();
};
VirtualPageRowController.prototype.getRowAtPixel = function (pixel) {
var rowHeight = this.getRowHeightAsNumber();
if (rowHeight !== 0) {
return Math.floor(pixel / rowHeight);
}
else {
return 0;
}
};
VirtualPageRowController.prototype.getModel = function () {
var that = this;
return {
getRowAtPixel: function (pixel) {
return that.getRowAtPixel(pixel);
},
getVirtualRowCombinedHeight: function () {
return that.getVirtualRowCombinedHeight();
},
getVirtualRow: function (index) {
return that.getVirtualRow(index);
},
getVirtualRowCount: function () {
return that.virtualRowCount;
},
forEachInMemory: function (callback) {
that.forEachNode(callback);
},
forEachNode: function (callback) {
that.forEachNode(callback);
},
forEachNodeAfterFilter: function (callback) {
console.warn('forEachNodeAfterFilter - does not work with virtual pagination');
},
forEachNodeAfterFilterAndSort: function (callback) {
console.warn('forEachNodeAfterFilterAndSort - does not work with virtual pagination');
}
};
};
return VirtualPageRowController;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = VirtualPageRowController;
/***/ },
/* 12 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var FloatingRowModel = (function () {
function FloatingRowModel() {
}
FloatingRowModel.prototype.init = function (gridOptionsWrapper) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.setFloatingTopRowData(gridOptionsWrapper.getFloatingTopRowData());
this.setFloatingBottomRowData(gridOptionsWrapper.getFloatingBottomRowData());
};
FloatingRowModel.prototype.setFloatingTopRowData = function (rowData) {
this.floatingTopRows = this.createNodesFromData(rowData, false);
};
FloatingRowModel.prototype.setFloatingBottomRowData = function (rowData) {
this.floatingBottomRows = this.createNodesFromData(rowData, false);
};
FloatingRowModel.prototype.createNodesFromData = function (allData, isTop) {
var _this = this;
var rowNodes = [];
if (allData) {
var nextRowTop = 0;
allData.forEach(function (dataItem) {
var rowNode = {
data: dataItem,
floating: true,
floatingTop: isTop,
floatingBottom: !isTop,
rowTop: nextRowTop,
rowHeight: null
};
rowNode.rowHeight = _this.gridOptionsWrapper.getRowHeightForNode(rowNode);
nextRowTop += rowNode.rowHeight;
rowNodes.push(rowNode);
});
}
return rowNodes;
};
FloatingRowModel.prototype.getFloatingTopRowData = function () {
return this.floatingTopRows;
};
FloatingRowModel.prototype.getFloatingBottomRowData = function () {
return this.floatingBottomRows;
};
FloatingRowModel.prototype.getFloatingTopTotalHeight = function () {
return this.getTotalHeight(this.floatingTopRows);
};
FloatingRowModel.prototype.getFloatingBottomTotalHeight = function () {
return this.getTotalHeight(this.floatingBottomRows);
};
FloatingRowModel.prototype.getTotalHeight = function (rowNodes) {
if (!rowNodes || rowNodes.length === 0) {
return 0;
}
else {
var lastNode = rowNodes[rowNodes.length - 1];
return lastNode.rowTop + lastNode.rowHeight;
}
};
return FloatingRowModel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = FloatingRowModel;
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var events_1 = __webpack_require__(5);
// these constants are used for determining if groups should
// be selected or deselected when selecting groups, and the group
// then selects the children.
var SELECTED = 0;
var UNSELECTED = 1;
var MIXED = 2;
var DO_NOT_CARE = 3;
var SelectionController = (function () {
function SelectionController() {
}
SelectionController.prototype.init = function (angularGrid, gridPanel, gridOptionsWrapper, $scope, rowRenderer, eventService) {
this.eParentsOfRows = gridPanel.getRowsParent();
this.angularGrid = angularGrid;
this.gridOptionsWrapper = gridOptionsWrapper;
this.$scope = $scope;
this.rowRenderer = rowRenderer;
this.eventService = eventService;
this.initSelectedNodesById();
this.selectedRows = [];
};
SelectionController.prototype.initSelectedNodesById = function () {
this.selectedNodesById = {};
};
SelectionController.prototype.getSelectedNodesById = function () {
return this.selectedNodesById;
};
SelectionController.prototype.getSelectedRows = function () {
return this.selectedRows;
};
SelectionController.prototype.getSelectedNodes = function () {
var selectedNodes = [];
var keys = Object.keys(this.selectedNodesById);
for (var i = 0; i < keys.length; i++) {
var id = keys[i];
var selectedNode = this.selectedNodesById[id];
selectedNodes.push(selectedNode);
}
return selectedNodes;
};
// returns a list of all nodes at 'best cost' - a feature to be used
// with groups / trees. if a group has all it's children selected,
// then the group appears in the result, but not the children.
// Designed for use with 'children' as the group selection type,
// where groups don't actually appear in the selection normally.
SelectionController.prototype.getBestCostNodeSelection = function () {
if (typeof this.rowModel.getTopLevelNodes !== 'function') {
throw 'selectAll not available when rows are on the server';
}
var topLevelNodes = this.rowModel.getTopLevelNodes();
var result = [];
var that = this;
// recursive function, to find the selected nodes
function traverse(nodes) {
for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i];
if (that.isNodeSelected(node)) {
result.push(node);
}
else {
// if not selected, then if it's a group, and the group
// has children, continue to search for selections
if (node.group && node.children) {
traverse(node.children);
}
}
}
}
traverse(topLevelNodes);
return result;
};
SelectionController.prototype.setRowModel = function (rowModel) {
this.rowModel = rowModel;
};
// this clears the selection, but doesn't clear down the css - when it is called, the
// caller then gets the grid to refresh.
SelectionController.prototype.deselectAll = function () {
this.initSelectedNodesById();
//var keys = Object.keys(this.selectedNodesById);
//for (var i = 0; i < keys.length; i++) {
// delete this.selectedNodesById[keys[i]];
//}
this.syncSelectedRowsAndCallListener();
};
// this selects everything, but doesn't clear down the css - when it is called, the
// caller then gets the grid to refresh.
SelectionController.prototype.selectAll = function () {
if (typeof this.rowModel.getTopLevelNodes !== 'function') {
throw 'selectAll not available when rows are on the server';
}
var selectedNodesById = this.selectedNodesById;
// if the selection is "don't include groups", then we don't include them!
var includeGroups = !this.gridOptionsWrapper.isGroupSelectsChildren();
function recursivelySelect(nodes) {
if (nodes) {
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
if (node.group) {
recursivelySelect(node.children);
if (includeGroups) {
selectedNodesById[node.id] = node;
}
}
else {
selectedNodesById[node.id] = node;
}
}
}
}
var topLevelNodes = this.rowModel.getTopLevelNodes();
recursivelySelect(topLevelNodes);
this.syncSelectedRowsAndCallListener();
};
SelectionController.prototype.selectNode = function (node, tryMulti, suppressEvents) {
var multiSelect = this.gridOptionsWrapper.isRowSelectionMulti() && tryMulti;
// if the node is a group, then selecting this is the same as selecting the parent,
// so to have only one flow through the below, we always select the header parent
// (which then has the side effect of selecting the child).
var nodeToSelect;
if (node.footer) {
nodeToSelect = node.sibling;
}
else {
nodeToSelect = node;
}
// at the end, if this is true, we inform the callback
var atLeastOneItemUnselected = false;
var atLeastOneItemSelected = false;
// see if rows to be deselected
if (!multiSelect) {
atLeastOneItemUnselected = this.doWorkOfDeselectAllNodes(null, suppressEvents);
}
if (this.gridOptionsWrapper.isGroupSelectsChildren() && nodeToSelect.group) {
// don't select the group, select the children instead
atLeastOneItemSelected = this.recursivelySelectAllChildren(nodeToSelect);
}
else {
// see if row needs to be selected
atLeastOneItemSelected = this.doWorkOfSelectNode(nodeToSelect, suppressEvents);
}
if (atLeastOneItemUnselected || atLeastOneItemSelected) {
this.syncSelectedRowsAndCallListener(suppressEvents);
}
this.updateGroupParentsIfNeeded();
};
SelectionController.prototype.recursivelySelectAllChildren = function (node, suppressEvents) {
var atLeastOne = false;
if (node.children) {
for (var i = 0; i < node.children.length; i++) {
var child = node.children[i];
if (child.group) {
if (this.recursivelySelectAllChildren(child)) {
atLeastOne = true;
}
}
else {
if (this.doWorkOfSelectNode(child, suppressEvents)) {
atLeastOne = true;
}
}
}
}
return atLeastOne;
};
SelectionController.prototype.recursivelyDeselectAllChildren = function (node, suppressEvents) {
if (node.children) {
for (var i = 0; i < node.children.length; i++) {
var child = node.children[i];
if (child.group) {
this.recursivelyDeselectAllChildren(child, suppressEvents);
}
else {
this.deselectRealNode(child, suppressEvents);
}
}
}
};
// 1 - selects a node
// 2 - updates the UI
// 3 - calls callbacks
SelectionController.prototype.doWorkOfSelectNode = function (node, suppressEvents) {
if (this.selectedNodesById[node.id]) {
return false;
}
this.selectedNodesById[node.id] = node;
this.addCssClassForNode_andInformVirtualRowListener(node);
// also color in the footer if there is one
if (node.group && node.expanded && node.sibling) {
this.addCssClassForNode_andInformVirtualRowListener(node.sibling);
}
// inform the rowSelected listener, if any
if (!suppressEvents) {
var event = { node: node };
this.eventService.dispatchEvent(events_1.Events.EVENT_ROW_SELECTED, event);
}
return true;
};
// 1 - selects a node
// 2 - updates the UI
// 3 - calls callbacks
// wow - what a big name for a method, exception case, it's saying what the method does
SelectionController.prototype.addCssClassForNode_andInformVirtualRowListener = function (node) {
var virtualRenderedRowIndex = this.rowRenderer.getIndexOfRenderedNode(node);
if (virtualRenderedRowIndex >= 0) {
this.eParentsOfRows.forEach(function (rowContainer) {
utils_1.default.querySelectorAll_addCssClass(rowContainer, '[row="' + virtualRenderedRowIndex + '"]', 'ag-row-selected');
});
// inform virtual row listener
this.angularGrid.onVirtualRowSelected(virtualRenderedRowIndex, true);
}
};
// 1 - un-selects a node
// 2 - updates the UI
// 3 - calls callbacks
SelectionController.prototype.doWorkOfDeselectAllNodes = function (nodeToKeepSelected, suppressEvents) {
// not doing multi-select, so deselect everything other than the 'just selected' row
var atLeastOneSelectionChange;
var selectedNodeKeys = Object.keys(this.selectedNodesById);
for (var i = 0; i < selectedNodeKeys.length; i++) {
// skip the 'just selected' row
var key = selectedNodeKeys[i];
var nodeToDeselect = this.selectedNodesById[key];
if (nodeToDeselect === nodeToKeepSelected) {
continue;
}
else {
this.deselectRealNode(nodeToDeselect, suppressEvents);
atLeastOneSelectionChange = true;
}
}
return atLeastOneSelectionChange;
};
SelectionController.prototype.deselectRealNode = function (node, suppressEvents) {
// deselect the css
this.removeCssClassForNode(node);
// if node is a header, and if it has a sibling footer, deselect the footer also
if (node.group && node.expanded && node.sibling) {
this.removeCssClassForNode(node.sibling);
}
// remove the row
delete this.selectedNodesById[node.id];
if (!suppressEvents) {
var event = { node: node };
this.eventService.dispatchEvent(events_1.Events.EVENT_ROW_DESELECTED, event);
}
};
SelectionController.prototype.removeCssClassForNode = function (node) {
var virtualRenderedRowIndex = this.rowRenderer.getIndexOfRenderedNode(node);
if (virtualRenderedRowIndex >= 0) {
this.eParentsOfRows.forEach(function (rowContainer) {
utils_1.default.querySelectorAll_removeCssClass(rowContainer, '[row="' + virtualRenderedRowIndex + '"]', 'ag-row-selected');
});
// inform virtual row listener
this.angularGrid.onVirtualRowSelected(virtualRenderedRowIndex, false);
}
};
// used by selectionRendererFactory
SelectionController.prototype.deselectIndex = function (rowIndex, suppressEvents) {
if (suppressEvents === void 0) { suppressEvents = false; }
var node = this.rowModel.getVirtualRow(rowIndex);
this.deselectNode(node, suppressEvents);
};
// used by api
SelectionController.prototype.deselectNode = function (node, suppressEvents) {
if (suppressEvents === void 0) { suppressEvents = false; }
if (node) {
if (this.gridOptionsWrapper.isGroupSelectsChildren() && node.group) {
// want to deselect children, not this node, so recursively deselect
this.recursivelyDeselectAllChildren(node, suppressEvents);
}
else {
this.deselectRealNode(node, suppressEvents);
}
}
this.syncSelectedRowsAndCallListener();
this.updateGroupParentsIfNeeded();
};
// used by selectionRendererFactory & api
SelectionController.prototype.selectIndex = function (index, tryMulti, suppressEvents) {
if (suppressEvents === void 0) { suppressEvents = false; }
var node = this.rowModel.getVirtualRow(index);
this.selectNode(node, tryMulti, suppressEvents);
};
// updates the selectedRows with the selectedNodes and calls selectionChanged listener
SelectionController.prototype.syncSelectedRowsAndCallListener = function (suppressEvents) {
// update selected rows
var selectedRows = this.selectedRows;
var oldCount = selectedRows.length;
// clear selected rows
selectedRows.length = 0;
var keys = Object.keys(this.selectedNodesById);
for (var i = 0; i < keys.length; i++) {
if (this.selectedNodesById[keys[i]] !== undefined) {
var selectedNode = this.selectedNodesById[keys[i]];
selectedRows.push(selectedNode.data);
}
}
// this stop the event firing the very first the time grid is initialised. without this, the documentation
// page had a popup in the 'selection' page as soon as the page was loaded!!
var nothingChangedMustBeInitialising = oldCount === 0 && selectedRows.length === 0;
if (!nothingChangedMustBeInitialising && !suppressEvents) {
var event = {
selectedNodesById: this.selectedNodesById,
selectedRows: this.selectedRows
};
this.eventService.dispatchEvent(events_1.Events.EVENT_SELECTION_CHANGED, event);
}
var that = this;
if (this.$scope) {
setTimeout(function () {
that.$scope.$apply();
}, 0);
}
};
SelectionController.prototype.recursivelyCheckIfSelected = function (node) {
var foundSelected = false;
var foundUnselected = false;
if (node.children) {
for (var i = 0; i < node.children.length; i++) {
var child = node.children[i];
var result;
if (child.group) {
result = this.recursivelyCheckIfSelected(child);
switch (result) {
case SELECTED:
foundSelected = true;
break;
case UNSELECTED:
foundUnselected = true;
break;
case MIXED:
foundSelected = true;
foundUnselected = true;
break;
}
}
else {
if (this.isNodeSelected(child)) {
foundSelected = true;
}
else {
foundUnselected = true;
}
}
if (foundSelected && foundUnselected) {
// if mixed, then no need to go further, just return up the chain
return MIXED;
}
}
}
// got this far, so no conflicts, either all children selected, unselected, or neither
if (foundSelected) {
return SELECTED;
}
else if (foundUnselected) {
return UNSELECTED;
}
else {
return DO_NOT_CARE;
}
};
// used by selectionRendererFactory
// returns:
// true: if selected
// false: if unselected
// undefined: if it's a group and 'children selection' is used and 'children' are a mix of selected and unselected
SelectionController.prototype.isNodeSelected = function (node) {
if (this.gridOptionsWrapper.isGroupSelectsChildren() && node.group) {
// doing child selection, we need to traverse the children
var resultOfChildren = this.recursivelyCheckIfSelected(node);
switch (resultOfChildren) {
case SELECTED:
return true;
case UNSELECTED:
return false;
default:
return undefined;
}
}
else {
return this.selectedNodesById[node.id] !== undefined;
}
};
SelectionController.prototype.updateGroupParentsIfNeeded = function () {
// we only do this if parent nodes are responsible
// for selecting their children.
if (!this.gridOptionsWrapper.isGroupSelectsChildren()) {
return;
}
var firstRow = this.rowRenderer.getFirstVirtualRenderedRow();
var lastRow = this.rowRenderer.getLastVirtualRenderedRow();
for (var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++) {
// see if node is a group
var node = this.rowModel.getVirtualRow(rowIndex);
if (node.group) {
var selected = this.isNodeSelected(node);
this.angularGrid.onVirtualRowSelected(rowIndex, selected);
this.eParentsOfRows.forEach(function (rowContainer) {
if (selected) {
utils_1.default.querySelectorAll_addCssClass(rowContainer, '[row="' + rowIndex + '"]', 'ag-row-selected');
}
else {
utils_1.default.querySelectorAll_removeCssClass(rowContainer, '[row="' + rowIndex + '"]', 'ag-row-selected');
}
});
}
}
};
return SelectionController;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SelectionController;
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var columnGroup_1 = __webpack_require__(15);
var column_1 = __webpack_require__(8);
var events_1 = __webpack_require__(5);
var columnChangeEvent_1 = __webpack_require__(16);
var originalColumnGroup_1 = __webpack_require__(17);
var groupInstanceIdCreator_1 = __webpack_require__(18);
var functions_1 = __webpack_require__(19);
var ColumnApi = (function () {
function ColumnApi(_columnController) {
this._columnController = _columnController;
}
ColumnApi.prototype.sizeColumnsToFit = function (gridWidth) { this._columnController.sizeColumnsToFit(gridWidth); };
ColumnApi.prototype.setColumnGroupOpened = function (group, newValue, instanceId) { this._columnController.setColumnGroupOpened(group, newValue, instanceId); };
ColumnApi.prototype.getColumnGroup = function (name, instanceId) { return this._columnController.getColumnGroup(name, instanceId); };
ColumnApi.prototype.getDisplayNameForCol = function (column) { return this._columnController.getDisplayNameForCol(column); };
ColumnApi.prototype.getColumn = function (key) { return this._columnController.getColumn(key); };
ColumnApi.prototype.setState = function (columnState) { return this._columnController.setState(columnState); };
ColumnApi.prototype.getState = function () { return this._columnController.getState(); };
ColumnApi.prototype.resetState = function () { this._columnController.resetState(); };
ColumnApi.prototype.isPinning = function () { return this._columnController.isPinningLeft() || this._columnController.isPinningRight(); };
ColumnApi.prototype.isPinningLeft = function () { return this._columnController.isPinningLeft(); };
ColumnApi.prototype.isPinningRight = function () { return this._columnController.isPinningRight(); };
ColumnApi.prototype.getDisplayedColAfter = function (col) { return this._columnController.getDisplayedColAfter(col); };
ColumnApi.prototype.getDisplayedColBefore = function (col) { return this._columnController.getDisplayedColBefore(col); };
ColumnApi.prototype.setColumnVisible = function (key, visible) { this._columnController.setColumnVisible(key, visible); };
ColumnApi.prototype.setColumnsVisible = function (keys, visible) { this._columnController.setColumnsVisible(keys, visible); };
ColumnApi.prototype.setColumnPinned = function (key, pinned) { this._columnController.setColumnPinned(key, pinned); };
ColumnApi.prototype.setColumnsPinned = function (keys, pinned) { this._columnController.setColumnsPinned(keys, pinned); };
ColumnApi.prototype.getAllColumns = function () { return this._columnController.getAllColumns(); };
ColumnApi.prototype.getDisplayedLeftColumns = function () { return this._columnController.getDisplayedLeftColumns(); };
ColumnApi.prototype.getDisplayedCenterColumns = function () { return this._columnController.getDisplayedCenterColumns(); };
ColumnApi.prototype.getDisplayedRightColumns = function () { return this._columnController.getDisplayedRightColumns(); };
ColumnApi.prototype.getAllDisplayedColumns = function () { return this._columnController.getAllDisplayedColumns(); };
ColumnApi.prototype.getRowGroupColumns = function () { return this._columnController.getRowGroupColumns(); };
ColumnApi.prototype.getValueColumns = function () { return this._columnController.getValueColumns(); };
ColumnApi.prototype.moveColumn = function (fromIndex, toIndex) { this._columnController.moveColumnByIndex(fromIndex, toIndex); };
ColumnApi.prototype.moveRowGroupColumn = function (fromIndex, toIndex) { this._columnController.moveRowGroupColumn(fromIndex, toIndex); };
ColumnApi.prototype.setColumnAggFunction = function (column, aggFunc) { this._columnController.setColumnAggFunction(column, aggFunc); };
ColumnApi.prototype.setColumnWidth = function (key, newWidth, finished) {
if (finished === void 0) { finished = true; }
this._columnController.setColumnWidth(key, newWidth, finished);
};
ColumnApi.prototype.removeValueColumn = function (column) { this._columnController.removeValueColumn(column); };
ColumnApi.prototype.addValueColumn = function (column) { this._columnController.addValueColumn(column); };
ColumnApi.prototype.removeRowGroupColumn = function (column) { this._columnController.removeRowGroupColumn(column); };
ColumnApi.prototype.addRowGroupColumn = function (column) { this._columnController.addRowGroupColumn(column); };
ColumnApi.prototype.getLeftDisplayedColumnGroups = function () { return this._columnController.getLeftDisplayedColumnGroups(); };
ColumnApi.prototype.getCenterDisplayedColumnGroups = function () { return this._columnController.getCenterDisplayedColumnGroups(); };
ColumnApi.prototype.getRightDisplayedColumnGroups = function () { return this._columnController.getRightDisplayedColumnGroups(); };
ColumnApi.prototype.getAllDisplayedColumnGroups = function () { return this._columnController.getAllDisplayedColumnGroups(); };
ColumnApi.prototype.autoSizeColumn = function (key) { return this._columnController.autoSizeColumn(key); };
ColumnApi.prototype.autoSizeColumns = function (keys) { return this._columnController.autoSizeColumns(keys); };
ColumnApi.prototype.columnGroupOpened = function (group, newValue) {
console.error('ag-Grid: columnGroupOpened no longer exists, use setColumnGroupOpened');
this.setColumnGroupOpened(group, newValue);
};
ColumnApi.prototype.hideColumns = function (colIds, hide) {
console.error('ag-Grid: hideColumns is deprecated, use setColumnsVisible');
this._columnController.setColumnsVisible(colIds, !hide);
};
ColumnApi.prototype.hideColumn = function (colId, hide) {
console.error('ag-Grid: hideColumn is deprecated, use setColumnVisible');
this._columnController.setColumnVisible(colId, !hide);
};
return ColumnApi;
})();
exports.ColumnApi = ColumnApi;
var ColumnController = (function () {
function ColumnController() {
// these are the lists used by the rowRenderer to render nodes. almost the leaf nodes of the above
// displayed trees, however it also takes into account if the groups are open or not.
this.displayedLeftColumns = [];
this.displayedRightColumns = [];
this.displayedCenterColumns = [];
this.headerRowCount = 0;
this.setupComplete = false;
}
ColumnController.prototype.init = function (angularGrid, selectionRendererFactory, gridOptionsWrapper, expressionService, valueService, masterSlaveController, eventService, balancedColumnTreeBuilder, displayedGroupCreator, columnUtils, autoWidthCalculator, loggerFactory) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.angularGrid = angularGrid;
this.selectionRendererFactory = selectionRendererFactory;
this.expressionService = expressionService;
this.valueService = valueService;
this.masterSlaveController = masterSlaveController;
this.eventService = eventService;
this.balancedColumnTreeBuilder = balancedColumnTreeBuilder;
this.displayedGroupCreator = displayedGroupCreator;
this.columnUtils = columnUtils;
this.autoWidthCalculator = autoWidthCalculator;
this.logger = loggerFactory.create('ColumnController');
};
ColumnController.prototype.autoSizeColumns = function (keys) {
var _this = this;
this.actionOnColumns(keys, function (column) {
var requiredWidth = _this.autoWidthCalculator.getPreferredWidthForColumn(column);
if (requiredWidth > 0) {
var newWidth = _this.normaliseColumnWidth(column, requiredWidth);
column.setActualWidth(newWidth);
}
}, function () {
return new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_RESIZED).withFinished(true);
});
};
ColumnController.prototype.autoSizeColumn = function (key) {
this.autoSizeColumns([key]);
};
ColumnController.prototype.getColumnsFromTree = function (rootColumns) {
var result = [];
recursiveFindColumns(rootColumns);
return result;
function recursiveFindColumns(childColumns) {
for (var i = 0; i < childColumns.length; i++) {
var child = childColumns[i];
if (child instanceof column_1.default) {
result.push(child);
}
else if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
recursiveFindColumns(child.getChildren());
}
}
}
};
ColumnController.prototype.getAllDisplayedColumnGroups = function () {
if (this.displayedLeftColumnTree && this.displayedRightColumnTree && this.displayedCentreColumnTree) {
return this.displayedLeftColumnTree
.concat(this.displayedCentreColumnTree)
.concat(this.displayedRightColumnTree);
}
else {
return null;
}
};
ColumnController.prototype.getColumnApi = function () {
return new ColumnApi(this);
};
ColumnController.prototype.isSetupComplete = function () {
return this.setupComplete;
};
// + gridPanel -> for resizing the body and setting top margin
ColumnController.prototype.getHeaderRowCount = function () {
return this.headerRowCount;
};
// + headerRenderer -> setting pinned body width
ColumnController.prototype.getLeftDisplayedColumnGroups = function () {
return this.displayedLeftColumnTree;
};
// + headerRenderer -> setting pinned body width
ColumnController.prototype.getRightDisplayedColumnGroups = function () {
return this.displayedRightColumnTree;
};
// + headerRenderer -> setting pinned body width
ColumnController.prototype.getCenterDisplayedColumnGroups = function () {
return this.displayedCentreColumnTree;
};
// gridPanel -> ensureColumnVisible
ColumnController.prototype.isColumnDisplayed = function (column) {
return this.getAllDisplayedColumns().indexOf(column) >= 0;
};
// + csvCreator
ColumnController.prototype.getAllDisplayedColumns = function () {
// order we add the arrays together is important, so the result
// has the columns left to right, as they appear on the screen.
return this.displayedLeftColumns
.concat(this.displayedCenterColumns)
.concat(this.displayedRightColumns);
};
// used by:
// + angularGrid -> setting pinned body width
ColumnController.prototype.getPinnedLeftContainerWidth = function () {
return this.getWithOfColsInList(this.displayedLeftColumns);
};
ColumnController.prototype.getPinnedRightContainerWidth = function () {
return this.getWithOfColsInList(this.displayedRightColumns);
};
ColumnController.prototype.addRowGroupColumn = function (column) {
if (this.allColumns.indexOf(column) < 0) {
console.warn('not a valid column: ' + column);
return;
}
if (this.rowGroupColumns.indexOf(column) >= 0) {
console.warn('column is already a value column');
return;
}
this.rowGroupColumns.push(column);
// because we could be taking out columns, the displayed
// columns may differ, so need to work out all the columns again
this.updateModel();
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE, event);
};
ColumnController.prototype.removeRowGroupColumn = function (column) {
if (this.rowGroupColumns.indexOf(column) < 0) {
console.warn('column not a row group');
return;
}
utils_1.default.removeFromArray(this.rowGroupColumns, column);
this.updateModel();
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE, event);
};
ColumnController.prototype.addValueColumn = function (column) {
if (this.allColumns.indexOf(column) < 0) {
console.warn('not a valid column: ' + column);
return;
}
if (this.valueColumns.indexOf(column) >= 0) {
console.warn('column is already a value column');
return;
}
if (!column.getAggFunc()) {
column.setAggFunc(column_1.default.AGG_SUM);
}
this.valueColumns.push(column);
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_VALUE_CHANGE);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_VALUE_CHANGE, event);
};
ColumnController.prototype.removeValueColumn = function (column) {
if (this.valueColumns.indexOf(column) < 0) {
console.warn('column not a value');
return;
}
utils_1.default.removeFromArray(this.valueColumns, column);
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_VALUE_CHANGE);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_VALUE_CHANGE, event);
};
ColumnController.prototype.getFirstRightPinnedColIndex = function () {
return this.displayedLeftColumns.length + this.displayedCenterColumns.length;
};
// returns the width we can set to this col, taking into consideration min and max widths
ColumnController.prototype.normaliseColumnWidth = function (column, newWidth) {
if (newWidth < column.getMinWidth()) {
newWidth = column.getMinWidth();
}
if (column.isGreaterThanMax(newWidth)) {
newWidth = column.getMaxWidth();
}
return newWidth;
};
ColumnController.prototype.setColumnWidth = function (key, newWidth, finished) {
var column = this.getColumn(key);
if (!column) {
return;
}
newWidth = this.normaliseColumnWidth(column, newWidth);
var widthChanged = column.getActualWidth() !== newWidth;
if (widthChanged) {
column.setActualWidth(newWidth);
this.setLeftValues();
}
// check for change first, to avoid unnecessary firing of events
// however we always fire 'finished' events. this is important
// when groups are resized, as if the group is changing slowly,
// eg 1 pixel at a time, then each change will fire change events
// in all the columns in the group, but only one with get the pixel.
if (finished || widthChanged) {
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_RESIZED).withColumn(column).withFinished(finished);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_RESIZED, event);
}
};
ColumnController.prototype.setColumnAggFunction = function (column, aggFunc) {
column.setAggFunc(aggFunc);
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_VALUE_CHANGE);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_VALUE_CHANGE, event);
};
ColumnController.prototype.moveRowGroupColumn = function (fromIndex, toIndex) {
var column = this.rowGroupColumns[fromIndex];
this.rowGroupColumns.splice(fromIndex, 1);
this.rowGroupColumns.splice(toIndex, 0, column);
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE, event);
};
ColumnController.prototype.getColumnIndex = function (column) {
return this.allColumns.indexOf(column);
};
ColumnController.prototype.getPathForColumn = function (column) {
return this.columnUtils.getPathForColumn(column, this.getAllDisplayedColumnGroups());
};
ColumnController.prototype.moveColumns = function (keys, toIndex) {
var _this = this;
this.actionOnColumns(keys, function (column) {
var fromIndex = _this.allColumns.indexOf(column);
_this.allColumns.splice(fromIndex, 1);
_this.allColumns.splice(toIndex, 0, column);
}, function () {
return new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_MOVED).withToIndex(toIndex);
});
this.updateModel();
};
ColumnController.prototype.moveColumn = function (key, toIndex) {
this.moveColumns([key], toIndex);
};
ColumnController.prototype.moveColumnByIndex = function (fromIndex, toIndex) {
var column = this.allColumns[fromIndex];
this.moveColumn(column, toIndex);
};
// used by:
// + angularGrid -> for setting body width
// + rowController -> setting main row widths (when inserting and resizing)
ColumnController.prototype.getBodyContainerWidth = function () {
var result = this.getWithOfColsInList(this.displayedCenterColumns);
return result;
};
// + rowController
ColumnController.prototype.getValueColumns = function () {
return this.valueColumns;
};
// + toolPanel
ColumnController.prototype.getRowGroupColumns = function () {
return this.rowGroupColumns;
};
// + rowController -> while inserting rows
ColumnController.prototype.getDisplayedCenterColumns = function () {
return this.displayedCenterColumns;
};
// + rowController -> while inserting rows
ColumnController.prototype.getDisplayedLeftColumns = function () {
return this.displayedLeftColumns;
};
ColumnController.prototype.getDisplayedRightColumns = function () {
return this.displayedRightColumns;
};
// used by:
// + inMemoryRowController -> sorting, building quick filter text
// + headerRenderer -> sorting (clearing icon)
ColumnController.prototype.getAllColumns = function () {
return this.allColumns;
};
ColumnController.prototype.setColumnVisible = function (key, visible) {
this.setColumnsVisible([key], visible);
};
ColumnController.prototype.setColumnsVisible = function (keys, visible) {
this.actionOnColumns(keys, function (column) {
column.setVisible(visible);
}, function () {
return new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_VISIBLE).withVisible(visible);
});
};
ColumnController.prototype.setColumnPinned = function (key, pinned) {
this.setColumnsPinned([key], pinned);
};
ColumnController.prototype.setColumnsPinned = function (keys, pinned) {
var actualPinned;
if (pinned === true || pinned === column_1.default.PINNED_LEFT) {
actualPinned = column_1.default.PINNED_LEFT;
}
else if (pinned === column_1.default.PINNED_RIGHT) {
actualPinned = column_1.default.PINNED_RIGHT;
}
else {
actualPinned = null;
}
this.actionOnColumns(keys, function (column) {
column.setPinned(actualPinned);
}, function () {
return new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_PINNED).withPinned(actualPinned);
});
};
// does an action on a set of columns. provides common functionality for looking up the
// columns based on key, getting a list of effected columns, and then updated the event
// with either one column (if it was just one col) or a list of columns
ColumnController.prototype.actionOnColumns = function (keys, action, createEvent) {
var _this = this;
if (!keys || keys.length === 0) {
return;
}
var updatedColumns = [];
keys.forEach(function (key) {
var column = _this.getColumn(key);
if (!column) {
return;
}
action(column);
updatedColumns.push(column);
});
if (updatedColumns.length === 0) {
return;
}
this.updateModel();
var event = createEvent();
event.withColumns(updatedColumns);
if (updatedColumns.length === 1) {
event.withColumn(updatedColumns[0]);
}
this.eventService.dispatchEvent(event.getType(), event);
};
// same as getDisplayColBefore, but stays in current container,
// so if column is pinned left, will only return pinned left columns
ColumnController.prototype.getDisplayedColBeforeForMoving = function (col) {
if (col === this.groupAutoColumn) {
return null;
}
var beforeCol = this.getDisplayedColBefore(col);
if (beforeCol === this.groupAutoColumn) {
return null;
}
if (beforeCol && beforeCol.getPinned() === col.getPinned()) {
return beforeCol;
}
else {
return null;
}
};
ColumnController.prototype.getPixelsBeforeConsideringPinned = function (column) {
var allDisplayedColumns = this.getAllDisplayedColumns();
var result = 0;
for (var i = 0; i < allDisplayedColumns.length; i++) {
var colToConsider = allDisplayedColumns[i];
if (colToConsider === column) {
return result;
}
if (colToConsider.getPinned() === column.getPinned()) {
result += colToConsider.getActualWidth();
}
}
// this should never happen, we should of come across our col in the above loop
return null;
};
ColumnController.prototype.getDisplayedColAfterForMoving = function (col) {
if (col === this.groupAutoColumn) {
return null;
}
var afterCol = this.getDisplayedColAfter(col);
if (afterCol === this.groupAutoColumn) {
return null;
}
if (afterCol && afterCol.getPinned() === col.getPinned()) {
return afterCol;
}
else {
return null;
}
};
ColumnController.prototype.getDisplayedColBefore = function (col) {
var allDisplayedColumns = this.getAllDisplayedColumns();
var oldIndex = allDisplayedColumns.indexOf(col);
if (oldIndex > 0) {
return allDisplayedColumns[oldIndex - 1];
}
else {
return null;
}
};
// used by:
// + rowRenderer -> for navigation
ColumnController.prototype.getDisplayedColAfter = function (col) {
var allDisplayedColumns = this.getAllDisplayedColumns();
var oldIndex = allDisplayedColumns.indexOf(col);
if (oldIndex < (allDisplayedColumns.length - 1)) {
return allDisplayedColumns[oldIndex + 1];
}
else {
return null;
}
};
ColumnController.prototype.isPinningLeft = function () {
return this.displayedLeftColumns.length > 0;
};
ColumnController.prototype.isPinningRight = function () {
return this.displayedRightColumns.length > 0;
};
ColumnController.prototype.clearSortBarThisColumn = function (columnToSkip) {
this.getAllColumnsIncludingAuto().forEach(function (columnToClear) {
// Do not clear if either holding shift, or if column in question was clicked
if (!(columnToClear === columnToSkip)) {
columnToClear.sort = null;
}
});
};
ColumnController.prototype.getAllColumnsIncludingAuto = function () {
var result = this.allColumns.slice(0);
if (this.groupAutoColumn) {
result.push(this.groupAutoColumn);
}
return result;
};
ColumnController.prototype.getColumnsWithSortingOrdered = function () {
// pull out all the columns that have sorting set
var columnsWithSorting = utils_1.default.filter(this.getAllColumnsIncludingAuto(), function (column) { return !!column.getSort(); });
// put the columns in order of which one got sorted first
columnsWithSorting.sort(function (a, b) { return a.sortedAt - b.sortedAt; });
return columnsWithSorting;
};
// used by row controller, when doing the sorting
ColumnController.prototype.getSortForRowController = function () {
var columnsWithSorting = this.getColumnsWithSortingOrdered();
return utils_1.default.map(columnsWithSorting, function (column) {
var ascending = column.getSort() === column_1.default.SORT_ASC;
return {
inverter: ascending ? 1 : -1,
column: column
};
});
};
// used by the public api, for saving the sort model
ColumnController.prototype.getSortModel = function () {
var columnsWithSorting = this.getColumnsWithSortingOrdered();
return utils_1.default.map(columnsWithSorting, function (column) {
return {
colId: column.getColId(),
sort: column.getSort()
};
});
};
ColumnController.prototype.setSortModel = function (sortModel) {
if (!this.gridOptionsWrapper.isEnableSorting()) {
console.warn('ag-grid: You are setting the sort model on a grid that does not have sorting enabled');
return;
}
// first up, clear any previous sort
var sortModelProvided = sortModel && sortModel.length > 0;
this.getAllColumnsIncludingAuto().forEach(function (column) {
var sortForCol = null;
var sortedAt = -1;
if (sortModelProvided && !column.getColDef().suppressSorting) {
for (var j = 0; j < sortModel.length; j++) {
var sortModelEntry = sortModel[j];
if (typeof sortModelEntry.colId === 'string'
&& typeof column.getColId() === 'string'
&& sortModelEntry.colId === column.getColId()) {
sortForCol = sortModelEntry.sort;
sortedAt = j;
}
}
}
if (sortForCol) {
column.setSort(sortForCol);
column.setSortedAt(sortedAt);
}
else {
column.setSort(null);
column.setSortedAt(null);
}
});
};
ColumnController.prototype.getState = function () {
if (!this.allColumns || this.allColumns.length < 0) {
return [];
}
var result = [];
for (var i = 0; i < this.allColumns.length; i++) {
var column = this.allColumns[i];
var rowGroupIndex = this.rowGroupColumns.indexOf(column);
var resultItem = {
colId: column.getColId(),
hide: !column.isVisible(),
aggFunc: column.getAggFunc() ? column.getAggFunc() : null,
width: column.getActualWidth(),
pinned: column.getPinned(),
rowGroupIndex: rowGroupIndex >= 0 ? rowGroupIndex : null
};
result.push(resultItem);
}
return result;
};
ColumnController.prototype.resetState = function () {
// we can't use 'allColumns' as the order might of messed up, so get the original ordered list
var originalColumns = this.allColumns = this.getColumnsFromTree(this.originalBalancedTree);
var state = [];
if (originalColumns) {
originalColumns.forEach(function (column) {
state.push({
colId: column.getColId(),
aggFunc: column.getColDef().aggFunc,
hide: column.getColDef().hide,
pinned: column.getColDef().pinned,
rowGroupIndex: column.getColDef().rowGroupIndex,
width: column.getColDef().width
});
});
}
this.setState(state);
};
ColumnController.prototype.setState = function (columnState) {
var _this = this;
var oldColumnList = this.allColumns;
this.allColumns = [];
this.rowGroupColumns = [];
this.valueColumns = [];
if (columnState) {
columnState.forEach(function (stateItem) {
var oldColumn = utils_1.default.find(oldColumnList, 'colId', stateItem.colId);
if (!oldColumn) {
console.warn('ag-grid: column ' + stateItem.colId + ' not found');
return;
}
// following ensures we are left with boolean true or false, eg converts (null, undefined, 0) all to true
oldColumn.setVisible(!stateItem.hide);
// sets pinned to 'left' or 'right'
oldColumn.setPinned(stateItem.pinned);
// if width provided and valid, use it, otherwise stick with the old width
if (stateItem.width >= _this.gridOptionsWrapper.getMinColWidth()) {
oldColumn.setActualWidth(stateItem.width);
}
// accept agg func only if valid
var aggFuncValid = [column_1.default.AGG_MIN, column_1.default.AGG_MAX, column_1.default.AGG_SUM].indexOf(stateItem.aggFunc) >= 0;
if (aggFuncValid) {
oldColumn.setAggFunc(stateItem.aggFunc);
_this.valueColumns.push(oldColumn);
}
else {
oldColumn.setAggFunc(null);
}
// if rowGroup
if (typeof stateItem.rowGroupIndex === 'number' && stateItem.rowGroupIndex >= 0) {
_this.rowGroupColumns.push(oldColumn);
}
_this.allColumns.push(oldColumn);
oldColumnList.splice(oldColumnList.indexOf(oldColumn), 1);
});
}
// anything left over, we got no data for, so add in the column as non-value, non-rowGroup and hidden
oldColumnList.forEach(function (oldColumn) {
oldColumn.setVisible(false);
oldColumn.setAggFunc(null);
oldColumn.setPinned(null);
_this.allColumns.push(oldColumn);
});
// sort the row group columns
this.rowGroupColumns.sort(function (colA, colB) {
var rowGroupIndexA = -1;
var rowGroupIndexB = -1;
for (var i = 0; i < columnState.length; i++) {
var state = columnState[i];
if (state.colId === colA.getColId()) {
rowGroupIndexA = state.rowGroupIndex;
}
if (state.colId === colB.getColId()) {
rowGroupIndexB = state.rowGroupIndex;
}
}
return rowGroupIndexA - rowGroupIndexB;
});
this.updateModel();
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, event);
};
ColumnController.prototype.getColumns = function (keys) {
var _this = this;
var foundColumns = [];
if (keys) {
keys.forEach(function (key) {
var column = _this.getColumn(key);
if (column) {
foundColumns.push(column);
}
});
}
return foundColumns;
};
ColumnController.prototype.getColumn = function (key) {
if (!key) {
return null;
}
for (var i = 0; i < this.allColumns.length; i++) {
if (colMatches(this.allColumns[i])) {
return this.allColumns[i];
}
}
if (this.groupAutoColumn && colMatches(this.groupAutoColumn)) {
return this.groupAutoColumn;
}
function colMatches(column) {
var columnMatches = column === key;
var colDefMatches = column.getColDef() === key;
var idMatches = column.getColId() === key;
return columnMatches || colDefMatches || idMatches;
}
console.log('could not find column for key ' + key);
return null;
};
ColumnController.prototype.getDisplayNameForCol = function (column) {
var colDef = column.colDef;
var headerValueGetter = colDef.headerValueGetter;
if (headerValueGetter) {
var params = {
colDef: colDef,
api: this.gridOptionsWrapper.getApi(),
context: this.gridOptionsWrapper.getContext()
};
if (typeof headerValueGetter === 'function') {
// valueGetter is a function, so just call it
return headerValueGetter(params);
}
else if (typeof headerValueGetter === 'string') {
// valueGetter is an expression, so execute the expression
return this.expressionService.evaluate(headerValueGetter, params);
}
else {
console.warn('ag-grid: headerValueGetter must be a function or a string');
}
}
else if (colDef.displayName) {
console.warn("ag-grid: Found displayName " + colDef.displayName + ", please use headerName instead, displayName is deprecated.");
return colDef.displayName;
}
else {
return colDef.headerName;
}
};
// returns the group with matching colId and instanceId. If instanceId is missing,
// matches only on the colId.
ColumnController.prototype.getColumnGroup = function (colId, instanceId) {
if (!colId) {
return null;
}
if (colId instanceof columnGroup_1.default) {
return colId;
}
var allColumnGroups = this.getAllDisplayedColumnGroups();
var checkInstanceId = typeof instanceId === 'number';
var result = null;
this.columnUtils.deptFirstAllColumnTreeSearch(allColumnGroups, function (child) {
if (child instanceof columnGroup_1.default) {
var columnGroup = child;
var matched;
if (checkInstanceId) {
matched = colId === columnGroup.getGroupId() && instanceId === columnGroup.getInstanceId();
}
else {
matched = colId === columnGroup.getGroupId();
}
if (matched) {
result = columnGroup;
}
}
});
return result;
};
// called by angularGrid
ColumnController.prototype.onColumnsChanged = function () {
var columnDefs = this.gridOptionsWrapper.getColumnDefs();
var balancedTreeResult = this.balancedColumnTreeBuilder.createBalancedColumnGroups(columnDefs);
this.originalBalancedTree = balancedTreeResult.balancedTree;
this.headerRowCount = balancedTreeResult.treeDept + 1;
this.allColumns = this.getColumnsFromTree(this.originalBalancedTree);
this.extractRowGroupColumns();
this.createValueColumns();
this.updateModel();
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, event);
this.setupComplete = true;
};
ColumnController.prototype.extractRowGroupColumns = function () {
var _this = this;
this.rowGroupColumns = [];
// pull out the columns
this.allColumns.forEach(function (column) {
if (typeof column.getColDef().rowGroupIndex === 'number') {
_this.rowGroupColumns.push(column);
}
});
// then sort them
this.rowGroupColumns.sort(function (colA, colB) {
return colA.getColDef().rowGroupIndex - colB.getColDef().rowGroupIndex;
});
};
// called by headerRenderer - when a header is opened or closed
ColumnController.prototype.setColumnGroupOpened = function (passedGroup, newValue, instanceId) {
var groupToUse = this.getColumnGroup(passedGroup, instanceId);
if (!groupToUse) {
return;
}
this.logger.log('columnGroupOpened(' + groupToUse.getGroupId() + ',' + newValue + ')');
groupToUse.setExpanded(newValue);
this.updateGroupsAndDisplayedColumns();
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_GROUP_OPENED).withColumnGroup(groupToUse);
this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_GROUP_OPENED, event);
};
// used by updateModel
ColumnController.prototype.getColumnGroupState = function () {
var groupState = {};
this.columnUtils.deptFirstDisplayedColumnTreeSearch(this.getAllDisplayedColumnGroups(), function (child) {
if (child instanceof columnGroup_1.default) {
var columnGroup = child;
var key = columnGroup.getGroupId();
// if more than one instance of the group, we only record the state of the first item
if (!groupState.hasOwnProperty(key)) {
groupState[key] = columnGroup.isExpanded();
}
}
});
return groupState;
};
// used by updateModel
ColumnController.prototype.setColumnGroupState = function (groupState) {
this.columnUtils.deptFirstDisplayedColumnTreeSearch(this.getAllDisplayedColumnGroups(), function (child) {
if (child instanceof columnGroup_1.default) {
var columnGroup = child;
var key = columnGroup.getGroupId();
var shouldExpandGroup = groupState[key] === true && columnGroup.isExpandable();
if (shouldExpandGroup) {
columnGroup.setExpanded(true);
}
}
});
};
// after:
ColumnController.prototype.updateModel = function () {
// save opened / closed state
var oldGroupState = this.getColumnGroupState();
// following 3 methods are only called from here
this.createGroupAutoColumn();
var visibleColumns = this.updateVisibleColumns();
this.buildAllGroups(visibleColumns);
// restore opened / closed state
this.setColumnGroupState(oldGroupState);
// this is also called when a group is opened or closed
this.updateGroupsAndDisplayedColumns();
};
ColumnController.prototype.updateGroupsAndDisplayedColumns = function () {
this.updateGroups();
this.updateDisplayedColumnsFromGroups();
};
ColumnController.prototype.updateDisplayedColumnsFromGroups = function () {
this.addToDisplayedColumns(this.displayedLeftColumnTree, this.displayedLeftColumns);
this.addToDisplayedColumns(this.displayedRightColumnTree, this.displayedRightColumns);
this.addToDisplayedColumns(this.displayedCentreColumnTree, this.displayedCenterColumns);
this.setLeftValues();
};
ColumnController.prototype.setLeftValues = function () {
// go through each list of displayed columns
[this.displayedLeftColumns, this.displayedRightColumns, this.displayedCenterColumns].forEach(function (columns) {
var left = 0;
columns.forEach(function (column) {
column.setLeft(left);
left += column.getActualWidth();
});
});
};
ColumnController.prototype.addToDisplayedColumns = function (displayedColumnTree, displayedColumns) {
displayedColumns.length = 0;
this.columnUtils.deptFirstDisplayedColumnTreeSearch(displayedColumnTree, function (child) {
if (child instanceof column_1.default) {
displayedColumns.push(child);
}
});
};
// called from api
ColumnController.prototype.sizeColumnsToFit = function (gridWidth) {
var _this = this;
// avoid divide by zero
var allDisplayedColumns = this.getAllDisplayedColumns();
if (gridWidth <= 0 || allDisplayedColumns.length === 0) {
return;
}
var colsToNotSpread = utils_1.default.filter(allDisplayedColumns, function (column) {
return column.getColDef().suppressSizeToFit === true;
});
var colsToSpread = utils_1.default.filter(allDisplayedColumns, function (column) {
return column.getColDef().suppressSizeToFit !== true;
});
// make a copy of the cols that are going to be resized
var colsToFireEventFor = colsToSpread.slice(0);
var finishedResizing = false;
while (!finishedResizing) {
finishedResizing = true;
var availablePixels = gridWidth - getTotalWidth(colsToNotSpread);
if (availablePixels <= 0) {
// no width, set everything to minimum
colsToSpread.forEach(function (column) {
column.setMinimum();
});
}
else {
var scale = availablePixels / getTotalWidth(colsToSpread);
// we set the pixels for the last col based on what's left, as otherwise
// we could be a pixel or two short or extra because of rounding errors.
var pixelsForLastCol = availablePixels;
// backwards through loop, as we are removing items as we go
for (var i = colsToSpread.length - 1; i >= 0; i--) {
var column = colsToSpread[i];
var newWidth = Math.round(column.getActualWidth() * scale);
if (newWidth < column.getMinWidth()) {
column.setMinimum();
moveToNotSpread(column);
finishedResizing = false;
}
else if (column.isGreaterThanMax(newWidth)) {
column.setActualWidth(column.getMaxWidth());
moveToNotSpread(column);
finishedResizing = false;
}
else {
var onLastCol = i === 0;
if (onLastCol) {
column.setActualWidth(pixelsForLastCol);
}
else {
pixelsForLastCol -= newWidth;
column.setActualWidth(newWidth);
}
}
}
}
}
this.setLeftValues();
// widths set, refresh the gui
colsToFireEventFor.forEach(function (column) {
var event = new columnChangeEvent_1.default(events_1.Events.EVENT_COLUMN_RESIZED).withColumn(column);
_this.eventService.dispatchEvent(events_1.Events.EVENT_COLUMN_RESIZED, event);
});
function moveToNotSpread(column) {
utils_1.default.removeFromArray(colsToSpread, column);
colsToNotSpread.push(column);
}
function getTotalWidth(columns) {
var result = 0;
for (var i = 0; i < columns.length; i++) {
result += columns[i].getActualWidth();
}
return result;
}
};
ColumnController.prototype.buildAllGroups = function (visibleColumns) {
var leftVisibleColumns = utils_1.default.filter(visibleColumns, function (column) {
return column.getPinned() === 'left';
});
var rightVisibleColumns = utils_1.default.filter(visibleColumns, function (column) {
return column.getPinned() === 'right';
});
var centerVisibleColumns = utils_1.default.filter(visibleColumns, function (column) {
return column.getPinned() !== 'left' && column.getPinned() !== 'right';
});
var groupInstanceIdCreator = new groupInstanceIdCreator_1.default();
this.displayedLeftColumnTree = this.displayedGroupCreator.createDisplayedGroups(leftVisibleColumns, this.originalBalancedTree, groupInstanceIdCreator);
this.displayedRightColumnTree = this.displayedGroupCreator.createDisplayedGroups(rightVisibleColumns, this.originalBalancedTree, groupInstanceIdCreator);
this.displayedCentreColumnTree = this.displayedGroupCreator.createDisplayedGroups(centerVisibleColumns, this.originalBalancedTree, groupInstanceIdCreator);
};
ColumnController.prototype.updateGroups = function () {
var allGroups = this.getAllDisplayedColumnGroups();
this.columnUtils.deptFirstAllColumnTreeSearch(allGroups, function (child) {
if (child instanceof columnGroup_1.default) {
var group = child;
group.calculateDisplayedColumns();
}
});
};
ColumnController.prototype.createGroupAutoColumn = function () {
// see if we need to insert the default grouping column
var needAGroupColumn = this.rowGroupColumns.length > 0
&& !this.gridOptionsWrapper.isGroupSuppressAutoColumn()
&& !this.gridOptionsWrapper.isGroupUseEntireRow()
&& !this.gridOptionsWrapper.isGroupSuppressRow();
if (needAGroupColumn) {
// if one provided by user, use it, otherwise create one
var groupColDef = this.gridOptionsWrapper.getGroupColumnDef();
if (!groupColDef) {
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
groupColDef = {
headerName: localeTextFunc('group', 'Group'),
comparator: functions_1.defaultGroupComparator,
cellRenderer: {
renderer: 'group'
}
};
}
// we never allow moving the group column
groupColDef.suppressMovable = true;
var groupColumnWidth = this.columnUtils.calculateColInitialWidth(groupColDef);
var colId = 'ag-Grid-AutoColumn';
var minColWidth = this.gridOptionsWrapper.getMinColWidth();
var maxColWidth = this.gridOptionsWrapper.getMaxColWidth();
this.groupAutoColumn = new column_1.default(groupColDef, groupColumnWidth, colId, minColWidth, maxColWidth);
}
else {
this.groupAutoColumn = null;
}
};
ColumnController.prototype.updateVisibleColumns = function () {
var visibleColumns = [];
if (this.groupAutoColumn) {
visibleColumns.push(this.groupAutoColumn);
}
for (var i = 0; i < this.allColumns.length; i++) {
var column = this.allColumns[i];
var hideBecauseOfRowGroup = this.rowGroupColumns.indexOf(column) >= 0
&& this.gridOptionsWrapper.isGroupHideGroupColumns();
if (column.isVisible() && !hideBecauseOfRowGroup) {
visibleColumns.push(this.allColumns[i]);
}
}
return visibleColumns;
};
ColumnController.prototype.createValueColumns = function () {
this.valueColumns = [];
// override with columns that have the aggFunc specified explicitly
for (var i = 0; i < this.allColumns.length; i++) {
var column = this.allColumns[i];
if (column.getColDef().aggFunc) {
column.setAggFunc(column.getColDef().aggFunc);
this.valueColumns.push(column);
}
}
};
ColumnController.prototype.getWithOfColsInList = function (columnList) {
var result = 0;
for (var i = 0; i < columnList.length; i++) {
result += columnList[i].getActualWidth();
}
return result;
};
return ColumnController;
})();
exports.ColumnController = ColumnController;
/***/ },
/* 15 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var column_1 = __webpack_require__(8);
var ColumnGroup = (function () {
function ColumnGroup(originalColumnGroup, groupId, instanceId) {
// depends on the open/closed state of the group, only displaying columns are stored here
this.displayedChildren = [];
this.groupId = groupId;
this.instanceId = instanceId;
this.originalColumnGroup = originalColumnGroup;
}
// returns header name if it exists, otherwise null. if will not exist if
// this group is a padding group, as they don't have colGroupDef's
ColumnGroup.prototype.getHeaderName = function () {
if (this.originalColumnGroup.getColGroupDef()) {
return this.originalColumnGroup.getColGroupDef().headerName;
}
else {
return null;
}
};
ColumnGroup.prototype.getGroupId = function () {
return this.groupId;
};
ColumnGroup.prototype.getInstanceId = function () {
return this.instanceId;
};
ColumnGroup.prototype.isChildInThisGroupDeepSearch = function (wantedChild) {
var result = false;
this.children.forEach(function (foundChild) {
if (wantedChild === foundChild) {
result = true;
}
if (foundChild instanceof ColumnGroup) {
if (foundChild.isChildInThisGroupDeepSearch(wantedChild)) {
result = true;
}
}
});
return result;
};
ColumnGroup.prototype.getActualWidth = function () {
var groupActualWidth = 0;
if (this.displayedChildren) {
this.displayedChildren.forEach(function (child) {
groupActualWidth += child.getActualWidth();
});
}
return groupActualWidth;
};
ColumnGroup.prototype.getMinWidth = function () {
var result = 0;
this.displayedChildren.forEach(function (groupChild) {
result += groupChild.getMinWidth();
});
return result;
};
ColumnGroup.prototype.addChild = function (child) {
if (!this.children) {
this.children = [];
}
this.children.push(child);
};
ColumnGroup.prototype.getDisplayedChildren = function () {
return this.displayedChildren;
};
ColumnGroup.prototype.getLeafColumns = function () {
var result = [];
this.addLeafColumns(result);
return result;
};
ColumnGroup.prototype.getDisplayedLeafColumns = function () {
var result = [];
this.addDisplayedLeafColumns(result);
return result;
};
// why two methods here doing the same thing?
ColumnGroup.prototype.getDefinition = function () {
return this.originalColumnGroup.getColGroupDef();
};
ColumnGroup.prototype.getColGroupDef = function () {
return this.originalColumnGroup.getColGroupDef();
};
ColumnGroup.prototype.isExpandable = function () {
return this.originalColumnGroup.isExpandable();
};
ColumnGroup.prototype.isExpanded = function () {
return this.originalColumnGroup.isExpanded();
};
ColumnGroup.prototype.setExpanded = function (expanded) {
this.originalColumnGroup.setExpanded(expanded);
};
ColumnGroup.prototype.addDisplayedLeafColumns = function (leafColumns) {
this.displayedChildren.forEach(function (child) {
if (child instanceof column_1.default) {
leafColumns.push(child);
}
else if (child instanceof ColumnGroup) {
child.addDisplayedLeafColumns(leafColumns);
}
});
};
ColumnGroup.prototype.addLeafColumns = function (leafColumns) {
this.children.forEach(function (child) {
if (child instanceof column_1.default) {
leafColumns.push(child);
}
else if (child instanceof ColumnGroup) {
child.addLeafColumns(leafColumns);
}
});
};
ColumnGroup.prototype.getChildren = function () {
return this.children;
};
ColumnGroup.prototype.getColumnGroupShow = function () {
return this.originalColumnGroup.getColumnGroupShow();
};
ColumnGroup.prototype.calculateDisplayedColumns = function () {
// clear out last time we calculated
this.displayedChildren = [];
// it not expandable, everything is visible
if (!this.originalColumnGroup.isExpandable()) {
this.displayedChildren = this.children;
return;
}
// and calculate again
for (var i = 0, j = this.children.length; i < j; i++) {
var abstractColumn = this.children[i];
var headerGroupShow = abstractColumn.getColumnGroupShow();
switch (headerGroupShow) {
case ColumnGroup.HEADER_GROUP_SHOW_OPEN:
// when set to open, only show col if group is open
if (this.originalColumnGroup.isExpanded()) {
this.displayedChildren.push(abstractColumn);
}
break;
case ColumnGroup.HEADER_GROUP_SHOW_CLOSED:
// when set to open, only show col if group is open
if (!this.originalColumnGroup.isExpanded()) {
this.displayedChildren.push(abstractColumn);
}
break;
default:
// default is always show the column
this.displayedChildren.push(abstractColumn);
break;
}
}
};
ColumnGroup.HEADER_GROUP_SHOW_OPEN = 'open';
ColumnGroup.HEADER_GROUP_SHOW_CLOSED = 'closed';
return ColumnGroup;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ColumnGroup;
/***/ },
/* 16 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var events_1 = __webpack_require__(5);
var ColumnChangeEvent = (function () {
function ColumnChangeEvent(type) {
this.type = type;
}
ColumnChangeEvent.prototype.toString = function () {
var result = 'ColumnChangeEvent {type: ' + this.type;
if (this.column) {
result += ', column: ' + this.column.getColId();
}
if (this.columnGroup) {
result += true ? this.columnGroup.getColGroupDef().headerName : '(not defined]';
}
if (this.toIndex) {
result += ', toIndex: ' + this.toIndex;
}
if (this.visible) {
result += ', visible: ' + this.visible;
}
if (this.pinned) {
result += ', pinned: ' + this.pinned;
}
if (typeof this.finished == 'boolean') {
result += ', finished: ' + this.finished;
}
result += '}';
return result;
};
ColumnChangeEvent.prototype.withPinned = function (pinned) {
this.pinned = pinned;
return this;
};
ColumnChangeEvent.prototype.withVisible = function (visible) {
this.visible = visible;
return this;
};
ColumnChangeEvent.prototype.isVisible = function () {
return this.visible;
};
ColumnChangeEvent.prototype.getPinned = function () {
return this.pinned;
};
ColumnChangeEvent.prototype.withColumn = function (column) {
this.column = column;
return this;
};
ColumnChangeEvent.prototype.withColumns = function (columns) {
this.columns = columns;
return this;
};
ColumnChangeEvent.prototype.withFinished = function (finished) {
this.finished = finished;
return this;
};
ColumnChangeEvent.prototype.withColumnGroup = function (columnGroup) {
this.columnGroup = columnGroup;
return this;
};
ColumnChangeEvent.prototype.withToIndex = function (toIndex) {
this.toIndex = toIndex;
return this;
};
ColumnChangeEvent.prototype.getToIndex = function () {
return this.toIndex;
};
ColumnChangeEvent.prototype.getType = function () {
return this.type;
};
ColumnChangeEvent.prototype.getColumn = function () {
return this.column;
};
ColumnChangeEvent.prototype.getColumns = function () {
return this.columns;
};
ColumnChangeEvent.prototype.getColumnGroup = function () {
return this.columnGroup;
};
ColumnChangeEvent.prototype.isRowGroupChanged = function () {
return this.type === events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE || this.type === events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED;
};
ColumnChangeEvent.prototype.isValueChanged = function () {
return this.type === events_1.Events.EVENT_COLUMN_VALUE_CHANGE || this.type === events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED;
};
ColumnChangeEvent.prototype.isIndividualColumnResized = function () {
return this.type === events_1.Events.EVENT_COLUMN_RESIZED && this.column !== undefined && this.column !== null;
};
ColumnChangeEvent.prototype.isFinished = function () {
return this.finished;
};
return ColumnChangeEvent;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ColumnChangeEvent;
/***/ },
/* 17 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var columnGroup_1 = __webpack_require__(15);
var OriginalColumnGroup = (function () {
function OriginalColumnGroup(colGroupDef, groupId) {
this.expandable = false;
this.expanded = false;
this.colGroupDef = colGroupDef;
this.groupId = groupId;
}
OriginalColumnGroup.prototype.setExpanded = function (expanded) {
this.expanded = expanded;
};
OriginalColumnGroup.prototype.isExpandable = function () {
return this.expandable;
};
OriginalColumnGroup.prototype.isExpanded = function () {
return this.expanded;
};
OriginalColumnGroup.prototype.getGroupId = function () {
return this.groupId;
};
OriginalColumnGroup.prototype.setChildren = function (children) {
this.children = children;
};
OriginalColumnGroup.prototype.getChildren = function () {
return this.children;
};
OriginalColumnGroup.prototype.getColGroupDef = function () {
return this.colGroupDef;
};
OriginalColumnGroup.prototype.getColumnGroupShow = function () {
if (this.colGroupDef) {
return this.colGroupDef.columnGroupShow;
}
else {
// if there is no col def, then this must be a padding
// group, which means we have exactly only child. we then
// take the value from the child and push it up, making
// this group 'invisible'.
return this.children[0].getColumnGroupShow();
}
};
// need to check that this group has at least one col showing when both expanded and contracted.
// if not, then we don't allow expanding and contracting on this group
OriginalColumnGroup.prototype.calculateExpandable = function () {
// want to make sure the group doesn't disappear when it's open
var atLeastOneShowingWhenOpen = false;
// want to make sure the group doesn't disappear when it's closed
var atLeastOneShowingWhenClosed = false;
// want to make sure the group has something to show / hide
var atLeastOneChangeable = false;
for (var i = 0, j = this.children.length; i < j; i++) {
var abstractColumn = this.children[i];
// if the abstractColumn is a grid generated group, there will be no colDef
var headerGroupShow = abstractColumn.getColumnGroupShow();
if (headerGroupShow === columnGroup_1.default.HEADER_GROUP_SHOW_OPEN) {
atLeastOneShowingWhenOpen = true;
atLeastOneChangeable = true;
}
else if (headerGroupShow === columnGroup_1.default.HEADER_GROUP_SHOW_CLOSED) {
atLeastOneShowingWhenClosed = true;
atLeastOneChangeable = true;
}
else {
atLeastOneShowingWhenOpen = true;
atLeastOneShowingWhenClosed = true;
}
}
this.expandable = atLeastOneShowingWhenOpen && atLeastOneShowingWhenClosed && atLeastOneChangeable;
};
return OriginalColumnGroup;
})();
exports.OriginalColumnGroup = OriginalColumnGroup;
/***/ },
/* 18 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
// class returns unique instance id's for columns.
// eg, the following calls (in this order) will result in:
//
// getInstanceIdForKey('country') => 0
// getInstanceIdForKey('country') => 1
// getInstanceIdForKey('country') => 2
// getInstanceIdForKey('country') => 3
// getInstanceIdForKey('age') => 0
// getInstanceIdForKey('age') => 1
// getInstanceIdForKey('country') => 4
var GroupInstanceIdCreator = (function () {
function GroupInstanceIdCreator() {
// this map contains keys to numbers, so we remember what the last call was
this.existingIds = {};
}
GroupInstanceIdCreator.prototype.getInstanceIdForKey = function (key) {
var lastResult = this.existingIds[key];
var result;
if (typeof lastResult !== 'number') {
// first time this key
result = 0;
}
else {
result = lastResult + 1;
}
this.existingIds[key] = result;
return result;
};
return GroupInstanceIdCreator;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = GroupInstanceIdCreator;
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
function defaultGroupComparator(valueA, valueB, nodeA, nodeB) {
var bothAreGroups = nodeA.group && nodeB.group;
var bothAreNormal = !nodeA.group && !nodeB.group;
if (bothAreGroups) {
return utils_1.default.defaultComparator(nodeA.key, nodeB.key);
}
else if (bothAreNormal) {
return utils_1.default.defaultComparator(valueA, valueB);
}
else if (nodeA.group) {
return 1;
}
else {
return -1;
}
}
exports.defaultGroupComparator = defaultGroupComparator;
/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var renderedRow_1 = __webpack_require__(21);
var groupCellRendererFactory_1 = __webpack_require__(26);
var events_1 = __webpack_require__(5);
var constants_1 = __webpack_require__(3);
var RowRenderer = (function () {
function RowRenderer() {
this.renderedTopFloatingRows = [];
this.renderedBottomFloatingRows = [];
}
RowRenderer.prototype.init = function (columnModel, gridOptionsWrapper, gridPanel, angularGrid, selectionRendererFactory, $compile, $scope, selectionController, expressionService, templateService, valueService, eventService, floatingRowModel) {
this.columnModel = columnModel;
this.gridOptionsWrapper = gridOptionsWrapper;
this.angularGrid = angularGrid;
this.selectionRendererFactory = selectionRendererFactory;
this.gridPanel = gridPanel;
this.$compile = $compile;
this.$scope = $scope;
this.selectionController = selectionController;
this.expressionService = expressionService;
this.templateService = templateService;
this.valueService = valueService;
this.findAllElements(gridPanel);
this.eventService = eventService;
this.floatingRowModel = floatingRowModel;
this.cellRendererMap = {
'group': groupCellRendererFactory_1.default(gridOptionsWrapper, selectionRendererFactory, expressionService, eventService),
'default': function (params) {
return params.value;
}
};
// map of row ids to row objects. keeps track of which elements
// are rendered for which rows in the dom.
this.renderedRows = {};
};
RowRenderer.prototype.setRowModel = function (rowModel) {
this.rowModel = rowModel;
};
RowRenderer.prototype.getAllCellsForColumn = function (column) {
var eCells = [];
utils_1.default.iterateObject(this.renderedRows, callback);
utils_1.default.iterateObject(this.renderedBottomFloatingRows, callback);
utils_1.default.iterateObject(this.renderedBottomFloatingRows, callback);
function callback(key, renderedRow) {
var eCell = renderedRow.getCellForCol(column);
if (eCell) {
eCells.push(eCell);
}
}
return eCells;
};
RowRenderer.prototype.setMainRowWidths = function () {
var mainRowWidth = this.columnModel.getBodyContainerWidth() + "px";
this.eAllBodyContainers.forEach(function (container) {
var unpinnedRows = container.querySelectorAll(".ag-row");
for (var i = 0; i < unpinnedRows.length; i++) {
unpinnedRows[i].style.width = mainRowWidth;
}
});
};
RowRenderer.prototype.findAllElements = function (gridPanel) {
this.eBodyContainer = gridPanel.getBodyContainer();
this.ePinnedLeftColsContainer = gridPanel.getPinnedLeftColsContainer();
this.ePinnedRightColsContainer = gridPanel.getPinnedRightColsContainer();
this.eFloatingTopContainer = gridPanel.getFloatingTopContainer();
this.eFloatingTopPinnedLeftContainer = gridPanel.getPinnedLeftFloatingTop();
this.eFloatingTopPinnedRightContainer = gridPanel.getPinnedRightFloatingTop();
this.eFloatingBottomContainer = gridPanel.getFloatingBottomContainer();
this.eFloatingBottomPinnedLeftContainer = gridPanel.getPinnedLeftFloatingBottom();
this.eFloatingBottomPinnedRightContainer = gridPanel.getPinnedRightFloatingBottom();
this.eBodyViewport = gridPanel.getBodyViewport();
this.eParentsOfRows = gridPanel.getRowsParent();
this.eAllBodyContainers = [this.eBodyContainer, this.eFloatingBottomContainer,
this.eFloatingTopContainer];
this.eAllPinnedLeftContainers = [
this.ePinnedLeftColsContainer,
this.eFloatingBottomPinnedLeftContainer,
this.eFloatingTopPinnedLeftContainer];
this.eAllPinnedRightContainers = [
this.ePinnedRightColsContainer,
this.eFloatingBottomPinnedRightContainer,
this.eFloatingTopPinnedRightContainer];
};
RowRenderer.prototype.refreshAllFloatingRows = function () {
this.refreshFloatingRows(this.renderedTopFloatingRows, this.floatingRowModel.getFloatingTopRowData(), this.eFloatingTopPinnedLeftContainer, this.eFloatingTopPinnedRightContainer, this.eFloatingTopContainer);
this.refreshFloatingRows(this.renderedBottomFloatingRows, this.floatingRowModel.getFloatingBottomRowData(), this.eFloatingBottomPinnedLeftContainer, this.eFloatingBottomPinnedRightContainer, this.eFloatingBottomContainer);
};
RowRenderer.prototype.refreshFloatingRows = function (renderedRows, rowNodes, pinnedLeftContainer, pinnedRightContainer, bodyContainer) {
var _this = this;
renderedRows.forEach(function (row) {
row.destroy();
});
renderedRows.length = 0;
// if no cols, don't draw row - can we get rid of this???
var columns = this.columnModel.getAllDisplayedColumns();
if (!columns || columns.length == 0) {
return;
}
if (rowNodes) {
rowNodes.forEach(function (node, rowIndex) {
var renderedRow = new renderedRow_1.default(_this.gridOptionsWrapper, _this.valueService, _this.$scope, _this.angularGrid, _this.columnModel, _this.expressionService, _this.cellRendererMap, _this.selectionRendererFactory, _this.$compile, _this.templateService, _this.selectionController, _this, bodyContainer, pinnedLeftContainer, pinnedRightContainer, node, rowIndex, _this.eventService);
renderedRows.push(renderedRow);
});
}
};
RowRenderer.prototype.refreshView = function (refreshFromIndex) {
if (!this.gridOptionsWrapper.isForPrint()) {
var containerHeight = this.rowModel.getVirtualRowCombinedHeight();
this.eBodyContainer.style.height = containerHeight + "px";
this.ePinnedLeftColsContainer.style.height = containerHeight + "px";
this.ePinnedRightColsContainer.style.height = containerHeight + "px";
}
this.refreshAllVirtualRows(refreshFromIndex);
this.refreshAllFloatingRows();
};
RowRenderer.prototype.softRefreshView = function () {
utils_1.default.iterateObject(this.renderedRows, function (key, renderedRow) {
renderedRow.softRefresh();
});
};
RowRenderer.prototype.refreshRows = function (rowNodes) {
if (!rowNodes || rowNodes.length == 0) {
return;
}
// we only need to be worried about rendered rows, as this method is
// called to whats rendered. if the row isn't rendered, we don't care
var indexesToRemove = [];
utils_1.default.iterateObject(this.renderedRows, function (key, renderedRow) {
var rowNode = renderedRow.getRowNode();
if (rowNodes.indexOf(rowNode) >= 0) {
indexesToRemove.push(key);
}
});
// remove the rows
this.removeVirtualRow(indexesToRemove);
// add draw them again
this.drawVirtualRows();
};
RowRenderer.prototype.refreshCells = function (rowNodes, colIds) {
if (!rowNodes || rowNodes.length == 0) {
return;
}
// we only need to be worried about rendered rows, as this method is
// called to whats rendered. if the row isn't rendered, we don't care
utils_1.default.iterateObject(this.renderedRows, function (key, renderedRow) {
var rowNode = renderedRow.getRowNode();
if (rowNodes.indexOf(rowNode) >= 0) {
renderedRow.refreshCells(colIds);
}
});
};
RowRenderer.prototype.rowDataChanged = function (rows) {
// we only need to be worried about rendered rows, as this method is
// called to whats rendered. if the row isn't rendered, we don't care
var indexesToRemove = [];
var renderedRows = this.renderedRows;
Object.keys(renderedRows).forEach(function (key) {
var renderedRow = renderedRows[key];
// see if the rendered row is in the list of rows we have to update
if (renderedRow.isDataInList(rows)) {
indexesToRemove.push(key);
}
});
// remove the rows
this.removeVirtualRow(indexesToRemove);
// add draw them again
this.drawVirtualRows();
};
RowRenderer.prototype.destroy = function () {
var rowsToRemove = Object.keys(this.renderedRows);
this.removeVirtualRow(rowsToRemove);
};
RowRenderer.prototype.refreshAllVirtualRows = function (fromIndex) {
// remove all current virtual rows, as they have old data
var rowsToRemove = Object.keys(this.renderedRows);
this.removeVirtualRow(rowsToRemove, fromIndex);
// add in new rows
this.drawVirtualRows();
};
// public - removes the group rows and then redraws them again
RowRenderer.prototype.refreshGroupRows = function () {
// find all the group rows
var rowsToRemove = [];
var that = this;
Object.keys(this.renderedRows).forEach(function (key) {
var renderedRow = that.renderedRows[key];
if (renderedRow.isGroup()) {
rowsToRemove.push(key);
}
});
// remove the rows
this.removeVirtualRow(rowsToRemove);
// and draw them back again
this.ensureRowsRendered();
};
// takes array of row indexes
RowRenderer.prototype.removeVirtualRow = function (rowsToRemove, fromIndex) {
var that = this;
// if no fromIndex then set to -1, which will refresh everything
var realFromIndex = (typeof fromIndex === 'number') ? fromIndex : -1;
rowsToRemove.forEach(function (indexToRemove) {
if (indexToRemove >= realFromIndex) {
that.unbindVirtualRow(indexToRemove);
// if the row was last to have focus, we remove the fact that it has focus
if (that.focusedCell && that.focusedCell.rowIndex == indexToRemove) {
that.focusedCell = null;
}
}
});
};
RowRenderer.prototype.unbindVirtualRow = function (indexToRemove) {
var renderedRow = this.renderedRows[indexToRemove];
renderedRow.destroy();
var event = { node: renderedRow.getRowNode(), rowIndex: indexToRemove };
this.eventService.dispatchEvent(events_1.Events.EVENT_VIRTUAL_ROW_REMOVED, event);
this.angularGrid.onVirtualRowRemoved(indexToRemove);
delete this.renderedRows[indexToRemove];
};
RowRenderer.prototype.drawVirtualRows = function () {
this.workOutFirstAndLastRowsToRender();
this.ensureRowsRendered();
};
RowRenderer.prototype.workOutFirstAndLastRowsToRender = function () {
var rowCount = this.rowModel.getVirtualRowCount();
if (rowCount === 0) {
this.firstVirtualRenderedRow = 0;
this.lastVirtualRenderedRow = -1; // setting to -1 means nothing in range
return;
}
if (this.gridOptionsWrapper.isForPrint()) {
this.firstVirtualRenderedRow = 0;
this.lastVirtualRenderedRow = rowCount;
}
else {
var topPixel = this.eBodyViewport.scrollTop;
var bottomPixel = topPixel + this.eBodyViewport.offsetHeight;
var first = this.rowModel.getRowAtPixel(topPixel);
var last = this.rowModel.getRowAtPixel(bottomPixel);
//add in buffer
var buffer = this.gridOptionsWrapper.getRowBuffer();
first = first - buffer;
last = last + buffer;
// adjust, in case buffer extended actual size
if (first < 0) {
first = 0;
}
if (last > rowCount - 1) {
last = rowCount - 1;
}
this.firstVirtualRenderedRow = first;
this.lastVirtualRenderedRow = last;
}
};
RowRenderer.prototype.getFirstVirtualRenderedRow = function () {
return this.firstVirtualRenderedRow;
};
RowRenderer.prototype.getLastVirtualRenderedRow = function () {
return this.lastVirtualRenderedRow;
};
RowRenderer.prototype.ensureRowsRendered = function () {
//var start = new Date().getTime();
var _this = this;
var mainRowWidth = this.columnModel.getBodyContainerWidth();
// at the end, this array will contain the items we need to remove
var rowsToRemove = Object.keys(this.renderedRows);
// add in new rows
for (var rowIndex = this.firstVirtualRenderedRow; rowIndex <= this.lastVirtualRenderedRow; rowIndex++) {
// see if item already there, and if yes, take it out of the 'to remove' array
if (rowsToRemove.indexOf(rowIndex.toString()) >= 0) {
rowsToRemove.splice(rowsToRemove.indexOf(rowIndex.toString()), 1);
continue;
}
// check this row actually exists (in case overflow buffer window exceeds real data)
var node = this.rowModel.getVirtualRow(rowIndex);
if (node) {
this.insertRow(node, rowIndex, mainRowWidth);
}
}
// at this point, everything in our 'rowsToRemove' . . .
this.removeVirtualRow(rowsToRemove);
// if we are doing angular compiling, then do digest the scope here
if (this.gridOptionsWrapper.isAngularCompileRows()) {
// we do it in a timeout, in case we are already in an apply
setTimeout(function () { _this.$scope.$apply(); }, 0);
}
//var end = new Date().getTime();
//console.log(end-start);
};
RowRenderer.prototype.insertRow = function (node, rowIndex, mainRowWidth) {
var columns = this.columnModel.getAllDisplayedColumns();
// if no cols, don't draw row
if (!columns || columns.length == 0) {
return;
}
var renderedRow = new renderedRow_1.default(this.gridOptionsWrapper, this.valueService, this.$scope, this.angularGrid, this.columnModel, this.expressionService, this.cellRendererMap, this.selectionRendererFactory, this.$compile, this.templateService, this.selectionController, this, this.eBodyContainer, this.ePinnedLeftColsContainer, this.ePinnedRightColsContainer, node, rowIndex, this.eventService);
//renderedRow.setMainRowWidth(mainRowWidth);
this.renderedRows[rowIndex] = renderedRow;
};
// Separating out the rendering into frames was experimental, but it looked crap.
//private rowRenderIntervalId: number;
//
//private renderRows(): void {
// var frameStartMillis = new Date().getTime();
// var keys = Object.keys(this.renderedRows);
// keys.sort( (a, b) => Number(a) - Number(b) );
// var atLeastOne = false;
// var count = 0;
// for (var i = 0; i<keys.length; i++) {
// var renderedRow = this.renderedRows[keys[i]];
// if (!renderedRow.isRendered()) {
// renderedRow.render();
// atLeastOne = true;
// var nowMillis = new Date().getTime();
// var frameDuration = nowMillis - frameStartMillis;
// count++;
// // 16ms is 60 FPS, so if going slower than 60 FPS, we finish this frame
// if (frameDuration>100) {
// break;
// }
// }
// }
// if (!atLeastOne) {
// clearInterval(this.rowRenderIntervalId);
// this.rowRenderIntervalId = null;
// }
// //console.log('count = ' + count);
//}
RowRenderer.prototype.getRenderedNodes = function () {
var renderedRows = this.renderedRows;
return Object.keys(renderedRows).map(function (key) {
return renderedRows[key].getRowNode();
});
};
RowRenderer.prototype.getIndexOfRenderedNode = function (node) {
var renderedRows = this.renderedRows;
var keys = Object.keys(renderedRows);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (renderedRows[key].getRowNode() === node) {
return renderedRows[key].getRowIndex();
}
}
return -1;
};
// we use index for rows, but column object for columns, as the next column (by index) might not
// be visible (header grouping) so it's not reliable, so using the column object instead.
RowRenderer.prototype.navigateToNextCell = function (key, rowIndex, column) {
var cellToFocus = { rowIndex: rowIndex, column: column };
var renderedRow;
var eCell;
// we keep searching for a next cell until we find one. this is how the group rows get skipped
while (!eCell) {
cellToFocus = this.getNextCellToFocus(key, cellToFocus);
// no next cell means we have reached a grid boundary, eg left, right, top or bottom of grid
if (!cellToFocus) {
return;
}
// see if the next cell is selectable, if yes, use it, if not, skip it
renderedRow = this.renderedRows[cellToFocus.rowIndex];
eCell = renderedRow.getCellForCol(cellToFocus.column);
}
// this scrolls the row into view
this.gridPanel.ensureIndexVisible(renderedRow.getRowIndex());
// this changes the css on the cell
this.focusCell(eCell, cellToFocus.rowIndex, cellToFocus.column.getColId(), cellToFocus.column.getColDef(), true);
};
RowRenderer.prototype.getNextCellToFocus = function (key, lastCellToFocus) {
var lastRowIndex = lastCellToFocus.rowIndex;
var lastColumn = lastCellToFocus.column;
var nextRowToFocus;
var nextColumnToFocus;
switch (key) {
case constants_1.default.KEY_UP:
// if already on top row, do nothing
if (lastRowIndex === this.firstVirtualRenderedRow) {
return null;
}
nextRowToFocus = lastRowIndex - 1;
nextColumnToFocus = lastColumn;
break;
case constants_1.default.KEY_DOWN:
// if already on bottom, do nothing
if (lastRowIndex === this.lastVirtualRenderedRow) {
return null;
}
nextRowToFocus = lastRowIndex + 1;
nextColumnToFocus = lastColumn;
break;
case constants_1.default.KEY_RIGHT:
var colToRight = this.columnModel.getDisplayedColAfter(lastColumn);
// if already on right, do nothing
if (!colToRight) {
return null;
}
nextRowToFocus = lastRowIndex;
nextColumnToFocus = colToRight;
break;
case constants_1.default.KEY_LEFT:
var colToLeft = this.columnModel.getDisplayedColBefore(lastColumn);
// if already on left, do nothing
if (!colToLeft) {
return null;
}
nextRowToFocus = lastRowIndex;
nextColumnToFocus = colToLeft;
break;
}
return {
rowIndex: nextRowToFocus,
column: nextColumnToFocus
};
};
RowRenderer.prototype.onRowSelected = function (rowIndex, selected) {
if (this.renderedRows[rowIndex]) {
this.renderedRows[rowIndex].onRowSelected(selected);
}
};
// called by the renderedRow
RowRenderer.prototype.focusCell = function (eCell, rowIndex, colId, colDef, forceBrowserFocus) {
// do nothing if cell selection is off
if (this.gridOptionsWrapper.isSuppressCellSelection()) {
return;
}
this.eParentsOfRows.forEach(function (rowContainer) {
// remove any previous focus
utils_1.default.querySelectorAll_replaceCssClass(rowContainer, '.ag-cell-focus', 'ag-cell-focus', 'ag-cell-no-focus');
utils_1.default.querySelectorAll_replaceCssClass(rowContainer, '.ag-row-focus', 'ag-row-focus', 'ag-row-no-focus');
var selectorForCell = '[row="' + rowIndex + '"] [colId="' + colId + '"]';
utils_1.default.querySelectorAll_replaceCssClass(rowContainer, selectorForCell, 'ag-cell-no-focus', 'ag-cell-focus');
var selectorForRow = '[row="' + rowIndex + '"]';
utils_1.default.querySelectorAll_replaceCssClass(rowContainer, selectorForRow, 'ag-row-no-focus', 'ag-row-focus');
});
this.focusedCell = { rowIndex: rowIndex, colId: colId, node: this.rowModel.getVirtualRow(rowIndex), colDef: colDef };
// this puts the browser focus on the cell (so it gets key presses)
if (forceBrowserFocus) {
eCell.focus();
}
this.eventService.dispatchEvent(events_1.Events.EVENT_CELL_FOCUSED, this.focusedCell);
};
// for API
RowRenderer.prototype.getFocusedCell = function () {
return this.focusedCell;
};
// called via API
RowRenderer.prototype.setFocusedCell = function (rowIndex, colIndex) {
var renderedRow = this.renderedRows[rowIndex];
var column = this.columnModel.getAllDisplayedColumns()[colIndex];
if (renderedRow && column) {
var eCell = renderedRow.getCellForCol(column);
this.focusCell(eCell, rowIndex, colIndex, column.getColDef(), true);
}
};
// called by the cell, when tab is pressed while editing
RowRenderer.prototype.startEditingNextCell = function (rowIndex, column, shiftKey) {
var firstRowToCheck = this.firstVirtualRenderedRow;
var lastRowToCheck = this.lastVirtualRenderedRow;
var currentRowIndex = rowIndex;
var visibleColumns = this.columnModel.getAllDisplayedColumns();
var currentCol = column;
while (true) {
var indexOfCurrentCol = visibleColumns.indexOf(currentCol);
// move backward
if (shiftKey) {
// move along to the previous cell
currentCol = visibleColumns[indexOfCurrentCol - 1];
// check if end of the row, and if so, go back a row
if (!currentCol) {
currentCol = visibleColumns[visibleColumns.length - 1];
currentRowIndex--;
}
// if got to end of rendered rows, then quit looking
if (currentRowIndex < firstRowToCheck) {
return;
}
}
else {
// move along to the next cell
currentCol = visibleColumns[indexOfCurrentCol + 1];
// check if end of the row, and if so, go forward a row
if (!currentCol) {
currentCol = visibleColumns[0];
currentRowIndex++;
}
// if got to end of rendered rows, then quit looking
if (currentRowIndex > lastRowToCheck) {
return;
}
}
var nextRenderedRow = this.renderedRows[currentRowIndex];
var nextRenderedCell = nextRenderedRow.getRenderedCellForColumn(currentCol);
if (nextRenderedCell.isCellEditable()) {
nextRenderedCell.startEditing();
nextRenderedCell.focusCell(false);
return;
}
}
};
return RowRenderer;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = RowRenderer;
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var renderedCell_1 = __webpack_require__(22);
var column_1 = __webpack_require__(8);
var vHtmlElement_1 = __webpack_require__(23);
var events_1 = __webpack_require__(5);
var RenderedRow = (function () {
function RenderedRow(gridOptionsWrapper, valueService, parentScope, angularGrid, columnController, expressionService, cellRendererMap, selectionRendererFactory, $compile, templateService, selectionController, rowRenderer, eBodyContainer, ePinnedLeftContainer, ePinnedRightContainer, node, rowIndex, eventService) {
this.renderedCells = {};
this.gridOptionsWrapper = gridOptionsWrapper;
this.valueService = valueService;
this.parentScope = parentScope;
this.angularGrid = angularGrid;
this.expressionService = expressionService;
this.columnController = columnController;
this.cellRendererMap = cellRendererMap;
this.selectionRendererFactory = selectionRendererFactory;
this.$compile = $compile;
this.templateService = templateService;
this.selectionController = selectionController;
this.rowRenderer = rowRenderer;
this.eBodyContainer = eBodyContainer;
this.ePinnedLeftContainer = ePinnedLeftContainer;
this.ePinnedRightContainer = ePinnedRightContainer;
this.pinningLeft = columnController.isPinningLeft();
this.pinningRight = columnController.isPinningRight();
this.eventService = eventService;
var groupHeaderTakesEntireRow = this.gridOptionsWrapper.isGroupUseEntireRow();
var rowIsHeaderThatSpans = node.group && groupHeaderTakesEntireRow;
this.vBodyRow = this.createRowContainer();
if (this.pinningLeft) {
this.vPinnedLeftRow = this.createRowContainer();
}
if (this.pinningRight) {
this.vPinnedRightRow = this.createRowContainer();
}
this.rowIndex = rowIndex;
this.node = node;
this.scope = this.createChildScopeOrNull(node.data);
if (!rowIsHeaderThatSpans) {
this.drawNormalRow();
}
this.addDynamicStyles();
this.addDynamicClasses();
var rowStr = this.rowIndex.toString();
if (this.node.floatingBottom) {
rowStr = 'fb-' + rowStr;
}
else if (this.node.floatingTop) {
rowStr = 'ft-' + rowStr;
}
this.vBodyRow.setAttribute('row', rowStr);
if (this.pinningLeft) {
this.vPinnedLeftRow.setAttribute('row', rowStr);
}
if (this.pinningRight) {
this.vPinnedRightRow.setAttribute('row', rowStr);
}
if (typeof this.gridOptionsWrapper.getBusinessKeyForNodeFunc() === 'function') {
var businessKey = this.gridOptionsWrapper.getBusinessKeyForNodeFunc()(this.node);
if (typeof businessKey === 'string' || typeof businessKey === 'number') {
this.vBodyRow.setAttribute('row-id', businessKey);
if (this.pinningLeft) {
this.vPinnedLeftRow.setAttribute('row-id', businessKey);
}
if (this.pinningRight) {
this.vPinnedRightRow.setAttribute('row-id', businessKey);
}
}
}
// if showing scrolls, position on the container
if (!this.gridOptionsWrapper.isForPrint()) {
var topPx = this.node.rowTop + "px";
this.vBodyRow.style.top = topPx;
if (this.pinningLeft) {
this.vPinnedLeftRow.style.top = topPx;
}
if (this.pinningRight) {
this.vPinnedRightRow.style.top = topPx;
}
}
var heightPx = this.node.rowHeight + 'px';
this.vBodyRow.style.height = heightPx;
if (this.pinningLeft) {
this.vPinnedLeftRow.style.height = heightPx;
}
if (this.pinningRight) {
this.vPinnedRightRow.style.height = heightPx;
}
// if group item, insert the first row
if (rowIsHeaderThatSpans) {
this.createGroupRow();
}
this.bindVirtualElement(this.vBodyRow);
if (this.pinningLeft) {
this.bindVirtualElement(this.vPinnedLeftRow);
}
if (this.pinningRight) {
this.bindVirtualElement(this.vPinnedRightRow);
}
if (this.scope) {
this.$compile(this.vBodyRow.getElement())(this.scope);
if (this.pinningLeft) {
this.$compile(this.vPinnedLeftRow.getElement())(this.scope);
}
if (this.pinningRight) {
this.$compile(this.vPinnedRightRow.getElement())(this.scope);
}
}
this.eBodyContainer.appendChild(this.vBodyRow.getElement());
if (this.pinningLeft) {
this.ePinnedLeftContainer.appendChild(this.vPinnedLeftRow.getElement());
}
if (this.pinningRight) {
this.ePinnedRightContainer.appendChild(this.vPinnedRightRow.getElement());
}
}
RenderedRow.prototype.onRowSelected = function (selected) {
utils_1.default.iterateObject(this.renderedCells, function (key, renderedCell) {
renderedCell.setSelected(selected);
});
};
RenderedRow.prototype.softRefresh = function () {
utils_1.default.iterateObject(this.renderedCells, function (key, renderedCell) {
if (renderedCell.isVolatile()) {
renderedCell.refreshCell();
}
});
};
RenderedRow.prototype.getRenderedCellForColumn = function (column) {
return this.renderedCells[column.getColId()];
};
RenderedRow.prototype.getCellForCol = function (column) {
var renderedCell = this.renderedCells[column.getColId()];
if (renderedCell) {
return renderedCell.getVGridCell().getElement();
}
else {
return null;
}
};
RenderedRow.prototype.destroy = function () {
this.destroyScope();
if (this.pinningLeft) {
this.ePinnedLeftContainer.removeChild(this.vPinnedLeftRow.getElement());
}
if (this.pinningRight) {
this.ePinnedRightContainer.removeChild(this.vPinnedRightRow.getElement());
}
this.eBodyContainer.removeChild(this.vBodyRow.getElement());
utils_1.default.iterateObject(this.renderedCells, function (key, renderedCell) {
renderedCell.destroy();
});
};
RenderedRow.prototype.destroyScope = function () {
if (this.scope) {
this.scope.$destroy();
this.scope = null;
}
};
RenderedRow.prototype.isDataInList = function (rows) {
return rows.indexOf(this.node.data) >= 0;
};
RenderedRow.prototype.isNodeInList = function (nodes) {
return nodes.indexOf(this.node) >= 0;
};
RenderedRow.prototype.isGroup = function () {
return this.node.group === true;
};
RenderedRow.prototype.drawNormalRow = function () {
var columns = this.columnController.getAllDisplayedColumns();
var firstRightPinnedColIndex = this.columnController.getFirstRightPinnedColIndex();
for (var colIndex = 0; colIndex < columns.length; colIndex++) {
var column = columns[colIndex];
var firstRightPinnedCol = colIndex === firstRightPinnedColIndex;
var renderedCell = new renderedCell_1.default(firstRightPinnedCol, column, this.$compile, this.rowRenderer, this.gridOptionsWrapper, this.expressionService, this.selectionRendererFactory, this.selectionController, this.templateService, this.cellRendererMap, this.node, this.rowIndex, colIndex, this.scope, this.columnController, this.valueService, this.eventService);
var vGridCell = renderedCell.getVGridCell();
if (column.getPinned() === column_1.default.PINNED_LEFT) {
this.vPinnedLeftRow.appendChild(vGridCell);
}
else if (column.getPinned() === column_1.default.PINNED_RIGHT) {
this.vPinnedRightRow.appendChild(vGridCell);
}
else {
this.vBodyRow.appendChild(vGridCell);
}
this.renderedCells[column.getColId()] = renderedCell;
}
};
RenderedRow.prototype.bindVirtualElement = function (vElement) {
var html = vElement.toHtmlString();
var element = utils_1.default.loadTemplate(html);
vElement.elementAttached(element);
};
RenderedRow.prototype.createGroupRow = function () {
var eGroupRow = this.createGroupSpanningEntireRowCell(false);
if (this.pinningLeft) {
this.vPinnedLeftRow.appendChild(eGroupRow);
var eGroupRowPadding = this.createGroupSpanningEntireRowCell(true);
this.vBodyRow.appendChild(eGroupRowPadding);
}
else {
this.vBodyRow.appendChild(eGroupRow);
}
if (this.pinningRight) {
var ePinnedRightPadding = this.createGroupSpanningEntireRowCell(true);
this.vPinnedRightRow.appendChild(ePinnedRightPadding);
}
};
RenderedRow.prototype.createGroupSpanningEntireRowCell = function (padding) {
var eRow;
// padding means we are on the right hand side of a pinned table, ie
// in the main body.
if (padding) {
eRow = document.createElement('span');
}
else {
var rowCellRenderer = this.gridOptionsWrapper.getGroupRowRenderer();
if (!rowCellRenderer) {
rowCellRenderer = {
renderer: 'group',
innerRenderer: this.gridOptionsWrapper.getGroupRowInnerRenderer()
};
}
var params = {
node: this.node,
data: this.node.data,
rowIndex: this.rowIndex,
api: this.gridOptionsWrapper.getApi(),
colDef: {
cellRenderer: rowCellRenderer
}
};
// start duplicated code
var actualCellRenderer;
if (typeof rowCellRenderer === 'object' && rowCellRenderer !== null) {
var cellRendererObj = rowCellRenderer;
actualCellRenderer = this.cellRendererMap[cellRendererObj.renderer];
if (!actualCellRenderer) {
throw 'Cell renderer ' + rowCellRenderer + ' not found, available are ' + Object.keys(this.cellRendererMap);
}
}
else if (typeof rowCellRenderer === 'function') {
actualCellRenderer = rowCellRenderer;
}
else {
throw 'Cell Renderer must be String or Function';
}
var resultFromRenderer = actualCellRenderer(params);
// end duplicated code
if (utils_1.default.isNodeOrElement(resultFromRenderer)) {
// a dom node or element was returned, so add child
eRow = resultFromRenderer;
}
else {
// otherwise assume it was html, so just insert
eRow = utils_1.default.loadTemplate(resultFromRenderer);
}
}
if (this.node.footer) {
utils_1.default.addCssClass(eRow, 'ag-footer-cell-entire-row');
}
else {
utils_1.default.addCssClass(eRow, 'ag-group-cell-entire-row');
}
return eRow;
};
//public setMainRowWidth(width: number) {
// this.vBodyRow.addStyles({width: width + "px"});
//}
RenderedRow.prototype.createChildScopeOrNull = function (data) {
if (this.gridOptionsWrapper.isAngularCompileRows()) {
var newChildScope = this.parentScope.$new();
newChildScope.data = data;
return newChildScope;
}
else {
return null;
}
};
RenderedRow.prototype.addDynamicStyles = function () {
var rowStyle = this.gridOptionsWrapper.getRowStyle();
if (rowStyle) {
if (typeof rowStyle === 'function') {
console.log('ag-Grid: rowStyle should be a string or an array, not be a function, use getRowStyle() instead');
}
else {
this.vBodyRow.addStyles(rowStyle);
if (this.pinningLeft) {
this.vPinnedLeftRow.addStyles(rowStyle);
}
if (this.pinningRight) {
this.vPinnedRightRow.addStyles(rowStyle);
}
}
}
var rowStyleFunc = this.gridOptionsWrapper.getRowStyleFunc();
if (rowStyleFunc) {
var params = {
data: this.node.data,
node: this.node,
api: this.gridOptionsWrapper.getApi(),
context: this.gridOptionsWrapper.getContext(),
$scope: this.scope
};
var cssToUseFromFunc = rowStyleFunc(params);
this.vBodyRow.addStyles(cssToUseFromFunc);
if (this.pinningLeft) {
this.vPinnedLeftRow.addStyles(cssToUseFromFunc);
}
if (this.pinningRight) {
this.vPinnedRightRow.addStyles(cssToUseFromFunc);
}
}
};
RenderedRow.prototype.createParams = function () {
var params = {
node: this.node,
data: this.node.data,
rowIndex: this.rowIndex,
$scope: this.scope,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
return params;
};
RenderedRow.prototype.createEvent = function (event, eventSource) {
var agEvent = this.createParams();
agEvent.event = event;
agEvent.eventSource = eventSource;
return agEvent;
};
RenderedRow.prototype.createRowContainer = function () {
var vRow = new vHtmlElement_1.default('div');
var that = this;
vRow.addEventListener("click", function (event) {
var agEvent = that.createEvent(event, this);
that.eventService.dispatchEvent(events_1.Events.EVENT_ROW_CLICKED, agEvent);
// ctrlKey for windows, metaKey for Apple
var multiSelectKeyPressed = event.ctrlKey || event.metaKey;
that.angularGrid.onRowClicked(multiSelectKeyPressed, that.rowIndex, that.node);
});
vRow.addEventListener("dblclick", function (event) {
var agEvent = that.createEvent(event, this);
that.eventService.dispatchEvent(events_1.Events.EVENT_ROW_DOUBLE_CLICKED, agEvent);
});
return vRow;
};
RenderedRow.prototype.getRowNode = function () {
return this.node;
};
RenderedRow.prototype.getRowIndex = function () {
return this.rowIndex;
};
RenderedRow.prototype.refreshCells = function (colIds) {
if (!colIds) {
return;
}
var columnsToRefresh = this.columnController.getColumns(colIds);
utils_1.default.iterateObject(this.renderedCells, function (key, renderedCell) {
var colForCel = renderedCell.getColumn();
if (columnsToRefresh.indexOf(colForCel) >= 0) {
renderedCell.refreshCell();
}
});
};
RenderedRow.prototype.addDynamicClasses = function () {
var classes = [];
classes.push('ag-row');
classes.push('ag-row-no-focus');
classes.push(this.rowIndex % 2 == 0 ? "ag-row-even" : "ag-row-odd");
if (this.selectionController.isNodeSelected(this.node)) {
classes.push("ag-row-selected");
}
if (this.node.group) {
classes.push("ag-row-group");
// if a group, put the level of the group in
classes.push("ag-row-level-" + this.node.level);
if (!this.node.footer && this.node.expanded) {
classes.push("ag-row-group-expanded");
}
if (!this.node.footer && !this.node.expanded) {
// opposite of expanded is contracted according to the internet.
classes.push("ag-row-group-contracted");
}
if (this.node.footer) {
classes.push("ag-row-footer");
}
}
else {
// if a leaf, and a parent exists, put a level of the parent, else put level of 0 for top level item
if (this.node.parent) {
classes.push("ag-row-level-" + (this.node.parent.level + 1));
}
else {
classes.push("ag-row-level-0");
}
}
// add in extra classes provided by the config
var gridOptionsRowClass = this.gridOptionsWrapper.getRowClass();
if (gridOptionsRowClass) {
if (typeof gridOptionsRowClass === 'function') {
console.warn('ag-Grid: rowClass should not be a function, please use getRowClass instead');
}
else {
if (typeof gridOptionsRowClass === 'string') {
classes.push(gridOptionsRowClass);
}
else if (Array.isArray(gridOptionsRowClass)) {
gridOptionsRowClass.forEach(function (classItem) {
classes.push(classItem);
});
}
}
}
var gridOptionsRowClassFunc = this.gridOptionsWrapper.getRowClassFunc();
if (gridOptionsRowClassFunc) {
var params = {
node: this.node,
data: this.node.data,
rowIndex: this.rowIndex,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
var classToUseFromFunc = gridOptionsRowClassFunc(params);
if (classToUseFromFunc) {
if (typeof classToUseFromFunc === 'string') {
classes.push(classToUseFromFunc);
}
else if (Array.isArray(classToUseFromFunc)) {
classToUseFromFunc.forEach(function (classItem) {
classes.push(classItem);
});
}
}
}
this.vBodyRow.addClasses(classes);
if (this.pinningLeft) {
this.vPinnedLeftRow.addClasses(classes);
}
if (this.pinningRight) {
this.vPinnedRightRow.addClasses(classes);
}
};
return RenderedRow;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = RenderedRow;
/***/ },
/* 22 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var vHtmlElement_1 = __webpack_require__(23);
var column_1 = __webpack_require__(8);
var constants_1 = __webpack_require__(3);
var events_1 = __webpack_require__(5);
var vWrapperElement_1 = __webpack_require__(25);
var RenderedCell = (function () {
function RenderedCell(firstRightPinnedCol, column, $compile, rowRenderer, gridOptionsWrapper, expressionService, selectionRendererFactory, selectionController, templateService, cellRendererMap, node, rowIndex, colIndex, scope, columnController, valueService, eventService) {
this.destroyMethods = [];
this.firstRightPinnedColumn = firstRightPinnedCol;
this.column = column;
this.rowRenderer = rowRenderer;
this.gridOptionsWrapper = gridOptionsWrapper;
this.expressionService = expressionService;
this.selectionRendererFactory = selectionRendererFactory;
this.selectionController = selectionController;
this.cellRendererMap = cellRendererMap;
this.$compile = $compile;
this.templateService = templateService;
this.columnController = columnController;
this.valueService = valueService;
this.eventService = eventService;
this.node = node;
this.rowIndex = rowIndex;
this.colIndex = colIndex;
this.scope = scope;
this.data = this.getDataForRow();
this.value = this.getValue();
this.checkboxSelection = this.calculateCheckboxSelection();
this.setupComponents();
}
RenderedCell.prototype.destroy = function () {
this.destroyMethods.forEach(function (theFunction) {
theFunction();
});
};
RenderedCell.prototype.calculateCheckboxSelection = function () {
// never allow selection on floating rows
if (this.node.floating) {
return false;
}
// if boolean set, then just use it
var colDef = this.column.getColDef();
if (typeof colDef.checkboxSelection === 'boolean') {
return colDef.checkboxSelection;
}
// if function, then call the function to find out. we first check colDef for
// a function, and if missing then check gridOptions, so colDef has precedence
var selectionFunc;
if (typeof colDef.checkboxSelection === 'function') {
selectionFunc = colDef.checkboxSelection;
}
if (!selectionFunc && this.gridOptionsWrapper.getCheckboxSelection()) {
selectionFunc = this.gridOptionsWrapper.getCheckboxSelection();
}
if (selectionFunc) {
var params = this.createParams();
return selectionFunc(params);
}
return false;
};
RenderedCell.prototype.getColumn = function () {
return this.column;
};
RenderedCell.prototype.getValue = function () {
return this.valueService.getValue(this.column.getColDef(), this.data, this.node);
};
RenderedCell.prototype.getVGridCell = function () {
return this.vGridCell;
};
RenderedCell.prototype.getDataForRow = function () {
if (this.node.footer) {
// if footer, we always show the data
return this.node.data;
}
else if (this.node.group) {
// if header and header is expanded, we show data in footer only
var footersEnabled = this.gridOptionsWrapper.isGroupIncludeFooter();
var suppressHideHeader = this.gridOptionsWrapper.isGroupSuppressBlankHeader();
if (this.node.expanded && footersEnabled && !suppressHideHeader) {
return undefined;
}
else {
return this.node.data;
}
}
else {
// otherwise it's a normal node, just return data as normal
return this.node.data;
}
};
RenderedCell.prototype.setLeftOnCell = function () {
var _this = this;
var leftChangedListener = function () {
//if (this.column.getColId()==='age') {
// console.log('left changed: ' + this.column.getColId() + ' ' + this.column.getLeft());
//}
_this.vGridCell.addStyles({ left: _this.column.getLeft() + 'px' });
};
this.column.addEventListener(column_1.default.EVENT_LEFT_CHANGED, leftChangedListener);
this.destroyMethods.push(function () {
_this.column.removeEventListener(column_1.default.EVENT_LEFT_CHANGED, leftChangedListener);
});
leftChangedListener();
};
RenderedCell.prototype.setWidthOnCell = function () {
var _this = this;
var widthChangedListener = function () {
_this.vGridCell.addStyles({ width: _this.column.getActualWidth() + "px" });
};
this.column.addEventListener(column_1.default.EVENT_WIDTH_CHANGED, widthChangedListener);
this.destroyMethods.push(function () {
_this.column.removeEventListener(column_1.default.EVENT_WIDTH_CHANGED, widthChangedListener);
});
widthChangedListener();
};
RenderedCell.prototype.setupComponents = function () {
this.vGridCell = new vHtmlElement_1.default("div");
this.setLeftOnCell();
this.setWidthOnCell();
// only set tab index if cell selection is enabled
if (!this.gridOptionsWrapper.isSuppressCellSelection() && !this.node.floating) {
this.vGridCell.setAttribute("tabindex", "-1");
}
// these are the grid styles, don't change between soft refreshes
this.addClasses();
this.addCellClickedHandler();
this.addCellDoubleClickedHandler();
this.addCellContextMenuHandler();
if (!this.node.floating) {
this.addCellNavigationHandler();
}
this.createParentOfValue();
this.populateCell();
if (this.eCheckbox) {
this.setSelected(this.selectionController.isNodeSelected(this.node));
}
};
// called by rowRenderer when user navigates via tab key
RenderedCell.prototype.startEditing = function (key) {
var _this = this;
var that = this;
this.editingCell = true;
utils_1.default.removeAllChildren(this.vGridCell.getElement());
var eInput = document.createElement('input');
eInput.type = 'text';
utils_1.default.addCssClass(eInput, 'ag-cell-edit-input');
var startWithOldValue = key !== constants_1.default.KEY_BACKSPACE && key !== constants_1.default.KEY_DELETE;
var value = this.getValue();
if (startWithOldValue && value !== null && value !== undefined) {
eInput.value = value;
}
eInput.style.width = (this.column.getActualWidth() - 14) + 'px';
this.vGridCell.appendChild(eInput);
eInput.focus();
eInput.select();
var blurListener = function () {
that.stopEditing(eInput, blurListener);
};
//stop entering if we loose focus
eInput.addEventListener("blur", blurListener);
//stop editing if enter pressed
eInput.addEventListener('keypress', function (event) {
var key = event.which || event.keyCode;
if (key === constants_1.default.KEY_ENTER) {
_this.stopEditing(eInput, blurListener);
_this.focusCell(true);
}
});
//stop editing if enter pressed
eInput.addEventListener('keydown', function (event) {
var key = event.which || event.keyCode;
if (key === constants_1.default.KEY_ESCAPE) {
_this.stopEditing(eInput, blurListener, true);
_this.focusCell(true);
}
});
// tab key doesn't generate keypress, so need keydown to listen for that
eInput.addEventListener('keydown', function (event) {
var key = event.which || event.keyCode;
if (key == constants_1.default.KEY_TAB) {
that.stopEditing(eInput, blurListener);
that.rowRenderer.startEditingNextCell(that.rowIndex, that.column, event.shiftKey);
// we don't want the default tab action, so return false, this stops the event from bubbling
event.preventDefault();
return false;
}
});
};
RenderedCell.prototype.focusCell = function (forceBrowserFocus) {
this.rowRenderer.focusCell(this.vGridCell.getElement(), this.rowIndex, this.column.getColId(), this.column.getColDef(), forceBrowserFocus);
};
RenderedCell.prototype.stopEditing = function (eInput, blurListener, reset) {
if (reset === void 0) { reset = false; }
this.editingCell = false;
var newValue = eInput.value;
var colDef = this.column.getColDef();
//If we don't remove the blur listener first, we get:
//Uncaught NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is no longer a child of this node. Perhaps it was moved in a 'blur' event handler?
eInput.removeEventListener('blur', blurListener);
if (!reset) {
var paramsForCallbacks = {
node: this.node,
data: this.node.data,
oldValue: this.node.data[colDef.field],
newValue: newValue,
rowIndex: this.rowIndex,
colDef: colDef,
api: this.gridOptionsWrapper.getApi(),
context: this.gridOptionsWrapper.getContext()
};
if (colDef.newValueHandler) {
colDef.newValueHandler(paramsForCallbacks);
}
else {
this.valueService.setValueUsingField(this.node.data, colDef.field, newValue);
}
// at this point, the value has been updated
this.value = this.getValue();
paramsForCallbacks.newValue = this.value;
if (typeof colDef.onCellValueChanged === 'function') {
colDef.onCellValueChanged(paramsForCallbacks);
}
this.eventService.dispatchEvent(events_1.Events.EVENT_CELL_VALUE_CHANGED, paramsForCallbacks);
}
utils_1.default.removeAllChildren(this.vGridCell.getElement());
if (this.checkboxSelection) {
this.vGridCell.appendChild(this.vCellWrapper.getElement());
}
this.refreshCell();
};
RenderedCell.prototype.createParams = function () {
var params = {
node: this.node,
data: this.node.data,
value: this.value,
rowIndex: this.rowIndex,
colIndex: this.colIndex,
colDef: this.column.getColDef(),
$scope: this.scope,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
return params;
};
RenderedCell.prototype.createEvent = function (event, eventSource) {
var agEvent = this.createParams();
agEvent.event = event;
agEvent.eventSource = eventSource;
return agEvent;
};
RenderedCell.prototype.addCellDoubleClickedHandler = function () {
var that = this;
var colDef = this.column.getColDef();
this.vGridCell.addEventListener('dblclick', function (event) {
// always dispatch event to eventService
var agEvent = that.createEvent(event, this);
that.eventService.dispatchEvent(events_1.Events.EVENT_CELL_DOUBLE_CLICKED, agEvent);
// check if colDef also wants to handle event
if (typeof colDef.onCellDoubleClicked === 'function') {
colDef.onCellDoubleClicked(agEvent);
}
if (!that.gridOptionsWrapper.isSingleClickEdit() && that.isCellEditable()) {
that.startEditing();
}
});
};
RenderedCell.prototype.addCellContextMenuHandler = function () {
var that = this;
var colDef = this.column.getColDef();
this.vGridCell.addEventListener('contextmenu', function (event) {
var agEvent = that.createEvent(event, this);
that.eventService.dispatchEvent(events_1.Events.EVENT_CELL_CONTEXT_MENU, agEvent);
if (colDef.onCellContextMenu) {
colDef.onCellContextMenu(agEvent);
}
});
};
RenderedCell.prototype.isCellEditable = function () {
if (this.editingCell) {
return false;
}
// never allow editing of groups
if (this.node.group) {
return false;
}
// if boolean set, then just use it
var colDef = this.column.getColDef();
if (typeof colDef.editable === 'boolean') {
return colDef.editable;
}
// if function, then call the function to find out
if (typeof colDef.editable === 'function') {
var params = this.createParams();
var editableFunc = colDef.editable;
return editableFunc(params);
}
return false;
};
RenderedCell.prototype.addCellClickedHandler = function () {
var colDef = this.column.getColDef();
var that = this;
this.vGridCell.addEventListener("click", function (event) {
// we pass false to focusCell, as we don't want the cell to focus
// also get the browser focus. if we did, then the cellRenderer could
// have a text field in it, for example, and as the user clicks on the
// text field, the text field, the focus doesn't get to the text
// field, instead to goes to the div behind, making it impossible to
// select the text field.
if (!that.node.floating) {
that.focusCell(false);
}
var agEvent = that.createEvent(event, this);
that.eventService.dispatchEvent(events_1.Events.EVENT_CELL_CLICKED, agEvent);
if (colDef.onCellClicked) {
colDef.onCellClicked(agEvent);
}
if (that.gridOptionsWrapper.isSingleClickEdit() && that.isCellEditable()) {
that.startEditing();
}
});
};
RenderedCell.prototype.populateCell = function () {
// populate
this.putDataIntoCell();
// style
this.addStylesFromCollDef();
this.addClassesFromCollDef();
this.addClassesFromRules();
};
RenderedCell.prototype.addStylesFromCollDef = function () {
var colDef = this.column.getColDef();
if (colDef.cellStyle) {
var cssToUse;
if (typeof colDef.cellStyle === 'function') {
var cellStyleParams = {
value: this.value,
data: this.node.data,
node: this.node,
colDef: colDef,
column: this.column,
$scope: this.scope,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
var cellStyleFunc = colDef.cellStyle;
cssToUse = cellStyleFunc(cellStyleParams);
}
else {
cssToUse = colDef.cellStyle;
}
if (cssToUse) {
this.vGridCell.addStyles(cssToUse);
}
}
};
RenderedCell.prototype.addClassesFromCollDef = function () {
var _this = this;
var colDef = this.column.getColDef();
if (colDef.cellClass) {
var classToUse;
if (typeof colDef.cellClass === 'function') {
var cellClassParams = {
value: this.value,
data: this.node.data,
node: this.node,
colDef: colDef,
$scope: this.scope,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
var cellClassFunc = colDef.cellClass;
classToUse = cellClassFunc(cellClassParams);
}
else {
classToUse = colDef.cellClass;
}
if (typeof classToUse === 'string') {
this.vGridCell.addClass(classToUse);
}
else if (Array.isArray(classToUse)) {
classToUse.forEach(function (cssClassItem) {
_this.vGridCell.addClass(cssClassItem);
});
}
}
};
RenderedCell.prototype.addClassesFromRules = function () {
var colDef = this.column.getColDef();
var classRules = colDef.cellClassRules;
if (typeof classRules === 'object' && classRules !== null) {
var params = {
value: this.value,
data: this.node.data,
node: this.node,
colDef: colDef,
rowIndex: this.rowIndex,
api: this.gridOptionsWrapper.getApi(),
context: this.gridOptionsWrapper.getContext()
};
var classNames = Object.keys(classRules);
for (var i = 0; i < classNames.length; i++) {
var className = classNames[i];
var rule = classRules[className];
var resultOfRule;
if (typeof rule === 'string') {
resultOfRule = this.expressionService.evaluate(rule, params);
}
else if (typeof rule === 'function') {
resultOfRule = rule(params);
}
if (resultOfRule) {
this.vGridCell.addClass(className);
}
else {
this.vGridCell.removeClass(className);
}
}
}
};
// rename this to 'add key event listener
RenderedCell.prototype.addCellNavigationHandler = function () {
var that = this;
this.vGridCell.addEventListener('keydown', function (event) {
if (that.editingCell) {
return;
}
// only interested on key presses that are directly on this element, not any children elements. this
// stops navigation if the user is in, for example, a text field inside the cell, and user hits
// on of the keys we are looking for.
if (event.target !== that.vGridCell.getElement()) {
return;
}
var key = event.which || event.keyCode;
var startNavigation = key === constants_1.default.KEY_DOWN || key === constants_1.default.KEY_UP
|| key === constants_1.default.KEY_LEFT || key === constants_1.default.KEY_RIGHT;
if (startNavigation) {
event.preventDefault();
that.rowRenderer.navigateToNextCell(key, that.rowIndex, that.column);
return;
}
var startEdit = that.isKeycodeForStartEditing(key);
if (startEdit && that.isCellEditable()) {
that.startEditing(key);
// if we don't prevent default, then the editor that get displayed also picks up the 'enter key'
// press, and stops editing immediately, hence giving he user experience that nothing happened
event.preventDefault();
return;
}
var selectRow = key === constants_1.default.KEY_SPACE;
if (selectRow && that.gridOptionsWrapper.isRowSelection()) {
var selected = that.selectionController.isNodeSelected(that.node);
if (selected) {
that.selectionController.deselectNode(that.node);
}
else {
that.selectionController.selectNode(that.node, true);
}
event.preventDefault();
return;
}
});
};
RenderedCell.prototype.isKeycodeForStartEditing = function (key) {
return key === constants_1.default.KEY_ENTER || key === constants_1.default.KEY_BACKSPACE || key === constants_1.default.KEY_DELETE;
};
RenderedCell.prototype.createSelectionCheckbox = function () {
this.eCheckbox = document.createElement('input');
this.eCheckbox.type = "checkbox";
this.eCheckbox.name = "name";
this.eCheckbox.className = 'ag-selection-checkbox';
this.eCheckbox.addEventListener('click', function (event) {
event.stopPropagation();
});
var that = this;
this.checkboxOnChangeListener = function () {
var newValue = that.eCheckbox.checked;
if (newValue) {
that.selectionController.selectIndex(that.rowIndex, true);
}
else {
that.selectionController.deselectIndex(that.rowIndex);
}
};
this.eCheckbox.onchange = this.checkboxOnChangeListener;
};
RenderedCell.prototype.setSelected = function (state) {
if (!this.eCheckbox) {
return;
}
this.eCheckbox.onchange = null;
if (typeof state === 'boolean') {
this.eCheckbox.checked = state;
this.eCheckbox.indeterminate = false;
}
else {
// isNodeSelected returns back undefined if it's a group and the children
// are a mix of selected and unselected
this.eCheckbox.indeterminate = true;
}
this.eCheckbox.onchange = this.checkboxOnChangeListener;
};
RenderedCell.prototype.createParentOfValue = function () {
if (this.checkboxSelection) {
this.vCellWrapper = new vHtmlElement_1.default('span');
this.vCellWrapper.addClass('ag-cell-wrapper');
this.vGridCell.appendChild(this.vCellWrapper);
this.createSelectionCheckbox();
this.vCellWrapper.appendChild(new vWrapperElement_1.default(this.eCheckbox));
// eventually we call eSpanWithValue.innerHTML = xxx, so cannot include the checkbox (above) in this span
this.vSpanWithValue = new vHtmlElement_1.default('span');
this.vSpanWithValue.addClass('ag-cell-value');
this.vCellWrapper.appendChild(this.vSpanWithValue);
this.vParentOfValue = this.vSpanWithValue;
}
else {
this.vGridCell.addClass('ag-cell-value');
this.vParentOfValue = this.vGridCell;
}
};
RenderedCell.prototype.isVolatile = function () {
return this.column.getColDef().volatile;
};
RenderedCell.prototype.refreshCell = function () {
utils_1.default.removeAllChildren(this.vParentOfValue.getElement());
this.value = this.getValue();
this.populateCell();
if (this.checkboxSelection) {
this.setSelected(this.selectionController.isNodeSelected(this.node));
}
// if angular compiling, then need to also compile the cell again (angular compiling sucks, please wait...)
if (this.gridOptionsWrapper.isAngularCompileRows()) {
this.$compile(this.vGridCell.getElement())(this.scope);
}
};
RenderedCell.prototype.putDataIntoCell = function () {
// template gets preference, then cellRenderer, then do it ourselves
var colDef = this.column.getColDef();
if (colDef.template) {
this.vParentOfValue.setInnerHtml(colDef.template);
}
else if (colDef.templateUrl) {
var template = this.templateService.getTemplate(colDef.templateUrl, this.refreshCell.bind(this, true));
if (template) {
this.vParentOfValue.setInnerHtml(template);
}
}
else if (colDef.floatingCellRenderer && this.node.floating) {
this.useCellRenderer(colDef.floatingCellRenderer);
}
else if (colDef.cellRenderer) {
this.useCellRenderer(colDef.cellRenderer);
}
else {
// if we insert undefined, then it displays as the string 'undefined', ugly!
if (this.value !== undefined && this.value !== null && this.value !== '') {
this.vParentOfValue.setInnerHtml(this.value.toString());
}
}
};
RenderedCell.prototype.useCellRenderer = function (cellRenderer) {
var colDef = this.column.getColDef();
var rendererParams = {
value: this.value,
valueGetter: this.getValue,
data: this.node.data,
node: this.node,
colDef: colDef,
column: this.column,
$scope: this.scope,
rowIndex: this.rowIndex,
api: this.gridOptionsWrapper.getApi(),
context: this.gridOptionsWrapper.getContext(),
refreshCell: this.refreshCell.bind(this),
eGridCell: this.vGridCell,
eParentOfValue: this.vParentOfValue
};
// start duplicated code
var actualCellRenderer;
if (typeof cellRenderer === 'object' && cellRenderer !== null) {
var cellRendererObj = cellRenderer;
actualCellRenderer = this.cellRendererMap[cellRendererObj.renderer];
if (!actualCellRenderer) {
throw 'Cell renderer ' + cellRenderer + ' not found, available are ' + Object.keys(this.cellRendererMap);
}
}
else if (typeof cellRenderer === 'function') {
actualCellRenderer = cellRenderer;
}
else {
throw 'Cell Renderer must be String or Function';
}
var resultFromRenderer = actualCellRenderer(rendererParams);
// end duplicated code
if (utils_1.default.isNodeOrElement(resultFromRenderer)) {
// a dom node or element was returned, so add child
this.vParentOfValue.appendChild(resultFromRenderer);
}
else {
// otherwise assume it was html, so just insert
this.vParentOfValue.setInnerHtml(resultFromRenderer);
}
};
RenderedCell.prototype.addClasses = function () {
this.vGridCell.addClass('ag-cell');
this.vGridCell.addClass('ag-cell-no-focus');
this.vGridCell.setAttribute("colId", this.column.getColId());
if (this.node.group && this.node.footer) {
this.vGridCell.addClass('ag-footer-cell');
}
if (this.node.group && !this.node.footer) {
this.vGridCell.addClass('ag-group-cell');
}
if (this.firstRightPinnedColumn) {
this.vGridCell.addClass('ag-cell-first-right-pinned');
}
};
return RenderedCell;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = RenderedCell;
/***/ },
/* 23 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var utils_1 = __webpack_require__(6);
var vElement_1 = __webpack_require__(24);
var vWrapperElement_1 = __webpack_require__(25);
var VHtmlElement = (function (_super) {
__extends(VHtmlElement, _super);
function VHtmlElement(type) {
_super.call(this);
this.style = {};
this.type = type;
}
VHtmlElement.prototype.getElement = function () {
return this.element;
};
VHtmlElement.prototype.setInnerHtml = function (innerHtml) {
if (this.bound) {
this.element.innerHTML = innerHtml;
}
else {
this.innerHtml = innerHtml;
}
};
VHtmlElement.prototype.addStyles = function (styles) {
var _this = this;
if (!styles) {
return;
}
if (!this.bound && !this.style) {
this.style = {};
}
utils_1.default.iterateObject(styles, function (key, value) {
if (_this.bound) {
var style = _this.element.style;
style[key] = value;
}
else {
_this.style[key] = value;
}
});
};
VHtmlElement.prototype.attachEventListeners = function (node) {
if (!this.eventListeners) {
return;
}
for (var i = 0; i < this.eventListeners.length; i++) {
var listener = this.eventListeners[i];
node.addEventListener(listener.event, listener.listener);
}
};
VHtmlElement.prototype.addClass = function (newClass) {
if (this.bound) {
utils_1.default.addCssClass(this.element, newClass);
}
else {
if (!this.classes) {
this.classes = [];
}
this.classes.push(newClass);
}
};
VHtmlElement.prototype.removeClass = function (oldClass) {
if (this.bound) {
utils_1.default.removeCssClass(this.element, oldClass);
}
else {
if (!this.classes) {
return;
}
while (this.classes.indexOf(oldClass) >= 0) {
utils_1.default.removeFromArray(this.classes, oldClass);
}
}
};
VHtmlElement.prototype.addClasses = function (classes) {
if (!classes || classes.length <= 0) {
return;
}
if (this.bound) {
for (var i = 0; i < classes.length; i++) {
utils_1.default.addCssClass(this.element, classes[i]);
}
}
else {
if (!this.classes) {
this.classes = [];
}
for (var j = 0; j < classes.length; j++) {
this.classes.push(classes[j]);
}
}
};
VHtmlElement.prototype.toHtmlString = function () {
var buff = '';
// opening element
buff += '<' + this.type + ' v_element_id="' + this.getId() + '" ';
buff += this.toHtmlStringClasses();
buff += this.toHtmlStringAttributes();
buff += this.toHtmlStringStyles();
buff += '>';
// contents
if (this.innerHtml !== null && this.innerHtml !== undefined) {
buff += this.innerHtml;
}
buff += this.toHtmlStringChildren();
// closing element
buff += '</' + this.type + '>';
return buff;
};
VHtmlElement.prototype.toHtmlStringChildren = function () {
if (!this.children) {
return '';
}
var result = '';
for (var i = 0; i < this.children.length; i++) {
result += this.children[i].toHtmlString();
}
return result;
};
VHtmlElement.prototype.toHtmlStringAttributes = function () {
if (!this.attributes) {
return '';
}
var result = '';
utils_1.default.iterateObject(this.attributes, function (key, value) {
result += ' ' + key + '="' + value + '"';
});
return result;
};
VHtmlElement.prototype.toHtmlStringClasses = function () {
if (!this.classes) {
return '';
}
return ' class="' + this.classes.join(' ') + '"';
};
VHtmlElement.prototype.toHtmlStringStyles = function () {
var result = ' style="';
var atLeastOne = false;
utils_1.default.iterateObject(this.style, function (key, value) {
result += ' ' + key + ': ' + value + ';';
atLeastOne = true;
});
result += '"';
if (atLeastOne) {
return result;
}
else {
return '';
}
};
VHtmlElement.prototype.appendChild = function (child) {
if (this.bound) {
if (utils_1.default.isNodeOrElement(child)) {
this.element.appendChild(child);
}
else {
console.error('cannot appendChild with virtual child to already bound VHTMLElement');
}
}
else {
if (!this.children) {
this.children = [];
}
if (utils_1.default.isNodeOrElement(child)) {
this.children.push(new vWrapperElement_1.default(child));
}
else {
this.children.push(child);
}
}
};
VHtmlElement.prototype.setAttribute = function (key, value) {
if (this.bound) {
this.element.setAttribute(key, value);
}
else {
if (!this.attributes) {
this.attributes = {};
}
this.attributes[key] = value;
}
};
VHtmlElement.prototype.addEventListener = function (event, listener) {
if (this.bound) {
this.element.addEventListener(event, listener);
}
else {
if (!this.eventListeners) {
this.eventListeners = [];
}
var entry = new VEventListener(event, listener);
this.eventListeners.push(entry);
}
};
VHtmlElement.prototype.elementAttached = function (element) {
_super.prototype.elementAttached.call(this, element);
this.element = element;
this.attachEventListeners(element);
this.fireElementAttachedToChildren(element);
this.bound = true;
};
VHtmlElement.prototype.fireElementAttachedToChildren = function (element) {
if (!this.children) {
return;
}
for (var i = 0; i < this.children.length; i++) {
var child = this.children[i];
var childElement = element.querySelector('[v_element_id="' + child.getId() + '"]');
child.elementAttached(childElement);
}
};
return VHtmlElement;
})(vElement_1.default);
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = VHtmlElement;
var VEventListener = (function () {
function VEventListener(event, listener) {
this.event = event;
this.listener = listener;
}
return VEventListener;
})();
/***/ },
/* 24 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var VElement = (function () {
function VElement() {
this.id = VElement.idSequence++;
}
VElement.prototype.getId = function () {
return this.id;
};
VElement.prototype.addElementAttachedListener = function (listener) {
if (!this.elementAttachedListeners) {
this.elementAttachedListeners = [];
}
this.elementAttachedListeners.push(listener);
};
VElement.prototype.fireElementAttached = function (element) {
if (!this.elementAttachedListeners) {
return;
}
for (var i = 0; i < this.elementAttachedListeners.length; i++) {
var listener = this.elementAttachedListeners[i];
listener(element);
}
};
// abstract
VElement.prototype.elementAttached = function (element) {
this.fireElementAttached(element);
};
VElement.prototype.toHtmlString = function () { return null; };
VElement.idSequence = 0;
return VElement;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = VElement;
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var vElement_1 = __webpack_require__(24);
var VWrapperElement = (function (_super) {
__extends(VWrapperElement, _super);
function VWrapperElement(wrappedElement) {
_super.call(this);
this.wrappedElement = wrappedElement;
}
VWrapperElement.prototype.toHtmlString = function () {
return '<span v_element_id="' + this.getId() + '"></span>';
};
VWrapperElement.prototype.elementAttached = function (element) {
var parent = element.parentNode;
parent.insertBefore(this.wrappedElement, element);
parent.removeChild(element);
};
return VWrapperElement;
})(vElement_1.default);
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = VWrapperElement;
/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var svgFactory_1 = __webpack_require__(27);
var utils_1 = __webpack_require__(6);
var constants_1 = __webpack_require__(3);
var events_1 = __webpack_require__(5);
var svgFactory = svgFactory_1.default.getInstance();
function groupCellRendererFactory(gridOptionsWrapper, selectionRendererFactory, expressionService, eventService) {
return function groupCellRenderer(params) {
var eGroupCell = document.createElement('span');
var node = params.node;
var cellExpandable = node.group && !node.footer;
if (cellExpandable) {
addExpandAndContract(eGroupCell, params);
}
var checkboxNeeded = params.colDef && params.colDef.cellRenderer && params.colDef.cellRenderer.checkbox && !node.footer;
if (checkboxNeeded) {
var eCheckbox = selectionRendererFactory.createSelectionCheckbox(node, params.rowIndex);
eGroupCell.appendChild(eCheckbox);
}
if (params.colDef && params.colDef.cellRenderer && params.colDef.cellRenderer.innerRenderer) {
createFromInnerRenderer(eGroupCell, params, params.colDef.cellRenderer.innerRenderer);
}
else if (node.footer) {
createFooterCell(eGroupCell, params);
}
else if (node.group) {
createGroupCell(eGroupCell, params);
}
else {
createLeafCell(eGroupCell, params);
}
// only do this if an indent - as this overwrites the padding that
// the theme set, which will make things look 'not aligned' for the
// first group level.
var suppressPadding = params.colDef && params.colDef.cellRenderer
&& params.colDef.cellRenderer.suppressPadding;
if (!suppressPadding && (node.footer || node.level > 0)) {
var paddingFactor;
if (params.colDef && params.colDef.cellRenderer && params.colDef.cellRenderer.padding >= 0) {
paddingFactor = params.colDef.cellRenderer.padding;
}
else {
paddingFactor = 10;
}
var paddingPx = node.level * paddingFactor;
if (node.footer) {
paddingPx += 10;
}
else if (!node.group) {
paddingPx += 5;
}
eGroupCell.style.paddingLeft = paddingPx + 'px';
}
return eGroupCell;
};
function addExpandAndContract(eGroupCell, params) {
var eExpandIcon = createGroupExpandIcon(true);
var eContractIcon = createGroupExpandIcon(false);
eGroupCell.appendChild(eExpandIcon);
eGroupCell.appendChild(eContractIcon);
eExpandIcon.addEventListener('click', expandOrContract);
eContractIcon.addEventListener('click', expandOrContract);
eGroupCell.addEventListener('dblclick', expandOrContract);
showAndHideExpandAndContract(eExpandIcon, eContractIcon, params.node.expanded);
// if parent cell was passed, then we can listen for when focus is on the cell,
// and then expand / contract as the user hits enter or space-bar
if (params.eGridCell) {
params.eGridCell.addEventListener('keydown', function (event) {
if (utils_1.default.isKeyPressed(event, constants_1.default.KEY_ENTER)) {
expandOrContract();
event.preventDefault();
}
});
}
function expandOrContract() {
expandGroup(eExpandIcon, eContractIcon, params);
}
}
function showAndHideExpandAndContract(eExpandIcon, eContractIcon, expanded) {
utils_1.default.setVisible(eExpandIcon, !expanded);
utils_1.default.setVisible(eContractIcon, expanded);
}
function createFromInnerRenderer(eGroupCell, params, renderer) {
utils_1.default.useRenderer(eGroupCell, renderer, params);
}
function getRefreshFromIndex(params) {
if (gridOptionsWrapper.isGroupIncludeFooter()) {
return params.rowIndex;
}
else {
return params.rowIndex + 1;
}
}
function expandGroup(eExpandIcon, eContractIcon, params) {
params.node.expanded = !params.node.expanded;
var refreshIndex = getRefreshFromIndex(params);
params.api.onGroupExpandedOrCollapsed(refreshIndex);
showAndHideExpandAndContract(eExpandIcon, eContractIcon, params.node.expanded);
var event = { node: params.node };
eventService.dispatchEvent(events_1.Events.EVENT_ROW_GROUP_OPENED, event);
}
function createGroupExpandIcon(expanded) {
var eIcon;
if (expanded) {
eIcon = utils_1.default.createIcon('groupContracted', gridOptionsWrapper, null, svgFactory.createArrowRightSvg);
}
else {
eIcon = utils_1.default.createIcon('groupExpanded', gridOptionsWrapper, null, svgFactory.createArrowDownSvg);
}
utils_1.default.addCssClass(eIcon, 'ag-group-expand');
return eIcon;
}
// creates cell with 'Total {{key}}' for a group
function createFooterCell(eGroupCell, params) {
var footerValue;
var groupName = getGroupName(params);
if (params.colDef && params.colDef.cellRenderer && params.colDef.cellRenderer.footerValueGetter) {
var footerValueGetter = params.colDef.cellRenderer.footerValueGetter;
// params is same as we were given, except we set the value as the item to display
var paramsClone = utils_1.default.cloneObject(params);
paramsClone.value = groupName;
if (typeof footerValueGetter === 'function') {
footerValue = footerValueGetter(paramsClone);
}
else if (typeof footerValueGetter === 'string') {
footerValue = expressionService.evaluate(footerValueGetter, paramsClone);
}
else {
console.warn('ag-Grid: footerValueGetter should be either a function or a string (expression)');
}
}
else {
footerValue = 'Total ' + groupName;
}
var eText = document.createTextNode(footerValue);
eGroupCell.appendChild(eText);
}
function getGroupName(params) {
var cellRenderer = params.colDef.cellRenderer;
if (cellRenderer && cellRenderer.keyMap
&& typeof cellRenderer.keyMap === 'object' && params.colDef.cellRenderer !== null) {
var valueFromMap = cellRenderer.keyMap[params.node.key];
if (valueFromMap) {
return valueFromMap;
}
else {
return params.node.key;
}
}
else {
return params.node.key;
}
}
// creates cell with '{{key}} ({{childCount}})' for a group
function createGroupCell(eGroupCell, params) {
var groupName = getGroupName(params);
var colDefOfGroupedCol = params.api.getColumnDef(params.node.field);
if (colDefOfGroupedCol && typeof colDefOfGroupedCol.cellRenderer === 'function') {
params.value = groupName;
utils_1.default.useRenderer(eGroupCell, colDefOfGroupedCol.cellRenderer, params);
}
else {
eGroupCell.appendChild(document.createTextNode(groupName));
}
// only include the child count if it's included, eg if user doing custom aggregation,
// then this could be left out, or set to -1, ie no child count
var suppressCount = params.colDef.cellRenderer && params.colDef.cellRenderer.suppressCount;
if (!suppressCount && params.node.allChildrenCount >= 0) {
eGroupCell.appendChild(document.createTextNode(" (" + params.node.allChildrenCount + ")"));
}
}
// creates cell with '{{key}} ({{childCount}})' for a group
function createLeafCell(eParent, params) {
if (params.value) {
var eText = document.createTextNode(' ' + params.value);
eParent.appendChild(eText);
}
}
}
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = groupCellRendererFactory;
/***/ },
/* 27 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var SVG_NS = "http://www.w3.org/2000/svg";
var SvgFactory = (function () {
function SvgFactory() {
}
SvgFactory.getInstance = function () {
if (!this.theInstance) {
this.theInstance = new SvgFactory();
}
return this.theInstance;
};
SvgFactory.prototype.createFilterSvg = function () {
var eSvg = createIconSvg();
var eFunnel = document.createElementNS(SVG_NS, "polygon");
eFunnel.setAttribute("points", "0,0 4,4 4,10 6,10 6,4 10,0");
eFunnel.setAttribute("class", "ag-header-icon");
eSvg.appendChild(eFunnel);
return eSvg;
};
SvgFactory.prototype.createColumnShowingSvg = function () {
return createCircle(true);
};
SvgFactory.prototype.createColumnHiddenSvg = function () {
return createCircle(false);
};
SvgFactory.prototype.createMenuSvg = function () {
var eSvg = document.createElementNS(SVG_NS, "svg");
var size = "12";
eSvg.setAttribute("width", size);
eSvg.setAttribute("height", size);
["0", "5", "10"].forEach(function (y) {
var eLine = document.createElementNS(SVG_NS, "rect");
eLine.setAttribute("y", y);
eLine.setAttribute("width", size);
eLine.setAttribute("height", "2");
eLine.setAttribute("class", "ag-header-icon");
eSvg.appendChild(eLine);
});
return eSvg;
};
SvgFactory.prototype.createArrowUpSvg = function () {
return createPolygonSvg("0,10 5,0 10,10");
};
SvgFactory.prototype.createArrowLeftSvg = function () {
return createPolygonSvg("10,0 0,5 10,10");
};
SvgFactory.prototype.createArrowDownSvg = function () {
return createPolygonSvg("0,0 5,10 10,0");
};
SvgFactory.prototype.createArrowRightSvg = function () {
return createPolygonSvg("0,0 10,5 0,10");
};
SvgFactory.prototype.createSmallArrowDownSvg = function () {
return createPolygonSvg("0,0 3,6 6,0", 6);
};
//public createOpenSvg() {
// return createPlusMinus(true);
//}
//
//public createCloseSvg() {
// return createPlusMinus(false);
//}
// UnSort Icon SVG
SvgFactory.prototype.createArrowUpDownSvg = function () {
var svg = createIconSvg();
var eAscIcon = document.createElementNS(SVG_NS, "polygon");
eAscIcon.setAttribute("points", '0,4 5,0 10,4');
svg.appendChild(eAscIcon);
var eDescIcon = document.createElementNS(SVG_NS, "polygon");
eDescIcon.setAttribute("points", '0,6 5,10 10,6');
svg.appendChild(eDescIcon);
return svg;
};
return SvgFactory;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SvgFactory;
// i couldn't figure out how to not make these blurry
/*function createPlusMinus(plus: boolean) {
var eSvg = document.createElementNS(SVG_NS, "svg");
var size = "14";
eSvg.setAttribute("width", size);
eSvg.setAttribute("height", size);
var eRect = document.createElementNS(SVG_NS, "rect");
eRect.setAttribute('x', '1');
eRect.setAttribute('y', '1');
eRect.setAttribute('width', '12');
eRect.setAttribute('height', '12');
eRect.setAttribute('rx', '2');
eRect.setAttribute('ry', '2');
eRect.setAttribute('fill', 'none');
eRect.setAttribute('stroke', 'black');
eRect.setAttribute('stroke-width', '1');
eRect.setAttribute('stroke-linecap', 'butt');
eSvg.appendChild(eRect);
var eLineAcross = document.createElementNS(SVG_NS, "line");
eLineAcross.setAttribute('x1','2');
eLineAcross.setAttribute('x2','12');
eLineAcross.setAttribute('y1','7');
eLineAcross.setAttribute('y2','7');
eLineAcross.setAttribute('stroke','black');
eLineAcross.setAttribute('stroke-width', '1');
eLineAcross.setAttribute('stroke-linecap', 'butt');
eSvg.appendChild(eLineAcross);
if (plus) {
var eLineDown = document.createElementNS(SVG_NS, "line");
eLineDown.setAttribute('x1','7');
eLineDown.setAttribute('x2','7');
eLineDown.setAttribute('y1','2');
eLineDown.setAttribute('y2','12');
eLineDown.setAttribute('stroke','black');
eLineDown.setAttribute('stroke-width', '1');
eLineDown.setAttribute('stroke-linecap', 'butt');
eSvg.appendChild(eLineDown);
}
return eSvg;
}*/
function createPolygonSvg(points, width) {
var eSvg = createIconSvg(width);
var eDescIcon = document.createElementNS(SVG_NS, "polygon");
eDescIcon.setAttribute("points", points);
eSvg.appendChild(eDescIcon);
return eSvg;
}
// util function for the above
function createIconSvg(width) {
var eSvg = document.createElementNS(SVG_NS, "svg");
if (width > 0) {
eSvg.setAttribute("width", width);
eSvg.setAttribute("height", width);
}
else {
eSvg.setAttribute("width", "10");
eSvg.setAttribute("height", "10");
}
return eSvg;
}
function createCircle(fill) {
var eSvg = createIconSvg();
var eCircle = document.createElementNS(SVG_NS, "circle");
eCircle.setAttribute("cx", "5");
eCircle.setAttribute("cy", "5");
eCircle.setAttribute("r", "5");
eCircle.setAttribute("stroke", "black");
eCircle.setAttribute("stroke-width", "2");
if (fill) {
eCircle.setAttribute("fill", "black");
}
else {
eCircle.setAttribute("fill", "none");
}
eSvg.appendChild(eCircle);
return eSvg;
}
/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var columnGroup_1 = __webpack_require__(15);
var renderedHeaderGroupCell_1 = __webpack_require__(29);
var renderedHeaderCell_1 = __webpack_require__(31);
var HeaderRenderer = (function () {
function HeaderRenderer() {
this.headerElements = [];
}
HeaderRenderer.prototype.init = function (gridOptionsWrapper, columnController, gridPanel, grid, filterManager, $scope, $compile, headerTemplateLoader, dragService) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.columnController = columnController;
this.grid = grid;
this.filterManager = filterManager;
this.$scope = $scope;
this.$compile = $compile;
this.headerTemplateLoader = headerTemplateLoader;
this.dragService = dragService;
this.gridPanel = gridPanel;
this.findAllElements();
};
HeaderRenderer.prototype.findAllElements = function () {
this.ePinnedLeftHeader = this.gridPanel.getPinnedLeftHeader();
this.ePinnedRightHeader = this.gridPanel.getPinnedRightHeader();
this.eHeaderContainer = this.gridPanel.getHeaderContainer();
this.eHeaderViewport = this.gridPanel.getHeaderViewport();
this.eRoot = this.gridPanel.getRoot();
this.eHeaderOverlay = this.gridPanel.getHeaderOverlay();
};
HeaderRenderer.prototype.refreshHeader = function () {
utils_1.default.removeAllChildren(this.ePinnedLeftHeader);
utils_1.default.removeAllChildren(this.ePinnedRightHeader);
utils_1.default.removeAllChildren(this.eHeaderContainer);
this.headerElements.forEach(function (headerElement) {
headerElement.destroy();
});
this.headerElements = [];
this.insertHeaderRowsIntoContainer(this.columnController.getLeftDisplayedColumnGroups(), this.ePinnedLeftHeader);
this.insertHeaderRowsIntoContainer(this.columnController.getRightDisplayedColumnGroups(), this.ePinnedRightHeader);
this.insertHeaderRowsIntoContainer(this.columnController.getCenterDisplayedColumnGroups(), this.eHeaderContainer);
};
HeaderRenderer.prototype.addChildToOverlay = function (child) {
if (this.eHeaderOverlay) {
this.eHeaderOverlay.appendChild(child);
}
};
HeaderRenderer.prototype.removeChildFromOverlay = function (child) {
if (this.eHeaderOverlay) {
this.eHeaderOverlay.removeChild(child);
}
};
HeaderRenderer.prototype.addTreeNodesAtDept = function (cellTree, dept, result) {
var _this = this;
cellTree.forEach(function (abstractColumn) {
if (dept === 0) {
result.push(abstractColumn);
}
else if (abstractColumn instanceof columnGroup_1.default) {
var columnGroup = abstractColumn;
_this.addTreeNodesAtDept(columnGroup.getDisplayedChildren(), dept - 1, result);
}
else {
}
});
};
HeaderRenderer.prototype.setPinnedColContainerWidth = function () {
if (this.gridOptionsWrapper.isForPrint()) {
// pinned col doesn't exist when doing forPrint
return;
}
var pinnedLeftWidth = this.columnController.getPinnedLeftContainerWidth() + 'px';
this.eHeaderViewport.style.marginLeft = pinnedLeftWidth;
var pinnedRightWidth = this.columnController.getPinnedRightContainerWidth() + 'px';
this.eHeaderViewport.style.marginRight = pinnedRightWidth;
};
HeaderRenderer.prototype.getRightPinnedStartPixel = function () {
var rightStart = this.ePinnedRightHeader.getBoundingClientRect().left;
var parentStart = this.eHeaderOverlay.getBoundingClientRect().left;
return rightStart - parentStart;
};
HeaderRenderer.prototype.insertHeaderRowsIntoContainer = function (cellTree, eContainerToAddTo) {
var _this = this;
// if we are displaying header groups, then we have many rows here.
// go through each row of the header, one by one.
var rowHeight = this.gridOptionsWrapper.getHeaderHeight();
for (var dept = 0;; dept++) {
var nodesAtDept = [];
this.addTreeNodesAtDept(cellTree, dept, nodesAtDept);
// we want to break the for loop when we get to an empty set of cells,
// that's how we know we have finished rendering the last row.
if (nodesAtDept.length === 0) {
break;
}
var eRow = document.createElement('div');
eRow.className = 'ag-header-row';
eRow.style.top = (dept * rowHeight) + 'px';
eRow.style.height = rowHeight + 'px';
nodesAtDept.forEach(function (child) {
// skip groups that have no displayed children. this can happen when the group is broken,
// and this section happens to have nothing to display for the open / closed state
if (child instanceof columnGroup_1.default && child.getDisplayedChildren().length == 0) {
return;
}
var renderedHeaderElement = _this.createHeaderElement(child);
_this.headerElements.push(renderedHeaderElement);
eRow.appendChild(renderedHeaderElement.getGui());
});
eContainerToAddTo.appendChild(eRow);
}
// if forPrint, overlay is missing
if (this.eHeaderOverlay) {
this.eHeaderOverlay.style.height = rowHeight + 'px';
this.eHeaderOverlay.style.top = ((dept - 1) * rowHeight) + 'px';
}
};
HeaderRenderer.prototype.createHeaderElement = function (columnGroupChild) {
if (columnGroupChild instanceof columnGroup_1.default) {
return new renderedHeaderGroupCell_1.default(columnGroupChild, this.gridOptionsWrapper, this.columnController, this.eRoot, this.$scope, this.filterManager, this.$compile, this.dragService);
}
else {
return new renderedHeaderCell_1.default(columnGroupChild, null, this.gridOptionsWrapper, this.$scope, this.filterManager, this.columnController, this.$compile, this.grid, this.eRoot, this.headerTemplateLoader, this, this.dragService, this.gridPanel);
}
};
HeaderRenderer.prototype.updateSortIcons = function () {
this.headerElements.forEach(function (headerElement) {
headerElement.refreshSortIcon();
});
};
HeaderRenderer.prototype.updateFilterIcons = function () {
this.headerElements.forEach(function (headerElement) {
headerElement.refreshFilterIcon();
});
};
HeaderRenderer.prototype.onIndividualColumnResized = function (column) {
this.headerElements.forEach(function (headerElement) {
headerElement.onIndividualColumnResized(column);
});
};
return HeaderRenderer;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = HeaderRenderer;
/***/ },
/* 29 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var utils_1 = __webpack_require__(6);
var svgFactory_1 = __webpack_require__(27);
var renderedHeaderElement_1 = __webpack_require__(30);
var svgFactory = svgFactory_1.default.getInstance();
var RenderedHeaderGroupCell = (function (_super) {
__extends(RenderedHeaderGroupCell, _super);
function RenderedHeaderGroupCell(columnGroup, gridOptionsWrapper, columnController, eRoot, parentScope, filterManager, $compile, dragService) {
_super.call(this, gridOptionsWrapper);
this.columnController = columnController;
this.columnGroup = columnGroup;
this.parentScope = parentScope;
this.filterManager = filterManager;
this.$compile = $compile;
this.setupComponents(eRoot, dragService);
}
RenderedHeaderGroupCell.prototype.getGui = function () {
return this.eHeaderGroupCell;
};
RenderedHeaderGroupCell.prototype.onIndividualColumnResized = function (column) {
if (this.columnGroup.isChildInThisGroupDeepSearch(column)) {
this.setWidthOfGroupHeaderCell();
}
};
RenderedHeaderGroupCell.prototype.setupComponents = function (eRoot, dragService) {
var _this = this;
this.eHeaderGroupCell = document.createElement('div');
var classNames = ['ag-header-group-cell'];
// having different classes below allows the style to not have a bottom border
// on the group header, if no group is specified
if (this.columnGroup.getColGroupDef()) {
classNames.push('ag-header-group-cell-with-group');
}
else {
classNames.push('ag-header-group-cell-no-group');
}
this.eHeaderGroupCell.className = classNames.join(' ');
//this.eHeaderGroupCell.style.height = this.getGridOptionsWrapper().getHeaderHeight() + 'px';
this.addHeaderClassesFromCollDef(this.columnGroup.getColGroupDef(), this.eHeaderGroupCell);
if (this.getGridOptionsWrapper().isEnableColResize()) {
this.eHeaderCellResize = document.createElement("div");
this.eHeaderCellResize.className = "ag-header-cell-resize";
this.eHeaderGroupCell.appendChild(this.eHeaderCellResize);
dragService.addDragHandling({
eDraggableElement: this.eHeaderCellResize,
eBody: eRoot,
cursor: 'col-resize',
startAfterPixels: 0,
onDragStart: this.onDragStart.bind(this),
onDragging: this.onDragging.bind(this)
});
if (!this.getGridOptionsWrapper().isSuppressAutoSize()) {
this.eHeaderCellResize.addEventListener('dblclick', function (event) {
// get list of all the column keys we are responsible for
var keys = [];
_this.columnGroup.getDisplayedLeafColumns().forEach(function (column) {
// not all cols in the group may be participating with auto-resize
if (!column.getColDef().suppressAutoSize) {
keys.push(column.getColId());
}
});
if (keys.length > 0) {
_this.columnController.autoSizeColumns(keys);
}
});
}
}
// no renderer, default text render
var groupName = this.columnGroup.getHeaderName();
if (groupName && groupName !== '') {
var eGroupCellLabel = document.createElement("div");
eGroupCellLabel.className = 'ag-header-group-cell-label';
this.eHeaderGroupCell.appendChild(eGroupCellLabel);
if (utils_1.default.isBrowserSafari()) {
eGroupCellLabel.style.display = 'table-cell';
}
var eInnerText = document.createElement("span");
eInnerText.className = 'ag-header-group-text';
eInnerText.innerHTML = groupName;
eGroupCellLabel.appendChild(eInnerText);
if (this.columnGroup.isExpandable()) {
this.addGroupExpandIcon(eGroupCellLabel);
}
}
this.setWidthOfGroupHeaderCell();
};
RenderedHeaderGroupCell.prototype.setWidthOfGroupHeaderCell = function () {
this.eHeaderGroupCell.style.width = utils_1.default.formatWidth(this.columnGroup.getActualWidth());
};
RenderedHeaderGroupCell.prototype.addGroupExpandIcon = function (eGroupCellLabel) {
var eGroupIcon;
if (this.columnGroup.isExpanded()) {
eGroupIcon = utils_1.default.createIcon('columnGroupOpened', this.getGridOptionsWrapper(), null, svgFactory.createArrowLeftSvg);
}
else {
eGroupIcon = utils_1.default.createIcon('columnGroupClosed', this.getGridOptionsWrapper(), null, svgFactory.createArrowRightSvg);
}
eGroupIcon.className = 'ag-header-expand-icon';
eGroupCellLabel.appendChild(eGroupIcon);
var that = this;
eGroupIcon.onclick = function () {
var newExpandedValue = !that.columnGroup.isExpanded();
that.columnController.setColumnGroupOpened(that.columnGroup, newExpandedValue);
};
};
RenderedHeaderGroupCell.prototype.onDragStart = function () {
var _this = this;
this.groupWidthStart = this.columnGroup.getActualWidth();
this.childrenWidthStarts = [];
this.columnGroup.getDisplayedLeafColumns().forEach(function (column) {
_this.childrenWidthStarts.push(column.getActualWidth());
});
};
RenderedHeaderGroupCell.prototype.onDragging = function (dragChange, finished) {
var _this = this;
var newWidth = this.groupWidthStart + dragChange;
var minWidth = this.columnGroup.getMinWidth();
if (newWidth < minWidth) {
newWidth = minWidth;
}
// set the new width to the group header
//var newWidthPx = newWidth + "px";
//this.eHeaderGroupCell.style.width = newWidthPx;
//this.columnGroup.actualWidth = newWidth;
// distribute the new width to the child headers
var changeRatio = newWidth / this.groupWidthStart;
// keep track of pixels used, and last column gets the remaining,
// to cater for rounding errors, and min width adjustments
var pixelsToDistribute = newWidth;
var displayedColumns = this.columnGroup.getDisplayedLeafColumns();
displayedColumns.forEach(function (column, index) {
var notLastCol = index !== (displayedColumns.length - 1);
var newChildSize;
if (notLastCol) {
// if not the last col, calculate the column width as normal
var startChildSize = _this.childrenWidthStarts[index];
newChildSize = startChildSize * changeRatio;
if (newChildSize < column.getMinWidth()) {
newChildSize = column.getMinWidth();
}
pixelsToDistribute -= newChildSize;
}
else {
// if last col, give it the remaining pixels
newChildSize = pixelsToDistribute;
}
_this.columnController.setColumnWidth(column, newChildSize, finished);
});
};
return RenderedHeaderGroupCell;
})(renderedHeaderElement_1.default);
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = RenderedHeaderGroupCell;
/***/ },
/* 30 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var RenderedHeaderElement = (function () {
function RenderedHeaderElement(gridOptionsWrapper) {
this.gridOptionsWrapper = gridOptionsWrapper;
}
// methods implemented by the base classes
RenderedHeaderElement.prototype.destroy = function () { };
RenderedHeaderElement.prototype.refreshFilterIcon = function () { };
RenderedHeaderElement.prototype.refreshSortIcon = function () { };
RenderedHeaderElement.prototype.onIndividualColumnResized = function (column) { };
RenderedHeaderElement.prototype.getGui = function () { return null; };
RenderedHeaderElement.prototype.getGridOptionsWrapper = function () {
return this.gridOptionsWrapper;
};
RenderedHeaderElement.prototype.addHeaderClassesFromCollDef = function (abstractColDef, eHeaderCell) {
if (abstractColDef && abstractColDef.headerClass) {
var classToUse;
if (typeof abstractColDef.headerClass === 'function') {
var params = {
// bad naming, as colDef here can be a group or a column,
// however most people won't appreciate the difference,
// so keeping it as colDef to avoid confusion.
colDef: abstractColDef,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
var headerClassFunc = abstractColDef.headerClass;
classToUse = headerClassFunc(params);
}
else {
classToUse = abstractColDef.headerClass;
}
if (typeof classToUse === 'string') {
utils_1.default.addCssClass(eHeaderCell, classToUse);
}
else if (Array.isArray(classToUse)) {
classToUse.forEach(function (cssClassItem) {
utils_1.default.addCssClass(eHeaderCell, cssClassItem);
});
}
}
};
return RenderedHeaderElement;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = RenderedHeaderElement;
/***/ },
/* 31 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var utils_1 = __webpack_require__(6);
var renderedHeaderElement_1 = __webpack_require__(30);
var column_1 = __webpack_require__(8);
var moveColumnController_1 = __webpack_require__(32);
var RenderedHeaderCell = (function (_super) {
__extends(RenderedHeaderCell, _super);
function RenderedHeaderCell(column, parentGroup, gridOptionsWrapper, parentScope, filterManager, columnController, $compile, grid, eRoot, headerTemplateLoader, headerRenderer, dragService, gridPanel) {
_super.call(this, gridOptionsWrapper);
// for better structured code, anything we need to do when this column gets destroyed,
// we put a function in here. otherwise we would have a big destroy function with lots
// of 'if / else' mapping to things that got created.
this.destroyFunctions = [];
this.column = column;
this.parentGroup = parentGroup;
this.filterManager = filterManager;
this.columnController = columnController;
this.$compile = $compile;
this.grid = grid;
this.headerTemplateLoader = headerTemplateLoader;
this.headerRenderer = headerRenderer;
this.setupComponents(eRoot, parentScope, dragService, gridPanel);
}
RenderedHeaderCell.prototype.getGui = function () {
return this.eHeaderCell;
};
RenderedHeaderCell.prototype.destroy = function () {
this.destroyFunctions.forEach(function (func) {
func();
});
};
RenderedHeaderCell.prototype.createScope = function (parentScope) {
var _this = this;
if (this.getGridOptionsWrapper().isAngularCompileHeaders()) {
this.childScope = parentScope.$new();
this.childScope.colDef = this.column.getColDef();
this.childScope.colDefWrapper = this.column;
this.destroyFunctions.push(function () {
_this.childScope.$destroy();
});
}
};
RenderedHeaderCell.prototype.addAttributes = function () {
this.eHeaderCell.setAttribute("colId", this.column.getColId());
};
RenderedHeaderCell.prototype.addMenu = function () {
var eMenu = this.eHeaderCell.querySelector('#agMenu');
// if no menu provided in template, do nothing
if (!eMenu) {
return;
}
var weWantMenu = this.getGridOptionsWrapper().isEnableFilter() && !this.column.getColDef().suppressMenu;
if (!weWantMenu) {
utils_1.default.removeFromParent(eMenu);
return;
}
var that = this;
eMenu.addEventListener('click', function () {
that.filterManager.showFilter(that.column, this);
});
if (!this.getGridOptionsWrapper().isSuppressMenuHide()) {
eMenu.style.opacity = '0';
this.eHeaderCell.addEventListener('mouseenter', function () {
eMenu.style.opacity = '1';
});
this.eHeaderCell.addEventListener('mouseleave', function () {
eMenu.style.opacity = '0';
});
}
var style = eMenu.style;
style['transition'] = 'opacity 0.5s, border 0.2s';
style['-webkit-transition'] = 'opacity 0.5s, border 0.2s';
};
RenderedHeaderCell.prototype.removeSortIcons = function () {
utils_1.default.removeFromParent(this.eHeaderCell.querySelector('#agSortAsc'));
utils_1.default.removeFromParent(this.eHeaderCell.querySelector('#agSortDesc'));
utils_1.default.removeFromParent(this.eHeaderCell.querySelector('#agNoSort'));
};
RenderedHeaderCell.prototype.addSortIcons = function () {
this.eSortAsc = this.eHeaderCell.querySelector('#agSortAsc');
this.eSortDesc = this.eHeaderCell.querySelector('#agSortDesc');
this.eSortNone = this.eHeaderCell.querySelector('#agNoSort');
if (this.eSortAsc) {
this.eSortAsc.style.display = 'none';
}
if (this.eSortDesc) {
this.eSortDesc.style.display = 'none';
}
var showingNoSortIcon = this.column.getColDef().unSortIcon || this.getGridOptionsWrapper().isUnSortIcon();
// 'no sort' icon
if (!showingNoSortIcon) {
utils_1.default.removeFromParent(this.eSortNone);
}
};
RenderedHeaderCell.prototype.addMovingCss = function () {
var _this = this;
// this function adds or removes the moving css, based on if the col is moving
var addMovingCssFunc = function () {
if (_this.column.isMoving()) {
utils_1.default.addCssClass(_this.eHeaderCell, 'ag-header-cell-moving');
}
else {
utils_1.default.removeCssClass(_this.eHeaderCell, 'ag-header-cell-moving');
}
};
// call it now once, so the col is set up correctly
addMovingCssFunc();
// then call it every time we are informed of a moving state change in the col
this.column.addEventListener(column_1.default.EVENT_MOVING_CHANGED, addMovingCssFunc);
// finally we remove the listener when this cell is no longer rendered
this.destroyFunctions.push(function () {
_this.column.removeEventListener(column_1.default.EVENT_MOVING_CHANGED, addMovingCssFunc);
});
};
RenderedHeaderCell.prototype.setupComponents = function (eRoot, parentScope, dragService, gridPanel) {
this.eHeaderCell = this.headerTemplateLoader.createHeaderElement(this.column);
utils_1.default.addCssClass(this.eHeaderCell, 'ag-header-cell');
this.createScope(parentScope);
this.addAttributes();
this.addHeaderClassesFromCollDef(this.column.getColDef(), this.eHeaderCell);
this.addMovingCss();
var colDef = this.column.getColDef();
// add tooltip if exists
if (colDef.headerTooltip) {
this.eHeaderCell.title = colDef.headerTooltip;
}
// label div
this.eText = this.eHeaderCell.querySelector('#agText');
this.eHeaderCellLabel = this.eHeaderCell.querySelector('#agHeaderCellLabel');
this.addResize(eRoot, dragService);
this.addMove(eRoot, dragService, gridPanel);
this.addMenu();
// add in sort icons
this.addSort();
// add in filter icon
this.eFilterIcon = this.eHeaderCell.querySelector('#agFilter');
// render the cell, use a renderer if one is provided
var headerCellRenderer;
if (colDef.headerCellRenderer) {
headerCellRenderer = colDef.headerCellRenderer;
}
else if (this.getGridOptionsWrapper().getHeaderCellRenderer()) {
headerCellRenderer = this.getGridOptionsWrapper().getHeaderCellRenderer();
}
var headerNameValue = this.columnController.getDisplayNameForCol(this.column);
if (this.eText) {
if (headerCellRenderer) {
this.useRenderer(headerNameValue, headerCellRenderer);
}
else {
// no renderer, default text render
this.eText.className = 'ag-header-cell-text';
this.eText.innerHTML = headerNameValue;
}
}
this.eHeaderCell.style.width = utils_1.default.formatWidth(this.column.getActualWidth());
this.refreshFilterIcon();
this.refreshSortIcon();
};
RenderedHeaderCell.prototype.addSort = function () {
var enableSorting = this.getGridOptionsWrapper().isEnableSorting() && !this.column.getColDef().suppressSorting;
if (enableSorting) {
this.addSortIcons();
this.addSortHandling();
}
else {
this.removeSortIcons();
}
};
RenderedHeaderCell.prototype.addMove = function (eRoot, dragService, gridPanel) {
if (this.getGridOptionsWrapper().isSuppressMovableColumns() || this.column.getColDef().suppressMovable) {
return;
}
if (this.getGridOptionsWrapper().isForPrint()) {
// don't allow moving of headers when forPrint, as the header overlay doesn't exist
return;
}
if (this.eHeaderCellLabel) {
new moveColumnController_1.MoveColumnController(this.column, this.eHeaderCellLabel, eRoot, this.eHeaderCell, this.headerRenderer, this.columnController, dragService, gridPanel, this.getGridOptionsWrapper());
}
};
RenderedHeaderCell.prototype.addResize = function (eRoot, dragService) {
var _this = this;
var colDef = this.column.getColDef();
var eResize = this.eHeaderCell.querySelector('#agResizeBar');
// if no eResize in template, do nothing
if (!eResize) {
return;
}
var weWantResize = this.getGridOptionsWrapper().isEnableColResize() && !colDef.suppressResize;
if (!weWantResize) {
utils_1.default.removeFromParent(eResize);
return;
}
dragService.addDragHandling({
eDraggableElement: eResize,
eBody: eRoot,
cursor: 'col-resize',
startAfterPixels: 0,
onDragStart: this.onDragStart.bind(this),
onDragging: this.onDragging.bind(this)
});
var weWantAutoSize = !this.getGridOptionsWrapper().isSuppressAutoSize() && !colDef.suppressAutoSize;
if (weWantAutoSize) {
eResize.addEventListener('dblclick', function (event) {
_this.columnController.autoSizeColumn(_this.column);
});
}
};
RenderedHeaderCell.prototype.useRenderer = function (headerNameValue, headerCellRenderer) {
// renderer provided, use it
var cellRendererParams = {
colDef: this.column.getColDef(),
$scope: this.childScope,
context: this.getGridOptionsWrapper().getContext(),
value: headerNameValue,
api: this.getGridOptionsWrapper().getApi(),
eHeaderCell: this.eHeaderCell
};
var cellRendererResult = headerCellRenderer(cellRendererParams);
var childToAppend;
if (utils_1.default.isNodeOrElement(cellRendererResult)) {
// a dom node or element was returned, so add child
childToAppend = cellRendererResult;
}
else {
// otherwise assume it was html, so just insert
var eTextSpan = document.createElement("span");
eTextSpan.innerHTML = cellRendererResult;
childToAppend = eTextSpan;
}
// angular compile header if option is turned on
if (this.getGridOptionsWrapper().isAngularCompileHeaders()) {
var childToAppendCompiled = this.$compile(childToAppend)(this.childScope)[0];
this.eText.appendChild(childToAppendCompiled);
}
else {
this.eText.appendChild(childToAppend);
}
};
RenderedHeaderCell.prototype.refreshFilterIcon = function () {
var filterPresent = this.filterManager.isFilterPresentForCol(this.column.getColId());
if (this.eFilterIcon) {
utils_1.default.addOrRemoveCssClass(this.eHeaderCell, 'ag-header-cell-filtered', filterPresent);
this.eFilterIcon.style.display = filterPresent ? 'inline' : 'none';
}
};
RenderedHeaderCell.prototype.refreshSortIcon = function () {
// update visibility of icons
var sortAscending = this.column.getSort() === column_1.default.SORT_ASC;
var sortDescending = this.column.getSort() === column_1.default.SORT_DESC;
var sortNone = this.column.getSort() !== column_1.default.SORT_DESC && this.column.getSort() !== column_1.default.SORT_ASC;
if (this.eSortAsc) {
utils_1.default.setVisible(this.eSortAsc, sortAscending);
}
if (this.eSortDesc) {
utils_1.default.setVisible(this.eSortDesc, sortDescending);
}
if (this.eSortNone) {
utils_1.default.setVisible(this.eSortNone, sortNone);
}
utils_1.default.addOrRemoveCssClass(this.eHeaderCell, 'ag-header-cell-sorted-asc', sortAscending);
utils_1.default.addOrRemoveCssClass(this.eHeaderCell, 'ag-header-cell-sorted-desc', sortDescending);
utils_1.default.addOrRemoveCssClass(this.eHeaderCell, 'ag-header-cell-sorted-none', sortNone);
};
RenderedHeaderCell.prototype.getNextSortDirection = function () {
var sortingOrder;
if (this.column.getColDef().sortingOrder) {
sortingOrder = this.column.getColDef().sortingOrder;
}
else if (this.getGridOptionsWrapper().getSortingOrder()) {
sortingOrder = this.getGridOptionsWrapper().getSortingOrder();
}
else {
sortingOrder = RenderedHeaderCell.DEFAULT_SORTING_ORDER;
}
if (!Array.isArray(sortingOrder) || sortingOrder.length <= 0) {
console.warn('ag-grid: sortingOrder must be an array with at least one element, currently it\'s ' + sortingOrder);
return;
}
var currentIndex = sortingOrder.indexOf(this.column.getSort());
var notInArray = currentIndex < 0;
var lastItemInArray = currentIndex == sortingOrder.length - 1;
var result;
if (notInArray || lastItemInArray) {
result = sortingOrder[0];
}
else {
result = sortingOrder[currentIndex + 1];
}
// verify the sort type exists, as the user could provide the sortOrder, need to make sure it's valid
if (RenderedHeaderCell.DEFAULT_SORTING_ORDER.indexOf(result) < 0) {
console.warn('ag-grid: invalid sort type ' + result);
return null;
}
return result;
};
RenderedHeaderCell.prototype.addSortHandling = function () {
var _this = this;
if (!this.eHeaderCellLabel) {
return;
}
this.eHeaderCellLabel.addEventListener("click", function (event) {
// update sort on current col
_this.column.setSort(_this.getNextSortDirection());
// sortedAt used for knowing order of cols when multi-col sort
if (_this.column.getSort()) {
_this.column.setSortedAt(new Date().valueOf());
}
else {
_this.column.setSortedAt(null);
}
var doingMultiSort = !_this.getGridOptionsWrapper().isSuppressMultiSort() && event.shiftKey;
// clear sort on all columns except this one, and update the icons
if (!doingMultiSort) {
_this.columnController.clearSortBarThisColumn(_this.column);
}
_this.grid.onSortingChanged();
});
};
RenderedHeaderCell.prototype.onDragStart = function () {
this.startWidth = this.column.getActualWidth();
};
RenderedHeaderCell.prototype.onDragging = function (dragChange, finished) {
var newWidth = this.startWidth + dragChange;
this.columnController.setColumnWidth(this.column, newWidth, finished);
};
RenderedHeaderCell.prototype.onIndividualColumnResized = function (column) {
if (this.column !== column) {
return;
}
var newWidthPx = column.getActualWidth() + "px";
this.eHeaderCell.style.width = newWidthPx;
};
RenderedHeaderCell.DEFAULT_SORTING_ORDER = [column_1.default.SORT_ASC, column_1.default.SORT_DESC, null];
return RenderedHeaderCell;
})(renderedHeaderElement_1.default);
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = RenderedHeaderCell;
/***/ },
/* 32 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var column_1 = __webpack_require__(8);
var MoveColumnController = (function () {
function MoveColumnController(column, eDraggableElement, eRoot, eHeaderCell, headerRenderer, columnController, dragService, gridPanel, gridOptionsWrapper) {
this.lastDelta = 0;
this.needToMoveLeft = false;
this.needToMoveRight = false;
this.eHeaderCell = eHeaderCell;
this.headerRenderer = headerRenderer;
this.columnController = columnController;
this.column = column;
this.gridPanel = gridPanel;
this.addMovingCssToGrid = !gridOptionsWrapper.isSuppressMovingCss();
this.centreWidth = gridPanel.getCenterWidth();
dragService.addDragHandling({
eDraggableElement: eDraggableElement,
eBody: eRoot,
cursor: 'move',
// we only want to start dragging if the user moves at least 4px, otherwise we will loose
// the ability for the user to click on the cell (eg for sorting)
startAfterPixels: 4,
onDragStart: this.onDragStart.bind(this),
onDragging: this.onDragging.bind(this)
});
}
MoveColumnController.prototype.onDragStart = function (event) {
// the overlay spans all three (left, right, center), so we need to
// pad the floating clone so it appears over the right container
if (this.column.getPinned() === column_1.default.PINNED_LEFT) {
this.floatPadding = 0;
}
else if (this.column.getPinned() === column_1.default.PINNED_RIGHT) {
this.floatPadding = this.headerRenderer.getRightPinnedStartPixel();
}
else {
this.floatPadding = this.columnController.getPinnedLeftContainerWidth();
this.floatPadding -= this.gridPanel.getHorizontalScrollPosition();
}
// make clone of header cell for the 'floating ghost'
this.eFloatingCloneCell = this.eHeaderCell.cloneNode(true);
this.headerRenderer.addChildToOverlay(this.eFloatingCloneCell);
this.startLeftPosition = this.columnController.getPixelsBeforeConsideringPinned(this.column);
utils_1.default.addCssClass(this.eFloatingCloneCell, 'ag-header-cell-moving-clone');
this.eFloatingCloneCell.style.position = 'absolute';
this.eFloatingCloneCell.style.top = 0 + 'px';
this.eFloatingCloneCell.style.left = this.floatPadding + this.startLeftPosition + 'px';
// showing menu while hovering looks ugly, so hide header
var cloneMenu = this.eFloatingCloneCell.querySelector('#agMenu');
if (cloneMenu) {
cloneMenu.style.display = 'none';
}
// see how many pixels to the edge of the column we are
var headerCellLeft = this.eHeaderCell.getBoundingClientRect().left;
this.clickPositionOnHeader = event.clientX - headerCellLeft;
this.column.setMoving(true);
if (this.addMovingCssToGrid) {
this.gridPanel.setMovingCss(true);
}
this.scrollSinceStart = 0;
this.hoveringOverPixelLastTime = this.startLeftPosition + this.clickPositionOnHeader + this.scrollSinceStart;
};
MoveColumnController.prototype.onDragging = function (delta, finished) {
this.eFloatingCloneCell.style.left = this.floatPadding + (this.startLeftPosition + delta) + 'px';
// get current pixel position
var hoveringOverPixel = this.startLeftPosition + this.clickPositionOnHeader + delta + this.scrollSinceStart;
var dragMovingRight = hoveringOverPixel > this.hoveringOverPixelLastTime;
var dragMovingLeft = hoveringOverPixel < this.hoveringOverPixelLastTime;
this.hoveringOverPixelLastTime = hoveringOverPixel;
// the while loop keeps going until there are no more columns to move. this caters for the user
// moving the mouse very fast and we need to swap the column twice or more
var checkForAnotherColumn = true;
while (checkForAnotherColumn) {
var dragOverLeftColumn = this.column.getLeft() > hoveringOverPixel;
var dragOverRightColumn = (this.column.getLeft() + this.column.getActualWidth()) < hoveringOverPixel;
var wantToMoveLeft = dragOverLeftColumn && dragMovingLeft;
var wantToMoveRight = dragOverRightColumn && dragMovingRight;
checkForAnotherColumn = false;
var colToSwapWith = null;
if (wantToMoveLeft) {
colToSwapWith = this.columnController.getDisplayedColBeforeForMoving(this.column);
}
if (wantToMoveRight) {
colToSwapWith = this.columnController.getDisplayedColAfterForMoving(this.column);
}
// if we are a closed group, we need to move all the columns, not just this one
if (colToSwapWith) {
var newIndex = this.columnController.getColumnIndex(colToSwapWith);
// we move one column, UNLESS the column is the only visible column
// of a group, in which case we move the whole group.
var columnsToMove = this.getColumnsAndOrphans(this.column);
this.columnController.moveColumns(columnsToMove.reverse(), newIndex);
checkForAnotherColumn = true;
}
}
// we only look to scroll if the column is not pinned, as pinned columns are always visible
if (!this.column.isPinned()) {
// scroll if the mouse has gone outside the grid (or just outside the scrollable part if pinning)
//var hoveringOverPixelScrollAdjusted = this.startLeftPosition + this.clickPositionOnHeaderScrollAdjusted + delta;
// putting in 50 buffer, so even if user gets to edge of grid, a scroll will happen
var firstVisiblePixel = this.gridPanel.getHorizontalScrollPosition();
var lastVisiblePixel = firstVisiblePixel + this.gridPanel.getCenterWidth();
this.needToMoveLeft = hoveringOverPixel < (firstVisiblePixel + 50);
this.needToMoveRight = hoveringOverPixel > (lastVisiblePixel - 50);
if (this.needToMoveLeft || this.needToMoveRight) {
this.ensureIntervalStarted();
}
else {
this.ensureIntervalCleared();
}
}
if (finished) {
this.column.setMoving(false);
this.headerRenderer.removeChildFromOverlay(this.eFloatingCloneCell);
if (this.addMovingCssToGrid) {
this.gridPanel.setMovingCss(false);
}
this.ensureIntervalCleared();
}
this.lastDelta = delta;
};
MoveColumnController.prototype.ensureIntervalStarted = function () {
if (!this.movingIntervalId) {
this.intervalCount = 0;
this.movingIntervalId = setInterval(this.moveInterval.bind(this), 100);
}
};
MoveColumnController.prototype.ensureIntervalCleared = function () {
if (this.moveInterval) {
clearInterval(this.movingIntervalId);
this.movingIntervalId = null;
}
};
MoveColumnController.prototype.moveInterval = function () {
var pixelsToMove;
this.intervalCount++;
pixelsToMove = 10 + (this.intervalCount * 5);
if (pixelsToMove > 100) {
pixelsToMove = 100;
}
var pixelsMoved = 0;
if (this.needToMoveLeft) {
pixelsMoved = this.gridPanel.scrollHorizontally(-pixelsToMove);
}
else if (this.needToMoveRight) {
pixelsMoved = this.gridPanel.scrollHorizontally(pixelsToMove);
}
this.scrollSinceStart += pixelsMoved;
this.onDragging(this.lastDelta, false);
};
MoveColumnController.prototype.getColumnsAndOrphans = function (column) {
// if this column was to move, how many children would be left without a parent
var pathToChild = this.columnController.getPathForColumn(column);
for (var i = pathToChild.length - 1; i >= 0; i--) {
var columnGroup = pathToChild[i];
var onlyDisplayedChild = columnGroup.getDisplayedChildren().length === 1;
var moreThanOneChild = columnGroup.getChildren().length > 1;
if (onlyDisplayedChild && moreThanOneChild) {
// return total columns below here, not including the column under inspection
var leafColumns = columnGroup.getLeafColumns();
return leafColumns;
}
}
return [column];
};
return MoveColumnController;
})();
exports.MoveColumnController = MoveColumnController;
/***/ },
/* 33 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var textFilter_1 = __webpack_require__(34);
var numberFilter_1 = __webpack_require__(35);
var setFilter_1 = __webpack_require__(36);
var FilterManager = (function () {
function FilterManager() {
}
FilterManager.prototype.init = function (grid, gridOptionsWrapper, $compile, $scope, columnController, popupService, valueService) {
this.$compile = $compile;
this.$scope = $scope;
this.gridOptionsWrapper = gridOptionsWrapper;
this.grid = grid;
this.allFilters = {};
this.columnController = columnController;
this.popupService = popupService;
this.valueService = valueService;
this.columnController = columnController;
this.quickFilter = null;
};
FilterManager.prototype.setFilterModel = function (model) {
var _this = this;
if (model) {
// mark the filters as we set them, so any active filters left over we stop
var modelKeys = Object.keys(model);
utils_1.default.iterateObject(this.allFilters, function (colId, filterWrapper) {
utils_1.default.removeFromArray(modelKeys, colId);
var newModel = model[colId];
_this.setModelOnFilterWrapper(filterWrapper.filter, newModel);
});
// at this point, processedFields contains data for which we don't have a filter working yet
utils_1.default.iterateArray(modelKeys, function (colId) {
var column = _this.columnController.getColumn(colId);
if (!column) {
console.warn('Warning ag-grid setFilterModel - no column found for colId ' + colId);
return;
}
var filterWrapper = _this.getOrCreateFilterWrapper(column);
_this.setModelOnFilterWrapper(filterWrapper.filter, model[colId]);
});
}
else {
utils_1.default.iterateObject(this.allFilters, function (key, filterWrapper) {
_this.setModelOnFilterWrapper(filterWrapper.filter, null);
});
}
this.grid.onFilterChanged();
};
FilterManager.prototype.setModelOnFilterWrapper = function (filter, newModel) {
// because user can provide filters, we provide useful error checking and messages
if (typeof filter.getApi !== 'function') {
console.warn('Warning ag-grid - filter missing getApi method, which is needed for getFilterModel');
return;
}
var filterApi = filter.getApi();
if (typeof filterApi.setModel !== 'function') {
console.warn('Warning ag-grid - filter API missing setModel method, which is needed for setFilterModel');
return;
}
filterApi.setModel(newModel);
};
FilterManager.prototype.getFilterModel = function () {
var result = {};
utils_1.default.iterateObject(this.allFilters, function (key, filterWrapper) {
// because user can provide filters, we provide useful error checking and messages
if (typeof filterWrapper.filter.getApi !== 'function') {
console.warn('Warning ag-grid - filter missing getApi method, which is needed for getFilterModel');
return;
}
var filterApi = filterWrapper.filter.getApi();
if (typeof filterApi.getModel !== 'function') {
console.warn('Warning ag-grid - filter API missing getModel method, which is needed for getFilterModel');
return;
}
var model = filterApi.getModel();
if (model) {
result[key] = model;
}
});
return result;
};
FilterManager.prototype.setRowModel = function (rowModel) {
this.rowModel = rowModel;
};
// returns true if any advanced filter (ie not quick filter) active
FilterManager.prototype.isAdvancedFilterPresent = function () {
var atLeastOneActive = false;
utils_1.default.iterateObject(this.allFilters, function (key, filterWrapper) {
if (!filterWrapper.filter.isFilterActive) {
console.error('Filter is missing method isFilterActive');
}
if (filterWrapper.filter.isFilterActive()) {
atLeastOneActive = true;
}
});
return atLeastOneActive;
};
// returns true if quickFilter or advancedFilter
FilterManager.prototype.isAnyFilterPresent = function () {
return this.isQuickFilterPresent() || this.advancedFilterPresent || this.externalFilterPresent;
};
// returns true if given col has a filter active
FilterManager.prototype.isFilterPresentForCol = function (colId) {
var filterWrapper = this.allFilters[colId];
if (!filterWrapper) {
return false;
}
if (!filterWrapper.filter.isFilterActive) {
console.error('Filter is missing method isFilterActive');
}
var filterPresent = filterWrapper.filter.isFilterActive();
return filterPresent;
};
FilterManager.prototype.doesFilterPass = function (node, filterToSkip) {
var data = node.data;
var colKeys = Object.keys(this.allFilters);
for (var i = 0, l = colKeys.length; i < l; i++) {
var colId = colKeys[i];
var filterWrapper = this.allFilters[colId];
// if no filter, always pass
if (filterWrapper === undefined) {
continue;
}
if (filterWrapper.filter === filterToSkip) {
continue;
}
// don't bother with filters that are not active
if (!filterWrapper.filter.isFilterActive()) {
continue;
}
if (!filterWrapper.filter.doesFilterPass) {
console.error('Filter is missing method doesFilterPass');
}
var params = {
node: node,
data: data
};
if (!filterWrapper.filter.doesFilterPass(params)) {
return false;
}
}
// all filters passed
return true;
};
// returns true if it has changed (not just same value again)
FilterManager.prototype.setQuickFilter = function (newFilter) {
if (newFilter === undefined || newFilter === "") {
newFilter = null;
}
if (this.quickFilter !== newFilter) {
if (this.gridOptionsWrapper.isVirtualPaging()) {
console.warn('ag-grid: cannot do quick filtering when doing virtual paging');
return;
}
//want 'null' to mean to filter, so remove undefined and empty string
if (newFilter === undefined || newFilter === "") {
newFilter = null;
}
if (newFilter !== null) {
newFilter = newFilter.toUpperCase();
}
this.quickFilter = newFilter;
return true;
}
else {
return false;
}
};
FilterManager.prototype.onFilterChanged = function () {
this.advancedFilterPresent = this.isAdvancedFilterPresent();
this.externalFilterPresent = this.gridOptionsWrapper.isExternalFilterPresent();
utils_1.default.iterateObject(this.allFilters, function (key, filterWrapper) {
if (filterWrapper.filter.onAnyFilterChanged) {
filterWrapper.filter.onAnyFilterChanged();
}
});
};
FilterManager.prototype.isQuickFilterPresent = function () {
return this.quickFilter !== null;
};
FilterManager.prototype.doesRowPassOtherFilters = function (filterToSkip, node) {
return this.doesRowPassFilter(node, filterToSkip);
};
FilterManager.prototype.doesRowPassFilter = function (node, filterToSkip) {
//first up, check quick filter
if (this.isQuickFilterPresent()) {
if (!node.quickFilterAggregateText) {
this.aggregateRowForQuickFilter(node);
}
if (node.quickFilterAggregateText.indexOf(this.quickFilter) < 0) {
//quick filter fails, so skip item
return false;
}
}
//secondly, give the client a chance to reject this row
if (this.externalFilterPresent) {
if (!this.gridOptionsWrapper.doesExternalFilterPass(node)) {
return false;
}
}
//lastly, check our internal advanced filter
if (this.advancedFilterPresent) {
if (!this.doesFilterPass(node, filterToSkip)) {
return false;
}
}
//got this far, all filters pass
return true;
};
FilterManager.prototype.aggregateRowForQuickFilter = function (node) {
var aggregatedText = '';
var that = this;
this.columnController.getAllColumns().forEach(function (column) {
var data = node.data;
var value = that.valueService.getValue(column.getColDef(), data, node);
if (value && value !== '') {
aggregatedText = aggregatedText + value.toString().toUpperCase() + "_";
}
});
node.quickFilterAggregateText = aggregatedText;
};
FilterManager.prototype.onNewRowsLoaded = function () {
var that = this;
Object.keys(this.allFilters).forEach(function (field) {
var filter = that.allFilters[field].filter;
if (filter.onNewRowsLoaded) {
filter.onNewRowsLoaded();
}
});
};
FilterManager.prototype.createValueGetter = function (column) {
var that = this;
return function valueGetter(node) {
return that.valueService.getValue(column.getColDef(), node.data, node);
};
};
FilterManager.prototype.getFilterApi = function (column) {
var filterWrapper = this.getOrCreateFilterWrapper(column);
if (filterWrapper) {
if (typeof filterWrapper.filter.getApi === 'function') {
return filterWrapper.filter.getApi();
}
}
};
FilterManager.prototype.getOrCreateFilterWrapper = function (column) {
var filterWrapper = this.allFilters[column.getColId()];
if (!filterWrapper) {
filterWrapper = this.createFilterWrapper(column);
this.allFilters[column.getColId()] = filterWrapper;
}
return filterWrapper;
};
FilterManager.prototype.createFilterWrapper = function (column) {
var colDef = column.getColDef();
var filterWrapper = {
column: column,
filter: null,
scope: null,
gui: null
};
if (typeof colDef.filter === 'function') {
// if user provided a filter, just use it
// first up, create child scope if needed
if (this.gridOptionsWrapper.isAngularCompileFilters()) {
filterWrapper.scope = this.$scope.$new();
}
// now create filter (had to cast to any to get 'new' working)
this.assertMethodHasNoParameters(colDef.filter);
filterWrapper.filter = new colDef.filter();
}
else if (colDef.filter === 'text') {
filterWrapper.filter = new textFilter_1.default();
}
else if (colDef.filter === 'number') {
filterWrapper.filter = new numberFilter_1.default();
}
else {
filterWrapper.filter = new setFilter_1.default();
}
var filterChangedCallback = this.grid.onFilterChanged.bind(this.grid);
var filterModifiedCallback = this.grid.onFilterModified.bind(this.grid);
var doesRowPassOtherFilters = this.doesRowPassOtherFilters.bind(this, filterWrapper.filter);
var filterParams = colDef.filterParams;
var params = {
colDef: colDef,
rowModel: this.rowModel,
filterChangedCallback: filterChangedCallback,
filterModifiedCallback: filterModifiedCallback,
filterParams: filterParams,
localeTextFunc: this.gridOptionsWrapper.getLocaleTextFunc(),
valueGetter: this.createValueGetter(column),
doesRowPassOtherFilter: doesRowPassOtherFilters,
context: this.gridOptionsWrapper.getContext,
$scope: filterWrapper.scope
};
if (!filterWrapper.filter.init) {
throw 'Filter is missing method init';
}
filterWrapper.filter.init(params);
if (!filterWrapper.filter.getGui) {
throw 'Filter is missing method getGui';
}
var eFilterGui = document.createElement('div');
eFilterGui.className = 'ag-filter';
var guiFromFilter = filterWrapper.filter.getGui();
if (utils_1.default.isNodeOrElement(guiFromFilter)) {
//a dom node or element was returned, so add child
eFilterGui.appendChild(guiFromFilter);
}
else {
//otherwise assume it was html, so just insert
var eTextSpan = document.createElement('span');
eTextSpan.innerHTML = guiFromFilter;
eFilterGui.appendChild(eTextSpan);
}
if (filterWrapper.scope) {
filterWrapper.gui = this.$compile(eFilterGui)(filterWrapper.scope)[0];
}
else {
filterWrapper.gui = eFilterGui;
}
return filterWrapper;
};
FilterManager.prototype.destroy = function () {
utils_1.default.iterateObject(this.allFilters, function (key, filterWrapper) {
if (filterWrapper.filter.destroy) {
filterWrapper.filter.destroy();
}
});
};
FilterManager.prototype.assertMethodHasNoParameters = function (theMethod) {
var getRowsParams = utils_1.default.getFunctionParameters(theMethod);
if (getRowsParams.length > 0) {
console.warn('ag-grid: It looks like your filter is of the old type and expecting parameters in the constructor.');
console.warn('ag-grid: From ag-grid 1.14, the constructor should take no parameters and init() used instead.');
}
};
FilterManager.prototype.showFilter = function (column, eventSource) {
var filterWrapper = this.getOrCreateFilterWrapper(column);
// need to show filter before positioning, as only after filter
// is visible can we find out what the width of it is
var hidePopup = this.popupService.addAsModalPopup(filterWrapper.gui, true);
this.popupService.positionPopup(eventSource, filterWrapper.gui, true);
if (filterWrapper.filter.afterGuiAttached) {
var params = {
hidePopup: hidePopup,
eventSource: eventSource
};
filterWrapper.filter.afterGuiAttached(params);
}
};
return FilterManager;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = FilterManager;
/***/ },
/* 34 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var template = '<div>' +
'<div>' +
'<select class="ag-filter-select" id="filterType">' +
'<option value="1">[CONTAINS]</option>' +
'<option value="2">[EQUALS]</option>' +
'<option value="3">[STARTS WITH]</option>' +
'<option value="4">[ENDS WITH]</option>' +
'</select>' +
'</div>' +
'<div>' +
'<input class="ag-filter-filter" id="filterText" type="text" placeholder="[FILTER...]"/>' +
'</div>' +
'<div class="ag-filter-apply-panel" id="applyPanel">' +
'<button type="button" id="applyButton">[APPLY FILTER]</button>' +
'</div>' +
'</div>';
var CONTAINS = 1;
var EQUALS = 2;
var STARTS_WITH = 3;
var ENDS_WITH = 4;
var TextFilter = (function () {
function TextFilter() {
}
TextFilter.prototype.init = function (params) {
this.filterParams = params.filterParams;
this.applyActive = this.filterParams && this.filterParams.apply === true;
this.filterChangedCallback = params.filterChangedCallback;
this.filterModifiedCallback = params.filterModifiedCallback;
this.localeTextFunc = params.localeTextFunc;
this.valueGetter = params.valueGetter;
this.createGui();
this.filterText = null;
this.filterType = CONTAINS;
this.createApi();
};
TextFilter.prototype.onNewRowsLoaded = function () {
var keepSelection = this.filterParams && this.filterParams.newRowsAction === 'keep';
if (!keepSelection) {
this.api.setType(CONTAINS);
this.api.setFilter(null);
}
};
TextFilter.prototype.afterGuiAttached = function () {
this.eFilterTextField.focus();
};
TextFilter.prototype.doesFilterPass = function (node) {
if (!this.filterText) {
return true;
}
var value = this.valueGetter(node);
if (!value) {
return false;
}
var valueLowerCase = value.toString().toLowerCase();
switch (this.filterType) {
case CONTAINS:
return valueLowerCase.indexOf(this.filterText) >= 0;
case EQUALS:
return valueLowerCase === this.filterText;
case STARTS_WITH:
return valueLowerCase.indexOf(this.filterText) === 0;
case ENDS_WITH:
var index = valueLowerCase.indexOf(this.filterText);
return index >= 0 && index === (valueLowerCase.length - this.filterText.length);
default:
// should never happen
console.warn('invalid filter type ' + this.filterType);
return false;
}
};
TextFilter.prototype.getGui = function () {
return this.eGui;
};
TextFilter.prototype.isFilterActive = function () {
return this.filterText !== null;
};
TextFilter.prototype.createTemplate = function () {
return template
.replace('[FILTER...]', this.localeTextFunc('filterOoo', 'Filter...'))
.replace('[EQUALS]', this.localeTextFunc('equals', 'Equals'))
.replace('[CONTAINS]', this.localeTextFunc('contains', 'Contains'))
.replace('[STARTS WITH]', this.localeTextFunc('startsWith', 'Starts with'))
.replace('[ENDS WITH]', this.localeTextFunc('endsWith', 'Ends with'))
.replace('[APPLY FILTER]', this.localeTextFunc('applyFilter', 'Apply Filter'));
};
TextFilter.prototype.createGui = function () {
this.eGui = utils_1.default.loadTemplate(this.createTemplate());
this.eFilterTextField = this.eGui.querySelector("#filterText");
this.eTypeSelect = this.eGui.querySelector("#filterType");
utils_1.default.addChangeListener(this.eFilterTextField, this.onFilterChanged.bind(this));
this.eTypeSelect.addEventListener("change", this.onTypeChanged.bind(this));
this.setupApply();
};
TextFilter.prototype.setupApply = function () {
var _this = this;
if (this.applyActive) {
this.eApplyButton = this.eGui.querySelector('#applyButton');
this.eApplyButton.addEventListener('click', function () {
_this.filterChangedCallback();
});
}
else {
utils_1.default.removeElement(this.eGui, '#applyPanel');
}
};
TextFilter.prototype.onTypeChanged = function () {
this.filterType = parseInt(this.eTypeSelect.value);
this.filterChanged();
};
TextFilter.prototype.onFilterChanged = function () {
var filterText = utils_1.default.makeNull(this.eFilterTextField.value);
if (filterText && filterText.trim() === '') {
filterText = null;
}
var newFilterText;
if (filterText !== null && filterText !== undefined) {
newFilterText = filterText.toLowerCase();
}
else {
newFilterText = null;
}
if (this.filterText !== newFilterText) {
this.filterText = newFilterText;
this.filterChanged();
}
};
TextFilter.prototype.filterChanged = function () {
this.filterModifiedCallback();
if (!this.applyActive) {
this.filterChangedCallback();
}
};
TextFilter.prototype.createApi = function () {
var that = this;
this.api = {
EQUALS: EQUALS,
CONTAINS: CONTAINS,
STARTS_WITH: STARTS_WITH,
ENDS_WITH: ENDS_WITH,
setType: function (type) {
that.filterType = type;
that.eTypeSelect.value = type;
},
setFilter: function (filter) {
filter = utils_1.default.makeNull(filter);
if (filter) {
that.filterText = filter.toLowerCase();
that.eFilterTextField.value = filter;
}
else {
that.filterText = null;
that.eFilterTextField.value = null;
}
},
getType: function () {
return that.filterType;
},
getFilter: function () {
return that.filterText;
},
getModel: function () {
if (that.isFilterActive()) {
return {
type: that.filterType,
filter: that.filterText
};
}
else {
return null;
}
},
setModel: function (dataModel) {
if (dataModel) {
this.setType(dataModel.type);
this.setFilter(dataModel.filter);
}
else {
this.setFilter(null);
}
}
};
};
TextFilter.prototype.getApi = function () {
return this.api;
};
return TextFilter;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = TextFilter;
/***/ },
/* 35 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var template = '<div>' +
'<div>' +
'<select class="ag-filter-select" id="filterType">' +
'<option value="1">[EQUALS]</option>' +
'<option value="2">[LESS THAN]</option>' +
'<option value="3">[GREATER THAN]</option>' +
'</select>' +
'</div>' +
'<div>' +
'<input class="ag-filter-filter" id="filterText" type="text" placeholder="[FILTER...]"/>' +
'</div>' +
'<div class="ag-filter-apply-panel" id="applyPanel">' +
'<button type="button" id="applyButton">[APPLY FILTER]</button>' +
'</div>' +
'</div>';
var EQUALS = 1;
var LESS_THAN = 2;
var GREATER_THAN = 3;
var NumberFilter = (function () {
function NumberFilter() {
}
NumberFilter.prototype.init = function (params) {
this.filterParams = params.filterParams;
this.applyActive = this.filterParams && this.filterParams.apply === true;
this.filterChangedCallback = params.filterChangedCallback;
this.filterModifiedCallback = params.filterModifiedCallback;
this.localeTextFunc = params.localeTextFunc;
this.valueGetter = params.valueGetter;
this.createGui();
this.filterNumber = null;
this.filterType = EQUALS;
this.createApi();
};
NumberFilter.prototype.onNewRowsLoaded = function () {
var keepSelection = this.filterParams && this.filterParams.newRowsAction === 'keep';
if (!keepSelection) {
this.api.setType(EQUALS);
this.api.setFilter(null);
}
};
NumberFilter.prototype.afterGuiAttached = function () {
this.eFilterTextField.focus();
};
NumberFilter.prototype.doesFilterPass = function (node) {
if (this.filterNumber === null) {
return true;
}
var value = this.valueGetter(node);
if (!value && value !== 0) {
return false;
}
var valueAsNumber;
if (typeof value === 'number') {
valueAsNumber = value;
}
else {
valueAsNumber = parseFloat(value);
}
switch (this.filterType) {
case EQUALS:
return valueAsNumber === this.filterNumber;
case LESS_THAN:
return valueAsNumber < this.filterNumber;
case GREATER_THAN:
return valueAsNumber > this.filterNumber;
default:
// should never happen
console.warn('invalid filter type ' + this.filterType);
return false;
}
};
NumberFilter.prototype.getGui = function () {
return this.eGui;
};
NumberFilter.prototype.isFilterActive = function () {
return this.filterNumber !== null;
};
NumberFilter.prototype.createTemplate = function () {
return template
.replace('[FILTER...]', this.localeTextFunc('filterOoo', 'Filter...'))
.replace('[EQUALS]', this.localeTextFunc('equals', 'Equals'))
.replace('[LESS THAN]', this.localeTextFunc('lessThan', 'Less than'))
.replace('[GREATER THAN]', this.localeTextFunc('greaterThan', 'Greater than'))
.replace('[APPLY FILTER]', this.localeTextFunc('applyFilter', 'Apply Filter'));
};
NumberFilter.prototype.createGui = function () {
this.eGui = utils_1.default.loadTemplate(this.createTemplate());
this.eFilterTextField = this.eGui.querySelector("#filterText");
this.eTypeSelect = this.eGui.querySelector("#filterType");
utils_1.default.addChangeListener(this.eFilterTextField, this.onFilterChanged.bind(this));
this.eTypeSelect.addEventListener("change", this.onTypeChanged.bind(this));
this.setupApply();
};
NumberFilter.prototype.setupApply = function () {
var _this = this;
if (this.applyActive) {
this.eApplyButton = this.eGui.querySelector('#applyButton');
this.eApplyButton.addEventListener('click', function () {
_this.filterChangedCallback();
});
}
else {
utils_1.default.removeElement(this.eGui, '#applyPanel');
}
};
NumberFilter.prototype.onTypeChanged = function () {
this.filterType = parseInt(this.eTypeSelect.value);
this.filterChanged();
};
NumberFilter.prototype.filterChanged = function () {
this.filterModifiedCallback();
if (!this.applyActive) {
this.filterChangedCallback();
}
};
NumberFilter.prototype.onFilterChanged = function () {
var filterText = utils_1.default.makeNull(this.eFilterTextField.value);
if (filterText && filterText.trim() === '') {
filterText = null;
}
var newFilter;
if (filterText !== null && filterText !== undefined) {
newFilter = parseFloat(filterText);
}
else {
newFilter = null;
}
if (this.filterNumber !== newFilter) {
this.filterNumber = newFilter;
this.filterChanged();
}
};
NumberFilter.prototype.createApi = function () {
var that = this;
this.api = {
EQUALS: EQUALS,
LESS_THAN: LESS_THAN,
GREATER_THAN: GREATER_THAN,
setType: function (type) {
that.filterType = type;
that.eTypeSelect.value = type;
},
setFilter: function (filter) {
filter = utils_1.default.makeNull(filter);
if (filter !== null && !(typeof filter === 'number')) {
filter = parseFloat(filter);
}
that.filterNumber = filter;
that.eFilterTextField.value = filter;
},
getType: function () {
return that.filterType;
},
getFilter: function () {
return that.filterNumber;
},
getModel: function () {
if (that.isFilterActive()) {
return {
type: that.filterType,
filter: that.filterNumber
};
}
else {
return null;
}
},
setModel: function (dataModel) {
if (dataModel) {
this.setType(dataModel.type);
this.setFilter(dataModel.filter);
}
else {
this.setFilter(null);
}
}
};
};
NumberFilter.prototype.getApi = function () {
return this.api;
};
return NumberFilter;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = NumberFilter;
/***/ },
/* 36 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var setFilterModel_1 = __webpack_require__(37);
var template = '<div>' +
'<div class="ag-filter-header-container">' +
'<input class="ag-filter-filter" type="text" placeholder="[SEARCH...]"/>' +
'</div>' +
'<div class="ag-filter-header-container">' +
'<label>' +
'<input id="selectAll" type="checkbox" class="ag-filter-checkbox"/>' +
'([SELECT ALL])' +
'</label>' +
'</div>' +
'<div class="ag-filter-list-viewport">' +
'<div class="ag-filter-list-container">' +
'<div id="itemForRepeat" class="ag-filter-item">' +
'<label>' +
'<input type="checkbox" class="ag-filter-checkbox" filter-checkbox="true"/>' +
'<span class="ag-filter-value"></span>' +
'</label>' +
'</div>' +
'</div>' +
'</div>' +
'<div class="ag-filter-apply-panel" id="applyPanel">' +
'<button type="button" id="applyButton">[APPLY FILTER]</button>' +
'</div>' +
'</div>';
var DEFAULT_ROW_HEIGHT = 20;
var SetFilter = (function () {
function SetFilter() {
}
SetFilter.prototype.init = function (params) {
this.filterParams = params.filterParams;
this.rowHeight = (this.filterParams && this.filterParams.cellHeight) ? this.filterParams.cellHeight : DEFAULT_ROW_HEIGHT;
this.applyActive = this.filterParams && this.filterParams.apply === true;
this.model = new setFilterModel_1.default(params.colDef, params.rowModel, params.valueGetter, params.doesRowPassOtherFilter);
this.filterChangedCallback = params.filterChangedCallback;
this.filterModifiedCallback = params.filterModifiedCallback;
this.valueGetter = params.valueGetter;
this.rowsInBodyContainer = {};
this.colDef = params.colDef;
this.localeTextFunc = params.localeTextFunc;
if (this.filterParams) {
this.cellRenderer = this.filterParams.cellRenderer;
}
this.createGui();
this.addScrollListener();
this.createApi();
};
// we need to have the gui attached before we can draw the virtual rows, as the
// virtual row logic needs info about the gui state
SetFilter.prototype.afterGuiAttached = function () {
this.drawVirtualRows();
};
SetFilter.prototype.isFilterActive = function () {
return this.model.isFilterActive();
};
SetFilter.prototype.doesFilterPass = function (node) {
// if no filter, always pass
if (this.model.isEverythingSelected()) {
return true;
}
// if nothing selected in filter, always fail
if (this.model.isNothingSelected()) {
return false;
}
var value = this.valueGetter(node);
value = utils_1.default.makeNull(value);
if (Array.isArray(value)) {
for (var i = 0; i < value.length; i++) {
if (this.model.isValueSelected(value[i])) {
return true;
}
}
return false;
}
else {
return this.model.isValueSelected(value);
}
};
SetFilter.prototype.getGui = function () {
return this.eGui;
};
SetFilter.prototype.onNewRowsLoaded = function () {
var keepSelection = this.filterParams && this.filterParams.newRowsAction === 'keep';
var isSelectAll = this.eSelectAll && this.eSelectAll.checked && !this.eSelectAll.indeterminate;
// default is reset
this.model.refreshAfterNewRowsLoaded(keepSelection, isSelectAll);
this.setContainerHeight();
this.refreshVirtualRows();
};
SetFilter.prototype.onAnyFilterChanged = function () {
this.model.refreshAfterAnyFilterChanged();
this.setContainerHeight();
this.refreshVirtualRows();
};
SetFilter.prototype.createTemplate = function () {
return template
.replace('[SELECT ALL]', this.localeTextFunc('selectAll', 'Select All'))
.replace('[SEARCH...]', this.localeTextFunc('searchOoo', 'Search...'))
.replace('[APPLY FILTER]', this.localeTextFunc('applyFilter', 'Apply Filter'));
};
SetFilter.prototype.createGui = function () {
var _this = this;
this.eGui = utils_1.default.loadTemplate(this.createTemplate());
this.eListContainer = this.eGui.querySelector(".ag-filter-list-container");
this.eFilterValueTemplate = this.eGui.querySelector("#itemForRepeat");
this.eSelectAll = this.eGui.querySelector("#selectAll");
this.eListViewport = this.eGui.querySelector(".ag-filter-list-viewport");
this.eMiniFilter = this.eGui.querySelector(".ag-filter-filter");
this.eListContainer.style.height = (this.model.getUniqueValueCount() * this.rowHeight) + "px";
this.setContainerHeight();
this.eMiniFilter.value = this.model.getMiniFilter();
utils_1.default.addChangeListener(this.eMiniFilter, function () {
_this.onMiniFilterChanged();
});
utils_1.default.removeAllChildren(this.eListContainer);
this.eSelectAll.onclick = this.onSelectAll.bind(this);
if (this.model.isEverythingSelected()) {
this.eSelectAll.indeterminate = false;
this.eSelectAll.checked = true;
}
else if (this.model.isNothingSelected()) {
this.eSelectAll.indeterminate = false;
this.eSelectAll.checked = false;
}
else {
this.eSelectAll.indeterminate = true;
}
this.setupApply();
};
SetFilter.prototype.setupApply = function () {
var _this = this;
if (this.applyActive) {
this.eApplyButton = this.eGui.querySelector('#applyButton');
this.eApplyButton.addEventListener('click', function () {
_this.filterChangedCallback();
});
}
else {
utils_1.default.removeElement(this.eGui, '#applyPanel');
}
};
SetFilter.prototype.setContainerHeight = function () {
this.eListContainer.style.height = (this.model.getDisplayedValueCount() * this.rowHeight) + "px";
};
SetFilter.prototype.drawVirtualRows = function () {
var topPixel = this.eListViewport.scrollTop;
var bottomPixel = topPixel + this.eListViewport.offsetHeight;
var firstRow = Math.floor(topPixel / this.rowHeight);
var lastRow = Math.floor(bottomPixel / this.rowHeight);
this.ensureRowsRendered(firstRow, lastRow);
};
SetFilter.prototype.ensureRowsRendered = function (start, finish) {
var _this = this;
//at the end, this array will contain the items we need to remove
var rowsToRemove = Object.keys(this.rowsInBodyContainer);
//add in new rows
for (var rowIndex = start; rowIndex <= finish; rowIndex++) {
//see if item already there, and if yes, take it out of the 'to remove' array
if (rowsToRemove.indexOf(rowIndex.toString()) >= 0) {
rowsToRemove.splice(rowsToRemove.indexOf(rowIndex.toString()), 1);
continue;
}
//check this row actually exists (in case overflow buffer window exceeds real data)
if (this.model.getDisplayedValueCount() > rowIndex) {
var value = this.model.getDisplayedValue(rowIndex);
_this.insertRow(value, rowIndex);
}
}
//at this point, everything in our 'rowsToRemove' . . .
this.removeVirtualRows(rowsToRemove);
};
//takes array of row id's
SetFilter.prototype.removeVirtualRows = function (rowsToRemove) {
var _this = this;
rowsToRemove.forEach(function (indexToRemove) {
var eRowToRemove = _this.rowsInBodyContainer[indexToRemove];
_this.eListContainer.removeChild(eRowToRemove);
delete _this.rowsInBodyContainer[indexToRemove];
});
};
SetFilter.prototype.insertRow = function (value, rowIndex) {
var _this = this;
var eFilterValue = this.eFilterValueTemplate.cloneNode(true);
var valueElement = eFilterValue.querySelector(".ag-filter-value");
if (this.cellRenderer) {
//renderer provided, so use it
var resultFromRenderer = this.cellRenderer({
value: value
});
if (utils_1.default.isNode(resultFromRenderer)) {
//a dom node or element was returned, so add child
valueElement.appendChild(resultFromRenderer);
}
else {
//otherwise assume it was html, so just insert
valueElement.innerHTML = resultFromRenderer;
}
}
else {
//otherwise display as a string
var blanksText = '(' + this.localeTextFunc('blanks', 'Blanks') + ')';
var displayNameOfValue = value === null ? blanksText : value;
valueElement.innerHTML = displayNameOfValue;
}
var eCheckbox = eFilterValue.querySelector("input");
eCheckbox.checked = this.model.isValueSelected(value);
eCheckbox.onclick = function () {
_this.onCheckboxClicked(eCheckbox, value);
};
eFilterValue.style.top = (this.rowHeight * rowIndex) + "px";
this.eListContainer.appendChild(eFilterValue);
this.rowsInBodyContainer[rowIndex] = eFilterValue;
};
SetFilter.prototype.onCheckboxClicked = function (eCheckbox, value) {
var checked = eCheckbox.checked;
if (checked) {
this.model.selectValue(value);
if (this.model.isEverythingSelected()) {
this.eSelectAll.indeterminate = false;
this.eSelectAll.checked = true;
}
else {
this.eSelectAll.indeterminate = true;
}
}
else {
this.model.unselectValue(value);
//if set is empty, nothing is selected
if (this.model.isNothingSelected()) {
this.eSelectAll.indeterminate = false;
this.eSelectAll.checked = false;
}
else {
this.eSelectAll.indeterminate = true;
}
}
this.filterChanged();
};
SetFilter.prototype.filterChanged = function () {
this.filterModifiedCallback();
if (!this.applyActive) {
this.filterChangedCallback();
}
};
SetFilter.prototype.onMiniFilterChanged = function () {
var miniFilterChanged = this.model.setMiniFilter(this.eMiniFilter.value);
if (miniFilterChanged) {
this.setContainerHeight();
this.refreshVirtualRows();
}
};
SetFilter.prototype.refreshVirtualRows = function () {
this.clearVirtualRows();
this.drawVirtualRows();
};
SetFilter.prototype.clearVirtualRows = function () {
var rowsToRemove = Object.keys(this.rowsInBodyContainer);
this.removeVirtualRows(rowsToRemove);
};
SetFilter.prototype.onSelectAll = function () {
var checked = this.eSelectAll.checked;
if (checked) {
this.model.selectEverything();
}
else {
this.model.selectNothing();
}
this.updateAllCheckboxes(checked);
this.filterChanged();
};
SetFilter.prototype.updateAllCheckboxes = function (checked) {
var currentlyDisplayedCheckboxes = this.eListContainer.querySelectorAll("[filter-checkbox=true]");
for (var i = 0, l = currentlyDisplayedCheckboxes.length; i < l; i++) {
currentlyDisplayedCheckboxes[i].checked = checked;
}
};
SetFilter.prototype.addScrollListener = function () {
var _this = this;
this.eListViewport.addEventListener("scroll", function () {
_this.drawVirtualRows();
});
};
SetFilter.prototype.getApi = function () {
return this.api;
};
SetFilter.prototype.createApi = function () {
var model = this.model;
var that = this;
this.api = {
setMiniFilter: function (newMiniFilter) {
model.setMiniFilter(newMiniFilter);
},
getMiniFilter: function () {
return model.getMiniFilter();
},
selectEverything: function () {
that.eSelectAll.indeterminate = false;
that.eSelectAll.checked = true;
// not sure if we need to call this, as checking the checkout above might
// fire events.
model.selectEverything();
},
isFilterActive: function () {
return model.isFilterActive();
},
selectNothing: function () {
that.eSelectAll.indeterminate = false;
that.eSelectAll.checked = false;
// not sure if we need to call this, as checking the checkout above might
// fire events.
model.selectNothing();
},
unselectValue: function (value) {
model.unselectValue(value);
that.refreshVirtualRows();
},
selectValue: function (value) {
model.selectValue(value);
that.refreshVirtualRows();
},
isValueSelected: function (value) {
return model.isValueSelected(value);
},
isEverythingSelected: function () {
return model.isEverythingSelected();
},
isNothingSelected: function () {
return model.isNothingSelected();
},
getUniqueValueCount: function () {
return model.getUniqueValueCount();
},
getUniqueValue: function (index) {
return model.getUniqueValue(index);
},
getModel: function () {
return model.getModel();
},
setModel: function (dataModel) {
model.setModel(dataModel);
that.refreshVirtualRows();
}
};
};
return SetFilter;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SetFilter;
/***/ },
/* 37 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var SetFilterModel = (function () {
function SetFilterModel(colDef, rowModel, valueGetter, doesRowPassOtherFilters) {
this.colDef = colDef;
this.rowModel = rowModel;
this.valueGetter = valueGetter;
this.doesRowPassOtherFilters = doesRowPassOtherFilters;
this.filterParams = this.colDef.filterParams;
this.usingProvidedSet = this.filterParams && this.filterParams.values;
this.showingAvailableOnly = this.filterParams && !this.filterParams.suppressRemoveEntries;
this.createAllUniqueValues();
this.createAvailableUniqueValues();
// by default, no filter, so we display everything
this.displayedValues = this.availableUniqueValues;
this.miniFilter = null;
// we use a map rather than an array for the selected values as the lookup
// for a map is much faster than the lookup for an array, especially when
// the length of the array is thousands of records long
this.selectedValuesMap = {};
this.selectEverything();
}
// if keepSelection not set will always select all filters
// if keepSelection set will keep current state of selected filters
// unless selectAll chosen in which case will select all
SetFilterModel.prototype.refreshAfterNewRowsLoaded = function (keepSelection, isSelectAll) {
this.createAllUniqueValues();
this.createAvailableUniqueValues();
var oldModel = Object.keys(this.selectedValuesMap);
this.selectedValuesMap = {};
this.processMiniFilter();
if (keepSelection) {
this.setModel(oldModel, isSelectAll);
}
else {
this.selectEverything();
}
};
SetFilterModel.prototype.refreshAfterAnyFilterChanged = function () {
if (this.showingAvailableOnly) {
this.createAvailableUniqueValues();
this.processMiniFilter();
}
};
SetFilterModel.prototype.createAllUniqueValues = function () {
if (this.usingProvidedSet) {
this.allUniqueValues = utils_1.default.toStrings(this.filterParams.values);
}
else {
this.allUniqueValues = utils_1.default.toStrings(this.getUniqueValues(false));
}
this.sortValues(this.allUniqueValues);
};
SetFilterModel.prototype.createAvailableUniqueValues = function () {
var dontCheckAvailableValues = !this.showingAvailableOnly || this.usingProvidedSet;
if (dontCheckAvailableValues) {
this.availableUniqueValues = this.allUniqueValues;
return;
}
this.availableUniqueValues = utils_1.default.toStrings(this.getUniqueValues(true));
this.sortValues(this.availableUniqueValues);
};
SetFilterModel.prototype.sortValues = function (values) {
if (this.filterParams && this.filterParams.comparator) {
values.sort(this.filterParams.comparator);
}
else if (this.colDef.comparator) {
values.sort(this.colDef.comparator);
}
else {
values.sort(utils_1.default.defaultComparator);
}
};
SetFilterModel.prototype.getUniqueValues = function (filterOutNotAvailable) {
var _this = this;
var uniqueCheck = {};
var result = [];
this.rowModel.forEachNode(function (node) {
if (!node.group) {
var value = _this.valueGetter(node);
if (value === "" || value === undefined) {
value = null;
}
if (filterOutNotAvailable) {
if (!_this.doesRowPassOtherFilters(node)) {
return;
}
}
if (value != null && Array.isArray(value)) {
for (var j = 0; j < value.length; j++) {
addUniqueValueIfMissing(value[j]);
}
}
else {
addUniqueValueIfMissing(value);
}
}
});
function addUniqueValueIfMissing(value) {
if (!uniqueCheck.hasOwnProperty(value)) {
result.push(value);
uniqueCheck[value] = 1;
}
}
return result;
};
//sets mini filter. returns true if it changed from last value, otherwise false
SetFilterModel.prototype.setMiniFilter = function (newMiniFilter) {
newMiniFilter = utils_1.default.makeNull(newMiniFilter);
if (this.miniFilter === newMiniFilter) {
//do nothing if filter has not changed
return false;
}
this.miniFilter = newMiniFilter;
this.processMiniFilter();
return true;
};
SetFilterModel.prototype.getMiniFilter = function () {
return this.miniFilter;
};
SetFilterModel.prototype.processMiniFilter = function () {
// if no filter, just use the unique values
if (this.miniFilter === null) {
this.displayedValues = this.availableUniqueValues;
return;
}
// if filter present, we filter down the list
this.displayedValues = [];
var miniFilterUpperCase = this.miniFilter.toUpperCase();
for (var i = 0, l = this.availableUniqueValues.length; i < l; i++) {
var filteredValue = this.availableUniqueValues[i];
if (filteredValue !== null && filteredValue.toString().toUpperCase().indexOf(miniFilterUpperCase) >= 0) {
this.displayedValues.push(filteredValue);
}
}
};
SetFilterModel.prototype.getDisplayedValueCount = function () {
return this.displayedValues.length;
};
SetFilterModel.prototype.getDisplayedValue = function (index) {
return this.displayedValues[index];
};
SetFilterModel.prototype.selectEverything = function () {
var count = this.allUniqueValues.length;
for (var i = 0; i < count; i++) {
var value = this.allUniqueValues[i];
this.selectedValuesMap[value] = null;
}
this.selectedValuesCount = count;
};
SetFilterModel.prototype.isFilterActive = function () {
return this.allUniqueValues.length !== this.selectedValuesCount;
};
SetFilterModel.prototype.selectNothing = function () {
this.selectedValuesMap = {};
this.selectedValuesCount = 0;
};
SetFilterModel.prototype.getUniqueValueCount = function () {
return this.allUniqueValues.length;
};
SetFilterModel.prototype.getUniqueValue = function (index) {
return this.allUniqueValues[index];
};
SetFilterModel.prototype.unselectValue = function (value) {
if (this.selectedValuesMap[value] !== undefined) {
delete this.selectedValuesMap[value];
this.selectedValuesCount--;
}
};
SetFilterModel.prototype.selectValue = function (value) {
if (this.selectedValuesMap[value] === undefined) {
this.selectedValuesMap[value] = null;
this.selectedValuesCount++;
}
};
SetFilterModel.prototype.isValueSelected = function (value) {
return this.selectedValuesMap[value] !== undefined;
};
SetFilterModel.prototype.isEverythingSelected = function () {
return this.allUniqueValues.length === this.selectedValuesCount;
};
SetFilterModel.prototype.isNothingSelected = function () {
return this.allUniqueValues.length === 0;
};
SetFilterModel.prototype.getModel = function () {
if (!this.isFilterActive()) {
return null;
}
var selectedValues = [];
utils_1.default.iterateObject(this.selectedValuesMap, function (key) {
selectedValues.push(key);
});
return selectedValues;
};
SetFilterModel.prototype.setModel = function (model, isSelectAll) {
if (model && !isSelectAll) {
this.selectNothing();
for (var i = 0; i < model.length; i++) {
var newValue = model[i];
if (this.allUniqueValues.indexOf(newValue) >= 0) {
this.selectValue(model[i]);
}
else {
console.warn('Value ' + newValue + ' is not a valid value for filter');
}
}
}
else {
this.selectEverything();
}
};
return SetFilterModel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SetFilterModel;
/***/ },
/* 38 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var ValueService = (function () {
function ValueService() {
}
ValueService.prototype.init = function (gridOptionsWrapper, expressionService, columnController) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.expressionService = expressionService;
this.columnController = columnController;
};
ValueService.prototype.getValue = function (colDef, data, node) {
var cellExpressions = this.gridOptionsWrapper.isEnableCellExpressions();
var field = colDef.field;
var result;
// if there is a value getter, this gets precedence over a field
if (colDef.valueGetter) {
result = this.executeValueGetter(colDef.valueGetter, data, colDef, node);
}
else if (field && data) {
result = this.getValueUsingField(data, field);
}
else {
result = undefined;
}
// the result could be an expression itself, if we are allowing cell values to be expressions
if (cellExpressions && (typeof result === 'string') && result.indexOf('=') === 0) {
var cellValueGetter = result.substring(1);
result = this.executeValueGetter(cellValueGetter, data, colDef, node);
}
return result;
};
ValueService.prototype.getValueUsingField = function (data, field) {
if (!field || !data) {
return;
}
// if no '.', then it's not a deep value
if (field.indexOf('.') < 0) {
return data[field];
}
else {
// otherwise it is a deep value, so need to dig for it
var fields = field.split('.');
var currentObject = data;
for (var i = 0; i < fields.length; i++) {
currentObject = currentObject[fields[i]];
if (!currentObject) {
return null;
}
}
return currentObject;
}
};
ValueService.prototype.setValueUsingField = function (data, field, newValue) {
if (!field || !data) {
return;
}
// if no '.', then it's not a deep value
if (field.indexOf('.') < 0) {
data[field] = newValue;
}
else {
// otherwise it is a deep value, so need to dig for it
var fieldPieces = field.split('.');
var currentObject = data;
while (fieldPieces.length > 0 && currentObject) {
var fieldPiece = fieldPieces.shift();
if (fieldPieces.length === 0) {
currentObject[fieldPiece] = newValue;
}
else {
currentObject = currentObject[fieldPiece];
}
}
}
};
ValueService.prototype.executeValueGetter = function (valueGetter, data, colDef, node) {
var context = this.gridOptionsWrapper.getContext();
var api = this.gridOptionsWrapper.getApi();
var params = {
data: data,
node: node,
colDef: colDef,
api: api,
context: context,
getValue: this.getValueCallback.bind(this, data, node)
};
if (typeof valueGetter === 'function') {
// valueGetter is a function, so just call it
return valueGetter(params);
}
else if (typeof valueGetter === 'string') {
// valueGetter is an expression, so execute the expression
return this.expressionService.evaluate(valueGetter, params);
}
};
ValueService.prototype.getValueCallback = function (data, node, field) {
var otherColumn = this.columnController.getColumn(field);
if (otherColumn) {
return this.getValue(otherColumn.getColDef(), data, node);
}
else {
return null;
}
};
return ValueService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ValueService;
/***/ },
/* 39 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var events_1 = __webpack_require__(5);
var MasterSlaveService = (function () {
function MasterSlaveService() {
// flag to mark if we are consuming. to avoid cyclic events (ie slave firing back to master
// while processing a master event) we mark this if consuming an event, and if we are, then
// we don't fire back any events.
this.consuming = false;
}
MasterSlaveService.prototype.init = function (gridOptionsWrapper, columnController, gridPanel, loggerFactory, eventService) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.columnController = columnController;
this.gridPanel = gridPanel;
this.eventService = eventService;
this.logger = loggerFactory.create('MasterSlaveService');
eventService.addEventListener(events_1.Events.EVENT_COLUMN_MOVED, this.fireColumnEvent.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_VISIBLE, this.fireColumnEvent.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_PINNED, this.fireColumnEvent.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_GROUP_OPENED, this.fireColumnEvent.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_RESIZED, this.fireColumnEvent.bind(this));
};
// common logic across all the fire methods
MasterSlaveService.prototype.fireEvent = function (callback) {
// if we are already consuming, then we are acting on an event from a master,
// so we don't cause a cyclic firing of events
if (this.consuming) {
return;
}
// iterate through the slave grids, and pass each slave service to the callback
var slaveGrids = this.gridOptionsWrapper.getSlaveGrids();
if (slaveGrids) {
slaveGrids.forEach(function (slaveGridOptions) {
if (slaveGridOptions.api) {
var slaveService = slaveGridOptions.api.__getMasterSlaveService();
callback(slaveService);
}
});
}
};
// common logic across all consume methods. very little common logic, however extracting
// guarantees consistency across the methods.
MasterSlaveService.prototype.onEvent = function (callback) {
this.consuming = true;
callback();
this.consuming = false;
};
MasterSlaveService.prototype.fireColumnEvent = function (event) {
this.fireEvent(function (slaveService) {
slaveService.onColumnEvent(event);
});
};
MasterSlaveService.prototype.fireHorizontalScrollEvent = function (horizontalScroll) {
this.fireEvent(function (slaveService) {
slaveService.onScrollEvent(horizontalScroll);
});
};
MasterSlaveService.prototype.onScrollEvent = function (horizontalScroll) {
var _this = this;
this.onEvent(function () {
_this.gridPanel.setHorizontalScrollPosition(horizontalScroll);
});
};
MasterSlaveService.prototype.getMasterColumns = function (event) {
var result = [];
if (event.getColumn()) {
result.push(event.getColumn());
}
if (event.getColumns()) {
event.getColumns().forEach(function (column) {
result.push(column);
});
}
return result;
};
MasterSlaveService.prototype.getColumnIds = function (event) {
var result = [];
if (event.getColumn()) {
result.push(event.getColumn().getColId());
}
if (event.getColumns()) {
event.getColumns().forEach(function (column) {
result.push(column.getColId());
});
}
return result;
};
MasterSlaveService.prototype.onColumnEvent = function (event) {
var _this = this;
this.onEvent(function () {
// the column in the event is from the master grid. need to
// look up the equivalent from this (slave) grid
var masterColumn = event.getColumn();
var slaveColumn;
if (masterColumn) {
slaveColumn = _this.columnController.getColumn(masterColumn.getColId());
}
// if event was with respect to a master column, that is not present in this
// grid, then we ignore the event
if (masterColumn && !slaveColumn) {
return;
}
// likewise for column group
var masterColumnGroup = event.getColumnGroup();
var slaveColumnGroup;
if (masterColumnGroup) {
var colId = masterColumnGroup.getGroupId();
var instanceId = masterColumnGroup.getInstanceId();
slaveColumnGroup = _this.columnController.getColumnGroup(colId, instanceId);
}
if (masterColumnGroup && !slaveColumnGroup) {
return;
}
// in time, all the methods below should use the column ids, it's a more generic way
// of handling columns, and also allows for single or multi column events
var columnIds = _this.getColumnIds(event);
var masterColumns = _this.getMasterColumns(event);
switch (event.getType()) {
case events_1.Events.EVENT_COLUMN_MOVED:
_this.logger.log('onColumnEvent-> processing ' + event + ' toIndex = ' + event.getToIndex());
_this.columnController.moveColumns(columnIds, event.getToIndex());
break;
case events_1.Events.EVENT_COLUMN_VISIBLE:
_this.logger.log('onColumnEvent-> processing ' + event + ' visible = ' + event.isVisible());
_this.columnController.setColumnsVisible(columnIds, event.isVisible());
break;
case events_1.Events.EVENT_COLUMN_PINNED:
_this.logger.log('onColumnEvent-> processing ' + event + ' pinned = ' + event.getPinned());
_this.columnController.setColumnsPinned(columnIds, event.getPinned());
break;
case events_1.Events.EVENT_COLUMN_GROUP_OPENED:
_this.logger.log('onColumnEvent-> processing ' + event + ' expanded = ' + masterColumnGroup.isExpanded());
_this.columnController.setColumnGroupOpened(slaveColumnGroup, masterColumnGroup.isExpanded());
break;
case events_1.Events.EVENT_COLUMN_RESIZED:
masterColumns.forEach(function (masterColumn) {
_this.logger.log('onColumnEvent-> processing ' + event + ' actualWidth = ' + masterColumn.getActualWidth());
_this.columnController.setColumnWidth(masterColumn.getColId(), masterColumn.getActualWidth(), event.isFinished());
});
break;
}
});
};
return MasterSlaveService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = MasterSlaveService;
/***/ },
/* 40 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
/** Functionality for internal DnD functionality between GUI widgets. Eg this service is used to drag columns
* from the 'available columns' list and putting them into the 'grouped columns' in the tool panel.
* This service is NOT used by the column headers for resizing and moving, that is a different use case. */
var DragAndDropService = (function () {
function DragAndDropService() {
}
DragAndDropService.prototype.init = function (loggerFactory) {
this.logger = loggerFactory.create('DragAndDropService');
// need to clean this up, add to 'finished' logic in grid
var that = this;
this.mouseUpEventListener = function listener() {
that.stopDragging();
};
document.addEventListener('mouseup', this.mouseUpEventListener);
this.logger.log('initialised');
};
DragAndDropService.prototype.destroy = function () {
document.removeEventListener('mouseup', this.mouseUpEventListener);
this.logger.log('destroyed');
};
DragAndDropService.prototype.stopDragging = function () {
if (this.dragItem) {
this.setDragCssClasses(this.dragItem.eDragSource, false);
this.dragItem = null;
}
};
DragAndDropService.prototype.setDragCssClasses = function (eListItem, dragging) {
utils_1.default.addOrRemoveCssClass(eListItem, 'ag-dragging', dragging);
utils_1.default.addOrRemoveCssClass(eListItem, 'ag-not-dragging', !dragging);
};
DragAndDropService.prototype.addDragSource = function (eDragSource, dragSourceCallback) {
this.setDragCssClasses(eDragSource, false);
eDragSource.addEventListener('mousedown', this.onMouseDownDragSource.bind(this, eDragSource, dragSourceCallback));
};
DragAndDropService.prototype.onMouseDownDragSource = function (eDragSource, dragSourceCallback) {
if (this.dragItem) {
this.stopDragging();
}
var data;
if (dragSourceCallback.getData) {
data = dragSourceCallback.getData();
}
var containerId;
if (dragSourceCallback.getContainerId) {
containerId = dragSourceCallback.getContainerId();
}
this.dragItem = {
eDragSource: eDragSource,
data: data,
containerId: containerId
};
this.setDragCssClasses(this.dragItem.eDragSource, true);
};
DragAndDropService.prototype.addDropTarget = function (eDropTarget, dropTargetCallback) {
var mouseIn = false;
var acceptDrag = false;
var that = this;
eDropTarget.addEventListener('mouseover', function () {
if (!mouseIn) {
mouseIn = true;
if (that.dragItem) {
acceptDrag = dropTargetCallback.acceptDrag(that.dragItem);
}
else {
acceptDrag = false;
}
}
});
eDropTarget.addEventListener('mouseout', function () {
if (acceptDrag) {
dropTargetCallback.noDrop();
}
mouseIn = false;
acceptDrag = false;
});
eDropTarget.addEventListener('mouseup', function () {
// dragItem should never be null, checking just in case
if (acceptDrag && that.dragItem) {
dropTargetCallback.drop(that.dragItem);
}
});
};
return DragAndDropService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = DragAndDropService;
/***/ },
/* 41 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var borderLayout_1 = __webpack_require__(42);
// in the html below, it is important that there are no white space between some of the divs, as if there is white space,
// it won't render correctly in safari, as safari renders white space as a gap
var gridHtml = '<div>' +
// header
'<div class="ag-header">' +
'<div class="ag-pinned-left-header"></div>' +
'<div class="ag-pinned-right-header"></div>' +
'<div class="ag-header-viewport">' +
'<div class="ag-header-container"></div>' +
'</div>' +
'<div class="ag-header-overlay"></div>' +
'</div>' +
// floating top
'<div class="ag-floating-top">' +
'<div class="ag-pinned-left-floating-top"></div>' +
'<div class="ag-pinned-right-floating-top"></div>' +
'<div class="ag-floating-top-viewport">' +
'<div class="ag-floating-top-container"></div>' +
'</div>' +
'</div>' +
// floating bottom
'<div class="ag-floating-bottom">' +
'<div class="ag-pinned-left-floating-bottom"></div>' +
'<div class="ag-pinned-right-floating-bottom"></div>' +
'<div class="ag-floating-bottom-viewport">' +
'<div class="ag-floating-bottom-container"></div>' +
'</div>' +
'</div>' +
// body
'<div class="ag-body">' +
'<div class="ag-pinned-left-cols-viewport">' +
'<div class="ag-pinned-left-cols-container"></div>' +
'</div>' +
'<div class="ag-pinned-right-cols-viewport">' +
'<div class="ag-pinned-right-cols-container"></div>' +
'</div>' +
'<div class="ag-body-viewport-wrapper">' +
'<div class="ag-body-viewport">' +
'<div class="ag-body-container"></div>' +
'</div>' +
'</div>' +
'</div>' +
'</div>';
var gridForPrintHtml = '<div>' +
// header
'<div class="ag-header-container"></div>' +
// floating
'<div class="ag-floating-top-container"></div>' +
// body
'<div class="ag-body-container"></div>' +
// floating bottom
'<div class="ag-floating-bottom-container"></div>' +
'</div>';
// wrapping in outer div, and wrapper, is needed to center the loading icon
// The idea for centering came from here: http://www.vanseodesign.com/css/vertical-centering/
var mainOverlayTemplate = '<div class="ag-overlay-panel">' +
'<div class="ag-overlay-wrapper ag-overlay-[OVERLAY_NAME]-wrapper">[OVERLAY_TEMPLATE]</div>' +
'</div>';
var defaultLoadingOverlayTemplate = '<span class="ag-overlay-loading-center">[LOADING...]</span>';
var defaultNoRowsOverlayTemplate = '<span class="ag-overlay-no-rows-center">[NO_ROWS_TO_SHOW]</span>';
var GridPanel = (function () {
function GridPanel() {
this.scrollLagCounter = 0;
this.lastLeftPosition = -1;
this.lastTopPosition = -1;
}
GridPanel.prototype.init = function (gridOptionsWrapper, columnController, rowRenderer, masterSlaveService, loggerFactory, floatingRowModel) {
this.gridOptionsWrapper = gridOptionsWrapper;
// makes code below more readable if we pull 'forPrint' out
this.forPrint = this.gridOptionsWrapper.isForPrint();
this.setupComponents();
this.scrollWidth = utils_1.default.getScrollbarWidth();
this.columnController = columnController;
this.rowRenderer = rowRenderer;
this.masterSlaveService = masterSlaveService;
this.floatingRowModel = floatingRowModel;
this.logger = loggerFactory.create('GridPanel');
};
GridPanel.prototype.getLayout = function () {
return this.layout;
};
GridPanel.prototype.setupComponents = function () {
if (this.forPrint) {
this.eRoot = utils_1.default.loadTemplate(gridForPrintHtml);
utils_1.default.addCssClass(this.eRoot, 'ag-root ag-no-scrolls');
}
else {
this.eRoot = utils_1.default.loadTemplate(gridHtml);
utils_1.default.addCssClass(this.eRoot, 'ag-root ag-scrolls');
}
this.findElements();
this.layout = new borderLayout_1.default({
overlays: {
loading: utils_1.default.loadTemplate(this.createLoadingOverlayTemplate()),
noRows: utils_1.default.loadTemplate(this.createNoRowsOverlayTemplate())
},
center: this.eRoot,
dontFill: this.forPrint,
name: 'eGridPanel'
});
this.layout.addSizeChangeListener(this.onBodyHeightChange.bind(this));
this.addScrollListener();
if (this.gridOptionsWrapper.isSuppressHorizontalScroll()) {
this.eBodyViewport.style.overflowX = 'hidden';
}
};
GridPanel.prototype.setMovingCss = function (moving) {
utils_1.default.addOrRemoveCssClass(this.eRoot, 'ag-column-moving', moving);
};
GridPanel.prototype.getPinnedLeftFloatingTop = function () {
return this.ePinnedLeftFloatingTop;
};
GridPanel.prototype.getPinnedRightFloatingTop = function () {
return this.ePinnedRightFloatingTop;
};
GridPanel.prototype.getFloatingTopContainer = function () {
return this.eFloatingTopContainer;
};
GridPanel.prototype.getPinnedLeftFloatingBottom = function () {
return this.ePinnedLeftFloatingBottom;
};
GridPanel.prototype.getPinnedRightFloatingBottom = function () {
return this.ePinnedRightFloatingBottom;
};
GridPanel.prototype.getFloatingBottomContainer = function () {
return this.eFloatingBottomContainer;
};
GridPanel.prototype.createOverlayTemplate = function (name, defaultTemplate, userProvidedTemplate) {
var template = mainOverlayTemplate
.replace('[OVERLAY_NAME]', name);
if (userProvidedTemplate) {
template = template.replace('[OVERLAY_TEMPLATE]', userProvidedTemplate);
}
else {
template = template.replace('[OVERLAY_TEMPLATE]', defaultTemplate);
}
return template;
};
GridPanel.prototype.createLoadingOverlayTemplate = function () {
var userProvidedTemplate = this.gridOptionsWrapper.getOverlayLoadingTemplate();
var templateNotLocalised = this.createOverlayTemplate('loading', defaultLoadingOverlayTemplate, userProvidedTemplate);
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
var templateLocalised = templateNotLocalised.replace('[LOADING...]', localeTextFunc('loadingOoo', 'Loading...'));
return templateLocalised;
};
GridPanel.prototype.createNoRowsOverlayTemplate = function () {
var userProvidedTemplate = this.gridOptionsWrapper.getOverlayNoRowsTemplate();
var templateNotLocalised = this.createOverlayTemplate('no-rows', defaultNoRowsOverlayTemplate, userProvidedTemplate);
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
var templateLocalised = templateNotLocalised.replace('[NO_ROWS_TO_SHOW]', localeTextFunc('noRowsToShow', 'No Rows To Show'));
return templateLocalised;
};
GridPanel.prototype.ensureIndexVisible = function (index) {
this.logger.log('ensureIndexVisible: ' + index);
var lastRow = this.rowModel.getVirtualRowCount();
if (typeof index !== 'number' || index < 0 || index >= lastRow) {
console.warn('invalid row index for ensureIndexVisible: ' + index);
return;
}
var nodeAtIndex = this.rowModel.getVirtualRow(index);
var rowTopPixel = nodeAtIndex.rowTop;
var rowBottomPixel = rowTopPixel + nodeAtIndex.rowHeight;
var viewportTopPixel = this.eBodyViewport.scrollTop;
var viewportHeight = this.eBodyViewport.offsetHeight;
var scrollShowing = this.isHorizontalScrollShowing();
if (scrollShowing) {
viewportHeight -= this.scrollWidth;
}
var viewportBottomPixel = viewportTopPixel + viewportHeight;
var viewportScrolledPastRow = viewportTopPixel > rowTopPixel;
var viewportScrolledBeforeRow = viewportBottomPixel < rowBottomPixel;
var eViewportToScroll = this.columnController.isPinningRight() ? this.ePinnedRightColsViewport : this.eBodyViewport;
if (viewportScrolledPastRow) {
// if row is before, scroll up with row at top
eViewportToScroll.scrollTop = rowTopPixel;
}
else if (viewportScrolledBeforeRow) {
// if row is below, scroll down with row at bottom
var newScrollPosition = rowBottomPixel - viewportHeight;
eViewportToScroll.scrollTop = newScrollPosition;
}
// otherwise, row is already in view, so do nothing
};
// + moveColumnController
GridPanel.prototype.getCenterWidth = function () {
return this.eBodyViewport.clientWidth;
};
GridPanel.prototype.isHorizontalScrollShowing = function () {
var result = this.eBodyViewport.clientWidth < this.eBodyViewport.scrollWidth;
return result;
};
GridPanel.prototype.isVerticalScrollShowing = function () {
if (this.columnController.isPinningRight()) {
// if pinning right, then the scroll bar can show, however for some reason
// it overlays the grid and doesn't take space.
return false;
}
else {
return this.eBodyViewport.clientHeight < this.eBodyViewport.scrollHeight;
}
};
// gets called every 500 ms. we use this to set padding on right pinned column
GridPanel.prototype.periodicallyCheck = function () {
if (this.columnController.isPinningRight()) {
var bodyHorizontalScrollShowing = this.eBodyViewport.clientWidth < this.eBodyViewport.scrollWidth;
if (bodyHorizontalScrollShowing) {
this.ePinnedRightColsContainer.style.marginBottom = this.scrollWidth + 'px';
}
else {
this.ePinnedRightColsContainer.style.marginBottom = '';
}
}
};
GridPanel.prototype.ensureColumnVisible = function (key) {
var column = this.columnController.getColumn(key);
if (column.isPinned()) {
console.warn('calling ensureIndexVisible on a ' + column.getPinned() + ' pinned column doesn\'t make sense for column ' + column.getColId());
return;
}
if (!this.columnController.isColumnDisplayed(column)) {
console.warn('column is not currently visible');
return;
}
var colLeftPixel = column.getLeft();
var colRightPixel = colLeftPixel + column.getActualWidth();
var viewportLeftPixel = this.eBodyViewport.scrollLeft;
var viewportWidth = this.eBodyViewport.offsetWidth;
var scrollShowing = this.eBodyViewport.clientHeight < this.eBodyViewport.scrollHeight;
if (scrollShowing) {
viewportWidth -= this.scrollWidth;
}
var viewportRightPixel = viewportLeftPixel + viewportWidth;
var viewportScrolledPastCol = viewportLeftPixel > colLeftPixel;
var viewportScrolledBeforeCol = viewportRightPixel < colRightPixel;
if (viewportScrolledPastCol) {
// if viewport's left side is after col's left side, scroll right to pull col into viewport at left
this.eBodyViewport.scrollLeft = colLeftPixel;
}
else if (viewportScrolledBeforeCol) {
// if viewport's right side is before col's right side, scroll left to pull col into viewport at right
var newScrollPosition = colRightPixel - viewportWidth;
this.eBodyViewport.scrollLeft = newScrollPosition;
}
// otherwise, col is already in view, so do nothing
};
GridPanel.prototype.showLoadingOverlay = function () {
if (!this.gridOptionsWrapper.isSuppressLoadingOverlay()) {
this.layout.showOverlay('loading');
}
};
GridPanel.prototype.showNoRowsOverlay = function () {
if (!this.gridOptionsWrapper.isSuppressNoRowsOverlay()) {
this.layout.showOverlay('noRows');
}
};
GridPanel.prototype.hideOverlay = function () {
this.layout.hideOverlay();
};
GridPanel.prototype.getWidthForSizeColsToFit = function () {
var availableWidth = this.eBody.clientWidth;
var scrollShowing = this.isVerticalScrollShowing();
if (scrollShowing) {
availableWidth -= this.scrollWidth;
}
return availableWidth;
};
// method will call itself if no available width. this covers if the grid
// isn't visible, but is just about to be visible.
GridPanel.prototype.sizeColumnsToFit = function (nextTimeout) {
var _this = this;
var availableWidth = this.getWidthForSizeColsToFit();
if (availableWidth > 0) {
this.columnController.sizeColumnsToFit(availableWidth);
}
else {
if (nextTimeout === undefined) {
setTimeout(function () {
_this.sizeColumnsToFit(100);
}, 0);
}
else if (nextTimeout === 100) {
setTimeout(function () {
_this.sizeColumnsToFit(-1);
}, 100);
}
else {
console.log('ag-Grid: tried to call sizeColumnsToFit() but the grid is coming back with ' +
'zero width, maybe the grid is not visible yet on the screen?');
}
}
};
GridPanel.prototype.setRowModel = function (rowModel) {
this.rowModel = rowModel;
};
GridPanel.prototype.getBodyContainer = function () {
return this.eBodyContainer;
};
GridPanel.prototype.getBodyViewport = function () {
return this.eBodyViewport;
};
GridPanel.prototype.getPinnedLeftColsContainer = function () {
return this.ePinnedLeftColsContainer;
};
GridPanel.prototype.getPinnedRightColsContainer = function () {
return this.ePinnedRightColsContainer;
};
GridPanel.prototype.getHeaderContainer = function () {
return this.eHeaderContainer;
};
GridPanel.prototype.getHeaderOverlay = function () {
return this.eHeaderOverlay;
};
GridPanel.prototype.getRoot = function () {
return this.eRoot;
};
GridPanel.prototype.getPinnedLeftHeader = function () {
return this.ePinnedLeftHeader;
};
GridPanel.prototype.getPinnedRightHeader = function () {
return this.ePinnedRightHeader;
};
GridPanel.prototype.getRowsParent = function () {
return this.eParentsOfRows;
};
GridPanel.prototype.queryHtmlElement = function (selector) {
return this.eRoot.querySelector(selector);
};
GridPanel.prototype.findElements = function () {
if (this.forPrint) {
this.eHeaderContainer = this.queryHtmlElement('.ag-header-container');
this.eBodyContainer = this.queryHtmlElement('.ag-body-container');
this.eFloatingTopContainer = this.queryHtmlElement('.ag-floating-top-container');
this.eFloatingBottomContainer = this.queryHtmlElement('.ag-floating-bottom-container');
this.eParentsOfRows = [this.eBodyContainer, this.eFloatingTopContainer, this.eFloatingBottomContainer];
}
else {
this.eBody = this.queryHtmlElement('.ag-body');
this.eBodyContainer = this.queryHtmlElement('.ag-body-container');
this.eBodyViewport = this.queryHtmlElement('.ag-body-viewport');
this.eBodyViewportWrapper = this.queryHtmlElement('.ag-body-viewport-wrapper');
this.ePinnedLeftColsContainer = this.queryHtmlElement('.ag-pinned-left-cols-container');
this.ePinnedRightColsContainer = this.queryHtmlElement('.ag-pinned-right-cols-container');
this.ePinnedLeftColsViewport = this.queryHtmlElement('.ag-pinned-left-cols-viewport');
this.ePinnedRightColsViewport = this.queryHtmlElement('.ag-pinned-right-cols-viewport');
this.ePinnedLeftHeader = this.queryHtmlElement('.ag-pinned-left-header');
this.ePinnedRightHeader = this.queryHtmlElement('.ag-pinned-right-header');
this.eHeader = this.queryHtmlElement('.ag-header');
this.eHeaderContainer = this.queryHtmlElement('.ag-header-container');
this.eHeaderOverlay = this.queryHtmlElement('.ag-header-overlay');
this.eHeaderViewport = this.queryHtmlElement('.ag-header-viewport');
this.eFloatingTop = this.queryHtmlElement('.ag-floating-top');
this.ePinnedLeftFloatingTop = this.queryHtmlElement('.ag-pinned-left-floating-top');
this.ePinnedRightFloatingTop = this.queryHtmlElement('.ag-pinned-right-floating-top');
this.eFloatingTopContainer = this.queryHtmlElement('.ag-floating-top-container');
this.eFloatingBottom = this.queryHtmlElement('.ag-floating-bottom');
this.ePinnedLeftFloatingBottom = this.queryHtmlElement('.ag-pinned-left-floating-bottom');
this.ePinnedRightFloatingBottom = this.queryHtmlElement('.ag-pinned-right-floating-bottom');
this.eFloatingBottomContainer = this.queryHtmlElement('.ag-floating-bottom-container');
// for scrolls, all rows live in eBody (containing pinned and normal body)
this.eParentsOfRows = [this.eBody, this.eFloatingTop, this.eFloatingBottom];
// IE9, Chrome, Safari, Opera
this.ePinnedLeftColsViewport.addEventListener('mousewheel', this.pinnedLeftMouseWheelListener.bind(this));
this.eBodyViewport.addEventListener('mousewheel', this.centerMouseWheelListener.bind(this));
// Firefox
this.ePinnedLeftColsViewport.addEventListener('DOMMouseScroll', this.pinnedLeftMouseWheelListener.bind(this));
this.eBodyViewport.addEventListener('DOMMouseScroll', this.centerMouseWheelListener.bind(this));
}
};
GridPanel.prototype.getHeaderViewport = function () {
return this.eHeaderViewport;
};
GridPanel.prototype.centerMouseWheelListener = function (event) {
// we are only interested in mimicking the mouse wheel if we are pinning on the right,
// as if we are not pinning on the right, then we have scrollbars in the center body, and
// as such we just use the default browser wheel behaviour.
if (this.columnController.isPinningRight()) {
return this.generalMouseWheelListener(event, this.ePinnedRightColsViewport);
}
};
GridPanel.prototype.pinnedLeftMouseWheelListener = function (event) {
var targetPanel;
if (this.columnController.isPinningRight()) {
targetPanel = this.ePinnedRightColsViewport;
}
else {
targetPanel = this.eBodyViewport;
}
return this.generalMouseWheelListener(event, targetPanel);
};
GridPanel.prototype.generalMouseWheelListener = function (event, targetPanel) {
var delta;
if (event.deltaY && event.deltaX != 0) {
// tested on chrome
delta = event.deltaY;
}
else if (event.wheelDelta && event.wheelDelta != 0) {
// tested on IE
delta = -event.wheelDelta;
}
else if (event.detail && event.detail != 0) {
// tested on Firefox. Firefox appears to be slower, 20px rather than the 100px in Chrome and IE
delta = event.detail * 20;
}
else {
// couldn't find delta
return;
}
var newTopPosition = this.eBodyViewport.scrollTop + delta;
targetPanel.scrollTop = newTopPosition;
// if we don't prevent default, then the whole browser will scroll also as well as the grid
event.preventDefault();
return false;
};
GridPanel.prototype.setBodyContainerWidth = function () {
var mainRowWidth = this.columnController.getBodyContainerWidth() + 'px';
this.eBodyContainer.style.width = mainRowWidth;
if (!this.forPrint) {
this.eFloatingBottomContainer.style.width = mainRowWidth;
this.eFloatingTopContainer.style.width = mainRowWidth;
}
};
GridPanel.prototype.setPinnedColContainerWidth = function () {
if (this.forPrint) {
// pinned col doesn't exist when doing forPrint
return;
}
var pinnedLeftWidth = this.columnController.getPinnedLeftContainerWidth() + 'px';
this.ePinnedLeftColsContainer.style.width = pinnedLeftWidth;
this.ePinnedLeftFloatingBottom.style.width = pinnedLeftWidth;
this.ePinnedLeftFloatingTop.style.width = pinnedLeftWidth;
this.eBodyViewportWrapper.style.marginLeft = pinnedLeftWidth;
var pinnedRightWidth = this.columnController.getPinnedRightContainerWidth() + 'px';
this.ePinnedRightColsContainer.style.width = pinnedRightWidth;
this.ePinnedRightFloatingBottom.style.width = pinnedRightWidth;
this.ePinnedRightFloatingTop.style.width = pinnedRightWidth;
this.eBodyViewportWrapper.style.marginRight = pinnedRightWidth;
};
GridPanel.prototype.showPinnedColContainersIfNeeded = function () {
// no need to do this if not using scrolls
if (this.forPrint) {
return;
}
//some browsers had layout issues with the blank divs, so if blank,
//we don't display them
if (this.columnController.isPinningLeft()) {
this.ePinnedLeftHeader.style.display = 'inline-block';
this.ePinnedLeftColsViewport.style.display = 'inline';
}
else {
this.ePinnedLeftHeader.style.display = 'none';
this.ePinnedLeftColsViewport.style.display = 'none';
}
if (this.columnController.isPinningRight()) {
this.ePinnedRightHeader.style.display = 'inline-block';
this.ePinnedRightColsViewport.style.display = 'inline';
this.eBodyViewport.style.overflowY = 'hidden';
}
else {
this.ePinnedRightHeader.style.display = 'none';
this.ePinnedRightColsViewport.style.display = 'none';
this.eBodyViewport.style.overflowY = 'auto';
}
};
GridPanel.prototype.onBodyHeightChange = function () {
this.sizeHeaderAndBody();
};
GridPanel.prototype.sizeHeaderAndBody = function () {
if (this.forPrint) {
// if doing 'for print', then the header and footers are laid
// out naturally by the browser. it whatever size that's needed to fit.
return;
}
var heightOfContainer = this.layout.getCentreHeight();
if (!heightOfContainer) {
return;
}
var headerHeight = this.gridOptionsWrapper.getHeaderHeight();
var numberOfRowsInHeader = this.columnController.getHeaderRowCount();
var totalHeaderHeight = headerHeight * numberOfRowsInHeader;
this.eHeader.style['height'] = totalHeaderHeight + 'px';
// padding top covers the header and the floating rows on top
var floatingTopHeight = this.floatingRowModel.getFloatingTopTotalHeight();
var paddingTop = totalHeaderHeight + floatingTopHeight;
// bottom is just the bottom floating rows
var floatingBottomHeight = this.floatingRowModel.getFloatingBottomTotalHeight();
var floatingBottomTop = heightOfContainer - floatingBottomHeight;
var heightOfCentreRows = heightOfContainer - totalHeaderHeight - floatingBottomHeight - floatingTopHeight;
this.eBody.style.paddingTop = paddingTop + 'px';
this.eBody.style.paddingBottom = floatingBottomHeight + 'px';
this.eFloatingTop.style.top = totalHeaderHeight + 'px';
this.eFloatingTop.style.height = floatingTopHeight + 'px';
this.eFloatingBottom.style.height = floatingBottomHeight + 'px';
this.eFloatingBottom.style.top = floatingBottomTop + 'px';
this.ePinnedLeftColsViewport.style.height = heightOfCentreRows + 'px';
this.ePinnedRightColsViewport.style.height = heightOfCentreRows + 'px';
};
GridPanel.prototype.setHorizontalScrollPosition = function (hScrollPosition) {
this.eBodyViewport.scrollLeft = hScrollPosition;
};
// tries to scroll by pixels, but returns what the result actually was
GridPanel.prototype.scrollHorizontally = function (pixels) {
var oldScrollPosition = this.eBodyViewport.scrollLeft;
this.setHorizontalScrollPosition(oldScrollPosition + pixels);
var newScrollPosition = this.eBodyViewport.scrollLeft;
return newScrollPosition - oldScrollPosition;
};
GridPanel.prototype.getHorizontalScrollPosition = function () {
return this.eBodyViewport.scrollLeft;
};
GridPanel.prototype.addScrollListener = function () {
var _this = this;
// if printing, then no scrolling, so no point in listening for scroll events
if (this.forPrint) {
return;
}
this.eBodyViewport.addEventListener('scroll', function () {
// we are always interested in horizontal scrolls of the body
var newLeftPosition = _this.eBodyViewport.scrollLeft;
if (newLeftPosition !== _this.lastLeftPosition) {
_this.lastLeftPosition = newLeftPosition;
_this.horizontallyScrollHeaderCenterAndFloatingCenter(newLeftPosition);
_this.masterSlaveService.fireHorizontalScrollEvent(newLeftPosition);
}
// if we are pinning to the right, then it's the right pinned container
// that has the scroll.
if (!_this.columnController.isPinningRight()) {
var newTopPosition = _this.eBodyViewport.scrollTop;
if (newTopPosition !== _this.lastTopPosition) {
_this.lastTopPosition = newTopPosition;
_this.verticallyScrollLeftPinned(newTopPosition);
_this.requestDrawVirtualRows();
}
}
});
this.ePinnedRightColsViewport.addEventListener('scroll', function () {
var newTopPosition = _this.ePinnedRightColsViewport.scrollTop;
if (newTopPosition !== _this.lastTopPosition) {
_this.lastTopPosition = newTopPosition;
_this.verticallyScrollLeftPinned(newTopPosition);
_this.verticallyScrollBody(newTopPosition);
_this.requestDrawVirtualRows();
}
});
// this means the pinned panel was moved, which can only
// happen when the user is navigating in the pinned container
// as the pinned col should never scroll. so we rollback
// the scroll on the pinned.
this.ePinnedLeftColsViewport.addEventListener('scroll', function () {
_this.ePinnedLeftColsViewport.scrollTop = 0;
});
};
GridPanel.prototype.requestDrawVirtualRows = function () {
var _this = this;
// if we are in IE or Safari, then we only redraw if there was no scroll event
// in the 50ms following this scroll event. without this, these browsers have
// a bad scrolling feel, where the redraws clog the scroll experience
// (makes the scroll clunky and sticky). this method is like throttling
// the scroll events.
var useScrollLag;
// let the user override scroll lag option
if (this.gridOptionsWrapper.isSuppressScrollLag()) {
useScrollLag = false;
}
else if (this.gridOptionsWrapper.getIsScrollLag()) {
useScrollLag = this.gridOptionsWrapper.getIsScrollLag()();
}
else {
useScrollLag = utils_1.default.isBrowserIE() || utils_1.default.isBrowserSafari();
}
if (useScrollLag) {
this.scrollLagCounter++;
var scrollLagCounterCopy = this.scrollLagCounter;
setTimeout(function () {
if (_this.scrollLagCounter === scrollLagCounterCopy) {
_this.rowRenderer.drawVirtualRows();
}
}, 50);
}
else {
this.rowRenderer.drawVirtualRows();
}
};
GridPanel.prototype.horizontallyScrollHeaderCenterAndFloatingCenter = function (bodyLeftPosition) {
// this.eHeaderContainer.style.transform = 'translate3d(' + -bodyLeftPosition + 'px,0,0)';
this.eHeaderContainer.style.left = -bodyLeftPosition + 'px';
this.eFloatingBottomContainer.style.left = -bodyLeftPosition + 'px';
this.eFloatingTopContainer.style.left = -bodyLeftPosition + 'px';
};
GridPanel.prototype.verticallyScrollLeftPinned = function (bodyTopPosition) {
// this.ePinnedColsContainer.style.transform = 'translate3d(0,' + -bodyTopPosition + 'px,0)';
this.ePinnedLeftColsContainer.style.top = -bodyTopPosition + 'px';
};
GridPanel.prototype.verticallyScrollBody = function (position) {
this.eBodyViewport.scrollTop = position;
};
return GridPanel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = GridPanel;
/***/ },
/* 42 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var BorderLayout = (function () {
function BorderLayout(params) {
this.sizeChangeListeners = [];
this.isLayoutPanel = true;
this.fullHeight = !params.north && !params.south;
var template;
if (!params.dontFill) {
if (this.fullHeight) {
template =
'<div style="height: 100%; overflow: auto; position: relative;">' +
'<div id="west" style="height: 100%; float: left;"></div>' +
'<div id="east" style="height: 100%; float: right;"></div>' +
'<div id="center" style="height: 100%;"></div>' +
'<div id="overlay" style="pointer-events: none; position: absolute; height: 100%; width: 100%; top: 0px; left: 0px;"></div>' +
'</div>';
}
else {
template =
'<div style="height: 100%; position: relative;">' +
'<div id="north"></div>' +
'<div id="centerRow" style="height: 100%; overflow: hidden;">' +
'<div id="west" style="height: 100%; float: left;"></div>' +
'<div id="east" style="height: 100%; float: right;"></div>' +
'<div id="center" style="height: 100%;"></div>' +
'</div>' +
'<div id="south"></div>' +
'<div id="overlay" style="pointer-events: none; position: absolute; height: 100%; width: 100%; top: 0px; left: 0px;"></div>' +
'</div>';
}
this.layoutActive = true;
}
else {
template =
'<div style="position: relative;">' +
'<div id="north"></div>' +
'<div id="centerRow">' +
'<div id="west"></div>' +
'<div id="east"></div>' +
'<div id="center"></div>' +
'</div>' +
'<div id="south"></div>' +
'<div id="overlay" style="pointer-events: none; position: absolute; height: 100%; width: 100%; top: 0px; left: 0px;"></div>' +
'</div>';
this.layoutActive = false;
}
this.eGui = utils_1.default.loadTemplate(template);
this.id = 'borderLayout';
if (params.name) {
this.id += '_' + params.name;
}
this.eGui.setAttribute('id', this.id);
this.childPanels = [];
if (params) {
this.setupPanels(params);
}
this.overlays = params.overlays;
this.setupOverlays();
}
BorderLayout.prototype.addSizeChangeListener = function (listener) {
this.sizeChangeListeners.push(listener);
};
BorderLayout.prototype.fireSizeChanged = function () {
this.sizeChangeListeners.forEach(function (listener) {
listener();
});
};
BorderLayout.prototype.setupPanels = function (params) {
this.eNorthWrapper = this.eGui.querySelector('#north');
this.eSouthWrapper = this.eGui.querySelector('#south');
this.eEastWrapper = this.eGui.querySelector('#east');
this.eWestWrapper = this.eGui.querySelector('#west');
this.eCenterWrapper = this.eGui.querySelector('#center');
this.eOverlayWrapper = this.eGui.querySelector('#overlay');
this.eCenterRow = this.eGui.querySelector('#centerRow');
this.eNorthChildLayout = this.setupPanel(params.north, this.eNorthWrapper);
this.eSouthChildLayout = this.setupPanel(params.south, this.eSouthWrapper);
this.eEastChildLayout = this.setupPanel(params.east, this.eEastWrapper);
this.eWestChildLayout = this.setupPanel(params.west, this.eWestWrapper);
this.eCenterChildLayout = this.setupPanel(params.center, this.eCenterWrapper);
};
BorderLayout.prototype.setupPanel = function (content, ePanel) {
if (!ePanel) {
return;
}
if (content) {
if (content.isLayoutPanel) {
this.childPanels.push(content);
ePanel.appendChild(content.getGui());
return content;
}
else {
ePanel.appendChild(content);
return null;
}
}
else {
ePanel.parentNode.removeChild(ePanel);
return null;
}
};
BorderLayout.prototype.getGui = function () {
return this.eGui;
};
// returns true if any item changed size, otherwise returns false
BorderLayout.prototype.doLayout = function () {
if (!utils_1.default.isVisible(this.eGui)) {
return false;
}
var atLeastOneChanged = false;
var childLayouts = [this.eNorthChildLayout, this.eSouthChildLayout, this.eEastChildLayout, this.eWestChildLayout];
var that = this;
utils_1.default.forEach(childLayouts, function (childLayout) {
var childChangedSize = that.layoutChild(childLayout);
if (childChangedSize) {
atLeastOneChanged = true;
}
});
if (this.layoutActive) {
var ourHeightChanged = this.layoutHeight();
var ourWidthChanged = this.layoutWidth();
if (ourHeightChanged || ourWidthChanged) {
atLeastOneChanged = true;
}
}
var centerChanged = this.layoutChild(this.eCenterChildLayout);
if (centerChanged) {
atLeastOneChanged = true;
}
if (atLeastOneChanged) {
this.fireSizeChanged();
}
return atLeastOneChanged;
};
BorderLayout.prototype.layoutChild = function (childPanel) {
if (childPanel) {
return childPanel.doLayout();
}
else {
return false;
}
};
BorderLayout.prototype.layoutHeight = function () {
if (this.fullHeight) {
return this.layoutHeightFullHeight();
}
else {
return this.layoutHeightNormal();
}
};
// full height never changes the height, because the center is always 100%,
// however we do check for change, to inform the listeners
BorderLayout.prototype.layoutHeightFullHeight = function () {
var centerHeight = utils_1.default.offsetHeight(this.eGui);
if (centerHeight < 0) {
centerHeight = 0;
}
if (this.centerHeightLastTime !== centerHeight) {
this.centerHeightLastTime = centerHeight;
return true;
}
else {
return false;
}
};
BorderLayout.prototype.layoutHeightNormal = function () {
var totalHeight = utils_1.default.offsetHeight(this.eGui);
var northHeight = utils_1.default.offsetHeight(this.eNorthWrapper);
var southHeight = utils_1.default.offsetHeight(this.eSouthWrapper);
var centerHeight = totalHeight - northHeight - southHeight;
if (centerHeight < 0) {
centerHeight = 0;
}
if (this.centerHeightLastTime !== centerHeight) {
this.eCenterRow.style.height = centerHeight + 'px';
this.centerHeightLastTime = centerHeight;
return true; // return true because there was a change
}
else {
return false;
}
};
BorderLayout.prototype.getCentreHeight = function () {
return this.centerHeightLastTime;
};
BorderLayout.prototype.layoutWidth = function () {
var totalWidth = utils_1.default.offsetWidth(this.eGui);
var eastWidth = utils_1.default.offsetWidth(this.eEastWrapper);
var westWidth = utils_1.default.offsetWidth(this.eWestWrapper);
var centerWidth = totalWidth - eastWidth - westWidth;
if (centerWidth < 0) {
centerWidth = 0;
}
this.eCenterWrapper.style.width = centerWidth + 'px';
};
BorderLayout.prototype.setEastVisible = function (visible) {
if (this.eEastWrapper) {
this.eEastWrapper.style.display = visible ? '' : 'none';
}
this.doLayout();
};
BorderLayout.prototype.setupOverlays = function () {
// if no overlays, just remove the panel
if (!this.overlays) {
this.eOverlayWrapper.parentNode.removeChild(this.eOverlayWrapper);
return;
}
this.hideOverlay();
//
//this.setOverlayVisible(false);
};
BorderLayout.prototype.hideOverlay = function () {
utils_1.default.removeAllChildren(this.eOverlayWrapper);
this.eOverlayWrapper.style.display = 'none';
};
BorderLayout.prototype.showOverlay = function (key) {
var overlay = this.overlays ? this.overlays[key] : null;
if (overlay) {
utils_1.default.removeAllChildren(this.eOverlayWrapper);
this.eOverlayWrapper.style.display = '';
this.eOverlayWrapper.appendChild(overlay);
}
else {
console.log('ag-Grid: unknown overlay');
this.hideOverlay();
}
};
BorderLayout.prototype.setSouthVisible = function (visible) {
if (this.eSouthWrapper) {
this.eSouthWrapper.style.display = visible ? '' : 'none';
}
this.doLayout();
};
return BorderLayout;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = BorderLayout;
/***/ },
/* 43 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var csvCreator_1 = __webpack_require__(44);
var constants_1 = __webpack_require__(3);
var GridApi = (function () {
function GridApi(grid, rowRenderer, headerRenderer, filterManager, columnController, inMemoryRowController, selectionController, gridOptionsWrapper, gridPanel, valueService, masterSlaveService, eventService, floatingRowModel) {
this.grid = grid;
this.rowRenderer = rowRenderer;
this.headerRenderer = headerRenderer;
this.filterManager = filterManager;
this.columnController = columnController;
this.inMemoryRowController = inMemoryRowController;
this.selectionController = selectionController;
this.gridOptionsWrapper = gridOptionsWrapper;
this.gridPanel = gridPanel;
this.valueService = valueService;
this.masterSlaveService = masterSlaveService;
this.eventService = eventService;
this.floatingRowModel = floatingRowModel;
this.csvCreator = new csvCreator_1.default(this.inMemoryRowController, this.columnController, this.grid, this.valueService);
}
/** Used internally by grid. Not intended to be used by the client. Interface may change between releases. */
GridApi.prototype.__getMasterSlaveService = function () {
return this.masterSlaveService;
};
GridApi.prototype.getDataAsCsv = function (params) {
return this.csvCreator.getDataAsCsv(params);
};
GridApi.prototype.exportDataAsCsv = function (params) {
this.csvCreator.exportDataAsCsv(params);
};
GridApi.prototype.setDatasource = function (datasource) {
this.grid.setDatasource(datasource);
};
GridApi.prototype.onNewDatasource = function () {
console.log('ag-Grid: onNewDatasource deprecated, please use setDatasource()');
this.grid.setDatasource();
};
GridApi.prototype.setRowData = function (rowData) {
this.grid.setRowData(rowData);
};
GridApi.prototype.setRows = function (rows) {
console.log('ag-Grid: setRows deprecated, please use setRowData()');
this.grid.setRowData(rows);
};
GridApi.prototype.onNewRows = function () {
console.log('ag-Grid: onNewRows deprecated, please use setRowData()');
this.grid.setRowData();
};
GridApi.prototype.setFloatingTopRowData = function (rows) {
this.floatingRowModel.setFloatingTopRowData(rows);
this.gridPanel.onBodyHeightChange();
this.refreshView();
};
GridApi.prototype.setFloatingBottomRowData = function (rows) {
this.floatingRowModel.setFloatingBottomRowData(rows);
this.gridPanel.onBodyHeightChange();
this.refreshView();
};
GridApi.prototype.onNewCols = function () {
console.error("ag-Grid: deprecated, please call setColumnDefs instead providing a list of the defs");
this.grid.setColumnDefs();
};
GridApi.prototype.setColumnDefs = function (colDefs) {
this.grid.setColumnDefs(colDefs);
};
GridApi.prototype.unselectAll = function () {
console.error("unselectAll deprecated, call deselectAll instead");
this.deselectAll();
};
GridApi.prototype.refreshRows = function (rowNodes) {
this.rowRenderer.refreshRows(rowNodes);
};
GridApi.prototype.refreshCells = function (rowNodes, colIds) {
this.rowRenderer.refreshCells(rowNodes, colIds);
};
GridApi.prototype.rowDataChanged = function (rows) {
this.rowRenderer.rowDataChanged(rows);
};
GridApi.prototype.refreshView = function () {
this.rowRenderer.refreshView();
};
GridApi.prototype.softRefreshView = function () {
this.rowRenderer.softRefreshView();
};
GridApi.prototype.refreshGroupRows = function () {
this.rowRenderer.refreshGroupRows();
};
GridApi.prototype.refreshHeader = function () {
// need to review this - the refreshHeader should also refresh all icons in the header
this.headerRenderer.refreshHeader();
this.headerRenderer.updateFilterIcons();
};
GridApi.prototype.isAnyFilterPresent = function () {
return this.filterManager.isAnyFilterPresent();
};
GridApi.prototype.isAdvancedFilterPresent = function () {
return this.filterManager.isAdvancedFilterPresent();
};
GridApi.prototype.isQuickFilterPresent = function () {
return this.filterManager.isQuickFilterPresent();
};
GridApi.prototype.getModel = function () {
return this.grid.getRowModel();
};
GridApi.prototype.onGroupExpandedOrCollapsed = function (refreshFromIndex) {
this.grid.updateModelAndRefresh(constants_1.default.STEP_MAP, refreshFromIndex);
};
GridApi.prototype.expandAll = function () {
this.inMemoryRowController.expandOrCollapseAll(true, null);
this.grid.updateModelAndRefresh(constants_1.default.STEP_MAP);
};
GridApi.prototype.collapseAll = function () {
this.inMemoryRowController.expandOrCollapseAll(false, null);
this.grid.updateModelAndRefresh(constants_1.default.STEP_MAP);
};
GridApi.prototype.addVirtualRowListener = function (eventName, rowIndex, callback) {
if (typeof eventName !== 'string') {
console.log('ag-Grid: addVirtualRowListener has changed, the first parameter should be the event name, pleae check the documentation.');
}
this.grid.addVirtualRowListener(eventName, rowIndex, callback);
};
GridApi.prototype.setQuickFilter = function (newFilter) {
this.grid.onQuickFilterChanged(newFilter);
};
GridApi.prototype.selectIndex = function (index, tryMulti, suppressEvents) {
this.selectionController.selectIndex(index, tryMulti, suppressEvents);
};
GridApi.prototype.deselectIndex = function (index, suppressEvents) {
if (suppressEvents === void 0) { suppressEvents = false; }
this.selectionController.deselectIndex(index, suppressEvents);
};
GridApi.prototype.selectNode = function (node, tryMulti, suppressEvents) {
if (tryMulti === void 0) { tryMulti = false; }
if (suppressEvents === void 0) { suppressEvents = false; }
this.selectionController.selectNode(node, tryMulti, suppressEvents);
};
GridApi.prototype.deselectNode = function (node, suppressEvents) {
if (suppressEvents === void 0) { suppressEvents = false; }
this.selectionController.deselectNode(node, suppressEvents);
};
GridApi.prototype.selectAll = function () {
this.selectionController.selectAll();
this.rowRenderer.refreshView();
};
GridApi.prototype.deselectAll = function () {
this.selectionController.deselectAll();
this.rowRenderer.refreshView();
};
GridApi.prototype.recomputeAggregates = function () {
this.inMemoryRowController.doAggregate();
this.rowRenderer.refreshGroupRows();
};
GridApi.prototype.sizeColumnsToFit = function () {
if (this.gridOptionsWrapper.isForPrint()) {
console.warn('ag-grid: sizeColumnsToFit does not work when forPrint=true');
return;
}
this.gridPanel.sizeColumnsToFit();
};
GridApi.prototype.showLoadingOverlay = function () {
this.grid.showLoadingOverlay();
};
GridApi.prototype.showNoRowsOverlay = function () {
this.grid.showNoRowsOverlay();
};
GridApi.prototype.hideOverlay = function () {
this.grid.hideOverlay();
};
GridApi.prototype.showLoading = function (show) {
console.warn('ag-Grid: showLoading is deprecated, please use api.showLoadingOverlay() and api.hideOverlay() instead');
if (show) {
this.grid.showLoadingOverlay();
}
else {
this.grid.hideOverlay();
}
};
GridApi.prototype.isNodeSelected = function (node) {
return this.selectionController.isNodeSelected(node);
};
GridApi.prototype.getSelectedNodesById = function () {
return this.selectionController.getSelectedNodesById();
};
GridApi.prototype.getSelectedNodes = function () {
return this.selectionController.getSelectedNodes();
};
GridApi.prototype.getSelectedRows = function () {
return this.selectionController.getSelectedRows();
};
GridApi.prototype.getBestCostNodeSelection = function () {
return this.selectionController.getBestCostNodeSelection();
};
GridApi.prototype.getRenderedNodes = function () {
return this.rowRenderer.getRenderedNodes();
};
GridApi.prototype.ensureColIndexVisible = function (index) {
console.warn('ag-Grid: ensureColIndexVisible(index) no longer supported, use ensureColumnVisible(colKey) instead.');
};
GridApi.prototype.ensureColumnVisible = function (key) {
this.gridPanel.ensureColumnVisible(key);
};
GridApi.prototype.ensureIndexVisible = function (index) {
this.gridPanel.ensureIndexVisible(index);
};
GridApi.prototype.ensureNodeVisible = function (comparator) {
this.grid.ensureNodeVisible(comparator);
};
GridApi.prototype.forEachInMemory = function (callback) {
console.warn('ag-Grid: please use forEachNode instead of forEachInMemory, method is same, I just renamed it, forEachInMemory is deprecated');
this.forEachNode(callback);
};
GridApi.prototype.forEachNode = function (callback) {
this.grid.getRowModel().forEachNode(callback);
};
GridApi.prototype.forEachNodeAfterFilter = function (callback) {
this.grid.getRowModel().forEachNodeAfterFilter(callback);
};
GridApi.prototype.forEachNodeAfterFilterAndSort = function (callback) {
this.grid.getRowModel().forEachNodeAfterFilterAndSort(callback);
};
GridApi.prototype.getFilterApiForColDef = function (colDef) {
console.warn('ag-grid API method getFilterApiForColDef deprecated, use getFilterApi instead');
return this.getFilterApi(colDef);
};
GridApi.prototype.getFilterApi = function (key) {
var column = this.columnController.getColumn(key);
return this.filterManager.getFilterApi(column);
};
GridApi.prototype.getColumnDef = function (key) {
var column = this.columnController.getColumn(key);
if (column) {
return column.getColDef();
}
else {
return null;
}
};
GridApi.prototype.onFilterChanged = function () {
this.grid.onFilterChanged();
};
GridApi.prototype.setSortModel = function (sortModel) {
this.grid.setSortModel(sortModel);
};
GridApi.prototype.getSortModel = function () {
return this.grid.getSortModel();
};
GridApi.prototype.setFilterModel = function (model) {
this.filterManager.setFilterModel(model);
};
GridApi.prototype.getFilterModel = function () {
return this.grid.getFilterModel();
};
GridApi.prototype.getFocusedCell = function () {
return this.rowRenderer.getFocusedCell();
};
GridApi.prototype.setFocusedCell = function (rowIndex, colId) {
this.grid.setFocusedCell(rowIndex, colId);
};
GridApi.prototype.setHeaderHeight = function (headerHeight) {
this.gridOptionsWrapper.setHeaderHeight(headerHeight);
this.gridPanel.onBodyHeightChange();
};
GridApi.prototype.showToolPanel = function (show) {
this.grid.showToolPanel(show);
};
GridApi.prototype.isToolPanelShowing = function () {
return this.grid.isToolPanelShowing();
};
GridApi.prototype.doLayout = function () {
this.grid.doLayout();
};
GridApi.prototype.getValue = function (colDef, data, node) {
return this.valueService.getValue(colDef, data, node);
};
GridApi.prototype.addEventListener = function (eventType, listener) {
this.eventService.addEventListener(eventType, listener);
};
GridApi.prototype.addGlobalListener = function (listener) {
this.eventService.addGlobalListener(listener);
};
GridApi.prototype.removeEventListener = function (eventType, listener) {
this.eventService.removeEventListener(eventType, listener);
};
GridApi.prototype.removeGlobalListener = function (listener) {
this.eventService.removeGlobalListener(listener);
};
GridApi.prototype.dispatchEvent = function (eventType, event) {
this.eventService.dispatchEvent(eventType, event);
};
GridApi.prototype.refreshRowGroup = function () {
this.grid.refreshRowGroup();
};
GridApi.prototype.destroy = function () {
this.grid.destroy();
};
return GridApi;
})();
exports.GridApi = GridApi;
/***/ },
/* 44 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var LINE_SEPARATOR = '\r\n';
var CsvCreator = (function () {
function CsvCreator(rowController, columnController, grid, valueService) {
this.rowController = rowController;
this.columnController = columnController;
this.grid = grid;
this.valueService = valueService;
}
CsvCreator.prototype.exportDataAsCsv = function (params) {
var csvString = this.getDataAsCsv(params);
var fileNamePresent = params && params.fileName && params.fileName.length !== 0;
var fileName = fileNamePresent ? params.fileName : 'export.csv';
// for Excel, we need \ufeff at the start
// http://stackoverflow.com/questions/17879198/adding-utf-8-bom-to-string-blob
var blobObject = new Blob(["\ufeff", csvString], {
type: "text/csv;charset=utf-8;"
});
// Internet Explorer
if (window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blobObject, fileName);
}
else {
// Chrome
var downloadLink = document.createElement("a");
downloadLink.href = window.URL.createObjectURL(blobObject);
downloadLink.download = fileName;
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
};
CsvCreator.prototype.getDataAsCsv = function (params) {
var _this = this;
if (!this.grid.isUsingInMemoryModel()) {
console.log('ag-Grid: getDataAsCsv not available when doing virtual pagination');
return '';
}
var result = '';
var skipGroups = params && params.skipGroups;
var skipHeader = params && params.skipHeader;
var skipFooters = params && params.skipFooters;
var includeCustomHeader = params && params.customHeader;
var includeCustomFooter = params && params.customFooter;
var allColumns = params && params.allColumns;
var columnSeparator = (params && params.columnSeparator) || ',';
var columnsToExport;
if (allColumns) {
columnsToExport = this.columnController.getAllColumns();
}
else {
columnsToExport = this.columnController.getAllDisplayedColumns();
}
if (!columnsToExport || columnsToExport.length === 0) {
return '';
}
if (includeCustomHeader) {
result += params.customHeader;
}
// first pass, put in the header names of the cols
if (!skipHeader) {
columnsToExport.forEach(function (column, index) {
var nameForCol = _this.columnController.getDisplayNameForCol(column);
if (nameForCol === null || nameForCol === undefined) {
nameForCol = '';
}
if (index != 0) {
result += columnSeparator;
}
result += '"' + _this.escape(nameForCol) + '"';
});
result += LINE_SEPARATOR;
}
this.rowController.forEachNodeAfterFilterAndSort(function (node) {
if (skipGroups && node.group) {
return;
}
if (skipFooters && node.footer) {
return;
}
columnsToExport.forEach(function (column, index) {
var valueForCell;
if (node.group && index === 0) {
valueForCell = _this.createValueForGroupNode(node);
}
else {
valueForCell = _this.valueService.getValue(column.getColDef(), node.data, node);
}
if (valueForCell === null || valueForCell === undefined) {
valueForCell = '';
}
if (index != 0) {
result += columnSeparator;
}
result += '"' + _this.escape(valueForCell) + '"';
});
result += LINE_SEPARATOR;
});
if (includeCustomFooter) {
result += params.customFooter;
}
return result;
};
CsvCreator.prototype.createValueForGroupNode = function (node) {
var keys = [node.key];
while (node.parent) {
node = node.parent;
keys.push(node.key);
}
return keys.reverse().join(' -> ');
};
// replace each " with "" (ie two sets of double quotes is how to do double quotes in csv)
CsvCreator.prototype.escape = function (value) {
if (value === null || value === undefined) {
return '';
}
var stringValue;
if (typeof value === 'string') {
stringValue = value;
}
else if (typeof value.toString === 'function') {
stringValue = value.toString();
}
else {
console.warn('known value type during csv conversio');
stringValue = '';
}
return stringValue.replace(/"/g, "\"\"");
};
return CsvCreator;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = CsvCreator;
/***/ },
/* 45 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var svgFactory_1 = __webpack_require__(27);
var svgFactory = svgFactory_1.default.getInstance();
var HeaderTemplateLoader = (function () {
function HeaderTemplateLoader() {
}
HeaderTemplateLoader.prototype.init = function (gridOptionsWrapper) {
this.gridOptionsWrapper = gridOptionsWrapper;
};
HeaderTemplateLoader.prototype.createHeaderElement = function (column) {
var params = {
column: column,
colDef: column.getColDef,
context: this.gridOptionsWrapper.getContext(),
api: this.gridOptionsWrapper.getApi()
};
// option 1 - see if user provided a template in colDef
var userProvidedTemplate = column.getColDef().headerCellTemplate;
if (typeof userProvidedTemplate === 'function') {
var colDefFunc = userProvidedTemplate;
userProvidedTemplate = colDefFunc(params);
}
// option 2 - check the gridOptions for cellTemplate
if (!userProvidedTemplate && this.gridOptionsWrapper.getHeaderCellTemplate()) {
userProvidedTemplate = this.gridOptionsWrapper.getHeaderCellTemplate();
}
// option 3 - check the gridOptions for templateFunction
if (!userProvidedTemplate && this.gridOptionsWrapper.getHeaderCellTemplateFunc()) {
var gridOptionsFunc = this.gridOptionsWrapper.getHeaderCellTemplateFunc();
userProvidedTemplate = gridOptionsFunc(params);
}
// finally, if still no template, use the default
if (!userProvidedTemplate) {
userProvidedTemplate = this.createDefaultHeaderElement(column);
}
// template can be a string or a dom element, if string we need to convert to a dom element
var result;
if (typeof userProvidedTemplate === 'string') {
result = utils_1.default.loadTemplate(userProvidedTemplate);
}
else if (utils_1.default.isNodeOrElement(userProvidedTemplate)) {
result = userProvidedTemplate;
}
else {
console.error('ag-Grid: header template must be a string or an HTML element');
}
return result;
};
HeaderTemplateLoader.prototype.createDefaultHeaderElement = function (column) {
var eTemplate = utils_1.default.loadTemplate(HeaderTemplateLoader.HEADER_CELL_TEMPLATE);
this.addInIcon(eTemplate, 'sortAscending', '#agSortAsc', column, svgFactory.createArrowUpSvg);
this.addInIcon(eTemplate, 'sortDescending', '#agSortDesc', column, svgFactory.createArrowDownSvg);
this.addInIcon(eTemplate, 'sortUnSort', '#agNoSort', column, svgFactory.createArrowUpDownSvg);
this.addInIcon(eTemplate, 'menu', '#agMenu', column, svgFactory.createMenuSvg);
this.addInIcon(eTemplate, 'filter', '#agFilter', column, svgFactory.createFilterSvg);
return eTemplate;
};
HeaderTemplateLoader.prototype.addInIcon = function (eTemplate, iconName, cssSelector, column, defaultIconFactory) {
var eIcon = utils_1.default.createIconNoSpan(iconName, this.gridOptionsWrapper, column, defaultIconFactory);
eTemplate.querySelector(cssSelector).appendChild(eIcon);
};
HeaderTemplateLoader.HEADER_CELL_TEMPLATE = '<div class="ag-header-cell">' +
' <div id="agResizeBar" class="ag-header-cell-resize"></div>' +
' <span id="agMenu" class="ag-header-icon ag-header-cell-menu-button"></span>' +
' <div id="agHeaderCellLabel" class="ag-header-cell-label">' +
' <span id="agSortAsc" class="ag-header-icon ag-sort-ascending-icon"></span>' +
' <span id="agSortDesc" class="ag-header-icon ag-sort-descending-icon"></span>' +
' <span id="agNoSort" class="ag-header-icon ag-sort-none-icon"></span>' +
' <span id="agFilter" class="ag-header-icon ag-filter-icon"></span>' +
' <span id="agText" class="ag-header-cell-text"></span>' +
' </div>' +
'</div>';
return HeaderTemplateLoader;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = HeaderTemplateLoader;
/***/ },
/* 46 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var columnKeyCreator_1 = __webpack_require__(47);
var originalColumnGroup_1 = __webpack_require__(17);
var column_1 = __webpack_require__(8);
// takes in a list of columns, as specified by the column definitions, and returns column groups
var BalancedColumnTreeBuilder = (function () {
function BalancedColumnTreeBuilder() {
}
BalancedColumnTreeBuilder.prototype.init = function (gridOptionsWrapper, loggerFactory, columnUtils) {
this.gridOptionsWrapper = gridOptionsWrapper;
this.columnUtils = columnUtils;
this.logger = loggerFactory.create('BalancedColumnTreeBuilder');
};
BalancedColumnTreeBuilder.prototype.createBalancedColumnGroups = function (abstractColDefs) {
// column key creator dishes out unique column id's in a deterministic way,
// so if we have two grids (that cold be master/slave) with same column definitions,
// then this ensures the two grids use identical id's.
var columnKeyCreator = new columnKeyCreator_1.default();
// create am unbalanced tree that maps the provided definitions
var unbalancedTree = this.recursivelyCreateColumns(abstractColDefs, 0, columnKeyCreator);
var treeDept = this.findMaxDept(unbalancedTree, 0);
this.logger.log('Number of levels for grouped columns is ' + treeDept);
var balancedTree = this.balanceColumnTree(unbalancedTree, 0, treeDept, columnKeyCreator);
this.columnUtils.deptFirstOriginalTreeSearch(balancedTree, function (child) {
if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
child.calculateExpandable();
}
});
return {
balancedTree: balancedTree,
treeDept: treeDept
};
};
BalancedColumnTreeBuilder.prototype.balanceColumnTree = function (unbalancedTree, currentDept, columnDept, columnKeyCreator) {
var _this = this;
var result = [];
// go through each child, for groups, recurse a level deeper,
// for columns we need to pad
unbalancedTree.forEach(function (child) {
if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
var originalGroup = child;
var newChildren = _this.balanceColumnTree(originalGroup.getChildren(), currentDept + 1, columnDept, columnKeyCreator);
originalGroup.setChildren(newChildren);
result.push(originalGroup);
}
else {
var newChild = child;
for (var i = columnDept - 1; i >= currentDept; i--) {
var newColId = columnKeyCreator.getUniqueKey(null, null);
var paddedGroup = new originalColumnGroup_1.OriginalColumnGroup(null, newColId);
paddedGroup.setChildren([newChild]);
newChild = paddedGroup;
}
result.push(newChild);
}
});
return result;
};
BalancedColumnTreeBuilder.prototype.findMaxDept = function (treeChildren, dept) {
var maxDeptThisLevel = dept;
for (var i = 0; i < treeChildren.length; i++) {
var abstractColumn = treeChildren[i];
if (abstractColumn instanceof originalColumnGroup_1.OriginalColumnGroup) {
var originalGroup = abstractColumn;
var newDept = this.findMaxDept(originalGroup.getChildren(), dept + 1);
if (maxDeptThisLevel < newDept) {
maxDeptThisLevel = newDept;
}
}
}
return maxDeptThisLevel;
};
BalancedColumnTreeBuilder.prototype.recursivelyCreateColumns = function (abstractColDefs, level, columnKeyCreator) {
var _this = this;
var result = [];
if (!abstractColDefs) {
return result;
}
var minColWidth = this.gridOptionsWrapper.getMinColWidth();
var maxColWidth = this.gridOptionsWrapper.getMaxColWidth();
abstractColDefs.forEach(function (abstractColDef) {
_this.checkForDeprecatedItems(abstractColDef);
if (_this.isColumnGroup(abstractColDef)) {
var groupColDef = abstractColDef;
var groupId = columnKeyCreator.getUniqueKey(groupColDef.groupId, null);
var originalGroup = new originalColumnGroup_1.OriginalColumnGroup(groupColDef, groupId);
var children = _this.recursivelyCreateColumns(groupColDef.children, level + 1, columnKeyCreator);
originalGroup.setChildren(children);
result.push(originalGroup);
}
else {
var colDef = abstractColDef;
var width = _this.columnUtils.calculateColInitialWidth(colDef);
var colId = columnKeyCreator.getUniqueKey(colDef.colId, colDef.field);
var column = new column_1.default(colDef, width, colId, minColWidth, maxColWidth);
result.push(column);
}
});
return result;
};
BalancedColumnTreeBuilder.prototype.checkForDeprecatedItems = function (colDef) {
if (colDef) {
var colDefNoType = colDef; // take out the type, so we can access attributes not defined in the type
if (colDefNoType.group !== undefined) {
console.warn('ag-grid: colDef.group is invalid, please check documentation on how to do grouping as it changed in version 3');
}
if (colDefNoType.headerGroup !== undefined) {
console.warn('ag-grid: colDef.headerGroup is invalid, please check documentation on how to do grouping as it changed in version 3');
}
if (colDefNoType.headerGroupShow !== undefined) {
console.warn('ag-grid: colDef.headerGroupShow is invalid, should be columnGroupShow, please check documentation on how to do grouping as it changed in version 3');
}
}
};
// if object has children, we assume it's a group
BalancedColumnTreeBuilder.prototype.isColumnGroup = function (abstractColDef) {
return abstractColDef.children !== undefined;
};
return BalancedColumnTreeBuilder;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = BalancedColumnTreeBuilder;
/***/ },
/* 47 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
// class returns a unique id to use for the column. it checks the existing columns, and if the requested
// id is already taken, it will start appending numbers until it gets a unique id.
// eg, if the col field is 'name', it will try ids: {name, name_1, name_2...}
// if no field or id provided in the col, it will try the ids of natural numbers
var ColumnKeyCreator = (function () {
function ColumnKeyCreator() {
this.existingKeys = [];
}
ColumnKeyCreator.prototype.getUniqueKey = function (colId, colField) {
var count = 0;
while (true) {
var idToTry;
if (colId) {
idToTry = colId;
if (count !== 0) {
idToTry += '_' + count;
}
}
else if (colField) {
idToTry = colField;
if (count !== 0) {
idToTry += '_' + count;
}
}
else {
idToTry = '' + count;
}
if (this.existingKeys.indexOf(idToTry) < 0) {
this.existingKeys.push(idToTry);
return idToTry;
}
count++;
}
};
return ColumnKeyCreator;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ColumnKeyCreator;
/***/ },
/* 48 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var columnGroup_1 = __webpack_require__(15);
var originalColumnGroup_1 = __webpack_require__(17);
// takes in a list of columns, as specified by the column definitions, and returns column groups
var DisplayedGroupCreator = (function () {
function DisplayedGroupCreator() {
}
DisplayedGroupCreator.prototype.init = function (columnUtils) {
this.columnUtils = columnUtils;
};
DisplayedGroupCreator.prototype.createDisplayedGroups = function (sortedVisibleColumns, balancedColumnTree, groupInstanceIdCreator) {
var _this = this;
var result = [];
var previousRealPath;
var previousOriginalPath;
// go through each column, then do a bottom up comparison to the previous column, and start
// to share groups if they converge at any point.
sortedVisibleColumns.forEach(function (currentColumn) {
var currentOriginalPath = _this.getOriginalPathForColumn(balancedColumnTree, currentColumn);
var currentRealPath = [];
var firstColumn = !previousOriginalPath;
for (var i = 0; i < currentOriginalPath.length; i++) {
if (firstColumn || currentOriginalPath[i] !== previousOriginalPath[i]) {
// new group needed
var originalGroup = currentOriginalPath[i];
var groupId = originalGroup.getGroupId();
var instanceId = groupInstanceIdCreator.getInstanceIdForKey(groupId);
var newGroup = new columnGroup_1.default(originalGroup, groupId, instanceId);
currentRealPath[i] = newGroup;
// if top level, add to result, otherwise add to parent
if (i == 0) {
result.push(newGroup);
}
else {
currentRealPath[i - 1].addChild(newGroup);
}
}
else {
// reuse old group
currentRealPath[i] = previousRealPath[i];
}
}
var noColumnGroups = currentRealPath.length === 0;
if (noColumnGroups) {
// if we are not grouping, then the result of the above is an empty
// path (no groups), and we just add the column to the root list.
result.push(currentColumn);
}
else {
var leafGroup = currentRealPath[currentRealPath.length - 1];
leafGroup.addChild(currentColumn);
}
previousRealPath = currentRealPath;
previousOriginalPath = currentOriginalPath;
});
return result;
};
DisplayedGroupCreator.prototype.createFakePath = function (balancedColumnTree) {
var result = [];
var currentChildren = balancedColumnTree;
// this while look does search on the balanced tree, so our result is the right length
var index = 0;
while (currentChildren && currentChildren[0] && currentChildren[0] instanceof originalColumnGroup_1.OriginalColumnGroup) {
// putting in a deterministic fake id, in case the API in the future needs to reference the col
result.push(new originalColumnGroup_1.OriginalColumnGroup(null, 'FAKE_PATH_' + index));
currentChildren = currentChildren[0].getChildren();
index++;
}
return result;
};
DisplayedGroupCreator.prototype.getOriginalPathForColumn = function (balancedColumnTree, column) {
var result = [];
var found = false;
recursePath(balancedColumnTree, 0);
// it's possible we didn't find a path. this happens if the column is generated
// by the grid, in that the definition didn't come from the client. in this case,
// we create a fake original path.
if (found) {
return result;
}
else {
return this.createFakePath(balancedColumnTree);
}
function recursePath(balancedColumnTree, dept) {
for (var i = 0; i < balancedColumnTree.length; i++) {
if (found) {
// quit the search, so 'result' is kept with the found result
return;
}
var node = balancedColumnTree[i];
if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
var nextNode = node;
recursePath(nextNode.getChildren(), dept + 1);
result[dept] = node;
}
else {
if (node === column) {
found = true;
}
}
}
}
};
return DisplayedGroupCreator;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = DisplayedGroupCreator;
/***/ },
/* 49 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var grid_1 = __webpack_require__(1);
var SelectionRendererFactory = (function () {
function SelectionRendererFactory() {
}
SelectionRendererFactory.prototype.init = function (grid, selectionController) {
this.grid = grid;
this.selectionController = selectionController;
};
SelectionRendererFactory.prototype.createSelectionCheckbox = function (node, rowIndex) {
var _this = this;
var eCheckbox = document.createElement('input');
eCheckbox.type = "checkbox";
eCheckbox.name = "name";
eCheckbox.className = 'ag-selection-checkbox';
this.setCheckboxState(eCheckbox, this.selectionController.isNodeSelected(node));
var that = this;
eCheckbox.onclick = function (event) {
event.stopPropagation();
};
eCheckbox.onchange = function () {
var newValue = eCheckbox.checked;
if (newValue) {
that.selectionController.selectIndex(rowIndex, true);
}
else {
that.selectionController.deselectIndex(rowIndex);
}
};
this.grid.addVirtualRowListener(grid_1.Grid.VIRTUAL_ROW_SELECTED, rowIndex, function (selected) {
_this.setCheckboxState(eCheckbox, selected);
});
return eCheckbox;
};
SelectionRendererFactory.prototype.setCheckboxState = function (eCheckbox, state) {
if (typeof state === 'boolean') {
eCheckbox.checked = state;
eCheckbox.indeterminate = false;
}
else {
// isNodeSelected returns back undefined if it's a group and the children
// are a mix of selected and unselected
eCheckbox.indeterminate = true;
}
};
return SelectionRendererFactory;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = SelectionRendererFactory;
/***/ },
/* 50 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var ExpressionService = (function () {
function ExpressionService() {
this.expressionToFunctionCache = {};
}
ExpressionService.prototype.init = function (loggerFactory) {
this.logger = loggerFactory.create('ExpressionService');
};
ExpressionService.prototype.evaluate = function (expression, params) {
try {
var javaScriptFunction = this.createExpressionFunction(expression);
var result = javaScriptFunction(params.value, params.context, params.node, params.data, params.colDef, params.rowIndex, params.api, params.getValue);
return result;
}
catch (e) {
// the expression failed, which can happen, as it's the client that
// provides the expression. so print a nice message
this.logger.log('Processing of the expression failed');
this.logger.log('Expression = ' + expression);
this.logger.log('Exception = ' + e);
return null;
}
};
ExpressionService.prototype.createExpressionFunction = function (expression) {
// check cache first
if (this.expressionToFunctionCache[expression]) {
return this.expressionToFunctionCache[expression];
}
// if not found in cache, return the function
var functionBody = this.createFunctionBody(expression);
var theFunction = new Function('x, ctx, node, data, colDef, rowIndex, api, getValue', functionBody);
// store in cache
this.expressionToFunctionCache[expression] = theFunction;
return theFunction;
};
ExpressionService.prototype.createFunctionBody = function (expression) {
// if the expression has the 'return' word in it, then use as is,
// if not, then wrap it with return and ';' to make a function
if (expression.indexOf('return') >= 0) {
return expression;
}
else {
return 'return ' + expression + ';';
}
};
return ExpressionService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ExpressionService;
/***/ },
/* 51 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var TemplateService = (function () {
function TemplateService() {
this.templateCache = {};
this.waitingCallbacks = {};
}
TemplateService.prototype.init = function ($scope) {
this.$scope = $scope;
};
// returns the template if it is loaded, or null if it is not loaded
// but will call the callback when it is loaded
TemplateService.prototype.getTemplate = function (url, callback) {
var templateFromCache = this.templateCache[url];
if (templateFromCache) {
return templateFromCache;
}
var callbackList = this.waitingCallbacks[url];
var that = this;
if (!callbackList) {
// first time this was called, so need a new list for callbacks
callbackList = [];
this.waitingCallbacks[url] = callbackList;
// and also need to do the http request
var client = new XMLHttpRequest();
client.onload = function () {
that.handleHttpResult(this, url);
};
client.open("GET", url);
client.send();
}
// add this callback
if (callback) {
callbackList.push(callback);
}
// caller needs to wait for template to load, so return null
return null;
};
TemplateService.prototype.handleHttpResult = function (httpResult, url) {
if (httpResult.status !== 200 || httpResult.response === null) {
console.warn('Unable to get template error ' + httpResult.status + ' - ' + url);
return;
}
// response success, so process it
// in IE9 the response is in - responseText
this.templateCache[url] = httpResult.response || httpResult.responseText;
// inform all listeners that this is now in the cache
var callbacks = this.waitingCallbacks[url];
for (var i = 0; i < callbacks.length; i++) {
var callback = callbacks[i];
// we could pass the callback the response, however we know the client of this code
// is the cell renderer, and it passes the 'cellRefresh' method in as the callback
// which doesn't take any parameters.
callback();
}
if (this.$scope) {
var that = this;
setTimeout(function () {
that.$scope.$apply();
}, 0);
}
};
return TemplateService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = TemplateService;
/***/ },
/* 52 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var constants_1 = __webpack_require__(3);
var PopupService = (function () {
function PopupService() {
}
PopupService.prototype.init = function (ePopupParent) {
this.ePopupParent = ePopupParent;
};
PopupService.prototype.positionPopup = function (eventSource, ePopup, keepWithinBounds) {
var sourceRect = eventSource.getBoundingClientRect();
var parentRect = this.ePopupParent.getBoundingClientRect();
var x = sourceRect.left - parentRect.left;
var y = sourceRect.top - parentRect.top + sourceRect.height;
// if popup is overflowing to the right, move it left
if (keepWithinBounds) {
var minWidth;
if (ePopup.clientWidth > 0) {
minWidth = ePopup.clientWidth;
}
else {
minWidth = 200;
}
var widthOfParent = parentRect.right - parentRect.left;
var maxX = widthOfParent - minWidth;
if (x > maxX) {
x = maxX;
}
if (x < 0) {
x = 0;
}
}
ePopup.style.left = x + "px";
ePopup.style.top = y + "px";
};
//adds an element to a div, but also listens to background checking for clicks,
//so that when the background is clicked, the child is removed again, giving
//a model look to popups.
PopupService.prototype.addAsModalPopup = function (eChild, closeOnEsc) {
var eBody = document.body;
if (!eBody) {
console.warn('ag-grid: could not find the body of the document, document.body is empty');
return;
}
var popupAlreadyShown = utils_1.default.isVisible(eChild);
if (popupAlreadyShown) {
return;
}
this.ePopupParent.appendChild(eChild);
var that = this;
// if we add these listeners now, then the current mouse
// click will be included, which we don't want
setTimeout(function () {
if (closeOnEsc) {
eBody.addEventListener('keydown', hidePopupOnEsc);
}
eBody.addEventListener('click', hidePopup);
eChild.addEventListener('click', consumeClick);
}, 0);
var eventFromChild = null;
function hidePopupOnEsc(event) {
var key = event.which || event.keyCode;
if (key === constants_1.default.KEY_ESCAPE) {
hidePopup(null);
}
}
function hidePopup(event) {
if (event && event === eventFromChild) {
return;
}
that.ePopupParent.removeChild(eChild);
eBody.removeEventListener('keydown', hidePopupOnEsc);
eBody.removeEventListener('click', hidePopup);
eChild.removeEventListener('click', consumeClick);
}
function consumeClick(event) {
eventFromChild = event;
}
return hidePopup;
};
return PopupService;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = PopupService;
/***/ },
/* 53 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var GroupCreator = (function () {
function GroupCreator() {
}
GroupCreator.prototype.init = function (valueService, gridOptionsWrapper) {
this.valueService = valueService;
this.gridOptionsWrapper = gridOptionsWrapper;
};
GroupCreator.prototype.group = function (rowNodes, groupedCols, expandByDefault) {
var topMostGroup = {
level: -1,
children: [],
_childrenMap: {}
};
var allGroups = [];
allGroups.push(topMostGroup);
var levelToInsertChild = groupedCols.length - 1;
var i;
var currentLevel;
var node;
var data;
var currentGroup;
var groupKey;
var nextGroup;
var includeParents = !this.gridOptionsWrapper.isSuppressParentsInRowNodes();
// start at -1 and go backwards, as all the positive indexes
// are already used by the nodes.
var index = -1;
for (i = 0; i < rowNodes.length; i++) {
node = rowNodes[i];
data = node.data;
// all leaf nodes have the same level in this grouping, which is one level after the last group
node.level = levelToInsertChild + 1;
for (currentLevel = 0; currentLevel < groupedCols.length; currentLevel++) {
var groupColumn = groupedCols[currentLevel];
groupKey = this.valueService.getValue(groupColumn.getColDef(), data, node);
if (currentLevel === 0) {
currentGroup = topMostGroup;
}
// if group doesn't exist yet, create it
nextGroup = currentGroup._childrenMap[groupKey];
if (!nextGroup) {
nextGroup = {
group: true,
field: groupColumn.getColDef().field,
id: index--,
key: groupKey,
expanded: this.isExpanded(expandByDefault, currentLevel),
children: [],
// for top most level, parent is null
parent: null,
allChildrenCount: 0,
level: currentGroup.level + 1,
_childrenMap: {} //this is a temporary map, we remove at the end of this method
};
if (includeParents) {
nextGroup.parent = currentGroup === topMostGroup ? null : currentGroup;
}
currentGroup._childrenMap[groupKey] = nextGroup;
currentGroup.children.push(nextGroup);
allGroups.push(nextGroup);
}
nextGroup.allChildrenCount++;
if (currentLevel == levelToInsertChild) {
if (includeParents) {
node.parent = nextGroup === topMostGroup ? null : nextGroup;
}
nextGroup.children.push(node);
}
else {
currentGroup = nextGroup;
}
}
}
//remove the temporary map
for (i = 0; i < allGroups.length; i++) {
delete allGroups[i]._childrenMap;
}
return topMostGroup.children;
};
GroupCreator.prototype.isExpanded = function (expandByDefault, level) {
if (typeof expandByDefault === 'number') {
if (expandByDefault === -1) {
return true;
}
else {
return level < expandByDefault;
}
}
else {
return false;
}
};
return GroupCreator;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = GroupCreator;
/***/ },
/* 54 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var LoggerFactory = (function () {
function LoggerFactory() {
}
LoggerFactory.prototype.init = function (gridOptionsWrapper) {
this.logging = gridOptionsWrapper.isDebug();
};
LoggerFactory.prototype.create = function (name) {
return new Logger(name, this.logging);
};
return LoggerFactory;
})();
exports.LoggerFactory = LoggerFactory;
var Logger = (function () {
function Logger(name, logging) {
this.name = name;
this.logging = logging;
}
Logger.prototype.log = function (message) {
if (this.logging) {
console.log('ag-Grid.' + this.name + ': ' + message);
}
};
return Logger;
})();
exports.Logger = Logger;
/***/ },
/* 55 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var columnGroup_1 = __webpack_require__(15);
var originalColumnGroup_1 = __webpack_require__(17);
// takes in a list of columns, as specified by the column definitions, and returns column groups
var ColumnUtils = (function () {
function ColumnUtils() {
}
ColumnUtils.prototype.init = function (gridOptionsWrapper) {
this.gridOptionsWrapper = gridOptionsWrapper;
};
ColumnUtils.prototype.calculateColInitialWidth = function (colDef) {
if (!colDef.width) {
// if no width defined in colDef, use default
return this.gridOptionsWrapper.getColWidth();
}
else if (colDef.width < this.gridOptionsWrapper.getMinColWidth()) {
// if width in col def to small, set to min width
return this.gridOptionsWrapper.getMinColWidth();
}
else {
// otherwise use the provided width
return colDef.width;
}
};
ColumnUtils.prototype.getPathForColumn = function (column, allDisplayedColumnGroups) {
var result = [];
var found = false;
recursePath(allDisplayedColumnGroups, 0);
// we should always find the path, but in case there is a bug somewhere, returning null
// will make it fail rather than provide a 'hard to track down' bug
if (found) {
return result;
}
else {
return null;
}
function recursePath(balancedColumnTree, dept) {
for (var i = 0; i < balancedColumnTree.length; i++) {
if (found) {
// quit the search, so 'result' is kept with the found result
return;
}
var node = balancedColumnTree[i];
if (node instanceof columnGroup_1.default) {
var nextNode = node;
recursePath(nextNode.getChildren(), dept + 1);
result[dept] = node;
}
else {
if (node === column) {
found = true;
}
}
}
}
};
ColumnUtils.prototype.deptFirstOriginalTreeSearch = function (tree, callback) {
var _this = this;
if (!tree) {
return;
}
tree.forEach(function (child) {
if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
_this.deptFirstOriginalTreeSearch(child.getChildren(), callback);
}
callback(child);
});
};
ColumnUtils.prototype.deptFirstAllColumnTreeSearch = function (tree, callback) {
var _this = this;
if (!tree) {
return;
}
tree.forEach(function (child) {
if (child instanceof columnGroup_1.default) {
_this.deptFirstAllColumnTreeSearch(child.getChildren(), callback);
}
callback(child);
});
};
ColumnUtils.prototype.deptFirstDisplayedColumnTreeSearch = function (tree, callback) {
var _this = this;
if (!tree) {
return;
}
tree.forEach(function (child) {
if (child instanceof columnGroup_1.default) {
_this.deptFirstDisplayedColumnTreeSearch(child.getDisplayedChildren(), callback);
}
callback(child);
});
};
return ColumnUtils;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ColumnUtils;
/***/ },
/* 56 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var AutoWidthCalculator = (function () {
function AutoWidthCalculator() {
}
AutoWidthCalculator.prototype.init = function (rowRenderer, gridPanel) {
this.gridPanel = gridPanel;
this.rowRenderer = rowRenderer;
};
// this is the trick: we create a dummy container and clone all the cells
// into the dummy, then check the dummy's width. then destroy the dummy
// as we don't need it any more.
// drawback: only the cells visible on the screen are considered
AutoWidthCalculator.prototype.getPreferredWidthForColumn = function (column) {
var eDummyContainer = document.createElement('span');
// position fixed, so it isn't restricted to the boundaries of the parent
eDummyContainer.style.position = 'fixed';
eDummyContainer.style.backgroundColor = 'red';
// we put the dummy into the body container, so it will inherit all the
// css styles that the real cells are inheriting
var eBodyContainer = this.gridPanel.getBodyContainer();
eBodyContainer.appendChild(eDummyContainer);
// get all the cells that are currently displayed (this only brings back
// rendered cells, rows not rendered due to row visualisation will not be here)
var eOriginalCells = this.rowRenderer.getAllCellsForColumn(column);
eOriginalCells.forEach(function (eCell, index) {
// make a deep clone of the cell
var eCellClone = eCell.cloneNode(true);
// the original has a fixed width, we remove this to allow the natural width based on content
eCellClone.style.width = '';
// the original has position = absolute, we need to remove this so it's positioned normally
eCellClone.style.position = 'static';
eCellClone.style.left = '';
// we put the cell into a containing div, as otherwise the cells would just line up
// on the same line, standard flow layout, by putting them into divs, they are laid
// out one per line
var eCloneParent = document.createElement('div');
// table-row, so that each cell is on a row. i also tried display='block', but this
// didn't work in IE
eCloneParent.style.display = 'table-row';
// the twig on the branch, the branch on the tree, the tree in the hole,
// the hole in the bog, the bog in the clone, the clone in the parent,
// the parent in the dummy, and the dummy down in the vall-e-ooo, OOOOOOOOO! Oh row the rattling bog....
eCloneParent.appendChild(eCellClone);
eDummyContainer.appendChild(eCloneParent);
});
// at this point, all the clones are lined up vertically with natural widths. the dummy
// container will have a width wide enough just to fit the largest.
var dummyContainerWidth = eDummyContainer.offsetWidth;
// we are finished with the dummy container, so get rid of it
eBodyContainer.removeChild(eDummyContainer);
// we add 4 as I found without it, the gui still put '...' after some of the texts
return dummyContainerWidth + 4;
};
return AutoWidthCalculator;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = AutoWidthCalculator;
/***/ },
/* 57 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var verticalStack_1 = __webpack_require__(58);
var columnSelectionPanel_1 = __webpack_require__(59);
var valuesSelectionPanel_1 = __webpack_require__(61);
var groupSelectionPanel_1 = __webpack_require__(63);
var ToolPanel = (function () {
function ToolPanel() {
this.layout = new verticalStack_1.default();
}
ToolPanel.prototype.init = function (columnController, inMemoryRowController, gridOptionsWrapper, popupService, eventService, dragAndDropService) {
var suppressGroupAndValues = gridOptionsWrapper.isToolPanelSuppressGroups();
var suppressValues = gridOptionsWrapper.isToolPanelSuppressValues();
var showGroups = !suppressGroupAndValues;
var showValues = !suppressGroupAndValues && !suppressValues;
// top list, column reorder and visibility
var columnSelectionPanel = new columnSelectionPanel_1.default(columnController, gridOptionsWrapper, eventService, dragAndDropService);
var heightColumnSelection = suppressGroupAndValues ? '100%' : '50%';
this.layout.addPanel(columnSelectionPanel.layout, heightColumnSelection);
var dragSource = columnSelectionPanel.getDragSource();
if (showValues) {
var valuesSelectionPanel = new valuesSelectionPanel_1.default(columnController, gridOptionsWrapper, popupService, eventService, dragAndDropService);
this.layout.addPanel(valuesSelectionPanel.getLayout(), '25%');
valuesSelectionPanel.addDragSource(dragSource);
}
if (showGroups) {
var groupSelectionPanel = new groupSelectionPanel_1.default(columnController, inMemoryRowController, gridOptionsWrapper, eventService, dragAndDropService);
var heightGroupSelection = showValues ? '25%' : '50%';
this.layout.addPanel(groupSelectionPanel.layout, heightGroupSelection);
groupSelectionPanel.addDragSource(dragSource);
}
var eGui = this.layout.getGui();
utils_1.default.addCssClass(eGui, 'ag-tool-panel-container');
};
return ToolPanel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ToolPanel;
/***/ },
/* 58 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var VerticalStack = (function () {
function VerticalStack() {
this.isLayoutPanel = true;
this.childPanels = [];
this.eGui = document.createElement('div');
this.eGui.style.height = '100%';
}
VerticalStack.prototype.addPanel = function (panel, height) {
var component;
if (panel.isLayoutPanel) {
this.childPanels.push(panel);
component = panel.getGui();
}
else {
component = panel;
}
if (height) {
component.style.height = height;
}
this.eGui.appendChild(component);
};
VerticalStack.prototype.getGui = function () {
return this.eGui;
};
VerticalStack.prototype.doLayout = function () {
for (var i = 0; i < this.childPanels.length; i++) {
this.childPanels[i].doLayout();
}
};
return VerticalStack;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = VerticalStack;
/***/ },
/* 59 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var svgFactory_1 = __webpack_require__(27);
var events_1 = __webpack_require__(5);
var agList_1 = __webpack_require__(60);
var borderLayout_1 = __webpack_require__(42);
var svgFactory = svgFactory_1.default.getInstance();
var ColumnSelectionPanel = (function () {
function ColumnSelectionPanel(columnController, gridOptionsWrapper, eventService, dragAndDropService) {
this.dragAndDropService = dragAndDropService;
this.gridOptionsWrapper = gridOptionsWrapper;
this.columnController = columnController;
this.setupComponents();
eventService.addEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.columnsChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_MOVED, this.columnsChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_VISIBLE, this.columnsChanged.bind(this));
}
ColumnSelectionPanel.prototype.columnsChanged = function () {
this.cColumnList.setModel(this.columnController.getAllColumns());
};
ColumnSelectionPanel.prototype.getDragSource = function () {
return this.cColumnList.getUniqueId();
};
ColumnSelectionPanel.prototype.columnCellRenderer = function (params) {
var column = params.value;
var colDisplayName = this.columnController.getDisplayNameForCol(column);
var eResult = document.createElement('span');
var eVisibleIcons = document.createElement('span');
utils_1.default.addCssClass(eVisibleIcons, 'ag-visible-icons');
var eShowing = utils_1.default.createIcon('columnVisible', this.gridOptionsWrapper, column, svgFactory.createColumnShowingSvg);
var eHidden = utils_1.default.createIcon('columnHidden', this.gridOptionsWrapper, column, svgFactory.createColumnHiddenSvg);
eVisibleIcons.appendChild(eShowing);
eVisibleIcons.appendChild(eHidden);
eShowing.style.display = column.visible ? '' : 'none';
eHidden.style.display = column.visible ? 'none' : '';
eResult.appendChild(eVisibleIcons);
var eValue = document.createElement('span');
eValue.innerHTML = colDisplayName;
eResult.appendChild(eValue);
if (!column.visible) {
utils_1.default.addCssClass(eResult, 'ag-column-not-visible');
}
// change visible if use clicks the visible icon, or if row is double clicked
eVisibleIcons.addEventListener('click', showEventListener);
var that = this;
function showEventListener() {
that.columnController.setColumnVisible(column, !column.visible);
}
return eResult;
};
ColumnSelectionPanel.prototype.setupComponents = function () {
this.cColumnList = new agList_1.default(this.dragAndDropService);
this.cColumnList.setCellRenderer(this.columnCellRenderer.bind(this));
this.cColumnList.addStyles({ height: '100%', overflow: 'auto' });
this.cColumnList.addItemMovedListener(this.onItemMoved.bind(this));
this.cColumnList.setReadOnly(true);
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
var columnsLocalText = localeTextFunc('columns', 'Columns');
var eNorthPanel = document.createElement('div');
eNorthPanel.innerHTML = '<div style="text-align: center;">' + columnsLocalText + '</div>';
this.layout = new borderLayout_1.default({
center: this.cColumnList.getGui(),
north: eNorthPanel
});
};
ColumnSelectionPanel.prototype.onItemMoved = function (fromIndex, toIndex) {
this.columnController.moveColumnByIndex(fromIndex, toIndex);
};
ColumnSelectionPanel.prototype.getGui = function () {
return this.eRootPanel.getGui();
};
return ColumnSelectionPanel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ColumnSelectionPanel;
/***/ },
/* 60 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var template = '<div class="ag-list-selection">' +
'<div>' +
'<div ag-repeat class="ag-list-item">' +
'</div>' +
'</div>' +
'</div>';
var DropTargetLocation;
(function (DropTargetLocation) {
DropTargetLocation[DropTargetLocation["NOT_DROP_TARGET"] = 0] = "NOT_DROP_TARGET";
DropTargetLocation[DropTargetLocation["DROP_TARGET_ABOVE"] = 1] = "DROP_TARGET_ABOVE";
DropTargetLocation[DropTargetLocation["DROP_TARGET_BELOW"] = 2] = "DROP_TARGET_BELOW";
})(DropTargetLocation || (DropTargetLocation = {}));
;
var AgList = (function () {
function AgList(dragAndDropService) {
this.readOnly = false;
this.dragAndDropService = dragAndDropService;
this.setupComponents();
this.uniqueId = 'CheckboxSelection-' + Math.random();
this.modelChangedListeners = [];
this.itemSelectedListeners = [];
this.itemMovedListeners = [];
this.beforeDropListeners = [];
this.dragSources = [];
this.setupAsDropTarget();
}
AgList.prototype.setReadOnly = function (readOnly) {
this.readOnly = readOnly;
};
AgList.prototype.setEmptyMessage = function (emptyMessage) {
this.emptyMessage = emptyMessage;
this.refreshView();
};
AgList.prototype.getUniqueId = function () {
return this.uniqueId;
};
AgList.prototype.addStyles = function (styles) {
utils_1.default.addStylesToElement(this.eGui, styles);
};
AgList.prototype.addCssClass = function (cssClass) {
utils_1.default.addCssClass(this.eGui, cssClass);
};
AgList.prototype.addDragSource = function (dragSource) {
this.dragSources.push(dragSource);
};
AgList.prototype.addModelChangedListener = function (listener) {
this.modelChangedListeners.push(listener);
};
AgList.prototype.addItemSelectedListener = function (listener) {
this.itemSelectedListeners.push(listener);
};
AgList.prototype.addItemMovedListener = function (listener) {
this.itemMovedListeners.push(listener);
};
AgList.prototype.addBeforeDropListener = function (listener) {
this.beforeDropListeners.push(listener);
};
AgList.prototype.fireItemMoved = function (fromIndex, toIndex) {
for (var i = 0; i < this.itemMovedListeners.length; i++) {
this.itemMovedListeners[i](fromIndex, toIndex);
}
};
AgList.prototype.fireModelChanged = function () {
for (var i = 0; i < this.modelChangedListeners.length; i++) {
this.modelChangedListeners[i](this.model);
}
};
AgList.prototype.fireItemSelected = function (item) {
for (var i = 0; i < this.itemSelectedListeners.length; i++) {
this.itemSelectedListeners[i](item);
}
};
AgList.prototype.fireBeforeDrop = function (item) {
for (var i = 0; i < this.beforeDropListeners.length; i++) {
this.beforeDropListeners[i](item);
}
};
AgList.prototype.setupComponents = function () {
this.eGui = utils_1.default.loadTemplate(template);
this.eFilterValueTemplate = this.eGui.querySelector("[ag-repeat]");
this.eListParent = this.eFilterValueTemplate.parentNode;
utils_1.default.removeAllChildren(this.eListParent);
};
AgList.prototype.setModel = function (model) {
this.model = model;
this.refreshView();
};
AgList.prototype.getModel = function () {
return this.model;
};
AgList.prototype.setCellRenderer = function (cellRenderer) {
this.cellRenderer = cellRenderer;
};
AgList.prototype.refreshView = function () {
utils_1.default.removeAllChildren(this.eListParent);
if (this.model && this.model.length > 0) {
this.insertRows();
}
else {
this.insertBlankMessage();
}
};
AgList.prototype.insertRows = function () {
for (var i = 0; i < this.model.length; i++) {
var item = this.model[i];
//var text = this.getText(item);
//var selected = this.isSelected(item);
var eListItem = this.eFilterValueTemplate.cloneNode(true);
if (this.cellRenderer) {
var params = { value: item };
utils_1.default.useRenderer(eListItem, this.cellRenderer, params);
}
else {
eListItem.innerHTML = item;
}
eListItem.addEventListener('click', this.fireItemSelected.bind(this, item));
this.addDragAndDropToListItem(eListItem, item);
this.eListParent.appendChild(eListItem);
}
};
AgList.prototype.insertBlankMessage = function () {
if (this.emptyMessage) {
var eMessage = document.createElement('div');
eMessage.style.color = 'grey';
eMessage.style.padding = '4px';
eMessage.style.textAlign = 'center';
eMessage.innerHTML = this.emptyMessage;
this.eListParent.appendChild(eMessage);
}
};
AgList.prototype.setupAsDropTarget = function () {
this.dragAndDropService.addDropTarget(this.eGui, {
acceptDrag: this.externalAcceptDrag.bind(this),
drop: this.externalDrop.bind(this),
noDrop: this.externalNoDrop.bind(this)
});
};
AgList.prototype.externalAcceptDrag = function (dragEvent) {
var allowedSource = this.dragSources.indexOf(dragEvent.containerId) >= 0;
if (!allowedSource) {
return false;
}
var alreadyHaveCol = this.model.indexOf(dragEvent.data) >= 0;
if (alreadyHaveCol) {
return false;
}
this.eGui.style.backgroundColor = 'lightgreen';
return true;
};
AgList.prototype.externalDrop = function (dragEvent) {
var newListItem = dragEvent.data;
this.fireBeforeDrop(newListItem);
if (!this.readOnly) {
this.addItemToList(newListItem);
}
this.eGui.style.backgroundColor = '';
};
AgList.prototype.externalNoDrop = function () {
this.eGui.style.backgroundColor = '';
};
AgList.prototype.addItemToList = function (newItem) {
this.model.push(newItem);
this.refreshView();
this.fireModelChanged();
};
AgList.prototype.addDragAndDropToListItem = function (eListItem, item) {
var that = this;
this.dragAndDropService.addDragSource(eListItem, {
getData: function () {
return item;
},
getContainerId: function () {
return that.uniqueId;
}
});
this.dragAndDropService.addDropTarget(eListItem, {
acceptDrag: function (dragItem) {
return that.internalAcceptDrag(item, dragItem, eListItem);
},
drop: function (dragItem) {
that.internalDrop(item, dragItem.data);
},
noDrop: function () {
that.internalNoDrop(eListItem);
}
});
};
AgList.prototype.internalAcceptDrag = function (targetColumn, dragItem, eListItem) {
var result = dragItem.data !== targetColumn && dragItem.containerId === this.uniqueId;
if (result) {
if (this.dragAfterThisItem(targetColumn, dragItem.data)) {
this.setDropCssClasses(eListItem, DropTargetLocation.DROP_TARGET_ABOVE);
}
else {
this.setDropCssClasses(eListItem, DropTargetLocation.DROP_TARGET_BELOW);
}
}
return result;
};
AgList.prototype.internalDrop = function (targetColumn, draggedColumn) {
var oldIndex = this.model.indexOf(draggedColumn);
var newIndex = this.model.indexOf(targetColumn);
if (this.readOnly) {
this.fireItemMoved(oldIndex, newIndex);
}
else {
this.model.splice(oldIndex, 1);
this.model.splice(newIndex, 0, draggedColumn);
this.refreshView();
this.fireModelChanged();
}
};
AgList.prototype.internalNoDrop = function (eListItem) {
this.setDropCssClasses(eListItem, DropTargetLocation.NOT_DROP_TARGET);
};
AgList.prototype.dragAfterThisItem = function (targetColumn, draggedColumn) {
return this.model.indexOf(targetColumn) < this.model.indexOf(draggedColumn);
};
AgList.prototype.setDropCssClasses = function (eListItem, state) {
utils_1.default.addOrRemoveCssClass(eListItem, 'ag-not-drop-target', state === DropTargetLocation.NOT_DROP_TARGET);
utils_1.default.addOrRemoveCssClass(eListItem, 'ag-drop-target-above', state === DropTargetLocation.DROP_TARGET_ABOVE);
utils_1.default.addOrRemoveCssClass(eListItem, 'ag-drop-target-below', state === DropTargetLocation.DROP_TARGET_BELOW);
};
AgList.prototype.getGui = function () {
return this.eGui;
};
return AgList;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = AgList;
/***/ },
/* 61 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var svgFactory_1 = __webpack_require__(27);
var utils_1 = __webpack_require__(6);
var events_1 = __webpack_require__(5);
var agDropdownList_1 = __webpack_require__(62);
var column_1 = __webpack_require__(8);
var agList_1 = __webpack_require__(60);
var borderLayout_1 = __webpack_require__(42);
var svgFactory = svgFactory_1.default.getInstance();
var ValuesSelectionPanel = (function () {
function ValuesSelectionPanel(columnController, gridOptionsWrapper, popupService, eventService, dragAndDropService) {
this.dragAndDropService = dragAndDropService;
this.popupService = popupService;
this.gridOptionsWrapper = gridOptionsWrapper;
this.setupComponents();
this.columnController = columnController;
eventService.addEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.columnsChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGE, this.columnsChanged.bind(this));
}
ValuesSelectionPanel.prototype.getLayout = function () {
return this.layout;
};
ValuesSelectionPanel.prototype.columnsChanged = function () {
this.cColumnList.setModel(this.columnController.getValueColumns());
};
ValuesSelectionPanel.prototype.addDragSource = function (dragSource) {
this.cColumnList.addDragSource(dragSource);
};
ValuesSelectionPanel.prototype.cellRenderer = function (params) {
var column = params.value;
var colDisplayName = this.columnController.getDisplayNameForCol(column);
var eResult = document.createElement('span');
var eRemove = utils_1.default.createIcon('columnRemoveFromGroup', this.gridOptionsWrapper, column, svgFactory.createArrowUpSvg);
utils_1.default.addCssClass(eRemove, 'ag-visible-icons');
eResult.appendChild(eRemove);
var that = this;
eRemove.addEventListener('click', function () {
that.columnController.removeValueColumn(column);
});
var agValueType = new agDropdownList_1.default(this.popupService, this.dragAndDropService);
agValueType.setModel([column_1.default.AGG_SUM, column_1.default.AGG_MIN, column_1.default.AGG_MAX]);
agValueType.setSelected(column.aggFunc);
agValueType.setWidth(45);
agValueType.addItemSelectedListener(function (item) {
that.columnController.setColumnAggFunction(column, item);
});
eResult.appendChild(agValueType.getGui());
var eValue = document.createElement('span');
eValue.innerHTML = colDisplayName;
eValue.style.paddingLeft = '2px';
eResult.appendChild(eValue);
return eResult;
};
ValuesSelectionPanel.prototype.setupComponents = function () {
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
var columnsLocalText = localeTextFunc('valueColumns', 'Aggregations');
var emptyMessage = localeTextFunc('valueColumnsEmptyMessage', 'Drag columns from above to aggregate values');
this.cColumnList = new agList_1.default(this.dragAndDropService);
this.cColumnList.setCellRenderer(this.cellRenderer.bind(this));
this.cColumnList.setEmptyMessage(emptyMessage);
this.cColumnList.addStyles({ height: '100%', overflow: 'auto' });
this.cColumnList.addBeforeDropListener(this.beforeDropListener.bind(this));
this.cColumnList.setReadOnly(true);
var eNorthPanel = document.createElement('div');
eNorthPanel.style.paddingTop = '10px';
eNorthPanel.innerHTML = '<div style="text-align: center;">' + columnsLocalText + '</div>';
this.layout = new borderLayout_1.default({
center: this.cColumnList.getGui(),
north: eNorthPanel
});
};
ValuesSelectionPanel.prototype.beforeDropListener = function (newItem) {
this.columnController.addValueColumn(newItem);
};
return ValuesSelectionPanel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ValuesSelectionPanel;
/***/ },
/* 62 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var svgFactory_1 = __webpack_require__(27);
var agList_1 = __webpack_require__(60);
var svgFactory = svgFactory_1.default.getInstance();
var AgDropdownList = (function () {
function AgDropdownList(popupService, dragAndDropService) {
this.popupService = popupService;
this.setupComponents(dragAndDropService);
this.itemSelectedListeners = [];
}
AgDropdownList.prototype.setWidth = function (width) {
this.eValue.style.width = width + 'px';
this.agList.addStyles({ width: width + 'px' });
};
AgDropdownList.prototype.addItemSelectedListener = function (listener) {
this.itemSelectedListeners.push(listener);
};
AgDropdownList.prototype.fireItemSelected = function (item) {
for (var i = 0; i < this.itemSelectedListeners.length; i++) {
this.itemSelectedListeners[i](item);
}
};
AgDropdownList.prototype.setupComponents = function (dragAndDropService) {
this.eGui = document.createElement('span');
this.eValue = document.createElement('span');
this.eGui.appendChild(this.eValue);
this.agList = new agList_1.default(dragAndDropService);
this.eValue.addEventListener('click', this.onClick.bind(this));
this.agList.addItemSelectedListener(this.itemSelected.bind(this));
this.agList.addCssClass('ag-popup-list');
utils_1.default.addStylesToElement(this.eValue, {
border: '1px solid darkgrey',
display: 'inline-block',
paddingLeft: 2
});
utils_1.default.addStylesToElement(this.eGui, { position: 'relative' });
this.agList.addStyles({
display: 'inline-block',
position: 'absolute',
top: 0,
left: 0,
backgroudColor: 'white'
});
};
AgDropdownList.prototype.itemSelected = function (item) {
this.setSelected(item);
if (this.hidePopupCallback) {
this.hidePopupCallback();
}
this.fireItemSelected(item);
};
AgDropdownList.prototype.onClick = function () {
var agListGui = this.agList.getGui();
this.popupService.positionPopup(this.eGui, agListGui, false);
this.hidePopupCallback = this.popupService.addAsModalPopup(agListGui, true);
};
AgDropdownList.prototype.getGui = function () {
return this.eGui;
};
AgDropdownList.prototype.setSelected = function (item) {
this.selectedItem = item;
this.refreshView();
};
AgDropdownList.prototype.setCellRenderer = function (cellRenderer) {
this.agList.setCellRenderer(cellRenderer);
this.cellRenderer = cellRenderer;
};
AgDropdownList.prototype.refreshView = function () {
utils_1.default.removeAllChildren(this.eValue);
if (this.selectedItem) {
if (this.cellRenderer) {
var params = { value: this.selectedItem };
utils_1.default.useRenderer(this.eValue, this.cellRenderer, params);
}
else {
this.eValue.appendChild(document.createTextNode(this.selectedItem));
}
}
var eDownIcon = svgFactory.createSmallArrowDownSvg();
eDownIcon.style.float = 'right';
eDownIcon.style.marginTop = '6';
eDownIcon.style.marginRight = '2';
this.eValue.appendChild(eDownIcon);
};
AgDropdownList.prototype.setModel = function (model) {
this.agList.setModel(model);
};
return AgDropdownList;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = AgDropdownList;
/***/ },
/* 63 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var utils_1 = __webpack_require__(6);
var svgFactory_1 = __webpack_require__(27);
var events_1 = __webpack_require__(5);
var agList_1 = __webpack_require__(60);
var borderLayout_1 = __webpack_require__(42);
var svgFactory = svgFactory_1.default.getInstance();
var GroupSelectionPanel = (function () {
function GroupSelectionPanel(columnController, inMemoryRowController, gridOptionsWrapper, eventService, dragAndDropService) {
this.dragAndDropService = dragAndDropService;
this.gridOptionsWrapper = gridOptionsWrapper;
this.setupComponents();
this.columnController = columnController;
this.inMemoryRowController = inMemoryRowController;
eventService.addEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.columnsChanged.bind(this));
eventService.addEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGE, this.columnsChanged.bind(this));
}
GroupSelectionPanel.prototype.columnsChanged = function () {
this.cColumnList.setModel(this.columnController.getRowGroupColumns());
};
GroupSelectionPanel.prototype.addDragSource = function (dragSource) {
this.cColumnList.addDragSource(dragSource);
};
GroupSelectionPanel.prototype.columnCellRenderer = function (params) {
var column = params.value;
var colDisplayName = this.columnController.getDisplayNameForCol(column);
var eResult = document.createElement('span');
var eRemove = utils_1.default.createIcon('columnRemoveFromGroup', this.gridOptionsWrapper, column, svgFactory.createArrowUpSvg);
utils_1.default.addCssClass(eRemove, 'ag-visible-icons');
eResult.appendChild(eRemove);
var that = this;
eRemove.addEventListener('click', function () {
that.columnController.removeRowGroupColumn(column);
});
var eValue = document.createElement('span');
eValue.innerHTML = colDisplayName;
eResult.appendChild(eValue);
return eResult;
};
GroupSelectionPanel.prototype.setupComponents = function () {
var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
var columnsLocalText = localeTextFunc('rowGroupColumns', 'Row Groupings');
var rowGroupColumnsEmptyMessage = localeTextFunc('rowGroupColumnsEmptyMessage', 'Drag columns from above to group rows');
this.cColumnList = new agList_1.default(this.dragAndDropService);
this.cColumnList.setCellRenderer(this.columnCellRenderer.bind(this));
this.cColumnList.addBeforeDropListener(this.onBeforeDrop.bind(this));
this.cColumnList.addItemMovedListener(this.onItemMoved.bind(this));
this.cColumnList.setEmptyMessage(rowGroupColumnsEmptyMessage);
this.cColumnList.addStyles({ height: '100%', overflow: 'auto' });
this.cColumnList.setReadOnly(true);
var eNorthPanel = document.createElement('div');
eNorthPanel.style.paddingTop = '10px';
eNorthPanel.innerHTML = '<div style="text-align: center;">' + columnsLocalText + '</div>';
this.layout = new borderLayout_1.default({
center: this.cColumnList.getGui(),
north: eNorthPanel
});
};
GroupSelectionPanel.prototype.onBeforeDrop = function (newItem) {
this.columnController.addRowGroupColumn(newItem);
};
GroupSelectionPanel.prototype.onItemMoved = function (fromIndex, toIndex) {
this.columnController.moveRowGroupColumn(fromIndex, toIndex);
};
return GroupSelectionPanel;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = GroupSelectionPanel;
/***/ },
/* 64 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var DragService = (function () {
function DragService() {
}
DragService.prototype.addDragHandling = function (params) {
params.eDraggableElement.addEventListener('mousedown', function (startEvent) {
new DragInstance(params, startEvent);
});
};
return DragService;
})();
exports.DragService = DragService;
var DragInstance = (function () {
function DragInstance(params, startEvent) {
this.mouseMove = this.onMouseMove.bind(this);
this.mouseUp = this.onMouseUp.bind(this);
this.mouseLeave = this.onMouseLeave.bind(this);
this.lastDelta = 0;
this.params = params;
this.eDragParent = document.querySelector('body');
this.dragStartX = startEvent.clientX;
this.startEvent = startEvent;
this.eDragParent.addEventListener('mousemove', this.mouseMove);
this.eDragParent.addEventListener('mouseup', this.mouseUp);
this.eDragParent.addEventListener('mouseleave', this.mouseLeave);
this.draggingStarted = false;
var startAfterPixelsExist = typeof params.startAfterPixels === 'number' && params.startAfterPixels > 0;
if (!startAfterPixelsExist) {
this.startDragging();
}
}
DragInstance.prototype.startDragging = function () {
this.draggingStarted = true;
this.oldBodyCursor = this.params.eBody.style.cursor;
this.oldParentCursor = this.eDragParent.style.cursor;
this.oldMsUserSelect = this.eDragParent.style.msUserSelect;
this.oldWebkitUserSelect = this.eDragParent.style.webkitUserSelect;
// change the body cursor, so when drag moves out of the drag bar, the cursor is still 'resize' (or 'move'
this.params.eBody.style.cursor = this.params.cursor;
// same for outside the grid, we want to keep the resize (or move) cursor
this.eDragParent.style.cursor = this.params.cursor;
// we don't want text selection outside the grid (otherwise it looks weird as text highlights when we move)
this.eDragParent.style.msUserSelect = 'none';
this.eDragParent.style.webkitUserSelect = 'none';
this.params.onDragStart(this.startEvent);
};
DragInstance.prototype.onMouseMove = function (moveEvent) {
var newX = moveEvent.clientX;
this.lastDelta = newX - this.dragStartX;
if (!this.draggingStarted) {
var dragExceededStartAfterPixels = Math.abs(this.lastDelta) >= this.params.startAfterPixels;
if (dragExceededStartAfterPixels) {
this.startDragging();
}
}
if (this.draggingStarted) {
this.params.onDragging(this.lastDelta, false);
}
};
DragInstance.prototype.onMouseUp = function () {
this.stopDragging();
};
DragInstance.prototype.onMouseLeave = function () {
this.stopDragging();
};
DragInstance.prototype.stopDragging = function () {
// reset cursor back to original cursor, if they were changed in the first place
if (this.draggingStarted) {
this.params.eBody.style.cursor = this.oldBodyCursor;
this.eDragParent.style.cursor = this.oldParentCursor;
this.eDragParent.style.msUserSelect = this.oldMsUserSelect;
this.eDragParent.style.webkitUserSelect = this.oldWebkitUserSelect;
this.params.onDragging(this.lastDelta, true);
}
// always remove the listeners, as these are always added
this.eDragParent.removeEventListener('mousemove', this.mouseMove);
this.eDragParent.removeEventListener('mouseup', this.mouseUp);
this.eDragParent.removeEventListener('mouseleave', this.mouseLeave);
};
return DragInstance;
})();
/***/ },
/* 65 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var grid_1 = __webpack_require__(1);
function initialiseAgGridWithAngular1(angular) {
var angularModule = angular.module("agGrid", []);
angularModule.directive("agGrid", function () {
return {
restrict: "A",
controller: ['$element', '$scope', '$compile', '$attrs', AngularDirectiveController],
scope: true
};
});
}
exports.initialiseAgGridWithAngular1 = initialiseAgGridWithAngular1;
function AngularDirectiveController($element, $scope, $compile, $attrs) {
var gridOptions;
var quickFilterOnScope;
var keyOfGridInScope = $attrs.agGrid;
quickFilterOnScope = keyOfGridInScope + '.quickFilterText';
gridOptions = $scope.$eval(keyOfGridInScope);
if (!gridOptions) {
console.warn("WARNING - grid options for ag-Grid not found. Please ensure the attribute ag-grid points to a valid object on the scope");
return;
}
var eGridDiv = $element[0];
var grid = new grid_1.Grid(eGridDiv, gridOptions, null, $scope, $compile, quickFilterOnScope);
$scope.$on("$destroy", function () {
grid.destroy();
});
}
/***/ },
/* 66 */
/***/ function(module, exports, __webpack_require__) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
var componentUtil_1 = __webpack_require__(4);
var grid_1 = __webpack_require__(1);
function initialiseAgGridWithWebComponents() {
if (typeof document === 'undefined' || !document.registerElement) {
console.error('ag-Grid: unable to find document.registerElement() function, unable to initialise ag-Grid as a Web Component');
}
// i don't think this type of extension is possible in TypeScript, so back to
// plain Javascript to create this object
var AgileGridProto = Object.create(HTMLElement.prototype);
// wrap each property with a get and set method, so we can track when changes are done
componentUtil_1.ComponentUtil.ALL_PROPERTIES.forEach(function (key) {
Object.defineProperty(AgileGridProto, key, {
set: function (v) {
this.__agGridSetProperty(key, v);
},
get: function () {
return this.__agGridGetProperty(key);
}
});
});
AgileGridProto.__agGridSetProperty = function (key, value) {
if (!this.__attributes) {
this.__attributes = {};
}
this.__attributes[key] = value;
// keeping this consistent with the ng2 onChange, so I can reuse the handling code
var changeObject = {};
changeObject[key] = { currentValue: value };
this.onChange(changeObject);
};
AgileGridProto.onChange = function (changes) {
if (this._initialised) {
componentUtil_1.ComponentUtil.processOnChange(changes, this._gridOptions, this.api);
}
};
AgileGridProto.__agGridGetProperty = function (key) {
if (!this.__attributes) {
this.__attributes = {};
}
return this.__attributes[key];
};
AgileGridProto.setGridOptions = function (options) {
var globalEventListener = this.globalEventListener.bind(this);
this._gridOptions = componentUtil_1.ComponentUtil.copyAttributesToGridOptions(options, this);
this._agGrid = new grid_1.Grid(this, this._gridOptions, globalEventListener);
this.api = options.api;
this.columnApi = options.columnApi;
this._initialised = true;
};
// copies all the attributes into this object
AgileGridProto.createdCallback = function () {
for (var i = 0; i < this.attributes.length; i++) {
var attribute = this.attributes[i];
this.setPropertyFromAttribute(attribute);
}
};
AgileGridProto.setPropertyFromAttribute = function (attribute) {
var name = toCamelCase(attribute.nodeName);
var value = attribute.nodeValue;
if (componentUtil_1.ComponentUtil.ALL_PROPERTIES.indexOf(name) >= 0) {
this[name] = value;
}
};
AgileGridProto.attachedCallback = function (params) { };
AgileGridProto.detachedCallback = function (params) { };
AgileGridProto.attributeChangedCallback = function (attributeName) {
var attribute = this.attributes[attributeName];
this.setPropertyFromAttribute(attribute);
};
AgileGridProto.globalEventListener = function (eventType, event) {
var eventLowerCase = eventType.toLowerCase();
var browserEvent = new Event(eventLowerCase);
var browserEventNoType = browserEvent;
browserEventNoType.agGridDetails = event;
this.dispatchEvent(browserEvent);
var callbackMethod = 'on' + eventLowerCase;
if (typeof this[callbackMethod] === 'function') {
this[callbackMethod](browserEvent);
}
};
// finally, register
document.registerElement('ag-grid', { prototype: AgileGridProto });
}
exports.initialiseAgGridWithWebComponents = initialiseAgGridWithWebComponents;
function toCamelCase(myString) {
if (typeof myString === 'string') {
var result = myString.replace(/-([a-z])/g, function (g) {
return g[1].toUpperCase();
});
return result;
}
else {
return myString;
}
}
/***/ },
/* 67 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 68 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 69 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 70 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 71 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 72 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 73 */
/***/ function(module, exports) {
/**
* ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
* @version v3.3.3
* @link http://www.ag-grid.com/
* @license MIT
*/
/***/ },
/* 74 */
/***/ function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(75);
if(typeof content === 'string') content = [[module.id, content, '']];
// add the styles to the DOM
var update = __webpack_require__(77)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js!./ag-grid.css", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js!./ag-grid.css");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ },
/* 75 */
/***/ function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(76)();
// imports
// module
exports.push([module.id, "ag-grid-ng2 {\n display: inline-block;\n}\n.ag-root {\n font-size: 14px;\n cursor: default;\n/* set to relative, so absolute popups appear relative to this */\n position: relative;\n/* disable user mouse selection */\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n/* was getting some 'should be there' scrolls, this sorts it out */\n overflow: hidden;\n}\n.ag-no-scrolls {\n white-space: nowrap;\n display: inline-block;\n}\n.ag-scrolls {\n height: 100%;\n}\n.ag-popup-backdrop {\n position: fixed;\n left: 0px;\n top: 0px;\n width: 100%;\n height: 100%;\n}\n.ag-header {\n position: absolute;\n top: 0px;\n left: 0px;\n white-space: nowrap;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n width: 100%;\n}\n.ag-pinned-left-header {\n float: left;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n height: 100%;\n}\n.ag-pinned-right-header {\n float: right;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n height: 100%;\n}\n.ag-header-viewport {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n height: 100%;\n}\n.ag-scrolls .ag-header-container {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n position: relative;\n white-space: nowrap;\n height: 100%;\n}\n.ag-no-scrolls .ag-header-container {\n white-space: nowrap;\n}\n.ag-header-overlay {\n display: block;\n position: absolute;\n}\n.ag-header-cell {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n vertical-align: bottom;\n text-align: center;\n display: inline-block;\n height: 100%;\n}\n.ag-header-group-cell {\n height: 100%;\n display: inline-block;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ag-header-group-cell-label {\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ag-header-cell-label {\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ag-header-cell-resize {\n height: 100%;\n width: 4px;\n float: right;\n cursor: col-resize;\n}\n.ag-header-expand-icon {\n padding-left: 4px;\n}\n.ag-header-cell-menu-button {\n float: right;\n}\n.ag-overlay-panel {\n display: table;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.ag-overlay-wrapper {\n display: table-cell;\n vertical-align: middle;\n text-align: center;\n}\n.ag-body {\n height: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.ag-floating-top {\n position: absolute;\n left: 0px;\n width: 100%;\n white-space: nowrap;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.ag-pinned-left-floating-top {\n float: left;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n height: 100%;\n}\n.ag-pinned-right-floating-top {\n float: right;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n height: 100%;\n}\n.ag-floating-top-viewport {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n height: 100%;\n}\n.ag-floating-top-container {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n position: relative;\n white-space: nowrap;\n}\n.ag-floating-bottom {\n position: absolute;\n left: 0px;\n width: 100%;\n white-space: nowrap;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.ag-pinned-left-floating-bottom {\n float: left;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n height: 100%;\n}\n.ag-pinned-right-floating-bottom {\n float: right;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n height: 100%;\n}\n.ag-floating-bottom-viewport {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n height: 100%;\n}\n.ag-floating-bottom-container {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n position: relative;\n white-space: nowrap;\n}\n.ag-pinned-left-cols-viewport {\n float: left;\n overflow: hidden;\n}\n.ag-pinned-left-cols-container {\n display: inline-block;\n position: relative;\n}\n.ag-pinned-right-cols-viewport {\n float: right;\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ag-pinned-right-cols-container {\n display: inline-block;\n position: relative;\n}\n.ag-body-viewport-wrapper {\n height: 100%;\n}\n.ag-body-viewport {\n overflow-x: auto;\n overflow-y: auto;\n height: 100%;\n}\n.ag-scrolls .ag-body-container {\n position: relative;\n display: inline-block;\n}\n.ag-scrolls .ag-row {\n white-space: nowrap;\n position: absolute;\n width: 100%;\n}\n.ag-no-scrolls .ag-row {\n position: relative;\n}\n.agile-gird-row:hover {\n background-color: #f0f8ff;\n}\n.ag-cell {\n display: inline-block;\n white-space: nowrap;\n height: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n position: absolute;\n}\n.ag-group-cell-entire-row {\n width: 100%;\n display: inline-block;\n white-space: nowrap;\n height: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ag-footer-cell-entire-row {\n width: 100%;\n display: inline-block;\n white-space: nowrap;\n height: 100%;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ag-large .ag-root {\n font-size: 20px;\n}\n.ag-filter {\n position: absolute;\n z-index: 100;\n}\n.ag-filter-list-viewport {\n overflow-x: auto;\n height: 200px;\n width: 200px;\n}\n.ag-filter-list-container {\n position: relative;\n overflow: hidden;\n}\n.ag-filter-item {\n -o-text-overflow: ellipsis;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n position: absolute;\n}\n.ag-filter-filter {\n width: 170px;\n margin: 4px;\n}\n.ag-filter-select {\n width: 110px;\n margin: 4px 4px 0px 4px;\n}\n.ag-no-vertical-scroll .ag-scrolls {\n height: unset;\n}\n.ag-no-vertical-scroll .ag-body {\n height: unset;\n}\n.ag-no-vertical-scroll .ag-body-viewport-wrapper {\n height: unset;\n}\n.ag-no-vertical-scroll .ag-body-viewport {\n height: unset;\n}\n.ag-list-selection {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n}\n.ag-tool-panel-container {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n width: 200px;\n}\n", ""]);
// exports
/***/ },
/* 76 */
/***/ function(module, exports) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
// css base code, injected by the css-loader
module.exports = function() {
var list = [];
// return the list of modules as css string
list.toString = function toString() {
var result = [];
for(var i = 0; i < this.length; i++) {
var item = this[i];
if(item[2]) {
result.push("@media " + item[2] + "{" + item[1] + "}");
} else {
result.push(item[1]);
}
}
return result.join("");
};
// import a list of modules into the list
list.i = function(modules, mediaQuery) {
if(typeof modules === "string")
modules = [[null, modules, ""]];
var alreadyImportedModules = {};
for(var i = 0; i < this.length; i++) {
var id = this[i][0];
if(typeof id === "number")
alreadyImportedModules[id] = true;
}
for(i = 0; i < modules.length; i++) {
var item = modules[i];
// skip already imported module
// this implementation is not 100% perfect for weird media query combinations
// when a module is imported multiple times with different media queries.
// I hope this will never occur (Hey this way we have smaller bundles)
if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
if(mediaQuery && !item[2]) {
item[2] = mediaQuery;
} else if(mediaQuery) {
item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
}
list.push(item);
}
}
};
return list;
};
/***/ },
/* 77 */
/***/ function(module, exports, __webpack_require__) {
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var stylesInDom = {},
memoize = function(fn) {
var memo;
return function () {
if (typeof memo === "undefined") memo = fn.apply(this, arguments);
return memo;
};
},
isOldIE = memoize(function() {
return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());
}),
getHeadElement = memoize(function () {
return document.head || document.getElementsByTagName("head")[0];
}),
singletonElement = null,
singletonCounter = 0,
styleElementsInsertedAtTop = [];
module.exports = function(list, options) {
if(false) {
if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
}
options = options || {};
// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
// tags it will allow on a page
if (typeof options.singleton === "undefined") options.singleton = isOldIE();
// By default, add <style> tags to the bottom of <head>.
if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
var styles = listToStyles(list);
addStylesToDom(styles, options);
return function update(newList) {
var mayRemove = [];
for(var i = 0; i < styles.length; i++) {
var item = styles[i];
var domStyle = stylesInDom[item.id];
domStyle.refs--;
mayRemove.push(domStyle);
}
if(newList) {
var newStyles = listToStyles(newList);
addStylesToDom(newStyles, options);
}
for(var i = 0; i < mayRemove.length; i++) {
var domStyle = mayRemove[i];
if(domStyle.refs === 0) {
for(var j = 0; j < domStyle.parts.length; j++)
domStyle.parts[j]();
delete stylesInDom[domStyle.id];
}
}
};
}
function addStylesToDom(styles, options) {
for(var i = 0; i < styles.length; i++) {
var item = styles[i];
var domStyle = stylesInDom[item.id];
if(domStyle) {
domStyle.refs++;
for(var j = 0; j < domStyle.parts.length; j++) {
domStyle.parts[j](item.parts[j]);
}
for(; j < item.parts.length; j++) {
domStyle.parts.push(addStyle(item.parts[j], options));
}
} else {
var parts = [];
for(var j = 0; j < item.parts.length; j++) {
parts.push(addStyle(item.parts[j], options));
}
stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
}
}
}
function listToStyles(list) {
var styles = [];
var newStyles = {};
for(var i = 0; i < list.length; i++) {
var item = list[i];
var id = item[0];
var css = item[1];
var media = item[2];
var sourceMap = item[3];
var part = {css: css, media: media, sourceMap: sourceMap};
if(!newStyles[id])
styles.push(newStyles[id] = {id: id, parts: [part]});
else
newStyles[id].parts.push(part);
}
return styles;
}
function insertStyleElement(options, styleElement) {
var head = getHeadElement();
var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
if (options.insertAt === "top") {
if(!lastStyleElementInsertedAtTop) {
head.insertBefore(styleElement, head.firstChild);
} else if(lastStyleElementInsertedAtTop.nextSibling) {
head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
} else {
head.appendChild(styleElement);
}
styleElementsInsertedAtTop.push(styleElement);
} else if (options.insertAt === "bottom") {
head.appendChild(styleElement);
} else {
throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
}
}
function removeStyleElement(styleElement) {
styleElement.parentNode.removeChild(styleElement);
var idx = styleElementsInsertedAtTop.indexOf(styleElement);
if(idx >= 0) {
styleElementsInsertedAtTop.splice(idx, 1);
}
}
function createStyleElement(options) {
var styleElement = document.createElement("style");
styleElement.type = "text/css";
insertStyleElement(options, styleElement);
return styleElement;
}
function createLinkElement(options) {
var linkElement = document.createElement("link");
linkElement.rel = "stylesheet";
insertStyleElement(options, linkElement);
return linkElement;
}
function addStyle(obj, options) {
var styleElement, update, remove;
if (options.singleton) {
var styleIndex = singletonCounter++;
styleElement = singletonElement || (singletonElement = createStyleElement(options));
update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
} else if(obj.sourceMap &&
typeof URL === "function" &&
typeof URL.createObjectURL === "function" &&
typeof URL.revokeObjectURL === "function" &&
typeof Blob === "function" &&
typeof btoa === "function") {
styleElement = createLinkElement(options);
update = updateLink.bind(null, styleElement);
remove = function() {
removeStyleElement(styleElement);
if(styleElement.href)
URL.revokeObjectURL(styleElement.href);
};
} else {
styleElement = createStyleElement(options);
update = applyToTag.bind(null, styleElement);
remove = function() {
removeStyleElement(styleElement);
};
}
update(obj);
return function updateStyle(newObj) {
if(newObj) {
if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
return;
update(obj = newObj);
} else {
remove();
}
};
}
var replaceText = (function () {
var textStore = [];
return function (index, replacement) {
textStore[index] = replacement;
return textStore.filter(Boolean).join('\n');
};
})();
function applyToSingletonTag(styleElement, index, remove, obj) {
var css = remove ? "" : obj.css;
if (styleElement.styleSheet) {
styleElement.styleSheet.cssText = replaceText(index, css);
} else {
var cssNode = document.createTextNode(css);
var childNodes = styleElement.childNodes;
if (childNodes[index]) styleElement.removeChild(childNodes[index]);
if (childNodes.length) {
styleElement.insertBefore(cssNode, childNodes[index]);
} else {
styleElement.appendChild(cssNode);
}
}
}
function applyToTag(styleElement, obj) {
var css = obj.css;
var media = obj.media;
var sourceMap = obj.sourceMap;
if(media) {
styleElement.setAttribute("media", media)
}
if(styleElement.styleSheet) {
styleElement.styleSheet.cssText = css;
} else {
while(styleElement.firstChild) {
styleElement.removeChild(styleElement.firstChild);
}
styleElement.appendChild(document.createTextNode(css));
}
}
function updateLink(linkElement, obj) {
var css = obj.css;
var media = obj.media;
var sourceMap = obj.sourceMap;
if(sourceMap) {
// http://stackoverflow.com/a/26603875
css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
}
var blob = new Blob([css], { type: "text/css" });
var oldSrc = linkElement.href;
linkElement.href = URL.createObjectURL(blob);
if(oldSrc)
URL.revokeObjectURL(oldSrc);
}
/***/ },
/* 78 */
/***/ function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(79);
if(typeof content === 'string') content = [[module.id, content, '']];
// add the styles to the DOM
var update = __webpack_require__(77)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js!./theme-blue.css", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js!./theme-blue.css");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ },
/* 79 */
/***/ function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(76)();
// imports
// module
exports.push([module.id, ".ag-blue .ag-root {\n border: 1px solid #9bc2e6;\n font: 10pt Calibri, \"Segoe UI\", Thonburi, Arial, Verdana, sans-serif;\n}\n.ag-blue .ag-cell {\n top: -1px;\n padding-left: 2px;\n padding-right: 2px;\n overflow: hidden;\n white-space: nowrap;\n letter-spacing: -0.02em;\n}\n.ag-blue .ag-column-moving .ag-cell {\n -webkit-transition: left 0.2s;\n -moz-transition: left 0.2s;\n -o-transition: left 0.2s;\n -ms-transition: left 0.2s;\n transition: left 0.2s;\n}\n.ag-blue .ag-cell-focus {\n background: #fff;\n border: 2px solid #217346;\n}\n.ag-blue .ag-cell-no-focus {\n border-right: 1px dotted #9bc2e6;\n border-top: 2px solid transparent;\n border-left: 2px solid transparent;\n border-bottom: 1px solid #9bc2e6;\n}\n.ag-blue .ag-cell-first-right-pinned {\n border-left: 1px dotted #9bc2e6;\n}\n.ag-blue .ag-header {\n background-color: #5b9bd5;\n border-bottom: 1px solid #9bc2e6;\n}\n.ag-blue .ag-no-scrolls .ag-header-container {\n background-color: #5b9bd5;\n border-bottom: 1px solid #9bc2e6;\n}\n.ag-blue .ag-header-cell {\n border-right: 1px solid #9bc2e6;\n}\n.ag-blue .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n filter: alpha(opacity=0);\n}\n.ag-blue .ag-header-cell-moving-clone {\n border-right: 1px solid #808080;\n border-left: 1px solid #808080;\n background-color: rgba(91,155,213,0.8);\n}\n.ag-blue .ag-header-cell-moving {\n background-color: #9bc2e6;\n}\n.ag-blue .ag-header-group-cell {\n border-right: 1px solid #9bc2e6;\n}\n.ag-blue .ag-header-group-cell-with-group {\n border-bottom: 1px solid #9bc2e6;\n}\n.ag-blue .ag-pinned-right-header {\n border-left: 1px solid #9bc2e6;\n}\n.ag-blue .ag-header-cell-label {\n padding: 4px 2px 4px 2px;\n font-weight: bold;\n color: #fff;\n}\n.ag-blue .ag-header-cell-text {\n padding-left: 2px;\n}\n.ag-blue .ag-header-group-cell-label {\n padding: 4px;\n font-weight: bold;\n color: #fff;\n padding-left: 10px;\n}\n.ag-blue .ag-header-group-text {\n margin-right: 2px;\n}\n.ag-blue .ag-header-cell-menu-button {\n color: #fff;\n border: 1px solid #a6acb3;\n padding: 2px;\n margin-top: 3px;\n -webkit-border-radius: 3px;\n border-radius: 3px;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n line-height: 0px; /* normal line height, a space was appearing below the menu button */\n/* When using bootstrap, box-sizing was set to 'border-box' */\n}\n.ag-blue .ag-header-icon {\n color: #fff;\n stroke: #fff;\n fill: #fff;\n}\n.ag-blue .ag-dark .ag-header-expand-icon:hover {\n cursor: pointer;\n}\n.ag-blue .ag-row-odd {\n background-color: #ddebf7;\n}\n.ag-blue .ag-row-even {\n background-color: #fff;\n}\n.ag-blue .ag-overlay-loading-wrapper {\n background-color: rgba(255,255,255,0.5);\n}\n.ag-blue .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n padding: 10px;\n}\n.ag-blue .ag-body {\n background-color: #fafafa;\n}\n.ag-blue .ag-row-selected {\n background-color: #c7c7c7;\n}\n.ag-blue .ag-group-cell-entire-row {\n background-color: #fff;\n font-weight: bold;\n padding: 2px 4px;\n border-bottom: solid 1px #9bc2e6;\n overflow: hidden;\n white-space: nowrap;\n}\n.ag-blue .ag-footer-cell-entire-row {\n background-color: #fff;\n font-weight: bold;\n padding: 4px;\n border-bottom: solid 1px #9bc2e6;\n}\n.ag-blue .ag-group-cell {\n font-style: italic;\n}\n.ag-blue .ag-group-expand {\n padding-right: 2px;\n}\n.ag-blue .ag-footer-cell {\n font-style: italic;\n}\n.ag-blue .ag-filter-checkbox {\n position: relative;\n top: 2px;\n left: 2px;\n padding-right: 2px;\n}\n.ag-blue .ag-filter-header-container {\n border-bottom: 1px solid #d3d3d3;\n font: 10pt Calibri, \"Segoe UI\", Thonburi, Arial, Verdana, sans-serif;\n}\n.ag-blue .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px;\n}\n.ag-blue .ag-filter {\n background-color: #fff;\n border: 1px solid #c6c6c6;\n font: 9pt Calibri, \"Segoe UI\", Thonburi, Arial, Verdana, sans-serif;\n}\n.ag-blue .ag-filter-filter {\n background-color: #fff;\n border: 1px solid #c6c6c6;\n width: 192px;\n}\n.ag-blue .ag-filter-value {\n margin-left: 4px;\n}\n.ag-blue .ag-filter-value:hover {\n background-color: #39f;\n border: 1px dotted #000;\n color: #fff;\n}\n.ag-blue .ag-selection-checkbox {\n margin-left: 4px;\n}\n.ag-blue .ag-paging-panel {\n padding: 4px;\n}\n.ag-blue .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px;\n}\n.ag-blue .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px;\n}\n.ag-blue .ag-column-not-visible {\n opacity: 0.75;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)\";\n filter: alpha(opacity=75);\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)\";\n filter: \"alpha(opacity=75)\";\n}\n.ag-blue .ag-not-dragging {\n border: 1px solid transparent;\n}\n.ag-blue .ag-drop-target-above {\n border-top: 5px solid #a9a9a9;\n}\n.ag-blue .ag-drop-target-below {\n border-bottom: 5px solid #a9a9a9;\n}\n.ag-blue .ag-dragging {\n border: 1px dotted #a9a9a9;\n}\n.ag-blue .ag-list-item-selected {\n color: #f0f0f0;\n}\n.ag-blue .ag-list-item-not-selected {\n font-style: italic;\n color: #a0a0a0;\n}\n.ag-blue .ag-tool-panel-container {\n background-color: #eee;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #a9a9a9;\n padding: 4px;\n}\n.ag-blue .ag-list-selection {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.ag-blue .ag-popup-list .ag-list-item:hover {\n background-color: #add8e6;\n}\n.ag-blue .ag-visible-icons {\n padding-left: 2px;\n padding-right: 2px;\n}\n", ""]);
// exports
/***/ },
/* 80 */
/***/ function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(81);
if(typeof content === 'string') content = [[module.id, content, '']];
// add the styles to the DOM
var update = __webpack_require__(77)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js!./theme-dark.css", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js!./theme-dark.css");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ },
/* 81 */
/***/ function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(76)();
// imports
// module
exports.push([module.id, ".ag-dark .ag-root {\n border: 1px solid #808080;\n color: #e0e0e0;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n.ag-dark .ag-cell {\n border-right: 1px solid #808080;\n padding: 4px;\n}\n.ag-dark .ag-column-moving .ag-cell {\n -webkit-transition: left 0.2s;\n -moz-transition: left 0.2s;\n -o-transition: left 0.2s;\n -ms-transition: left 0.2s;\n transition: left 0.2s;\n}\n.ag-dark .ag-header {\n background-color: #430000;\n border-bottom: 1px solid #808080;\n}\n.ag-dark .ag-no-scrolls .ag-header-container {\n background-color: #430000;\n border-bottom: 1px solid #808080;\n}\n.ag-dark .ag-header-cell {\n border-right: 1px solid #808080;\n}\n.ag-dark .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n filter: alpha(opacity=0);\n}\n.ag-dark .ag-header-cell-moving-clone {\n border-right: 1px solid #808080;\n border-left: 1px solid #808080;\n background-color: rgba(43,0,0,0.8);\n}\n.ag-dark .ag-header-cell-moving {\n background-color: #808080;\n}\n.ag-dark .ag-pinned-right-header {\n border-left: 1px solid #808080;\n}\n.ag-dark .ag-cell-first-right-pinned {\n border-left: 1px solid #808080;\n}\n.ag-dark .ag-header-cell-label {\n padding: 4px 2px 4px 2px;\n}\n.ag-dark .ag-header-cell-text {\n padding: 2px;\n}\n.ag-dark .ag-header-group-cell-label {\n font-weight: bold;\n padding: 4px;\n padding-left: 10px;\n}\n.ag-dark .ag-header-group-cell {\n border-right: 1px solid #808080;\n}\n.ag-dark .ag-header-group-text {\n margin-right: 2px;\n}\n.ag-dark .ag-header-group-cell-with-group {\n border-bottom: 1px solid #808080;\n}\n.ag-dark .ag-header-cell-menu-button {\n padding: 2px;\n margin-top: 4px;\n border: 1px solid transparent;\n -webkit-border-radius: 3px;\n border-radius: 3px;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box; /* When using bootstrap, box-sizing was set to 'border-box' */\n line-height: 0px; /* normal line height, a space was appearing below the menu button */\n}\n.ag-dark .ag-header-cell-menu-button:hover {\n border: 1px solid #e0e0e0;\n}\n.ag-dark .ag-header-icon {\n stroke: #fff;\n fill: #fff;\n}\n.ag-dark .ag-header-expand-icon:hover {\n cursor: pointer;\n}\n.ag-dark .ag-row-odd {\n background-color: #302e2e;\n}\n.ag-dark .ag-row-even {\n background-color: #403e3e;\n}\n.ag-dark .ag-overlay-loading-wrapper {\n background-color: rgba(255,255,255,0.5);\n}\n.ag-dark .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n padding: 10px;\n color: #000;\n}\n.ag-dark .ag-body {\n background-color: #ddd;\n}\n.ag-dark .ag-row-selected {\n background-color: #000;\n}\n.ag-dark .ag-group-cell-entire-row {\n background-color: #aaa;\n color: 222;\n padding: 4px;\n}\n.ag-dark .ag-footer-cell-entire-row {\n background-color: #aaa;\n color: 222;\n padding: 4px;\n}\n.ag-dark .ag-group-cell {\n font-style: italic;\n}\n.ag-dark .ag-group-expand {\n padding-right: 2px;\n}\n.ag-dark .ag-footer-cell {\n font-style: italic;\n}\n.ag-dark .ag-filter {\n color: #000;\n}\n.ag-dark .ag-filter-checkbox {\n position: relative;\n top: 2px;\n left: 2px;\n}\n.ag-dark .ag-filter-header-container {\n border-bottom: 1px solid #d3d3d3;\n}\n.ag-dark .ag-filter-header-container {\n border-bottom: 1px solid #d3d3d3;\n}\n.ag-dark .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px;\n}\n.ag-dark .ag-filter {\n border: 1px solid #000;\n background-color: #f0f0f0;\n}\n.ag-dark .ag-selection-checkbox {\n margin-left: 4px;\n}\n.ag-dark .ag-paging-panel {\n color: #000;\n padding: 4px;\n}\n.ag-dark .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px;\n}\n.ag-dark .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px;\n}\n.ag-dark .ag-column-not-visible {\n opacity: 0.75;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)\";\n filter: alpha(opacity=75);\n font-style: italic;\n}\n.ag-dark .ag-not-dragging {\n border: 1px solid transparent;\n}\n.ag-dark .ag-drop-target-above {\n border-top: 5px solid #a9a9a9;\n}\n.ag-dark .ag-drop-target-below {\n border-bottom: 5px solid #a9a9a9;\n}\n.ag-dark .ag-dragging {\n border: 1px dotted #a9a9a9;\n}\n.ag-dark .ag-list-item-selected {\n color: #f0f0f0;\n}\n.ag-dark .ag-list-item-not-selected {\n font-style: italic;\n color: #a0a0a0;\n}\n.ag-dark .ag-tool-panel-container {\n background-color: #eee;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #a9a9a9;\n padding: 4px;\n}\n.ag-dark .ag-list-selection {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.ag-dark .ag-visible-icons {\n padding-left: 2px;\n padding-right: 2px;\n}\n", ""]);
// exports
/***/ },
/* 82 */
/***/ function(module, exports, __webpack_require__) {
// style-loader: Adds some css to the DOM by adding a <style> tag
// load the styles
var content = __webpack_require__(83);
if(typeof content === 'string') content = [[module.id, content, '']];
// add the styles to the DOM
var update = __webpack_require__(77)(content, {});
if(content.locals) module.exports = content.locals;
// Hot Module Replacement
if(false) {
// When the styles change, update the <style> tags
if(!content.locals) {
module.hot.accept("!!./../../node_modules/css-loader/index.js!./theme-fresh.css", function() {
var newContent = require("!!./../../node_modules/css-loader/index.js!./theme-fresh.css");
if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
update(newContent);
});
}
// When the module is disposed, remove the <style> tags
module.hot.dispose(function() { update(); });
}
/***/ },
/* 83 */
/***/ function(module, exports, __webpack_require__) {
exports = module.exports = __webpack_require__(76)();
// imports
// module
exports.push([module.id, ".ag-fresh .ag-root {\n border: 1px solid #808080;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n.ag-fresh .ag-cell {\n padding: 2px;\n}\n.ag-fresh .ag-column-moving .ag-cell {\n -webkit-transition: left 0.2s;\n -moz-transition: left 0.2s;\n -o-transition: left 0.2s;\n -ms-transition: left 0.2s;\n transition: left 0.2s;\n}\n.ag-fresh .ag-cell-focus {\n border: 1px solid #a9a9a9;\n}\n.ag-fresh .ag-cell-no-focus {\n border-right: 1px dotted #808080;\n border-top: 1px solid transparent;\n border-left: 1px solid transparent;\n border-bottom: 1px solid transparent;\n}\n.ag-fresh .ag-cell-first-right-pinned {\n border-left: 1px dotted #808080;\n}\n.ag-fresh .ag-header {\n background: -webkit-linear-gradient(#fff, #d3d3d3);\n background: -moz-linear-gradient(#fff, #d3d3d3);\n background: -o-linear-gradient(#fff, #d3d3d3);\n background: -ms-linear-gradient(#fff, #d3d3d3);\n background: linear-gradient(#fff, #d3d3d3);\n border-bottom: 1px solid #808080;\n}\n.ag-fresh .ag-no-scrolls .ag-header-container {\n background: -webkit-linear-gradient(#fff, #d3d3d3);\n background: -moz-linear-gradient(#fff, #d3d3d3);\n background: -o-linear-gradient(#fff, #d3d3d3);\n background: -ms-linear-gradient(#fff, #d3d3d3);\n background: linear-gradient(#fff, #d3d3d3);\n border-bottom: 1px solid #808080;\n}\n.ag-fresh .ag-header-cell {\n border-right: 1px solid #808080;\n}\n.ag-fresh .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n filter: alpha(opacity=0);\n}\n.ag-fresh .ag-header-cell-moving {\n background-color: #bebebe;\n}\n.ag-fresh .ag-header-cell-moving-clone {\n border-right: 1px solid #808080;\n border-left: 1px solid #808080;\n background-color: rgba(220,220,220,0.8);\n}\n.ag-fresh .ag-header-group-cell {\n border-right: 1px solid #808080;\n}\n.ag-fresh .ag-header-group-cell-with-group {\n border-bottom: 1px solid #808080;\n}\n.ag-fresh .ag-header-cell-label {\n padding: 4px 2px 4px 2px;\n}\n.ag-fresh .ag-header-cell-text {\n padding-left: 2px;\n}\n.ag-fresh .ag-header-group-cell-label {\n padding: 4px;\n padding-left: 10px;\n}\n.ag-fresh .ag-header-group-text {\n margin-right: 2px;\n}\n.ag-fresh .ag-header-cell-menu-button {\n padding: 2px;\n margin-top: 4px;\n border: 1px solid transparent;\n -webkit-border-radius: 3px;\n border-radius: 3px;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box; /* When using bootstrap, box-sizing was set to 'border-box' */\n line-height: 0px; /* normal line height, a space was appearing below the menu button */\n}\n.ag-fresh .ag-pinned-right-header {\n border-left: 1px solid #808080;\n}\n.ag-fresh .ag-header-cell-menu-button:hover {\n border: 1px solid #000;\n}\n.ag-fresh .ag-header-icon {\n color: #800000;\n}\n.ag-fresh .ag-row-selected {\n background-color: #b0e0e6 !important;\n}\n.ag-fresh .ag-body .ag-row-odd {\n background-color: #f6f6f6;\n}\n.ag-fresh .ag-body .ag-row-even {\n background-color: #fff;\n}\n.ag-fresh .ag-floating-top .ag-row {\n background-color: #f0f0f0;\n}\n.ag-fresh .ag-floating-bottom .ag-row {\n background-color: #f0f0f0;\n}\n.ag-fresh .ag-overlay-loading-wrapper {\n background-color: rgba(255,255,255,0.5);\n}\n.ag-fresh .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n padding: 10px;\n}\n.ag-fresh .ag-overlay-no-rows-center {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-border-radius: 10px;\n border-radius: 10px;\n padding: 10px;\n}\n.ag-fresh .ag-body {\n background-color: #fafafa;\n}\n.ag-fresh .ag-group-cell-entire-row {\n background-color: #aaa;\n padding: 4px;\n}\n.ag-fresh .ag-footer-cell-entire-row {\n background-color: #aaa;\n padding: 4px;\n}\n.ag-fresh .ag-group-cell {\n font-style: italic;\n}\n.ag-fresh .ag-group-expand {\n padding-right: 2px;\n}\n.ag-fresh .ag-footer-cell {\n font-style: italic;\n}\n.ag-fresh .ag-filter-checkbox {\n position: relative;\n top: 2px;\n left: 2px;\n}\n.ag-fresh .ag-filter-header-container {\n border-bottom: 1px solid #d3d3d3;\n}\n.ag-fresh .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px;\n}\n.ag-fresh .ag-filter {\n border: 1px solid #000;\n background-color: #f0f0f0;\n}\n.ag-fresh .ag-filter-value {\n margin-left: 4px;\n}\n.ag-fresh .ag-selection-checkbox {\n margin-left: 4px;\n}\n.ag-fresh .ag-paging-panel {\n padding: 4px;\n}\n.ag-fresh .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px;\n}\n.ag-fresh .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px;\n}\n.ag-fresh .ag-column-not-visible {\n opacity: 0.75;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)\";\n filter: alpha(opacity=75);\n}\n.ag-fresh .ag-not-dragging {\n border: 1px solid transparent;\n}\n.ag-fresh .ag-drop-target-above {\n border-top: 5px solid #a9a9a9;\n}\n.ag-fresh .ag-drop-target-below {\n border-bottom: 5px solid #a9a9a9;\n}\n.ag-fresh .ag-dragging {\n border: 1px dotted #a9a9a9;\n}\n.ag-fresh .ag-list-item-selected {\n color: #f0f0f0;\n}\n.ag-fresh .ag-list-item-not-selected {\n font-style: italic;\n color: #a0a0a0;\n}\n.ag-fresh .ag-tool-panel-container {\n background-color: #eee;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n border: 1px solid #a9a9a9;\n padding: 4px;\n}\n.ag-fresh .ag-list-selection {\n background-color: #fff;\n border: 1px solid #a9a9a9;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n.ag-fresh .ag-popup-list .ag-list-item:hover {\n background-color: #add8e6;\n}\n.ag-fresh .ag-visible-icons {\n padding-left: 2px;\n padding-right: 2px;\n}\n", ""]);
// exports
/***/ }
/******/ ])
});
;