forked from sheetjs/sheetjs
updating to 0.13.0
This commit is contained in:
parent
8c55ca24f4
commit
fd18a32ab7
4
jszip.js
4
jszip.js
@ -1,4 +1,4 @@
|
||||
/*!
|
||||
/*
|
||||
|
||||
JSZip - A Javascript class for generating and reading zip files
|
||||
<http://stuartk.com/jszip>
|
||||
@ -14,7 +14,7 @@ Note: since JSZip 3 removed critical functionality, this version assigns to the
|
||||
*/
|
||||
(function(e){
|
||||
if("object"==typeof exports&&"undefined"!=typeof module&&"undefined"==typeof DO_NOT_EXPORT_JSZIP)module.exports=e();
|
||||
else if("function"==typeof define&&define.amd){JSZipSync=e();define([],e);}
|
||||
else if("function"==typeof define&&define.amd&&"undefined"==typeof DO_NOT_EXPORT_JSZIP){JSZipSync=e();define([],e);}
|
||||
else{
|
||||
var f;
|
||||
"undefined"!=typeof window?f=window:
|
||||
|
7
shim.js
7
shim.js
@ -1,4 +1,4 @@
|
||||
/* shim.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/*! shim.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* ES3/5 Compatibility shims and other utilities for older browsers. */
|
||||
|
||||
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
|
||||
@ -147,3 +147,8 @@ var IE_LoadFile = (function() { try {
|
||||
}
|
||||
return function(filename) { return fix_data(IE_LoadFile_Impl(filename)); };
|
||||
} catch(e) { return void 0; }})();
|
||||
|
||||
// getComputedStyle polyfill from https://gist.github.com/8HNHoFtE/5891086
|
||||
if(typeof window !== 'undefined' && typeof window.getComputedStyle !== 'function') {
|
||||
window.getComputedStyle = function(e,t){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ declare type DescribeIt = { (desc:string, test:EmptyFunc):void; skip(desc:string
|
||||
declare var describe : DescribeIt;
|
||||
declare var it: DescribeIt;
|
||||
declare var before:(test:EmptyFunc)=>void;
|
||||
declare var afterEach:(test:EmptyFunc)=>void;
|
||||
declare var cptable: any;
|
||||
*/
|
||||
var X;
|
||||
@ -2025,19 +2026,29 @@ if(fs.existsSync(dir + 'dbf/d11.dbf')) describe('dbf', function() {
|
||||
var JSDOM = null;
|
||||
// $FlowIgnore
|
||||
var domtest = browser || (function(){try{return !!(JSDOM=require('jsdom').JSDOM);}catch(e){return 0;}})();
|
||||
var inserted_dom_elements = [];
|
||||
|
||||
function get_dom_element(html) {
|
||||
if(browser) {
|
||||
var domelt = document.createElement('div');
|
||||
domelt.innerHTML = html;
|
||||
return domelt;
|
||||
if(document.body) document.body.appendChild(domelt);
|
||||
inserted_dom_elements.push(domelt);
|
||||
return domelt.children[0];
|
||||
}
|
||||
if(!JSDOM) throw new Error("Browser test fail");
|
||||
return new JSDOM(html).window.document.body.children[0];
|
||||
}
|
||||
|
||||
describe('HTML', function() {
|
||||
describe('input string', function(){
|
||||
afterEach(function () {
|
||||
// Remove the DOM elements inserted to the page by get_dom_element
|
||||
inserted_dom_elements.forEach(function (element) {
|
||||
if(element.parentNode) element.parentNode.removeChild(element);
|
||||
});
|
||||
inserted_dom_elements = [];
|
||||
});
|
||||
describe('input string', function() {
|
||||
it('should interpret values by default', function() { plaintext_test(X.read(html_bstr, {type:"binary"}), false); });
|
||||
it('should generate strings if raw option is passed', function() { plaintext_test(X.read(html_bstr, {type:"binary", raw:true}), true); });
|
||||
it('should handle "string" type', function() { plaintext_test(X.read(html_str, {type:"string"}), false); });
|
||||
@ -2071,6 +2082,7 @@ describe('HTML', function() {
|
||||
});
|
||||
if(domtest) it('should honor sheetRows', function() {
|
||||
var html = X.utils.sheet_to_html(X.utils.aoa_to_sheet([[1,2],[3,4],[5,6]]));
|
||||
html = /<body[^>]*>([\s\S]*)<\/body>/i.exec(html)[1];
|
||||
var ws = X.utils.table_to_sheet(get_dom_element(html));
|
||||
assert.equal(ws['!ref'], "A1:B3");
|
||||
ws = X.utils.table_to_sheet(get_dom_element(html), {sheetRows:1});
|
||||
@ -2080,6 +2092,24 @@ describe('HTML', function() {
|
||||
assert.equal(ws['!ref'], "A1:B2");
|
||||
assert.equal(ws['!fullref'], "A1:B3");
|
||||
});
|
||||
if(domtest) it('should hide hidden rows', function() {
|
||||
var html = "<table><tr style='display: none;'><td>Foo</td></tr><tr><td style='display: none;'>Bar</td></tr><tr class='hidden'><td>Baz</td></tr></table><style>.hidden {display: none}</style>";
|
||||
var ws = X.utils.table_to_sheet(get_dom_element(html));
|
||||
var expected_rows = [];
|
||||
expected_rows[0] = expected_rows[2] = {hidden: true};
|
||||
assert.equal(ws['!ref'], "A1:A3");
|
||||
assert.deepEqual(ws['!rows'], expected_rows);
|
||||
assert.equal(get_cell(ws, "A1").v, "Foo");
|
||||
assert.equal(get_cell(ws, "A2").v, "Bar");
|
||||
assert.equal(get_cell(ws, "A3").v, "Baz");
|
||||
});
|
||||
if(domtest) it('should ignore hidden rows and cells when the `display` option is on', function() {
|
||||
var html = "<table><tr style='display: none;'><td>1</td><td>2</td><td>3</td></tr><tr><td class='hidden'>Foo</td><td>Bar</td><td style='display: none;'>Baz</td></tr></table><style>.hidden {display: none}</style>";
|
||||
var ws = X.utils.table_to_sheet(get_dom_element(html), {display: true});
|
||||
assert.equal(ws['!ref'], "A1");
|
||||
assert.equal(ws.hasOwnProperty('!rows'), false);
|
||||
assert.equal(get_cell(ws, "A1").v, "Bar");
|
||||
});
|
||||
describe('type override', function() {
|
||||
function chk(ws) {
|
||||
assert.equal(get_cell(ws, "A1").t, "s");
|
||||
|
32
xlsx.core.min.js
vendored
32
xlsx.core.min.js
vendored
File diff suppressed because one or more lines are too long
35
xlsx.full.min.js
vendored
35
xlsx.full.min.js
vendored
File diff suppressed because one or more lines are too long
78
xlsx.js
78
xlsx.js
@ -1,10 +1,10 @@
|
||||
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
|
||||
var XLSX = {};
|
||||
(function make_xlsx(XLSX){
|
||||
XLSX.version = '0.12.13';
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.13.0';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
@ -7858,7 +7858,7 @@ function parse_borders(t, styles, themes, opts) {
|
||||
var pass = false;
|
||||
t[0].match(tagregex).forEach(function(x) {
|
||||
var y = parsexmltag(x);
|
||||
switch (y[0]) {
|
||||
switch(strip_ns(y[0])) {
|
||||
case '<borders': case '<borders>': case '</borders>': break;
|
||||
|
||||
/* 18.8.4 border CT_Border */
|
||||
@ -7932,7 +7932,7 @@ function parse_fills(t, styles, themes, opts) {
|
||||
var pass = false;
|
||||
t[0].match(tagregex).forEach(function(x) {
|
||||
var y = parsexmltag(x);
|
||||
switch(y[0]) {
|
||||
switch(strip_ns(y[0])) {
|
||||
case '<fills': case '<fills>': case '</fills>': break;
|
||||
|
||||
/* 18.8.20 fill CT_Fill */
|
||||
@ -7998,7 +7998,7 @@ function parse_fonts(t, styles, themes, opts) {
|
||||
var pass = false;
|
||||
t[0].match(tagregex).forEach(function(x) {
|
||||
var y = parsexmltag(x);
|
||||
switch (y[0]) {
|
||||
switch(strip_ns(y[0])) {
|
||||
case '<fonts': case '<fonts>': case '</fonts>': break;
|
||||
|
||||
/* 18.8.22 font CT_Font */
|
||||
@ -8116,7 +8116,7 @@ function parse_numFmts(t, styles, opts) {
|
||||
if(!m) return;
|
||||
for(i=0; i < m.length; ++i) {
|
||||
var y = parsexmltag(m[i]);
|
||||
switch(y[0]) {
|
||||
switch(strip_ns(y[0])) {
|
||||
case '<numFmts': case '</numFmts>': case '<numFmts/>': case '<numFmts>': break;
|
||||
case '<numFmt': {
|
||||
var f=unescapexml(utf8read(y.formatCode)), j=parseInt(y.numFmtId,10);
|
||||
@ -8155,7 +8155,7 @@ function parse_cellXfs(t, styles, opts) {
|
||||
var pass = false;
|
||||
t[0].match(tagregex).forEach(function(x) {
|
||||
var y = parsexmltag(x), i = 0;
|
||||
switch(y[0]) {
|
||||
switch(strip_ns(y[0])) {
|
||||
case '<cellXfs': case '<cellXfs>': case '<cellXfs/>': case '</cellXfs>': break;
|
||||
|
||||
/* 18.8.45 xf CT_Xf */
|
||||
@ -8210,11 +8210,11 @@ function write_cellXfs(cellXfs) {
|
||||
|
||||
/* 18.8 Styles CT_Stylesheet*/
|
||||
var parse_sty_xml= (function make_pstyx() {
|
||||
var numFmtRegex = /<numFmts([^>]*)>[\S\s]*?<\/numFmts>/;
|
||||
var cellXfRegex = /<cellXfs([^>]*)>[\S\s]*?<\/cellXfs>/;
|
||||
var fillsRegex = /<fills([^>]*)>[\S\s]*?<\/fills>/;
|
||||
var fontsRegex = /<fonts([^>]*)>[\S\s]*?<\/fonts>/;
|
||||
var bordersRegex = /<borders([^>]*)>[\S\s]*?<\/borders>/;
|
||||
var numFmtRegex = /<(?:\w+:)?numFmts([^>]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/;
|
||||
var cellXfRegex = /<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/;
|
||||
var fillsRegex = /<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/;
|
||||
var fontsRegex = /<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/;
|
||||
var bordersRegex = /<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/;
|
||||
|
||||
return function parse_sty_xml(data, themes, opts) {
|
||||
var styles = {};
|
||||
@ -9168,7 +9168,7 @@ function write_comments_vml(rId, comments) {
|
||||
'<v:shape' + wxt_helper({
|
||||
id:'_x0000_s' + (++_shapeid),
|
||||
type:"#_x0000_t202",
|
||||
style:"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10;visibility:hidden",
|
||||
style:"position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : "") ,
|
||||
fillcolor:"#ECFAD4",
|
||||
strokecolor:"#edeaa1"
|
||||
}) + '>',
|
||||
@ -9184,7 +9184,7 @@ function write_comments_vml(rId, comments) {
|
||||
writetag('x:AutoFill', "False"),
|
||||
writetag('x:Row', String(c.r)),
|
||||
writetag('x:Column', String(c.c)),
|
||||
'<x:Visible/>',
|
||||
x[1].hidden ? '' : '<x:Visible/>',
|
||||
'</x:ClientData>',
|
||||
'</v:shape>'
|
||||
]); });
|
||||
@ -18168,15 +18168,22 @@ function parse_dom_table(table, _opts) {
|
||||
if(DENSE != null) opts.dense = DENSE;
|
||||
var ws = opts.dense ? ([]) : ({});
|
||||
var rows = table.getElementsByTagName('tr');
|
||||
var sheetRows = Math.min(opts.sheetRows||10000000, rows.length);
|
||||
var range = {s:{r:0,c:0},e:{r:sheetRows - 1,c:0}};
|
||||
var sheetRows = opts.sheetRows || 10000000;
|
||||
var range = {s:{r:0,c:0},e:{r:0,c:0}};
|
||||
var merges = [], midx = 0;
|
||||
var R = 0, _C = 0, C = 0, RS = 0, CS = 0;
|
||||
for(; R < sheetRows; ++R) {
|
||||
var row = rows[R];
|
||||
var rowinfo = [];
|
||||
var _R = 0, R = 0, _C, C, RS, CS;
|
||||
for(; _R < rows.length && R < sheetRows; ++_R) {
|
||||
var row = rows[_R];
|
||||
if (is_dom_element_hidden(row)) {
|
||||
if (opts.display) continue;
|
||||
rowinfo[R] = {hidden: true};
|
||||
}
|
||||
var elts = (row.children);
|
||||
for(_C = C = 0; _C < elts.length; ++_C) {
|
||||
var elt = elts[_C], v = htmldecode(elts[_C].innerHTML);
|
||||
var elt = elts[_C];
|
||||
if (opts.display && is_dom_element_hidden(elt)) continue;
|
||||
var v = htmldecode(elt.innerHTML);
|
||||
for(midx = 0; midx < merges.length; ++midx) {
|
||||
var m = merges[midx];
|
||||
if(m.s.c == C && m.s.r <= R && R <= m.e.r) { C = m.e.c+1; midx = -1; }
|
||||
@ -18203,16 +18210,36 @@ function parse_dom_table(table, _opts) {
|
||||
if(range.e.c < C) range.e.c = C;
|
||||
C += CS;
|
||||
}
|
||||
++R;
|
||||
}
|
||||
if(merges.length) ws['!merges'] = merges;
|
||||
if(rowinfo.length) ws['!rows'] = rowinfo;
|
||||
range.e.r = R - 1;
|
||||
ws['!ref'] = encode_range(range);
|
||||
if(sheetRows < rows.length) ws['!fullref'] = encode_range((range.e.r = rows.length-1,range));
|
||||
if(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1,range)); // We can count the real number of rows to parse but we don't to improve the performance
|
||||
return ws;
|
||||
}
|
||||
|
||||
function table_to_book(table, opts) {
|
||||
return sheet_to_workbook(parse_dom_table(table, opts), opts);
|
||||
}
|
||||
|
||||
function is_dom_element_hidden(element) {
|
||||
var display = '';
|
||||
var get_computed_style = get_get_computed_style_function(element);
|
||||
if(get_computed_style) display = get_computed_style(element).getPropertyValue('display');
|
||||
if(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)
|
||||
return display === 'none';
|
||||
}
|
||||
|
||||
/* global getComputedStyle */
|
||||
function get_get_computed_style_function(element) {
|
||||
// The proper getComputedStyle implementation is the one defined in the element window
|
||||
if(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;
|
||||
// If it is not available, try to get one from the global namespace
|
||||
if(typeof getComputedStyle === 'function') return getComputedStyle;
|
||||
return null;
|
||||
}
|
||||
/* OpenDocument */
|
||||
var parse_content_xml = (function() {
|
||||
|
||||
@ -20098,6 +20125,11 @@ XLSX.writeFileAsync = writeFileAsync;
|
||||
XLSX.utils = utils;
|
||||
XLSX.SSF = SSF;
|
||||
XLSX.CFB = CFB;
|
||||
})(typeof exports !== 'undefined' ? exports : XLSX);
|
||||
}
|
||||
/*global define */
|
||||
if(typeof exports !== 'undefined') make_xlsx_lib(exports);
|
||||
else if(typeof module !== 'undefined' && module.exports) make_xlsx_lib(module.exports);
|
||||
else if(typeof define === 'function' && define.amd) define('xlsx', function() { if(!XLSX.version) make_xlsx_lib(XLSX); return XLSX; });
|
||||
else make_xlsx_lib(XLSX);
|
||||
/*exported XLS, ODS */
|
||||
var XLS = XLSX, ODS = XLSX;
|
||||
|
Loading…
Reference in New Issue
Block a user