Output: add output_ignoreColumns option. Fixes #607

This commit is contained in:
Mottie 2014-05-06 10:59:35 -05:00
parent 346587f4bc
commit 41be62bb32
3 changed files with 36 additions and 2 deletions

View File

@ -119,6 +119,7 @@
filter_reset : demos[groupIndex] + ' .reset',
output_separator : ',', // ',' 'json', 'array' or separator (e.g. ',')
output_ignoreColumns: [], // columns to ignore [0, 1,... ] (zero-based index)
output_dataAttrib : 'data-name', // data-attribute containing alternate cell text
output_headerRows : true, // output all header rows (multiple rows)
output_delivery : 'p', // (p)opup, (d)ownload
@ -223,6 +224,7 @@
<h3><a href="#">Notes</a></h3>
<div>
<ul>
<li>In <span class="version">v2.16.5</span>, added the <code>output_ignoreColumns</code> option.</li>
<li>In <span class="version">v2.16.4</span>, added the <code>output_encoding</code> option.<br><br></li>
<li>This widget will <strong>only work</strong> in tablesorter version 2.8+ and jQuery version 1.7+.</li>
<li>This widget can output the table data to:
@ -397,6 +399,20 @@ line,value1,value2,value3
</div>
</td>
</tr>
<tr id="output_ignorecolumns">
<td><a href="#" class="permalink">output_ignoreColumns</a></td>
<td><code>[ ]</code></td>
<td>
Add the zero-based column index to this array to ignore specific columns (<span class="version">v2.16.5</span>)
<div class="collapsible">
<br>
For example, to use this option to hide the first column, set it as follows:
<pre class="prettyprint lang-js">output_ignoreColumns : [ 0 ]</pre>
<br>
<span class="label label-info">Note</span> This option will work properly with tables that contain rowspans &amp; colspans.
</div>
</td>
</tr>
<tr id="output_dataattrib">
<td><a href="#" class="permalink">output_dataAttrib</a></td>
<td><code>'data-name'</code></td>

View File

@ -488,7 +488,7 @@
<li><a href="example-widget-header-titles.html">Header titles widget</a> (v2.15.6; <span class="version updated">2.15.7</span>)</li>
<li><span class="label label-info">Beta</span> <a href="example-widget-math.html">Math widget</a> (<span class="version">v2.16</span>; <span class="version updated">v2.16.2</span>).</li>
<li>
<span class="label label-info">Beta</span> <a href="example-widget-output.html">Output widget</a> (<span class="version">v2.16</span>)
<span class="label label-info">Beta</span> <a href="example-widget-output.html">Output widget</a> (<span class="version">v2.16</span>; <span class="version updated">v2.16.5</span>)
<br><br>
</li>

View File

@ -91,6 +91,16 @@ output = ts.output = {
return tmpRow;
},
ignoreColumns : function(wo, data) {
// ignore columns -> remove data from built array (because we've already processed any rowspan/colspan)
$.each( data, function(indx, val){
data[indx] = $.grep(val, function(v, cellIndx){
return $.inArray(cellIndx, wo.output_ignoreColumns) < 0;
});
});
return data;
},
process : function(c, wo) {
var mydata, $this, $rows, headers, csvData, len,
hasStringify = window.JSON && JSON.hasOwnProperty('stringify'),
@ -117,23 +127,30 @@ output = ts.output = {
csvData = output.processRow(c, $rows);
len = headers.length;
if (wo.output_ignoreColumns.length) {
headers = output.ignoreColumns(wo, headers);
csvData = output.ignoreColumns(wo, csvData);
}
if (outputJSON) {
tmpData = [];
$.each( csvData, function(indx, val){
// multiple header rows & output_headerRows = true, pick the last row...
tmpData.push( output.row2Hash( headers[ (len > 1 && wo.output_headerRows) ? indx % len : len - 1], val ) );
});
// requires JSON stringify; if it doesn't exist, the output will show [object Object],... in the output window
mydata = hasStringify ? JSON.stringify(tmpData) : tmpData;
} else {
tmpData = output.row2CSV(wo, wo.output_headerRows ? headers : [ headers[ (len > 1 && wo.output_headerRows) ? indx % len : len - 1] ], outputArray)
.concat( output.row2CSV(wo, csvData, outputArray) );
// stringify the array; if stringify doesn't exist the array will be flattened
mydata = outputArray && hasStringify ? JSON.stringify(tmpData) : tmpData.join('\n');
}
// callback; if true returned, continue processing
if (!wo.output_callback(mydata)) { return; }
if ($.isFunction(wo.output_callback) && !wo.output_callback(mydata)) { return; }
if ( /p/.test( (wo.output_delivery || '').toLowerCase() ) ) {
output.popup(mydata, wo.output_popupStyle, outputJSON || outputArray);
@ -242,6 +259,7 @@ ts.addWidget({
id: "output",
options: {
output_separator : ',', // set to "json", "array" or any separator
output_ignoreColumns: [], // columns to ignore [0, 1,... ] (zero-based index)
output_dataAttrib : 'data-name', // header attrib containing modified header name
output_headerRows : false, // if true, include multiple header rows (JSON only)
output_delivery : 'popup', // popup, download