define("dojox/grid/enhanced/plugins/exporter/TableWriter", [ "dojo/_base/declare", "dojo/_base/array", "dojo/dom-geometry", "./_ExportWriter", "../Exporter" ], function(declare, array, domGeometry, _ExportWriter, Exporter){ Exporter.registerWriter("table", "dojox.grid.enhanced.plugins.exporter.TableWriter"); return declare("dojox.grid.enhanced.plugins.exporter.TableWriter", _ExportWriter, { // summary: // Export grid to HTML table format. Primarily used by Printer plugin. constructor: function(/* object? */writerArgs){ // summary: // The generated table only defines the col/rowspan, height and width of // all the cells in the style attribute, no other attributes // (like border, cellspacing, etc.) are used. // Users can define these attributes in the writerArgs object, like: // {table:"border='border'",thead:"cellspacing='3'"} this._viewTables = []; this._tableAttrs = writerArgs || {}; }, _getTableAttrs: function(/* string */tagName){ // summary: // Get html attribute string for the given kind of tag. // tags: // private // tagName: string // An html tag name // returns: // The well formatted attributes for the given html table.tag var attrs = this._tableAttrs[tagName] || ''; //To ensure the attribute list starts with a space if(attrs && attrs[0] != ' '){ attrs = ' ' + attrs; } return attrs; //String }, _getRowClass: function(/* object */arg_obj){ // summary: // Get CSS class string for a row // tags: // private return arg_obj.isHeader ? " grid_header" : [//String " grid_row grid_row_", arg_obj.rowIdx + 1, arg_obj.rowIdx % 2 ? " grid_even_row" : " grid_odd_row" ].join(''); }, _getColumnClass: function(/* object */arg_obj){ // summary: // Get CSS class string for a column // tags: // private var col_idx = arg_obj.cell.index + arg_obj.colOffset + 1; return [" grid_column grid_column_", col_idx,//String col_idx % 2 ? " grid_odd_column" : " grid_even_column"].join(''); }, beforeView: function(/* object */arg_obj){ // summary: // Overrided from _ExportWriter var viewIdx = arg_obj.viewIdx, table = this._viewTables[viewIdx], height, width = domGeometry.getMarginBox(arg_obj.view.contentNode).w; if(!table){ var left = 0; for(var i = 0; i < viewIdx; ++i){ left += this._viewTables[i]._width; } table = this._viewTables[viewIdx] = ['
']; } table._width = width; if(arg_obj.isHeader){ height = domGeometry.getContentBox(arg_obj.view.headerContentNode).h; }else{ var rowNode = arg_obj.grid.getRowNode(arg_obj.rowIdx); if(rowNode){ height = domGeometry.getContentBox(rowNode).h; }else{ //This row has not been loaded from store, so we should estimate it's height. height = arg_obj.grid.scroller.averageRowHeight; } } table.push(''); return true; //Boolean }, afterView: function(/* object */arg_obj){ // summary: // Overrided from _ExportWriter this._viewTables[arg_obj.viewIdx].push('
'); }, beforeSubrow: function(/* object */arg_obj){ // summary: // Overrided from _ExportWriter this._viewTables[arg_obj.viewIdx].push(''); return true; //Boolean }, afterSubrow: function(/* object */arg_obj){ // summary: // Overrided from _ExportWriter this._viewTables[arg_obj.viewIdx].push(''); }, handleCell: function(/* object */arg_obj){ // summary: // Overrided from _ExportWriter var cell = arg_obj.cell; if(cell.hidden || array.indexOf(arg_obj.spCols, cell.index) >= 0){ //We are not interested in indirect selectors and row indexes. return; } var cellTagName = arg_obj.isHeader ? 'th' : 'td', attrs = [cell.colSpan ? ' colspan="' + cell.colSpan + '"' : '', cell.rowSpan ? ' rowspan="' + cell.rowSpan + '"' : '', ' style="width: ', domGeometry.getContentBox(cell.getHeaderNode()).w, 'px;"', this._getTableAttrs(cellTagName), ' class="', this._getColumnClass(arg_obj), '"'].join(''), table = this._viewTables[arg_obj.viewIdx]; table.push('<', cellTagName, attrs, '>'); if(arg_obj.isHeader){ table.push(cell.name || cell.field); } else{ table.push(this._getExportDataForCell(arg_obj.rowIdx, arg_obj.row, cell, arg_obj.grid)); } table.push(''); }, afterContent: function(){ // summary: // Overrided from _ExportWriter array.forEach(this._viewTables, function(table){ table.push('
'); }); }, toString: function(){ // summary: // Overrided from _ExportWriter var viewsHTML = array.map(this._viewTables, function(table){ //String return table.join(''); }).join(''); return ['
', viewsHTML, '
'].join(''); } }); });