From 64798fd1f9cbdf1483a70c6e232422b71ffdbea4 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Fri, 1 Jun 2018 12:32:08 -0400 Subject: [PATCH] version bump 0.13.0: AMD support - library reshaped to support requirejs / amd without shim - control comment visibility (fixes #998, h/t @cmuruganmsc) - fixed README code sample error (fixes #1118 h/t @iahmedani) --- CHANGELOG.md | 4 ++ README.md | 15 +++++- bits/00_header.js | 4 +- bits/01_version.js | 2 +- bits/55_vml.js | 6 +-- bits/99_footer.js | 8 +++- demos/requirejs/README.md | 19 ++------ demos/requirejs/app.js | 2 +- demos/requirejs/xlsx-shim.js | 5 -- dist/jszip.js | 4 +- dist/shim.min.js | 4 +- dist/xlsx.core.min.js | 32 ++++++------- dist/xlsx.core.min.map | 2 +- dist/xlsx.extendscript.js | 91 +++++++++++++++++++++++++----------- dist/xlsx.full.min.js | 35 +++++++------- dist/xlsx.full.min.map | 2 +- dist/xlsx.js | 78 ++++++++++++++++++++++--------- dist/xlsx.min.js | 28 +++++------ dist/xlsx.min.map | 2 +- docbits/20_import.md | 4 +- docbits/66_comments.md | 11 +++++ jszip.js | 4 +- misc/docs/README.md | 16 ++++++- package.json | 2 +- shim.js | 2 +- test.js | 3 +- tests/core.js | 3 +- xlsx.flow.js | 20 +++++--- xlsx.js | 17 ++++--- 29 files changed, 269 insertions(+), 156 deletions(-) delete mode 100644 demos/requirejs/xlsx-shim.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 201296b..4185cc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ This log is intended to keep track of backwards-incompatible changes, including but not limited to API changes and file location changes. Minor behavioral changes may not be included if they are not expected to break existing code. +## 0.13.0 (2018-06-01) + +* Library reshaped to support AMD out of the box + ## 0.12.11 (2018-04-27) * XLS/XLSX/XLSB range truncation (errors in `WTF` mode) diff --git a/README.md b/README.md index cff83dc..f26cf29 100644 --- a/README.md +++ b/README.md @@ -364,11 +364,11 @@ Multiple tables on a web page can be converted to individual worksheets: var workbook = XLSX.utils.book_new(); /* convert table 'table1' to worksheet named "Sheet1" */ -var ws1 = XLSX.utils.table_to_book(document.getElementById('table1')); +var ws1 = XLSX.utils.table_to_sheet(document.getElementById('table1')); XLSX.utils.book_append_sheet(workbook, ws1, "Sheet1"); /* convert table 'table2' to worksheet named "Sheet2" */ -var ws2 = XLSX.utils.table_to_book(document.getElementById('table2')); +var ws2 = XLSX.utils.table_to_sheet(document.getElementById('table2')); XLSX.utils.book_append_sheet(workbook, ws2, "Sheet2"); /* workbook now has 2 worksheets */ @@ -1555,6 +1555,17 @@ ws.A1.c.push({a:"SheetJS", t:"I'm a little comment, short and stout!"}); Note: XLSB enforces a 54 character limit on the Author name. Names longer than 54 characters may cause issues with other formats. +To mark a comment as normally hidden, set the `hidden` property: + +```js +if(!ws.A1.c) ws.A1.c = []; +ws.A1.c.push({a:"SheetJS", t:"This comment is visible"}); + +if(!ws.A2.c) ws.A2.c = []; +ws.A2.c.hidden = true; +ws.A2.c.push({a:"SheetJS", t:"This comment will be hidden"}); +``` + #### Sheet Visibility Excel enables hiding sheets in the lower tab bar. The sheet data is stored in diff --git a/bits/00_header.js b/bits/00_header.js index 84090f4..ead5056 100644 --- a/bits/00_header.js +++ b/bits/00_header.js @@ -1,6 +1,6 @@ -/* 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){ +function make_xlsx_lib(XLSX){ diff --git a/bits/01_version.js b/bits/01_version.js index db0f167..25baadd 100644 --- a/bits/01_version.js +++ b/bits/01_version.js @@ -1 +1 @@ -XLSX.version = '0.12.13'; +XLSX.version = '0.13.0'; diff --git a/bits/55_vml.js b/bits/55_vml.js index ff86aa5..3a5529d 100644 --- a/bits/55_vml.js +++ b/bits/55_vml.js @@ -1,6 +1,6 @@ /* L.5.5.2 SpreadsheetML Comments + VML Schema */ var _shapeid = 1024; -function write_comments_vml(rId, comments) { +function write_comments_vml(rId/*:number*/, comments) { var csize = [21600, 21600]; /* L.5.2.1.2 Path Attribute */ var bbox = ["m0,0l0",csize[1],csize[0],csize[1],csize[0],"0xe"].join(","); @@ -19,7 +19,7 @@ function write_comments_vml(rId, comments) { '', @@ -35,7 +35,7 @@ function write_comments_vml(rId, comments) { writetag('x:AutoFill', "False"), writetag('x:Row', String(c.r)), writetag('x:Column', String(c.c)), - '', + x[1].hidden ? '' : '', '', '' ]); }); diff --git a/bits/99_footer.js b/bits/99_footer.js index 294595a..0ec8613 100644 --- a/bits/99_footer.js +++ b/bits/99_footer.js @@ -1,3 +1,9 @@ -})(typeof exports !== 'undefined' ? exports : XLSX); +} +/*global define */ +/*:: declare var define:any; */ +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; diff --git a/demos/requirejs/README.md b/demos/requirejs/README.md index 0a59adf..415aa54 100644 --- a/demos/requirejs/README.md +++ b/demos/requirejs/README.md @@ -1,16 +1,7 @@ # RequireJS -The minified dist files trip up the RequireJS mechanism. To bypass, the scripts -automatically expose an `XLSX` variable that can be used if the require callback -argument is `_XLSX` rather than `XLSX`. This trick is employed in the included -`xlsx-shim.js` script: - -```js -/* xlsx-shim.js */ -define(['xlsx'], function (_XLSX) { - return XLSX; -}); -``` +The module complies with the AMD `define` semantics, enabling use in RequireJS +out of the box. The require config should set `xlsx` path to the appropriate dist file: @@ -20,10 +11,10 @@ The require config should set `xlsx` path to the appropriate dist file: }, ``` -Once that is set, app code can freely require `"xlsx-shim"`: +Once that is set, app code can freely require `"xlsx"`: ```js -require(["xlsx-shim"], function(XLSX) { +require(["xlsx"], function(XLSX) { /* use XLSX here */ }); ``` @@ -69,7 +60,7 @@ node r.js -o build.js paths.requireLib=./require include=requireLib That step creates a file `app-built.js` that can be included in a page: ```html - + ``` diff --git a/demos/requirejs/app.js b/demos/requirejs/app.js index b5f1281..6de5ce5 100644 --- a/demos/requirejs/app.js +++ b/demos/requirejs/app.js @@ -1,5 +1,5 @@ /* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ -require(["xlsx-shim"], function(XLSX) { +require(["xlsx"], function(XLSX) { console.log(XLSX); var X = XLSX; diff --git a/demos/requirejs/xlsx-shim.js b/demos/requirejs/xlsx-shim.js deleted file mode 100644 index 0462527..0000000 --- a/demos/requirejs/xlsx-shim.js +++ /dev/null @@ -1,5 +0,0 @@ -/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ -define(['xlsx'], function (_XLSX) { - /* work around require.js */ - return XLSX; -}); diff --git a/dist/jszip.js b/dist/jszip.js index 2ff0100..f9fd7aa 100644 --- a/dist/jszip.js +++ b/dist/jszip.js @@ -1,4 +1,4 @@ -/*! +/* JSZip - A Javascript class for generating and reading zip files @@ -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: diff --git a/dist/shim.min.js b/dist/shim.min.js index 880a01b..a421ac0 100644 --- a/dist/shim.min.js +++ b/dist/shim.min.js @@ -1,2 +1,2 @@ -/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ -if(!Object.keys)Object.keys=function(){var t=Object.prototype.hasOwnProperty,e=!{toString:null}.propertyIsEnumerable("toString"),r=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],i=r.length;return function(n){if(typeof n!=="object"&&typeof n!=="function"||n===null)throw new TypeError("Object.keys called on non-object");var o=[];for(var a in n)if(t.call(n,a))o.push(a);if(e)for(var l=0;l=0;--e)if(!t.charAt(e).match(/^\s/))return t.slice(0,e+1);return""};if(!Array.prototype.forEach)Array.prototype.forEach=function(t){var e=this.length>>>0,r=arguments[1]||void 0;for(var i=0;i>>0,r=arguments[1]||void 0,i=new Array(e);for(var n=0;n>>0,r=arguments[1]|0||0;for(r<0&&(r+=e)<0&&(r=0);r>>0,r=e-1;for(;r>=0;--r)if(this[r]===t)return r;return-1};if(!Array.isArray)Array.isArray=function(t){return Object.prototype.toString.call(t)==="[object Array]"};if(!Date.prototype.toISOString)Date.prototype.toISOString=function(){function t(t,e){return("0000000"+t).slice(-(e||2))}return function e(){var e=this.getUTCFullYear(),r="";if(e>9999)r="+"+t(e,6);else if(e<0)r="-"+t(-e,6);else r=t(e,4);return[r,t(this.getUTCMonth()+1),t(this.getUTCDate())].join("-")+"T"+[t(this.getUTCHours()),t(this.getUTCMinutes()),t(this.getUTCSeconds())].join(":")+"."+t(this.getUTCMilliseconds(),3)+"Z"}}();if(typeof ArrayBuffer!=="undefined"&&!ArrayBuffer.prototype.slice)ArrayBuffer.prototype.slice=function(t,e){if(t==null)t=0;if(t<0){t+=this.byteLength;if(t<0)t=0}if(t>=this.byteLength)return new Uint8Array(0);if(e==null)e=this.byteLength;if(e<0){e+=this.byteLength;if(e<0)e=0}if(e>this.byteLength)e=this.byteLength;if(t>e)return new Uint8Array(0);var r=new ArrayBuffer(e-t);var i=new Uint8Array(r);var n=new Uint8Array(this,t,e-t);if(i.set)i.set(n);else while(t<=--e)i[e-t]=n[e];return r};if(typeof Uint8Array!=="undefined"&&!Uint8Array.prototype.slice)Uint8Array.prototype.slice=function(t,e){if(t==null)t=0;if(t<0){t+=this.length;if(t<0)t=0}if(t>=this.length)return new Uint8Array(0);if(e==null)e=this.length;if(e<0){e+=this.length;if(e<0)e=0}if(e>this.length)e=this.length;if(t>e)return new Uint8Array(0);var r=new Uint8Array(e-t);while(t<=--e)r[e-t]=this[e];return r};var IE_SaveFile=function(){try{if(typeof IE_SaveFile_Impl=="undefined")document.write(['