89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
//>>built
|
|
define("dojox/grid/enhanced/plugins/exporter/CSVWriter", [
|
|
"dojo/_base/declare",
|
|
"dojo/_base/array",
|
|
"./_ExportWriter",
|
|
"../Exporter"
|
|
], function(declare, array, _ExportWriter, Exporter){
|
|
|
|
Exporter.registerWriter("csv", "dojox.grid.enhanced.plugins.exporter.CSVWriter");
|
|
|
|
return declare("dojox.grid.enhanced.plugins.exporter.CSVWriter", _ExportWriter, {
|
|
// summary:
|
|
// Export grid to CSV format.
|
|
_separator: ',',
|
|
|
|
_newline: "\r\n",
|
|
|
|
constructor: function(/* object? */writerArgs){
|
|
// summary:
|
|
// CSV default separator is ','.
|
|
// But we can also use our own.
|
|
// writerArgs: object?
|
|
// {separator:'...'}
|
|
if(writerArgs){
|
|
this._separator = writerArgs.separator ? writerArgs.separator : this._separator;
|
|
this._newline = writerArgs.newline ? writerArgs.newline : this._newline;
|
|
}
|
|
this._headers = [];
|
|
this._dataRows = [];
|
|
},
|
|
|
|
_formatCSVCell: function(/* string */cellValue){
|
|
// summary:
|
|
// Format cell value to follow CSV standard.
|
|
// See: http://en.wikipedia.org/wiki/Comma-separated_values
|
|
// tags:
|
|
// private
|
|
// cellValue: string
|
|
// The value in a cell.
|
|
// returns:
|
|
// The formatted content of a cell
|
|
if(cellValue === null || cellValue === undefined){
|
|
return '';
|
|
}
|
|
var result = String(cellValue).replace(/"/g, '""');
|
|
if(result.indexOf(this._separator) >= 0 || result.search(/[" \t\r\n]/) >= 0){
|
|
result = '"' + result + '"';
|
|
}
|
|
return result; //String
|
|
},
|
|
|
|
beforeContentRow: function(/* object */arg_obj){
|
|
// summary:
|
|
// Overrided from _ExportWriter
|
|
var row = [],
|
|
func = this._formatCSVCell;
|
|
array.forEach(arg_obj.grid.layout.cells, function(cell){
|
|
//We are not interested in indirect selectors and row indexes.
|
|
if(!cell.hidden && array.indexOf(arg_obj.spCols,cell.index) < 0){
|
|
//We only need data here, not html
|
|
row.push(func(this._getExportDataForCell(arg_obj.rowIndex, arg_obj.row, cell, arg_obj.grid)));
|
|
}
|
|
}, this);
|
|
this._dataRows.push(row);
|
|
//We do not need to go into the row.
|
|
return false; //Boolean
|
|
},
|
|
|
|
handleCell: function(/* object */arg_obj){
|
|
// summary:
|
|
// Overrided from _ExportWriter
|
|
var cell = arg_obj.cell;
|
|
if(arg_obj.isHeader && !cell.hidden && array.indexOf(arg_obj.spCols,cell.index) < 0){
|
|
this._headers.push(cell.name || cell.field);
|
|
}
|
|
},
|
|
|
|
toString: function(){
|
|
// summary:
|
|
// Overrided from _ExportWriter
|
|
var result = this._headers.join(this._separator);
|
|
for(var i = this._dataRows.length - 1; i >= 0; --i){
|
|
this._dataRows[i] = this._dataRows[i].join(this._separator);
|
|
}
|
|
return result + this._newline + this._dataRows.join(this._newline); //String
|
|
}
|
|
});
|
|
});
|