From 9dcc4eb0b70b1baf1f5809b9584afa713c85a718 Mon Sep 17 00:00:00 2001 From: Leopoldthecoder Date: Tue, 10 Oct 2017 18:06:01 +0800 Subject: [PATCH] Docs: add algolia search --- .gitignore | 1 + build/bin/gen-indices.js | 52 ++++++ examples/assets/images/search-by-algolia.svg | 1 + examples/components/header.vue | 9 +- examples/components/search.vue | 166 ++++++++++++++++++ examples/docs/en-US/cascader.md | 2 +- examples/docs/en-US/date-picker.md | 10 +- examples/docs/en-US/datetime-picker.md | 8 +- examples/docs/en-US/home.md | 11 -- examples/docs/en-US/input-number.md | 2 +- examples/docs/en-US/input.md | 1 + examples/docs/en-US/slider.md | 2 +- examples/docs/zh-CN/date-picker.md | 10 +- examples/docs/zh-CN/datetime-picker.md | 8 +- examples/docs/zh-CN/home.md | 11 -- examples/docs/zh-CN/input.md | 4 +- package.json | 5 + packages/autocomplete/src/autocomplete.vue | 15 +- packages/date-picker/src/panel/date-range.vue | 21 ++- packages/date-picker/src/panel/date.vue | 20 ++- packages/input/src/calcTextareaHeight.js | 3 +- packages/theme-chalk/src/autocomplete.scss | 1 + .../src/date-picker/picker-panel.scss | 7 +- yarn.lock | 105 ++++++++--- 24 files changed, 387 insertions(+), 88 deletions(-) create mode 100644 build/bin/gen-indices.js create mode 100644 examples/assets/images/search-by-algolia.svg create mode 100644 examples/components/search.vue delete mode 100644 examples/docs/en-US/home.md delete mode 100644 examples/docs/zh-CN/home.md diff --git a/.gitignore b/.gitignore index 7e4e70fe0..c750822cf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ fe.element/element-ui .npmrc coverage waiter.config.js +build/bin/algolia-key.js diff --git a/build/bin/gen-indices.js b/build/bin/gen-indices.js new file mode 100644 index 000000000..1af503971 --- /dev/null +++ b/build/bin/gen-indices.js @@ -0,0 +1,52 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const algoliasearch = require('algoliasearch'); +const slugify = require('transliteration').slugify; +const key = require('./algolia-key'); + +const client = algoliasearch('9NLTR1QH8B', key); + +['zh-CN', 'en-US'].forEach(lang => { + const indexName = lang === 'zh-CN' ? 'element-zh' : 'element-en'; + const index = client.initIndex(indexName); + index.clearIndex(err => { + if (err) return; + fs.readdir(path.resolve(__dirname, `../../examples/docs/${ lang }`), (err, files) => { + if (err) return; + let indices = []; + files.forEach(file => { + const component = file.replace('.md', ''); + const content = fs.readFileSync(path.resolve(__dirname, `../../examples/docs/${ lang }/${ file }`), 'utf8'); + const matches = content + .replace(/:::[\s\S]*?:::/g, '') + .replace(/```[\s\S]*?```/g, '') + .match(/#{2,4}[^#]*/g) + .map(match => match.replace(/\n+/g, '\n').split('\n').filter(part => !!part)) + .map(match => { + const length = match.length; + if (length > 2) { + const desc = match.slice(1, length).join(''); + return [match[0], desc]; + } + return match; + }); + + indices = indices.concat(matches.map(match => { + const isComponent = match[0].indexOf('###') < 0; + const title = match[0].replace(/#{2,4}/, '').trim(); + const index = { component, title }; + index.ranking = isComponent ? 2 : 1; + index.anchor = slugify(title); + index.content = (match[1] || title).replace(/<[^>]+>/g, ''); + return index; + })); + }); + + index.addObjects(indices, (err, res) => { + console.log(err, res); + }); + }); + }); +}); diff --git a/examples/assets/images/search-by-algolia.svg b/examples/assets/images/search-by-algolia.svg new file mode 100644 index 000000000..989ed6ab8 --- /dev/null +++ b/examples/assets/images/search-by-algolia.svg @@ -0,0 +1 @@ +search-by-algolia \ No newline at end of file diff --git a/examples/components/header.vue b/examples/components/header.vue index f116920e1..f0debedab 100644 --- a/examples/components/header.vue +++ b/examples/components/header.vue @@ -314,6 +314,9 @@