Skip to content

Commit

Permalink
code style for 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
huanz committed Jun 16, 2017
1 parent 4bb361c commit cf22e1a
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 129 deletions.
4 changes: 2 additions & 2 deletions demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
<tr>
<td><a href="https://w3cboy.com" target="_blank">文字</a></td>
<td>咨询</td>
<td>测试</td>
<td>12,122</td>
</tr>
<tr>
<td><a href="https://w3cboy.com" target="_blank">文字</a></td>
Expand Down Expand Up @@ -108,7 +108,7 @@
<a data-type="image" href="javascript:;">导出图片</a>
<a data-type="pdf" href="javascript:;">导出pdf</a>
</div>
<script src="../dist/tableExport.js"></script>
<script src="tableExport.js"></script>
<script>
var $exportLink = document.getElementById('export');
$exportLink.addEventListener('click', function(e) {
Expand Down
2 changes: 1 addition & 1 deletion dist/tableExport.js

Large diffs are not rendered by default.

13 changes: 7 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
{
"name": "table-export",
"version": "1.0.2",
"version": "2.0.0",
"description": "table export, support json、csv、txt、xml、word、excel、image、pdf",
"main": "dist/tableExport.js",
"scripts": {
"dev": "webpack --watch",
"build": "webpack -p",
"test": "echo \"Error: no test specified\" && exit 1"
"dev": "webpack-dev-server",
"build": "webpack -p"
},
"repository": {
"type": "git",
Expand All @@ -33,9 +32,11 @@
},
"homepage": "https://github.com/huanz/tableExport#readme",
"devDependencies": {
"blueimp-canvas-to-blob": "^3.7.0",
"blueimp-canvas-to-blob": "^3.8.0",
"file-saver": "^1.3.3",
"jspdf": "https://github.com/MrRio/jsPDF/archive/master.tar.gz",
"webpack": "^2.4.1"
"webpack": "^3.0.0-rc.1",
"webpack-dev-server": "^2.4.5",
"webpack-strip-block": "^1.0.0"
}
}
13 changes: 2 additions & 11 deletions src/csv.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
var utils = require('./utils');
var fixCSVField = function(value) {
var addQuotes = (value.indexOf(',') !== -1) || (value.indexOf('\r') !== -1) || (value.indexOf('\n') !== -1);
var replaceDoubleQuotes = (value.indexOf('"') !== -1);

if (replaceDoubleQuotes) {
value = value.replace(/"/g, '""');
}
if (addQuotes || replaceDoubleQuotes) {
value = '"' + value + '"';
}
return '\t' + value;
var fixCSVField = function (value) {
return '\t"' + value.replace(/"/g, '""') + '"';
};

module.exports = function (table) {
Expand Down
5 changes: 3 additions & 2 deletions src/dom2canvas.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ var rgb2hex = function (rgb) {
return rgb;
} else {
rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);

function hex(x) {
return ('0' + parseInt(x).toString(16)).slice(-2);
}
return '#' + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}
}
};

var renderSvg = function (svg, callback) {
Expand Down Expand Up @@ -57,4 +58,4 @@ module.exports = function (element, options, callback) {
ctx.drawImage(img, 0, 0);
callback(canvas);
});
}
}
2 changes: 1 addition & 1 deletion src/image.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ module.exports = function (table, filename) {
saveAs(b, filename + '.png');
});
});
}
}
51 changes: 16 additions & 35 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,69 +3,50 @@ module.exports = function (tableId, filename, type) {
var table = doc.getElementById(tableId);
var charset = doc.characterSet;
var uri = {
/*json-wrap*/
json: 'application/json;charset=' + charset,
/*json-wrap*/
/*txt-wrap*/
txt: 'csv/txt;charset=' + charset,
/*txt-wrap*/
/*csv-wrap*/
csv: 'csv/txt;charset=' + charset,
/*csv-wrap*/
/*xml-wrap*/
xml: 'application/xml',
/*xml-wrap*/
/*doc-wrap*/
doc: 'application/msword',
/*doc-wrap*/
/*xls-wrap*/
xls: 'application/vnd.ms-excel',
/*xls-wrap*/
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
};
var typeMap = {
/*json-wrap*/
json: require('./json'),
/*json-wrap*/
/*txt-wrap*/
/* txt:start */
txt: require('./csv'),
/*txt-wrap*/
/*csv-wrap*/
/* txt:end */
/* csv:start */
csv: require('./csv'),
/*csv-wrap*/
/*xml-wrap*/
/* csv:end */
/* xml:start */
xml: require('./xml'),
/*xml-wrap*/
/*doc-wrap*/
/* xml:end */
/* doc:start */
doc: require('./office'),
/*doc-wrap*/
/*xls-wrap*/
/* doc:end */
/* xls:start */
xls: require('./office'),
/*xls-wrap*/
/*image-wrap*/
/* xls:end */
/* image:start */
image: require('./image'),
/*image-wrap*/
/*pdf-wrap*/
/* image:end */
/* pdf:start */
pdf: require('./pdf'),
/*pdf-wrap*/
/* pdf:end */
docx: ''
};
var typeFunc = typeMap[type];
if (typeof typeFunc === 'function') {
/*image-pdf-wrap*/
if (/*type-if-wrap*/type === 'image' || type === 'pdf'/*type-if-wrap*/) {
if (type === 'image' || type === 'pdf') {
typeFunc(table, filename);
} else {
/*image-pdf-wrap*/
var data = typeFunc(table, charset, type);
require('file-saver').saveAs(new Blob([data], {
type: uri[type]
}), filename + '.' + type);
/*image-pdf-wrap*/
}
/*image-pdf-wrap*/
} else {
throw new Error('the supported types are: json, txt, csv, xml, doc, xls, image, pdf');
}
};
};
4 changes: 2 additions & 2 deletions src/json.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ module.exports = function (table) {
}
}
}

