| 'use strict'; |
| |
| const fs = require('fs'); |
| const path = require('path'); |
| |
| let $ = null; |
| require('jsdom').env('', (err, window) => { |
| if (err) { |
| console.error(err); |
| return; |
| } |
| |
| $ = require('jquery')(window); |
| |
| var lang = ['cn', 'en']; |
| for (var l = 0; l < lang.length; ++l) { |
| var inBase = path.join(__dirname, |
| '../' + lang[l] + '/documents/' + lang[l] + '/'); |
| var outBase = process.cwd() + '/dash/' + lang[l] + '/'; |
| if (!fs.existsSync(outBase)) { |
| fs.mkdirSync(outBase); |
| } |
| |
| // copy asset files |
| copyFolderRecursiveSync(process.cwd() + '/dash/asset', outBase); |
| copyFolderRecursiveSync(process.cwd() + '/dash/documents', outBase); |
| |
| var files = ['option', 'tutorial', 'api']; |
| var classNames = ['opt', 'guide', null]; |
| |
| for (var i = 0; i < files.length; ++i) { |
| jsonToHtml(inBase + files[i] + '.json', |
| outBase + files[i] + '.html', classNames[i]); |
| } |
| } |
| }); |
| |
| |
| |
| function jsonToHtml(infile, outfile, className) { |
| const file = fs.readFileSync(infile); |
| const option = JSON.parse(file).option; |
| |
| const html = $('<html></html>') |
| .append($('<head></head>') |
| .append('<meta charset="utf-8">') |
| .append('<link href="asset/css/main.css" rel="stylesheet">') |
| .append('<link rel="stylesheet" href="asset/vendor/prettify/prettify.css">') |
| .append('<script type="text/javascript" src="asset/vendor/prettify/prettify.js">') |
| .append('<script type="text/javascript" src="asset/vendor/prettify/lang-css.js">') |
| .append('<script type="text/javascript" src="asset/vendor/zepto.min.js">') |
| .append('<script type="text/javascript" src="asset/js/main.js">') |
| ); |
| const body = $('<body></body>'); |
| const container = $('<div class="container"></div>') |
| .append('<h1>ECharts Document</h1>'); |
| html.append(body); |
| body.append(container); |
| |
| let isRoot = true; |
| let nodeStack = [['option', option]]; |
| while (nodeStack.length > 0) { |
| const node = nodeStack.pop(); |
| |
| var nodeClassName = className; |
| // DFS |
| if (node[1].type === 'Array') { |
| // series |
| const children = node[1].items.anyOf; |
| for (let p = 0; p < children.length; ++p) { |
| let name = children[p].properties.type['default']; |
| // remove '' in name |
| name = name.replace(new RegExp('\'', 'g'), ''); |
| nodeStack.push([node[0] + '.' + name, children[p], |
| nodeClassName]); |
| } |
| } |
| else { |
| const children = node[1].properties; |
| for (let p in children) { |
| if (children.hasOwnProperty(p)) { |
| const name = node[0] === 'option' ? p : node[0] + '.' + p; |
| const classMap = { |
| action: 'action', |
| events: 'event', |
| echarts: 'method', |
| echartsInstance: 'inst' |
| }; |
| const dotId = name.indexOf('.'); |
| let rootName = p; |
| if (dotId >= 0) { |
| rootName = name.slice(0, dotId); |
| } |
| nodeClassName = classMap[rootName] || className; |
| nodeStack.push([name, children[p], nodeClassName]); |
| } |
| } |
| } |
| |
| if (!isRoot && node[1].description) { |
| var content = node[1].description.replace( |
| new RegExp('<h2', 'g'), '<h4'); |
| container.append( |
| '<h3 class="' + node[2] + '">' + node[0] + '</h3>' + content |
| ); |
| } |
| |
| isRoot = false; |
| } |
| |
| fs.writeFileSync(outfile, '<html>' + html.html() + '</html>'); |
| } |
| |
| // from http://stackoverflow.com/questions/13786160/ |
| // copy-folder-recursively-in-node-js |
| function copyFolderRecursiveSync(source, target) { |
| var files = []; |
| |
| //check if folder needs to be created or integrated |
| var targetFolder = path.join(target, path.basename(source)); |
| if (!fs.existsSync(targetFolder)) { |
| fs.mkdirSync(targetFolder); |
| } |
| |
| //copy |
| if (fs.lstatSync(source).isDirectory()) { |
| files = fs.readdirSync(source); |
| files.forEach(function (file) { |
| var curSource = path.join(source, file); |
| if (fs.lstatSync(curSource).isDirectory()) { |
| copyFolderRecursiveSync(curSource, targetFolder); |
| } else { |
| copyFileSync(curSource, targetFolder); |
| } |
| }); |
| } |
| } |
| |
| function copyFileSync(source, target) { |
| var targetFile = target; |
| |
| //if target is a directory a new file with the same name will be created |
| if (fs.existsSync(target)) { |
| if (fs.lstatSync(target).isDirectory()) { |
| targetFile = path.join(target, path.basename(source)); |
| } |
| } |
| |
| fs.writeFileSync(targetFile, fs.readFileSync(source)); |
| } |