rollup demo [ci skip]

This commit is contained in:
SheetJS 2017-06-08 02:19:11 -04:00
parent 81ab4f9b1f
commit 6a100b9085
16 changed files with 183 additions and 11 deletions

@ -5,6 +5,10 @@ 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.
## Unreleased (2017-06-??)
* HTML Table output header/footer should not include `<table>` tag
## 0.10.2 (2017-05-16)
* Dates are converted to numbers by default (set `cellDates:true` to emit Dates)

@ -113,8 +113,12 @@ ctest: ## Build browser test fixtures
ctestserv: ## Start a test server on port 8000
@cd tests && python -mSimpleHTTPServer
## Demos
DEMOS=angular browserify requirejs rollup systemjs webpack
DEMOTGTS=$(patsubst %,demo-%,$(DEMOS))
.PHONY: demos
demos: demo-angular demo-browserify demo-webpack demo-requirejs demo-systemjs
demos: $(DEMOTGTS)
.PHONY: demo-angular
demo-angular: ## Run angular demo build
@ -136,6 +140,11 @@ demo-requirejs: ## Run requirejs demo build
make -C demos/requirejs
@echo "start a local server and go to demos/requirejs/requirejs.html"
.PHONY: demo-rollup
demo-rollup: ## Run rollup demo build
make -C demos/rollup
@echo "start a local server and go to demos/rollup/rollup.html"
.PHONY: demo-systemjs
demo-systemjs: ## Run systemjs demo build
make -C demos/systemjs

@ -173,6 +173,7 @@ The `demos` directory includes sample projects for:
- [`meteor`](demos/meteor/)
- [`phantomjs`](demos/phantomjs/)
- [`requirejs`](demos/requirejs/)
- [`rollup`](demos/rollup/)
- [`systemjs`](demos/systemjs/)
- [`webpack`](demos/webpack/)
@ -1388,12 +1389,13 @@ Plaintext format guessing follows the priority order:
| Format | Test |
|:-------|:--------------------------------------------------------------------|
| HTML | starts with \<html |
| XML | starts with \< |
| HTML | starts with `<html` |
| XML | starts with `<` |
| DSV | starts with `/sep=.$/`, separator is the specified character |
| TSV | one of the first 1024 characters is a tab char `"\t"` |
| CSV | one of the first 1024 characters is a comma char `","` |
| PRN | (default) |
</details>
<details>
@ -1643,9 +1645,8 @@ produces HTML output. The function takes an options argument:
| Option Name | Default | Description |
| :---------- | :------: | :-------------------------------------------------- |
| editable | false | If true, set `contenteditable="true"` for every TD |
| header | | Override header (default `html body table`) |
| footer | | Override footer (default `/table /body /html`) |
| header | | Override header (default `html body`) |
| footer | | Override footer (default `/body /html`) |
<details>
<summary><b>Examples</b> (click to show)</summary>

12
demos/README.md Normal file

@ -0,0 +1,12 @@
# Demos
These demos are intended to demonstrate how to load this library in various
ecosystems. The library is designed to be used in the web browser and in node
contexts, using dynamic feature tests to pull in features when necessary. This
works extremely well in common use cases: script tag insertion and node require.
Systems like webpack try to be clever by performing simple static analysis to
pull in code. However, they do not support dynamic type tests, breaking
compatibility with traditional scripts. Configuration is required. The demos
cover basic configuration steps for various systems and should work as laid out.

3
demos/rollup/.gitignore vendored Normal file

@ -0,0 +1,3 @@
rollup.js
rollup.min.js
rollup.node.js

19
demos/rollup/Makefile Normal file

@ -0,0 +1,19 @@
TOOL=rollup
.PHONY: all
all: $(TOOL).min.js
$(TOOL).min.js: $(TOOL).js
uglifyjs $< > $@
.PHONY: $(TOOL).js
$(TOOL).js:
# node
rollup -c rollup.config.node.js
node -e 'require("./rollup.node")'
# browser
rollup -c
.PHONY: init
init:
@npm install rollup-plugin-node-resolve rollup-plugin-commonjs
@mkdir -p node_modules; cd node_modules; ln -s ../../../ xlsx; cd -

26
demos/rollup/README.md Normal file

