You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by ol...@apache.org on 2014/08/22 09:07:15 UTC
svn commit: r1619691 -
/incubator/sirona/trunk/server/reporting/reporting-ui/src/main/webapp/js/app/controllers/controllers-report.js
Author: olamy
Date: Fri Aug 22 07:07:15 2014
New Revision: 1619691
URL: http://svn.apache.org/r1619691
Log:
csv export and paging
Modified:
incubator/sirona/trunk/server/reporting/reporting-ui/src/main/webapp/js/app/controllers/controllers-report.js
Modified: incubator/sirona/trunk/server/reporting/reporting-ui/src/main/webapp/js/app/controllers/controllers-report.js
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/server/reporting/reporting-ui/src/main/webapp/js/app/controllers/controllers-report.js?rev=1619691&r1=1619690&r2=1619691&view=diff
==============================================================================
--- incubator/sirona/trunk/server/reporting/reporting-ui/src/main/webapp/js/app/controllers/controllers-report.js (original)
+++ incubator/sirona/trunk/server/reporting/reporting-ui/src/main/webapp/js/app/controllers/controllers-report.js Fri Aug 22 07:07:15 2014
@@ -41,14 +41,22 @@ define(['jquery','angular','bootstrap','
{field: 'maxConcurrency', displayName: 'MaxConcurrency'},
];
+ var csvOpts = {fileName: "counters.csv"};
+
+ $scope.pagingOptions= {
+ pageSizes: [25, 50, 1000],
+ pageSize: 25,
+ currentPage: 1
+ };
$scope.gridOptions={
enablePaging: true,
- showFooter: false,
+ pagingOptions: $scope.pagingOptions,
+ showFooter: true,
showGroupPanel: true,
- jqueryUITheme: true,
+ jqueryUITheme: false,
columnDefs: 'colDefs',
- plugins: [new ngGridFlexibleHeightPlugin()]
+ plugins: [new ngGridFlexibleHeightPlugin(), new ngGridCsvExportPlugin(csvOpts)]
};
$http.get('restServices/sironaServices/counters')
@@ -58,16 +66,6 @@ define(['jquery','angular','bootstrap','
$scope.gridOptions.data='counters';
-
-
- $scope.getTableStyle= function() {
- var rowHeight=80;
- var headerHeight=50;
- return {
- height: ($scope.gridOptions.data.length * rowHeight + headerHeight) + "px"
- };
- };
-
}]);
@@ -115,6 +113,107 @@ define(['jquery','angular','bootstrap','
};
};
+ function ngGridCsvExportPlugin (opts) {
+ var self = this;
+ self.grid = null;
+ self.scope = null;
+ self.services = null;
+
+ opts = opts || {};
+ opts.containerPanel = opts.containerPanel || '.ngFooterPanel';
+ opts.linkClass = opts.linkCss || 'csv-data-link-span';
+ opts.linkLabel = opts.linkLabel || 'CSV Export';
+ opts.fileName = opts.fileName || 'Export.csv';
+
+ self.init = function(scope, grid, services) {
+ self.grid = grid;
+ self.scope = scope;
+ self.services = services;
+
+ function showDs() {
+ function csvStringify(str) {
+ if (str == null) { // we want to catch anything null-ish, hence just == not ===
+ return '';
+ }
+ if (typeof(str) === 'number') {
+ return '' + str;
+ }
+ if (typeof(str) === 'boolean') {
+ return (str ? 'TRUE' : 'FALSE') ;
+ }
+ if (typeof(str) === 'string') {
+ return str.replace(/"/g,'""');
+ }
+
+ return JSON.stringify(str).replace(/"/g,'""');
+ }
+
+ var keys = [];
+ var csvData = '';
+ for (var f in grid.config.columnDefs) {
+ if (grid.config.columnDefs.hasOwnProperty(f))
+ {
+ keys.push(grid.config.columnDefs[f].field);
+ csvData += '"' ;
+ if(typeof grid.config.columnDefs[f].displayName !== 'undefined'){/** moved to reduce looping and capture the display name if it exists**/
+ csvData += csvStringify(grid.config.columnDefs[f].displayName);
+ }
+ else{
+ csvData += csvStringify(grid.config.columnDefs[f].field);
+ }
+ csvData += '",';
+ }
+ }
+
+ function swapLastCommaForNewline(str) {
+ var newStr = str.substr(0,str.length - 1);
+ return newStr + "\n";
+ }
+
+ csvData = swapLastCommaForNewline(csvData);
+ var gridData = grid.data;
+ for (var gridRow in gridData) {
+ var rowData = '';
+ for ( var k in keys) {
+ var curCellRaw;
+
+ if (opts != null && opts.columnOverrides != null && opts.columnOverrides[keys[k]] != null) {
+ curCellRaw = opts.columnOverrides[keys[k]](
+ self.services.UtilityService.evalProperty(gridData[gridRow], keys[k]));
+ } else {
+ curCellRaw = self.services.UtilityService.evalProperty(gridData[gridRow], keys[k]);
+ }
+
+ rowData += '"' + csvStringify(curCellRaw) + '",';
+ }
+ csvData += swapLastCommaForNewline(rowData);
+ }
+ var fp = grid.$root.find(opts.containerPanel);
+ var csvDataLinkPrevious = grid.$root.find(opts.containerPanel + ' .' + opts.linkClass);
+ if (csvDataLinkPrevious != null) {csvDataLinkPrevious.remove() ; }
+ var csvDataLinkHtml = '<span class="' + opts.linkClass + '">';
+ csvDataLinkHtml += '<br><a href="data:text/csv;charset=UTF-8,';
+ csvDataLinkHtml += encodeURIComponent(csvData);
+ csvDataLinkHtml += '" download="' + opts.fileName + '">' + opts.linkLabel + '</a></br></span>' ;
+ fp.append(csvDataLinkHtml);
+
+
+ }
+ setTimeout(showDs, 0);
+ scope.catHashKeys = function() {
+ var hash = '';
+ for (var idx in scope.renderedRows) {
+ hash += scope.renderedRows[idx].$$hashKey;
+ }
+ return hash;
+ };
+ if (opts && opts.customDataWatcher) {
+ scope.$watch(opts.customDataWatcher, showDs);
+ } else {
+ scope.$watch(scope.catHashKeys, showDs);
+ }
+ };
+ };
});