From b71d7307853434f5a0246b43e1dda7fa0813fd06 Mon Sep 17 00:00:00 2001 From: Mottie Date: Mon, 8 Jun 2015 13:36:49 -0500 Subject: [PATCH] Output: remove tfoot clone, concat data to the end instead --- dist/js/widgets/widget-output.min.js | 2 +- js/widgets/widget-output.js | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/dist/js/widgets/widget-output.min.js b/dist/js/widgets/widget-output.min.js index 193de50a..e5992bdc 100644 --- a/dist/js/widgets/widget-output.min.js +++ b/dist/js/widgets/widget-output.min.js @@ -1,2 +1,2 @@ /*! Widget: output - updated 5/17/2015 (v2.22.0) */ -!function(a){"use strict";var b=a.tablesorter,c=b.output={event:"outputTable",regexQuote:/([\n\t\x09\x0d\x0a]|<[^<]+>)/,regexBR:/(|\n)/g,regexIMG:/]+alt\s*=\s*['"]([^'"]+)['"][^>]*>/i,regexHTML:/<[^<]+>/g,replaceCR:"\r\n",replaceTab:" ",popupTitle:"Output",popupStyle:"width:100%;height:100%;",message:"Your device does not support downloading. Please try again in desktop browser.",init:function(a){a.$table.off(c.event).on(c.event,function(){c.process(a,a.widgetOptions)})},processRow:function(b,d,e,f){var g,h,i,j,k,l,m=b.widgetOptions,n=[],o=m.output_duplicateSpans,p=e&&f&&m.output_headerRows&&a.isFunction(m.output_callbackJSON),q=0;return d.each(function(b){n[b]||(n[b]=[]),q=0,a(this).children().each(function(){if(g=a(this),g.filter("[rowspan]").length)for(j=parseInt(g.attr("rowspan"),10)-1,l=c.formatData(m,g,e),h=1;j>=h;h++)n[b+h]||(n[b+h]=[]),n[b+h][q]=e?l:o?l:"";if(g.filter("[colspan]").length)for(k=parseInt(g.attr("colspan"),10)-1,l=c.formatData(m,g,e),i=1;k>=i;i++)if(g.filter("[rowspan]").length)for(j=parseInt(g.attr("rowspan"),10),h=0;j>h;h++)n[b+h]||(n[b+h]=[]),n[b+h][q+i]=p?m.output_callbackJSON(g,l,q+i)||l+"("+(q+i)+")":e?l:o?l:"";else n[b][q+i]=p?m.output_callbackJSON(g,l,q+i)||l+"("+(q+i)+")":e?l:o?l:"";if(m.output_hiddenColumns||"none"!==g.css("display")){for(;"undefined"!=typeof n[b][q];)q++;n[b][q]=n[b][q]||c.formatData(m,g,e),q++}})}),n},ignoreColumns:function(b,c){return a.each(c,function(d,e){c[d]=a.grep(e,function(c,d){return a.inArray(d,b.output_ignoreColumns)<0})}),c},process:function(d,e){var f,g,h,i,j,k,l=window.JSON&&JSON.hasOwnProperty("stringify"),m=0,n=(e.output_separator||",").toLowerCase(),o="json"===n,p="array"===n,q=o||p?",":e.output_separator,r=e.output_saveRows,s=d.$table;e.output_regex=new RegExp("("+(/\\/.test(q)?"\\":"")+q+")"),g=s.find("thead tr:visible").not("."+(b.css.filterRow||"tablesorter-filter-row")),i=c.processRow(d,g,!0,o),h=s.children("tbody").children("tr"),e.output_includeFooter&&(h=h.add(s.children("tfoot").children("tr").clone())),h=/^f/.test(r)?h.not("."+(e.filter_filteredRow||"filtered")):/^v/.test(r)?h.filter(":visible"):/^[.#:\[]/.test(r)?h.filter(r):h,j=c.processRow(d,h),k=i.length,e.output_ignoreColumns.length&&(i=c.ignoreColumns(e,i),j=c.ignoreColumns(e,j)),o?(n=[],a.each(j,function(a,b){n.push(c.row2Hash(i[k>1&&e.output_headerRows?a%k:k-1],b))}),f=l?JSON.stringify(n):n):(n=c.row2CSV(e,e.output_headerRows?i:[i[k>1&&e.output_headerRows?m%k:k-1]],p).concat(c.row2CSV(e,j,p)),f=p&&l?JSON.stringify(n):n.join("\n")),(!a.isFunction(e.output_callback)||e.output_callback(d,f))&&(/p/i.test(e.output_delivery||"")?c.popup(f,e.output_popupStyle,o||p):c.download(e,f))},row2CSV:function(a,b,c){var d,e,f=[],g=b.length;for(e=0;g>e;e++)d=(b[e]||[]).join("").replace(/\"/g,""),(b[e]||[]).length>0&&""!==d&&(f[f.length]=c?b[e]:b[e].join(a.output_separator));return f},row2Hash:function(b,c){var d={};return a.each(c,function(a,c){a"+c.popupTitle+'"),e.document.close(),e.focus(),!0},download:function(a,b){var d,e,f,g=window.navigator,h=document.createElement("a");if(/(iP)/g.test(g.userAgent))return alert(c.message),!1;try{f=!!new Blob}catch(i){f=!1}return f?(window.URL=window.URL||window.webkitURL,e=new Blob(["\ufeff",b],{type:a.output_encoding}),g.msSaveBlob?g.msSaveBlob(e,a.output_saveFileName):(h.href=window.URL.createObjectURL(e),h.download=a.output_saveFileName,document.createEvent&&(d=document.createEvent("MouseEvents"),d.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),h.dispatchEvent(d))),!1):(window.open(a.output_encoding+encodeURIComponent(b)+"?download","_self"),!0)},remove:function(a){a.$table.off(c.event)}};b.addWidget({id:"output",options:{output_separator:",",output_ignoreColumns:[],output_hiddenColumns:!1,output_includeFooter:!1,output_dataAttrib:"data-name",output_headerRows:!1,output_delivery:"popup",output_saveRows:"filtered",output_duplicateSpans:!0,output_replaceQuote:"“;",output_includeHTML:!1,output_trimSpaces:!0,output_wrapQuotes:!1,output_popupStyle:"width=500,height=300",output_saveFileName:"mytable.csv",output_callback:function(a,b){return!0},output_callbackJSON:function(a,b,c){return b+"("+c+")"},output_encoding:"data:application/octet-stream;charset=utf8,"},init:function(a,b,d){c.init(d)},remove:function(a,b){c.remove(b)}})}(jQuery); \ No newline at end of file +!function(a){"use strict";var b=a.tablesorter,c=b.output={event:"outputTable",regexQuote:/([\n\t\x09\x0d\x0a]|<[^<]+>)/,regexBR:/(|\n)/g,regexIMG:/]+alt\s*=\s*['"]([^'"]+)['"][^>]*>/i,regexHTML:/<[^<]+>/g,replaceCR:"\r\n",replaceTab:" ",popupTitle:"Output",popupStyle:"width:100%;height:100%;",message:"Your device does not support downloading. Please try again in desktop browser.",init:function(a){a.$table.off(c.event).on(c.event,function(){c.process(a,a.widgetOptions)})},processRow:function(b,d,e,f){var g,h,i,j,k,l,m=b.widgetOptions,n=[],o=m.output_duplicateSpans,p=e&&f&&m.output_headerRows&&a.isFunction(m.output_callbackJSON),q=0;return d.each(function(b){n[b]||(n[b]=[]),q=0,a(this).children().each(function(){if(g=a(this),g.filter("[rowspan]").length)for(j=parseInt(g.attr("rowspan"),10)-1,l=c.formatData(m,g,e),h=1;j>=h;h++)n[b+h]||(n[b+h]=[]),n[b+h][q]=e?l:o?l:"";if(g.filter("[colspan]").length)for(k=parseInt(g.attr("colspan"),10)-1,l=c.formatData(m,g,e),i=1;k>=i;i++)if(g.filter("[rowspan]").length)for(j=parseInt(g.attr("rowspan"),10),h=0;j>h;h++)n[b+h]||(n[b+h]=[]),n[b+h][q+i]=p?m.output_callbackJSON(g,l,q+i)||l+"("+(q+i)+")":e?l:o?l:"";else n[b][q+i]=p?m.output_callbackJSON(g,l,q+i)||l+"("+(q+i)+")":e?l:o?l:"";if(m.output_hiddenColumns||"none"!==g.css("display")){for(;"undefined"!=typeof n[b][q];)q++;n[b][q]=n[b][q]||c.formatData(m,g,e),q++}})}),n},ignoreColumns:function(b,c){return a.each(c,function(d,e){c[d]=a.grep(e,function(c,d){return a.inArray(d,b.output_ignoreColumns)<0})}),c},process:function(d,e){var f,g,h,i,j,k,l=window.JSON&&JSON.hasOwnProperty("stringify"),m=0,n=(e.output_separator||",").toLowerCase(),o="json"===n,p="array"===n,q=o||p?",":e.output_separator,r=e.output_saveRows,s=d.$table;e.output_regex=new RegExp("("+(/\\/.test(q)?"\\":"")+q+")"),g=s.find("thead tr:visible").not("."+(b.css.filterRow||"tablesorter-filter-row")),i=c.processRow(d,g,!0,o),h=s.children("tbody").children("tr"),h=/^f/.test(r)?h.not("."+(e.filter_filteredRow||"filtered")):/^v/.test(r)?h.filter(":visible"):/^[.#:\[]/.test(r)?h.filter(r):h,j=c.processRow(d,h),e.output_includeFooter&&(j=j.concat(c.processRow(d,s.children("tfoot").children("tr:visible")))),k=i.length,e.output_ignoreColumns.length&&(i=c.ignoreColumns(e,i),j=c.ignoreColumns(e,j)),o?(n=[],a.each(j,function(a,b){n.push(c.row2Hash(i[k>1&&e.output_headerRows?a%k:k-1],b))}),f=l?JSON.stringify(n):n):(n=c.row2CSV(e,e.output_headerRows?i:[i[k>1&&e.output_headerRows?m%k:k-1]],p).concat(c.row2CSV(e,j,p)),f=p&&l?JSON.stringify(n):n.join("\n")),(!a.isFunction(e.output_callback)||e.output_callback(d,f))&&(/p/i.test(e.output_delivery||"")?c.popup(f,e.output_popupStyle,o||p):c.download(e,f))},row2CSV:function(a,b,c){var d,e,f=[],g=b.length;for(e=0;g>e;e++)d=(b[e]||[]).join("").replace(/\"/g,""),(b[e]||[]).length>0&&""!==d&&(f[f.length]=c?b[e]:b[e].join(a.output_separator));return f},row2Hash:function(b,c){var d={};return a.each(c,function(a,c){a"+c.popupTitle+'"),e.document.close(),e.focus(),!0},download:function(a,b){var d,e,f,g=window.navigator,h=document.createElement("a");if(/(iP)/g.test(g.userAgent))return alert(c.message),!1;try{f=!!new Blob}catch(i){f=!1}return f?(window.URL=window.URL||window.webkitURL,e=new Blob(["\ufeff",b],{type:a.output_encoding}),g.msSaveBlob?g.msSaveBlob(e,a.output_saveFileName):(h.href=window.URL.createObjectURL(e),h.download=a.output_saveFileName,document.createEvent&&(d=document.createEvent("MouseEvents"),d.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),h.dispatchEvent(d))),!1):(window.open(a.output_encoding+encodeURIComponent(b)+"?download","_self"),!0)},remove:function(a){a.$table.off(c.event)}};b.addWidget({id:"output",options:{output_separator:",",output_ignoreColumns:[],output_hiddenColumns:!1,output_includeFooter:!1,output_dataAttrib:"data-name",output_headerRows:!1,output_delivery:"popup",output_saveRows:"filtered",output_duplicateSpans:!0,output_replaceQuote:"“;",output_includeHTML:!1,output_trimSpaces:!0,output_wrapQuotes:!1,output_popupStyle:"width=500,height=300",output_saveFileName:"mytable.csv",output_callback:function(a,b){return!0},output_callbackJSON:function(a,b,c){return b+"("+c+")"},output_encoding:"data:application/octet-stream;charset=utf8,"},init:function(a,b,d){c.init(d)},remove:function(a,b){c.remove(b)}})}(jQuery); \ No newline at end of file diff --git a/js/widgets/widget-output.js b/js/widgets/widget-output.js index f6be6be6..ead58d86 100644 --- a/js/widgets/widget-output.js +++ b/js/widgets/widget-output.js @@ -123,12 +123,6 @@ output = ts.output = { // all tbody rows $rows = $el.children('tbody').children('tr'); - if (wo.output_includeFooter) { - // clone, to force the tfoot rows to the end of this selection of rows - // otherwise they appear after the thead (the order in the HTML) - $rows = $rows.add( $el.children('tfoot').children('tr').clone() ); - } - // get (f)iltered, (v)isible, all rows (look for the first letter only), or jQuery filter selector $rows = /^f/.test(saveRows) ? $rows.not('.' + (wo.filter_filteredRow || 'filtered') ) : /^v/.test(saveRows) ? $rows.filter(':visible') : @@ -140,6 +134,13 @@ output = ts.output = { // process to array of arrays csvData = output.processRow(c, $rows); + + if (wo.output_includeFooter) { + // clone, to force the tfoot rows to the end of this selection of rows + // otherwise they appear after the thead (the order in the HTML) + csvData = csvData.concat( output.processRow( c, $el.children('tfoot').children('tr:visible') ) ); + } + len = headers.length; if (wo.output_ignoreColumns.length) {