From 4e3f44627910776d6628e2f17f83bab2a19f55cc Mon Sep 17 00:00:00 2001 From: Benjy Cui Date: Fri, 4 Mar 2016 18:06:34 +0800 Subject: [PATCH] chore: normalize build procedure --- CHANGELOG.md | 2 +- docs/react/getting-started.md | 1 - docs/react/install.md | 1 - docs/react/introduce.md | 1 - docs/react/upgrade-notes.md | 1 - scripts/build-common.js | 39 +----------- scripts/build-demos-list.js | 11 ++-- scripts/build-docs-list.js | 26 -------- scripts/build-website.js | 35 +++-------- scripts/utils.js | 20 +++--- site/component/ComponentDoc/index.jsx | 4 +- site/component/Demo/index.jsx | 6 +- site/component/Header/index.jsx | 24 ++++---- site/component/ReactComponents/index.jsx | 77 ------------------------ site/entry/index.jsx | 43 ++++--------- site/entry/utils.js | 2 +- 16 files changed, 61 insertions(+), 232 deletions(-) delete mode 100644 scripts/build-docs-list.js delete mode 100644 site/component/ReactComponents/index.jsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 080eddfe0e..7f5627d1b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # 更新日志 -- category: 4 +- order: 4 --- diff --git a/docs/react/getting-started.md b/docs/react/getting-started.md index b9ca914184..e64ce549d2 100644 --- a/docs/react/getting-started.md +++ b/docs/react/getting-started.md @@ -1,6 +1,5 @@ # 快速上手 -- category: 1 - order: 1 --- diff --git a/docs/react/install.md b/docs/react/install.md index f72ac9e492..9cf14f4ce9 100644 --- a/docs/react/install.md +++ b/docs/react/install.md @@ -1,6 +1,5 @@ # 安装 -- category: 2 - order: 2 --- diff --git a/docs/react/introduce.md b/docs/react/introduce.md index f0cdb0b2d1..09e249f6aa 100644 --- a/docs/react/introduce.md +++ b/docs/react/introduce.md @@ -1,6 +1,5 @@ # Ant Design of React -- category: 0 - order: 0 --- diff --git a/docs/react/upgrade-notes.md b/docs/react/upgrade-notes.md index 71acaf02f8..cc76d4c5d8 100644 --- a/docs/react/upgrade-notes.md +++ b/docs/react/upgrade-notes.md @@ -1,6 +1,5 @@ # 升级指南 -- category: 3 - order: 3 --- diff --git a/scripts/build-common.js b/scripts/build-common.js index 286e73ed2e..49ae50ee97 100644 --- a/scripts/build-common.js +++ b/scripts/build-common.js @@ -1,45 +1,12 @@ 'use strict'; const fs = require('fs'); -const path = require('path'); const R = require('ramda'); -const buildDemosList = require('./build-demos-list'); -const devil = require('./devil'); const utils = require('./utils'); -const isMeta = R.complement(R.propEq('type', 'hr')); -const getMeta = R.prop('meta'); -const getOrder = R.compose(parseInt, R.path(['meta', 'order'])); -const getMenuItems = R.compose( - R.groupBy(R.compose(R.defaultTo('topLevel'), R.prop('category'))), - R.map(getMeta) -); -const sortByOrder = R.sortBy(getOrder); -const parseDemos = function parseDemos(fileName) { - const demosPath = path.join(path.dirname(fileName), 'demo'); - const demosMDFild = utils.findMDFile(demosPath); - - return buildDemosList.parse(demosMDFild).docs; // TODO -}; -const parse = function parse(fileName) { - const fileContent = utils.parseFileContent(fileName); - const meta = utils.parseMeta(fileContent); - const description = R.map( - (node) => { - if (node.type === 'code' && node.props.lang === '__react') { - return devil(node.children, ['React', 'antd']); - } - return node; - }, - R.tail(R.dropWhile(isMeta, fileContent)) - ); - - const demos = !utils.isIndex(fileName) ? null : parseDemos(fileName); - - return { meta, description, demos }; -}; -module.exports = function buildCommon(inputDir, outputFile) { - const mds = utils.findMDFile(inputDir, true); +module.exports = function buildCommon(dirs, outputFile) { + const mds = utils.findMDFile(dirs, true) + .filter((file) => !/install_en\.md$/gi.test(file)); // TODO let content = 'module.exports = {'; mds.forEach((md) => { diff --git a/scripts/build-demos-list.js b/scripts/build-demos-list.js index c5824ae183..84f40e0e4b 100644 --- a/scripts/build-demos-list.js +++ b/scripts/build-demos-list.js @@ -21,12 +21,13 @@ const parseDemosList = function parseDemosList(demoList) { const demo = {}; demo.order = parseInt(utils.parseMeta(data).order); - demo.parent = parts[parts.indexOf('components') + 1]; + const demoIndex = parts.indexOf('demo'); + demo.parent = parts.slice(0, demoIndex).join('/') + '/index.md'; demo.id = 'components-' + demo.parent + '-demo-' + path.basename(fileName, '.md'); demo.title = data[0].children; demo.intro = data.filter(isIntro); demo.code = getChildren(data.find(isCode)); - demo.preview = devil(demo.code); + demo.preview = devil(demo.code, ['React', 'ReactDOM', '_antd', 'BrowserDemo']); demo.style = getChildren(data.find(isStyle)); return demo; @@ -39,11 +40,7 @@ const parseDemosList = function parseDemosList(demoList) { module.exports = function buildDemosList(demoList, outputPath) { const parsedDemosList = parseDemosList(demoList); - const content = 'const React = require(\'react\');\n' + - 'const ReactDOM = require(\'react-dom\');\n' + - 'const _antd = require(\'../../\');\n' + - 'module.exports = ' + - utils.stringify(parsedDemosList, null, 2) + ';'; + const content = 'module.exports = ' + utils.stringify(parsedDemosList) + ';'; fs.writeFile(outputPath, content); }; diff --git a/scripts/build-docs-list.js b/scripts/build-docs-list.js deleted file mode 100644 index 31a4fb9cd1..0000000000 --- a/scripts/build-docs-list.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const R = require('ramda'); -const utils = require('./utils'); - -const isMeta = R.complement(R.propEq('type', 'hr')); -const isDescription = R.complement(R.propEq('children', 'API')); -module.exports = function buildDocsList(indexes, outputPath) { - const indexesList = R.map((fileName) => { - const fileContent = utils.parseFileContent(fileName); - const meta = utils.parseMeta(fileContent); - const description = R.tail(R.dropWhile( - isMeta, - R.takeWhile(isDescription, fileContent) - )); - const api = R.dropWhile(isDescription, fileContent); - - return { meta, description, api }; - }, indexes); - - const content = 'module.exports = ' + - JSON.stringify(indexesList, null, 2) + ';'; - - fs.writeFile(outputPath, content); -}; diff --git a/scripts/build-website.js b/scripts/build-website.js index ec5672fd7c..1b93d46e9c 100755 --- a/scripts/build-website.js +++ b/scripts/build-website.js @@ -6,39 +6,22 @@ require('mkdirp').sync('./_site/data'); const fs = require('fs'); +const path = require('path'); const R = require('ramda'); const utils = require('./utils'); -const buildComponentsList = require('./build-components-list'); -const buildDocsList = require('./build-docs-list'); const buildDemosList = require('./build-demos-list'); const buildCommon = require('./build-common'); - -// TODO: configurable -const componentPath = './components'; -const mds = utils.findMDFile(componentPath); - -const indexes = R.filter(utils.isIndex, mds); -buildComponentsList(indexes, './_site/data/components-list.js'); -buildDocsList(indexes, './_site/data/component-docs-list.js'); - -const demos = R.filter(utils.isDemo, mds); +const mds = utils.findMDFile(['./components', './docs']); +const isDemo = R.compose(R.test(/\/demo$/i), path.dirname); +const demos = R.filter(isDemo, mds); buildDemosList(demos, './_site/data/demos-list.js'); -const changelogPath = './CHANGELOG.md'; -buildDocsList([changelogPath], './_site/data/changelog.js'); - -const introducePath = './docs/react/introduce.md'; -buildDocsList([introducePath], './_site/data/introduce.js'); - -const gettingStartedPath = './docs/react/getting-started.md'; -buildDocsList([gettingStartedPath], './_site/data/getting-started.js'); - -const installPath = './docs/react/install.md'; -buildDocsList([installPath], './_site/data/install.js'); - -const upgradeNotesPath = './docs/react/upgrade-notes.md'; -buildDocsList([upgradeNotesPath], './_site/data/upgrade-notes.js'); +buildCommon([ + './components', + './docs/react', + './CHANGELOG.md', +], './_site/data/react-components.js'); buildCommon('./docs/practice', './_site/data/practice.js'); buildCommon('./docs/pattern', './_site/data/pattern.js'); diff --git a/scripts/utils.js b/scripts/utils.js index e2f4eda072..cc406badc5 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -5,29 +5,35 @@ const path = require('path'); const R = require('ramda'); const isMDFile = R.compose(R.equals('.md'), path.extname); -exports.findMDFile = function findMDFile(dirPath, shallow) { +exports.findMDFile = function findMDFile(fileName, shallow) { + const filePaths = Array.isArray(fileName) ? fileName : [fileName]; let mds = []; - R.forEach((fileName) => { - const filePath = path.join(dirPath, fileName); + R.forEach((filePath) => { const stat = fs.statSync(filePath); if (stat.isFile() && isMDFile(filePath)) { mds.push(filePath); } if (stat.isDirectory()) { const indexFile = path.join(filePath, 'index.md'); - if (shallow && fs.statSync(indexFile).isFile()) { + let hasIndexFile = false; + try { + hasIndexFile = fs.statSync(indexFile).isFile(); + } catch (e) {} + + if (shallow && hasIndexFile) { mds.push(indexFile); } else { - mds = mds.concat(findMDFile(filePath)); + const subFiles = fs.readdirSync(filePath) + .map((subFile) => path.join(filePath, subFile)); + mds = mds.concat(findMDFile(subFiles, shallow)); } } - }, fs.readdirSync(dirPath)); + }, filePaths); return mds; }; exports.isIndex = R.compose(R.equals('index.md'), R.unary(path.basename)); -exports.isDemo = R.complement(exports.isIndex); const MT = require('mark-twain'); exports.parseFileContent = R.pipe( diff --git a/site/component/ComponentDoc/index.jsx b/site/component/ComponentDoc/index.jsx index 8d12c6dfa4..f07546fce2 100644 --- a/site/component/ComponentDoc/index.jsx +++ b/site/component/ComponentDoc/index.jsx @@ -3,6 +3,7 @@ import classNames from 'classnames'; import { Row, Col, Icon } from '../../../'; import Demo from '../Demo'; import * as utils from '../utils'; +import demosList from '../../../_site/data/demos-list'; export default class ComponentDoc extends React.Component { constructor(props) { @@ -20,7 +21,8 @@ export default class ComponentDoc extends React.Component { } render() { - const { demos = [], doc } = this.props; + const { doc } = this.props; + const demos = demosList[doc.meta.fileName] || []; const expand = this.state.expandAll; const isSingleCol = doc.meta.cols === '1'; diff --git a/site/component/Demo/index.jsx b/site/component/Demo/index.jsx index ebfa9f9583..e1268c5625 100644 --- a/site/component/Demo/index.jsx +++ b/site/component/Demo/index.jsx @@ -1,5 +1,7 @@ import React from 'react'; -import { Collapse } from '../../../'; +import ReactDOM from 'react-dom'; +import antd, { Collapse } from '../../../'; +import BrowserDemo from '../BrowserDemo'; import * as utils from '../utils'; import hljs from 'highlight.js'; @@ -26,7 +28,7 @@ export default class Demo extends React.Component { return (
- { preview() } + { preview(React, ReactDOM, antd, BrowserDemo) } { !!style ?