return JSON.stringify({
header: jsonHeaderArray,
data: jsonArray
});
}
}
43 changes: 24 additions & 19 deletions src/jspdf.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,48 +20,51 @@ require('jspdf/plugins/addimage');
jsPDFAPI.addDOM = function (element, x, y, options, callback) {
var dom2canvas = require('./dom2canvas');

if(typeof x !== 'number') {
if (typeof x !== 'number') {
options = x;
callback = y;
}

if(typeof options === 'function') {
if (typeof options === 'function') {
callback = options;
options = null;
}

var I = this.internal, K = I.scaleFactor, W = I.pageSize.width, H = I.pageSize.height;
var I = this.internal,
K = I.scaleFactor,
W = I.pageSize.width,
H = I.pageSize.height;

options = options || {};
options.onrendered = function(obj) {
options.onrendered = function (obj) {
x = parseInt(x) || 0;
y = parseInt(y) || 0;
var dim = options.dim || {};
var h = dim.h || 0;
var w = dim.w || Math.min(W,obj.width/K) - x;
var w = dim.w || Math.min(W, obj.width / K) - x;

var format = 'JPEG';
if(options.format)
if (options.format)
format = options.format;

if(obj.height > H && options.pagesplit) {
var crop = function() {
if (obj.height > H && options.pagesplit) {
var crop = function () {
var cy = 0;
while(1) {
while (1) {
var canvas = document.createElement('canvas');
canvas.width = Math.min(W*K,obj.width);
canvas.height = Math.min(H*K,obj.height-cy);
canvas.width = Math.min(W * K, obj.width);
canvas.height = Math.min(H * K, obj.height - cy);
var ctx = canvas.getContext('2d');
ctx.drawImage(obj,0,cy,obj.width,canvas.height,0,0,canvas.width,canvas.height);
var args = [canvas, x,cy?0:y,canvas.width/K,canvas.height/K, format,null,'SLOW'];
ctx.drawImage(obj, 0, cy, obj.width, canvas.height, 0, 0, canvas.width, canvas.height);
var args = [canvas, x, cy ? 0 : y, canvas.width / K, canvas.height / K, format, null, 'SLOW'];
this.addImage.apply(this, args);
cy += canvas.height;
if(cy >= obj.height) break;
if (cy >= obj.height) break;
this.addPage();
}
callback(w,cy,null,args);
callback(w, cy, null, args);
}.bind(this);
if(obj.nodeName === 'CANVAS') {
if (obj.nodeName === 'CANVAS') {
var img = new Image();
img.onload = crop;
img.src = obj.toDataURL('image/png');
Expand All @@ -71,14 +74,16 @@ require('jspdf/plugins/addimage');
}
} else {
var alias = Math.random().toString(35);
var args = [obj, x,y,w,h, format,alias,'SLOW'];
var args = [obj, x, y, w, h, format, alias, 'SLOW'];

this.addImage.apply(this, args);

callback(w,h,alias,args);
callback(w, h, alias, args);
}
}.bind(this);
dom2canvas(element, {format: 'jpg'}, function (canvas) {
dom2canvas(element, {
format: 'jpg'
}, function (canvas) {
options.onrendered(canvas);
});
};
Expand Down
2 changes: 1 addition & 1 deletion src/office.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ module.exports = function (table, charset, type) {
type: type,
table: office
});
}
}
4 changes: 2 additions & 2 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exports.getText = function (el) {
};

exports.template = function (s, c) {
return s.replace(/{{(\w+)}}/g, function(m, p) {
return s.replace(/{{(\w+)}}/g, function (m, p) {
return c[p];
});
};
};
80 changes: 33 additions & 47 deletions webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,59 +1,45 @@
var path = require('path');
var fs = require('fs');
var webpack = require('webpack');
var src = './src/index.js';
var md = ['json', 'txt', 'csv', 'xml', 'doc', 'xls', 'image', 'pdf'];
var modules = (process.env['MODULES'] || '').split(' ');
var notypes = [];
var noimg = false;
var nopdf = false;
var content = null;
if (modules[0]) {
notypes = md.filter(function (m) {
if (modules.indexOf(m) === -1) {
if (m === 'image') {
noimg = true;
} else if (m === 'pdf') {
nopdf = true;
}
return true;
} else {
return false;
const path = require('path');
const fs = require('fs');
const webpack = require('webpack');
/**
* @desc 获取需要剔除的模块
*/
let blocks = [];
let modules = ['json', 'txt', 'csv', 'xml', 'doc', 'xls', 'image', 'pdf'];
if (process.env['MODULES']) {
process.env['MODULES'].split(' ').forEach(m => {
let index = modules.indexOf(m);
if (index !== -1) {
modules.splice(index, 1);
}
});
}
if (notypes.length) {
content = fs.readFileSync(src).toString();
notypes.forEach(function (m) {
var r = new RegExp('/\\*' + m + '-wrap\\*/([\\s\\S]+?)/\\*' + m + '-wrap\\*/', 'g');
content = content.replace(r, '');
});
if (noimg && nopdf) {
content = content.replace(/\/\*image-pdf-wrap\*\/([\s\S]+?)\/\*image-pdf-wrap\*\//g, '');
} else if (noimg || nopdf) {
content = content.replace(/\/\*type-if-wrap\*\/([\s\S]+?)\/\*type-if-wrap\*\//g, 'type === \'' + (noimg ? 'pdf' : 'image') + '\'');
}
src = './src/index-tmp.js';
fs.writeFileSync(src, content);
var callback = function () {
fs.unlinkSync(src);
};
process.on('SIGINT', callback);
process.on('uncaughtException', callback);
process.on('exit', callback);
blocks = modules;
}

module.exports = {
entry: src,
entry: './src/index.js',
output: {
libraryTarget: 'umd',
library: 'tableExport',
path: path.join(__dirname, 'dist'),
filename: 'tableExport.js'
},
plugins: [
new webpack.optimize.UglifyJsPlugin({
sourceMap: false
})
]
module: {
rules: [{
test: /\.js$/,
enforce: 'pre',
exclude: /(node_modules|bower_components|\.spec\.js)/,
use: [{
loader: 'webpack-strip-block',
options: {
blocks: blocks
}
}]
}],
},
devServer: {
contentBase: path.join(__dirname, 'demo'),
compress: true,
port: 3000
}
};

0 comments on commit cf22e1a

Please sign in to comment.