From 41be62bb32f219ff2f954862b260e2330d9d9416 Mon Sep 17 00:00:00 2001 From: Mottie Date: Tue, 6 May 2014 10:59:35 -0500 Subject: [PATCH] Output: add output_ignoreColumns option. Fixes #607 --- docs/example-widget-output.html | 16 ++++++++++++++++ docs/index.html | 2 +- js/widgets/widget-output.js | 20 +++++++++++++++++++- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/example-widget-output.html b/docs/example-widget-output.html index 855d08c0..0eabd541 100644 --- a/docs/example-widget-output.html +++ b/docs/example-widget-output.html @@ -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 @@

Notes

+ + + [ ] + + Add the zero-based column index to this array to ignore specific columns (v2.16.5) +
+
+ For example, to use this option to hide the first column, set it as follows: +
output_ignoreColumns : [ 0 ]
+
+ Note This option will work properly with tables that contain rowspans & colspans. +
+ + 'data-name' diff --git a/docs/index.html b/docs/index.html index 4c5922fd..12c9febc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -488,7 +488,7 @@
  • Header titles widget (v2.15.6; 2.15.7)
  • Beta Math widget (v2.16; v2.16.2).
  • - Beta Output widget (v2.16) + Beta Output widget (v2.16; v2.16.5)

  • diff --git a/js/widgets/widget-output.js b/js/widgets/widget-output.js index f847c317..c1fe2f53 100644 --- a/js/widgets/widget-output.js +++ b/js/widgets/widget-output.js @@ -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