@ -0,0 +1,26 @@
# Rollup
This library presents itself as a CommonJS library, so some configuration is
required. The examples at <https://rollupjs.org> can be followed pretty much in
verbatim. This sample demonstrates a rollup for browser as well as for node.
## Required Plugins
The `rollup-plugin-node-resolve` and `rollup-plugin-commonjs` plugins are used:
```js
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
export default {
/* ... */
plugins: [
resolve({
module: false, // <-- this library is not an ES6 module
browser: true, // <-- suppress node-specific features
}),
commonjs()
],
/* ... */
};
```

3
demos/rollup/main.js Normal file

@ -0,0 +1,3 @@
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
import XLSX from 'xlsx';
export default XLSX;

@ -0,0 +1,16 @@
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
export default {
entry: 'main.js',
dest: 'rollup.js',
plugins: [
resolve({
module: false,
browser: true,
}),
commonjs()
],
moduleName: 'XLSX',
format: 'iife'
};

@ -0,0 +1,15 @@
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
export default {
entry: 'main.js',
dest: 'rollup.node.js',
plugins: [
resolve({
module: false,
browser: true,
}),
commonjs()
],
format: 'cjs'
};

@ -0,0 +1,11 @@
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
importScripts('rollup.min.js');
postMessage({t:"ready"});
onmessage = function (oEvent) {
var v;
try {
v = XLSX.read(oEvent.data.d, {type: oEvent.data.b ? 'binary' : 'base64'});
} catch(e) { postMessage({t:"e",d:e.stack||e}); }
postMessage({t:"xlsx", d:JSON.stringify(v)});
};

@ -0,0 +1,26 @@
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
importScripts('rollup.min.js');
postMessage({t:"ready"});
function ab2str(data) {
var o = "", l = 0, w = 10240;
for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w)));
o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w)));
return o;
}
function s2ab(s) {
var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b);
for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i);
return [v, b];
}
onmessage = function (oEvent) {
var v;
try {
v = XLSX.read(ab2str(oEvent.data), {type: 'binary'});
} catch(e) { postMessage({t:"e",d:e.stack}); }
var res = {t:"xlsx", d:JSON.stringify(v)};
var r = s2ab(res.d)[1];
postMessage(r, [r]);
};

@ -0,0 +1,26 @@
/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
importScripts('rollup.min.js');
postMessage({t:"ready"});
function ab2str(data) {
var o = "", l = 0, w = 10240;
for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint16Array(data.slice(l*w,l*w+w)));
o+=String.fromCharCode.apply(null, new Uint16Array(data.slice(l*w)));
return o;
}
function s2ab(s) {
var b = new ArrayBuffer(s.length*2), v = new Uint16Array(b);
for (var i=0; i != s.length; ++i) v[i] = s.charCodeAt(i);
return [v, b];
}
onmessage = function (oEvent) {
var v;
try {
v = XLSX.read(ab2str(oEvent.data), {type: 'binary'});
} catch(e) { postMessage({t:"e",d:e.stack}); }
var res = {t:"xlsx", d:JSON.stringify(v)};
var r = s2ab(res.d)[1];
postMessage(r, [r]);
};

@ -31,6 +31,7 @@ The `demos` directory includes sample projects for:
- [`meteor`](demos/meteor/)
- [`phantomjs`](demos/phantomjs/)
- [`requirejs`](demos/requirejs/)
- [`rollup`](demos/rollup/)
- [`systemjs`](demos/systemjs/)
- [`webpack`](demos/webpack/)

@ -82,12 +82,13 @@ Plaintext format guessing follows the priority order:
| Format | Test |
|:-------|:--------------------------------------------------------------------|
| HTML | starts with \<html |
| XML | starts with \< |
| HTML | starts with `<html` |
| XML | starts with `<` |
| DSV | starts with `/sep=.$/`, separator is the specified character |
| TSV | one of the first 1024 characters is a tab char `"\t"` |
| CSV | one of the first 1024 characters is a comma char `","` |
| PRN | (default) |
</details>
<details>

@ -160,9 +160,8 @@ produces HTML output. The function takes an options argument:
| Option Name | Default | Description |
| :---------- | :------: | :-------------------------------------------------- |
| editable | false | If true, set `contenteditable="true"` for every TD |
| header | | Override header (default `html body table`) |
| footer | | Override footer (default `/table /body /html`) |
| header | | Override header (default `html body`) |
| footer | | Override footer (default `/body /html`) |
<details>
<summary><b>Examples</b> (click to show)</summary>