摘要:就像,等組件都有自己的幫助文檔。然后,引入修改后的支持中文搜索的控件,修正代碼如下添加對中文的支持上述是縮減之后的代碼,其中主要是對的使用。
當今大多數的團隊都實現了前、后端分支。前端與后端的溝通都是通過接口來實現的(一般情況下都是webapi接口)。這種情況你肯定需要一個接口查詢的幫助文檔,這個當然用swagger都可以實現。但做為前端開發的我們是否也應該考慮把自己寫的組件以幫助文檔的方式公開都團隊其他人員使用。就像iview,easyui等UI組件都有自己的幫助文檔。今天我們都介紹一套工具(其中某些組件經過本人的改造)
1. Hexo:靜態博客生成器
2. Hexo-theme-doc:基于Hexo實現的幫助文檔類型的皮膚,并對其中的某些邏輯進行完善
3. lunr-languages:實現lunr搜索對多語言的支持
上述演示效果為本人開發的ko-easyui插件的幫助文檔。你可以訪問此地址查看https://ko-plugins.gitee.io/koeasyui/index.html
效果看上去是簡單了點,但卻能達到對一套UI組件的說明,也是不錯的。
對components.jsx中觸發搜索的參數進行調整如下(使用其更快的觸發搜索):
class SearchForm extends React.Component { constructor (props) { super(props); } handleKeyUp (e) { if (query.length < 2) { return; } } }
主要就是把query.length < 3改為query.length < 2。
然后,引入修改后的lunr-languages(支持中文搜索的控件),修正代碼如下(search/build.js):
let support = require(lunr-languages/lunr.stemmer.support); let zhcn = require(lunr-languages/lunr.zhcn); support(lunr); zhcn(lunr); module.exports = function build (ctx) { const index = lunr(function () { //添加對中文的支持 this.use(lunr.zhcn); this.ref(id); this.field(title); this.field(body); } }
上述是縮減之后的代碼,其中主要是對lunr.zhcn的使用。
對lunr-languages的改造,增加了lunr.zhcn.js文件,增加對中文搜索的支持,代碼如下:
/** * lunr對中文分詞的支持 */ ; (function(root, factory) { if (typeof define === function && define.amd) { // AMD. Register as an anonymous module. define(factory) } else if (typeof exports === object) { /** * Node. Does not work with strict CommonJS, but * only CommonJS-like environments that support module.exports, * like Node. */ module.exports = factory() } else { // Browser globals (root is window) factory()(root.lunr); } }(this, function() { /** * Just return a value to define the module export. * This example returns an object, but the module * can return a function as the exported value. */ return function(lunr) { /* throw error if lunr is not yet included */ if (undefined === typeof lunr) { throw new Error(Lunr is not present. Please include / require Lunr before this script.); } /* throw error if lunr stemmer support is not yet included */ if (undefined === typeof lunr.stemmerSupport) { throw new Error(Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.); } /* Thai tokenization is the same to Japanense, which does not take into account spaces. So, it uses the same logic to assign tokenization function due to different Lunr versions. */ var isLunr2 = lunr.version[0] == "2"; /* register specific locale function */ lunr.zhcn = function() { this.pipeline.reset(); this.pipeline.add( lunr.zhcn.trimmer, lunr.zhcn.stopWordFilter, lunr.zhcn.stemmer ); if (isLunr2) { // for lunr version 2.0.0 this.tokenizer = lunr.zhcn.tokenizer; } else { if (lunr.tokenizer) { // for lunr version 0.6.0 lunr.tokenizer = lunr.zhcn.tokenizer; } if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 this.tokenizerFn = lunr.zhcn.tokenizer; } } }; var segmenter = new lunr.TinySegmenter(); lunr.zhcn.tokenizer = function(obj) { var i; var str; var len; var segs; var tokens; var char; var sliceLength; var sliceStart; var sliceEnd; var segStart; if (!arguments.length || obj == null || obj == undefined) return []; if (Array.isArray(obj)) { return obj.map( function(t) { return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase(); } ); } str = obj.toString().toLowerCase().replace(/^s+/, ); for (i = str.length - 1; i >= 0; i--) { if (/S/.test(str.charAt(i))) { str = str.substring(0, i + 1); break; } } tokens = []; len = str.length; for (sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) { char = str.charAt(sliceEnd); sliceLength = sliceEnd - sliceStart; if ((char.match(/s/) || sliceEnd == len)) { if (sliceLength > 0) { segs = segmenter.segment(str.slice(sliceStart, sliceEnd)).filter( function(token) { return !!token; } ); segStart = sliceStart; for (i = 0; i < segs.length; i++) { if (isLunr2) { tokens.push( new lunr.Token( segs[i], { position: [segStart, segs[i].length], index: tokens.length } ) ); } else { tokens.push(segs[i]); } segStart += segs[i].length; } } sliceStart = sliceEnd + 1; } } return tokens; } lunr.zhcn.stemmer = (function(){ return function(word) { return word; } })(); lunr.Pipeline.registerFunction(lunr.zhcn.stemmer, stemmer-zhcn); /* lunr trimmer function */ lunr.zhcn.wordCharacters = "一二三四五六七八九十百千萬億兆一-龠々〆ヵヶぁ-んァ-ヴー?-??a-zA-Za-zA-Z0-90-9"; lunr.zhcn.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.zhcn.wordCharacters); lunr.Pipeline.registerFunction(lunr.zhcn.trimmer, trimmer-zhcn); /* lunr stop word filter. see https://www.ranks.nl/stopwords/chinese-stopwords */ lunr.zhcn.stopWordFilter = lunr.generateStopWordFilter(的 一 不 在 人 有 是 為 以 于 上 他 而 后 之 來 及 了 因 下 可 到 由 這 與 也 此 但 并 個 其 已 無 小 我 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 別 趁 當 從 到 得 打 凡 兒 爾 該 各 給 跟 和 何 還 即 幾 既 看 據 距 靠 啦 了 另 么 每 們 嘛 拿 哪 那 您 憑 且 卻 讓 仍 啥 如 若 使 誰 雖 隨 同 所 她 哇 嗡 往 哪 些 向 沿 喲 用 于 咱 則 怎 曾 至 致 著 諸 自.split( )); lunr.Pipeline.registerFunction(lunr.zhcn.stopWordFilter, stopWordFilter-zhcn); }; }))
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/1997.html
摘要:針對一些想寫博客提升能力,但是很迷茫不知道怎么開始的同學,我會盡我所能給出一些建議。它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉換成有效的或者文檔。 目錄 ...
摘要:什么是是一款在線編輯器,她不僅免費開源,而且簡單適用。適用于編寫臨時文檔與在線分享。演示地址演示圖片源碼地址 Markdown-Temp 什么是Markdown-Temp? Markdown-Temp是一款在線Markdown編輯器,她不僅免費開源,而且簡單適用。Markdown-Temp適用于編寫臨時文檔與在線分享。 Markdown-Temp說明 編輯器使用Editor.md開發...
摘要:字數閱讀時間分鐘前言本文的旨在講述如何從零開始搭建一個文檔展示工具。整個過程非常簡單,咱稍微花五分鐘就可以搭建一個定制化的文檔解析器,是不是很酷呀首先我們曬一張成果圖看看效果吧正文環境準備插件一款最受歡迎的文件解析插件。 字數:790 閱讀時間:5分鐘 前言 ??本文的旨在講述如何從零開始搭建一個MarkDown文檔展示工具。整個過程非常簡單,咱稍微花五分鐘就可以搭建一個定制化的MD文...
閱讀 713·2023-04-25 19:43
閱讀 3910·2021-11-30 14:52
閱讀 3785·2021-11-30 14:52
閱讀 3852·2021-11-29 11:00
閱讀 3783·2021-11-29 11:00
閱讀 3869·2021-11-29 11:00
閱讀 3558·2021-11-29 11:00
閱讀 6105·2021-11-29 11:00