UNPKG

ydoc

Version:

基于 Markdown 的静态站点生成工具

158 lines (157 loc) 17.4 kB
<!DOCTYPE html><html lang="zh-CN"><head><meta charSet="UTF-8"/><meta content="text/html; charset=utf-8" http-equiv="Content-Type"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black"/><link rel="apple-touch-icon" sizes="180x180" href="../ydoc/images/apple-touch-icon.png"/><link rel="icon" type="image/png" sizes="32x32" href="../ydoc/images/favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="../ydoc/images/favicon-16x16.png"/><link rel="manifest" href="../ydoc/images/manifest.json"/><link rel="mask-icon" href="../ydoc/images/safari-pinned-tab.svg" color="#5bbad5"/><meta name="theme-color" content="#ffffff"/><meta http-equiv="Cache-Control" content="no-transform"/><meta http-equiv="Cache-Control" content="no-siteapp"/><title>钩子-文档</title><link rel="stylesheet" href="../ydoc/styles/style.css"/><meta name="author" content="ymfe"/><meta name="keywords"/><meta name="description" content="ydoc description demo"/><meta id="releativePath" content=".."/><link rel="stylesheet" href="../ydoc/ydoc-plugin-search/search.css"/><link rel="stylesheet" href="../ydoc/ydoc-plugin-edit-page/editPage.css"/><link rel="stylesheet" href="../custom.css"/></head><body><div class="g-doc"><div class="m-aside"><div class="m-summary" id="js-menu"><div class="m-summary-content" id="js-menu-content"><div class="m-summary-block"><ul class="m-summary-list"><li class="item"><a href="index.html" class="href">快速开始</a></li></ul></div><div class="m-summary-block"><div class="m-summary-title">教程</div><ul class="m-summary-list indent"><li class="item"><a href="structure.html" class="href">目录结构</a></li><li class="item"><a href="nav.html" class="href">导航</a></li><li class="item"><div class="m-summary-block"><a href="pages-index.html" class="href">页面</a><ul class="m-summary-list indent"><li class="item"><a href="pages-index.html" class="href">首页</a></li><li class="item"><a href="pages-book.html" class="href">文档页</a></li><li class="item"><a href="pages-custom.html" class="href">自定义页面</a></li></ul></div></li><li class="item"><a href="config.html" class="href">配置文件</a></li><li class="item"><a href="markdown.html" class="href">Markdown</a></li></ul></div><div class="m-summary-block"><div class="m-summary-title">命令</div><ul class="m-summary-list indent"><li class="item"><div class="m-summary-block"><a href="command-index.html" class="href">页面</a><ul class="m-summary-list indent"><li class="item"><a href="command-index.html#init-初始化" class="href">init 初始化</a></li><li class="item"><a href="command-index.html#build-构建" class="href">build 构建</a></li><li class="item"><a href="command-index.html#serve-服务" class="href">serve 服务</a></li><li class="item"><a href="command-index.html#theme-主题" class="href">theme 主题</a></li></ul></div></li></ul></div><div class="m-summary-block"><div class="m-summary-title">自定义</div><ul class="m-summary-list indent"><li class="item"><div class="m-summary-block"><a href="theme.html" class="href">主题</a><ul class="m-summary-list indent"><li class="item"><a href="template.html" class="href">模板与变量</a></li></ul></div></li><li class="item"><a href="jsx.html" class="href">JSX</a></li><li class="item"><div class="m-summary-block"><a href="plugins.html" class="href">扩展</a><ul class="m-summary-list indent"><li class="item"><a href="create.html" class="href">创建插件</a></li><li class="item"><a href="" class="href">Hooks</a></li><li class="item"><a href="markdown-it.html" class="href">markdown扩展</a></li></ul></div></li><li class="item"><div class="m-summary-block"><a href="qa.html" class="href">常见问题</a><ul class="m-summary-list indent"><li class="item"><a href="qa.html#%e6%9b%bf%e6%8d%a2-favicon" class="href">替换 favicon</a></li><li class="item"><a href="qa.html#%e5%bc%95%e5%85%a5-js-%e5%92%8c-css" class="href">引入 js 和 css</a></li></ul></div></li></ul></div><div class="m-summary-block"><ul class="m-summary-list"><li class="item"><a href="release.html" class="href">版本历史</a></li></ul></div></div></div><div class="m-summary-switch" id="js-summary-switch"><svg viewBox="0 0 926.23699 573.74994" version="1.1" x="0px" y="0px" width="15" height="15" class="bottom"><g transform="translate(904.92214,-879.1482)"><path d="m -673.67664,1221.6502 -231.2455,-231.24803 55.6165,-55.627 c 30.5891,-30.59485 56.1806,-55.627 56.8701,-55.627 0.6894,0 79.8637,78.60862 175.9427,174.68583 l 174.6892,174.6858 174.6892,-174.6858 c 96.079,-96.07721 175.253196,-174.68583 175.942696,-174.68583 0.6895,0 26.281,25.03215 56.8701,55.627 l 55.6165,55.627 -231.245496,231.24803 c -127.185,127.1864-231.5279,231.248 -231.873,231.248 -0.3451,0 -104.688,-104.0616 -231.873,-231.248 z" fill="#fff"></path></g></svg><svg viewBox="0 0 926.23699 573.74994" version="1.1" x="0px" y="0px" width="15" height="15" class="top"><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="aaa" fill="#fff" fill-rule="nonzero"><path d="M231.2455,342.502 L0,111.25397 L55.6165,55.62697 C86.2056,25.03212 111.7971,-2.99999998e-05 112.4866,-2.99999998e-05 C113.176,-2.99999998e-05 192.3503,78.60859 288.4293,174.6858 L463.1185,349.3716 L637.8077,174.6858 C733.8867,78.60859 813.060896,-2.99999997e-05 813.750396,-2.99999997e-05 C814.439896,-2.99999997e-05 840.031396,25.03212 870.620496,55.62697 L926.236996,111.25397 L694.9915,342.502 C567.8065,469.6884 463.4636,573.75 463.1185,573.75 C462.7734,573.75 358.4305,469.6884 231.2455,342.502 Z" id="Shape" transform="translate(463.118498, 286.874985) scale(1, -1) translate(-463.118498, -286.874985) "></path></g></g></svg></div></div><div class="m-main" id="js-panel"><header class="m-header" id="js-header"><div class="m-header-title js-logo"><a href="../index.html" target="_self"><img class="logo" width="36" src="../ydoc/images/dog@1x.png" srcSet="../ydoc/images/dog@2x.png 2x"/><h6 class="name">YDoc</h6></a></div><div><div class="m-search"> <div class="icon">&#xf0fd;</div> <input type="text" class="input js-input" placeholder="搜索" /> <div class="m-search-result js-search-result"></div> </div></div><nav class="m-header-nav js-nav"><ul class="m-header-items"><li class="item active"><a class="href" href="index.html">文档</a></li><li class="item "><a class="href" href="../plugin/index.html">插件</a></li><li class="item "><a class="href" href="../theme/index.html">主题</a></li><li class="item "><a class="href" href="../examples/index.html">示例 Demo</a></li><li class="item "><span class="href">规范</span><ul class="m-header-subtitle"><li class="item"><a href="../standard/style-guide.html" class="link">设计规范</a></li><li class="item"><a href="../standard/index.html" class="link">文档规范</a></li></ul></li></ul></nav><div id="js-nav-btn" class="m-header-btn ui-font-ydoc"></div></header><div class="m-content" id="js-content"><div id="markdown-body" class="m-content-container markdown-body"><h1>钩子</h1> <h2 id="钩子列表">钩子列表</h2> <h4>全局钩子</h4> <table> <thead> <tr> <th>名称</th> <th>描述</th> </tr> </thead> <tbody> <tr> <td><code>init</code></td> <td>在生成文档站点前触发.</td> </tr> <tr> <td><code>nav</code></td> <td>在解析导航 nav.md 后和解析文档前触发</td> </tr> <tr> <td><code>book:before</code></td> <td>加载 book 页面之前调用</td> </tr> <tr> <td><code>page:before</code></td> <td>加载 page 文件之前调用</td> </tr> <tr> <td><code>page</code></td> <td>加载 page 文件之后调用</td> </tr> <tr> <td><code>book</code></td> <td>加载 book 页面之后调用</td> </tr> <tr> <td><code>finish</code></td> <td>在生成文档站点完成后触发.</td> </tr> </tbody> </table> <h4>模板钩子</h4> <table> <thead> <tr> <th>名称</th> <th>描述</th> <th>参数</th> </tr> </thead> <tbody> <tr> <td><code>tpl:header</code></td> <td>在页面 header 中添加自定义的 html</td> <td></td> </tr> <tr> <td><code>tpl:mask</code></td> <td>用于添加遮罩层</td> <td></td> </tr> </tbody> </table> <h4>Page Object</h4> <pre><code class="language-js"><span class="token punctuation">{</span> <span class="token comment">// 页面类型,支持 md jsx html 三种</span> type<span class="token operator">:</span> <span class="token string">'md'</span><span class="token punctuation">,</span> <span class="token comment">// 页面标题</span> title<span class="token operator">:</span> <span class="token string">'string'</span><span class="token punctuation">,</span> <span class="token comment">// 页面描述信息</span> description<span class="token operator">:</span> <span class="token string">'string'</span><span class="token punctuation">,</span> <span class="token comment">// 页面内容</span> content<span class="token operator">:</span> <span class="token string">'内容'</span><span class="token punctuation">,</span> prev<span class="token operator">:</span> <span class="token string">'上一页连接'</span><span class="token punctuation">,</span> next<span class="token operator">:</span> <span class="token string">'下一页链接'</span><span class="token punctuation">,</span> releativePath<span class="token operator">:</span> <span class="token string">'相对路径'</span><span class="token punctuation">,</span> srcPath<span class="token operator">:</span> <span class="token string">'源文件路径'</span><span class="token punctuation">,</span> distPath<span class="token operator">:</span> <span class="token string">'生成文件路径'</span> <span class="token punctuation">}</span> </code></pre> <h5>增加页面内容示例</h5> <p>使用 <code>page:before</code> 钩子</p> <pre><code class="language-js"><span class="token punctuation">{</span> <span class="token string">"page:before"</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">page</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> page<span class="token punctuation">.</span>content <span class="token operator">=</span> page<span class="token punctuation">.</span>content <span class="token operator">+</span> <span class="token string">"\n Hello YDoc"</span><span class="token punctuation">;</span> <span class="token keyword">return</span> page<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h5>替换 html 示例</h5> <p>使用 <code>page</code> 钩子</p> <pre><code class="language-js"><span class="token punctuation">{</span> <span class="token string">"page"</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">page</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> page<span class="token punctuation">.</span>content <span class="token operator">=</span> page<span class="token punctuation">.</span>content<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">"&lt;b>"</span><span class="token punctuation">,</span> <span class="token string">"&lt;strong>"</span><span class="token punctuation">)</span> <span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">"&lt;/b>"</span><span class="token punctuation">,</span> <span class="token string">"&lt;/strong>"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> page<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h4>引用静态文件</h4> <p>使用 <code>assets</code> 钩子</p> <pre><code class="language-js"><span class="token punctuation">{</span> assets<span class="token operator">:</span> <span class="token punctuation">{</span> dir<span class="token operator">:</span> <span class="token string">'./assets'</span><span class="token punctuation">,</span> js<span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">'app.js'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> css<span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">'app.css'</span><span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>复制当前目录下的 assets 文件夹到文档,并且在每个文件引入 app.js 和 app.css。</p> <h3 id="钩子列表-异步操作">异步操作</h3> <p>回调参数返回一个 promise,能够支持异步处理。</p> <p>Example:</p> <pre><code class="language-js"><span class="token punctuation">{</span> <span class="token string">"init"</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">resolve</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">resolve</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">2000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> </div><div class="m-content-container m-paging"><div class="m-paging-prev m-paging-item"><a href="create.html" class="href"><span class="ui-font-ydoc"></span>创建插件</a></div><div class="m-paging-next m-paging-item"><a href="markdown-it.html" class="href">markdown扩展<span class="ui-font-ydoc"></span></a></div></div></div></div></div><div></div><script> var $content = document.getElementById('js-content'); var $summaryItems = Array.prototype.slice.call(document.querySelectorAll('#js-menu .href')); var $menu = document.getElementById('js-menu'); if (sessionStorage.prevPathname) { sessionStorage.setItem('prevPrevPathname', sessionStorage.prevPathname); sessionStorage.setItem('prevPrevMenuScrollTop', sessionStorage.prevMenuScrollTop); sessionStorage.setItem('prevPrevContentScrollTop', sessionStorage.prevContentScrollTop); } if (sessionStorage.locationPathname) { sessionStorage.setItem('prevPathname', sessionStorage.locationPathname); sessionStorage.setItem('prevMenuScrollTop', sessionStorage.menuScrollTop); sessionStorage.setItem('prevContentScrollTop', sessionStorage.contentScrollTop); } if ($menu && sessionStorage.menuScrollTop) { $menu.scrollTop = sessionStorage.menuScrollTop; } // 刷新页面但不切换 pathname 的时候,内容区恢复到记忆的高度 if ($content && sessionStorage.contentScrollTop && window.location.pathname == sessionStorage.locationPathname) { $content.scrollTop = sessionStorage.contentScrollTop; } else if (sessionStorage.prevPrevPathname && sessionStorage.prevPrevPathname === window.location.pathname) { if ($menu && sessionStorage.prevPrevMenuScrollTop) { $menu.scrollTop = sessionStorage.prevPrevMenuScrollTop; } if ($content && sessionStorage.prevPrevContentScrollTop) { $content.scrollTop = sessionStorage.prevPrevContentScrollTop; } } sessionStorage.setItem('locationPathname', window.location.pathname); </script><script src="../ydoc/scripts/plugins/dollar.min.js"></script><script src="../ydoc/scripts/plugins/responsive-nav.min.js"></script><script src="../ydoc/scripts/plugins/slideout.min.js"></script><script src="../ydoc/scripts/app.js"></script><script src="../ydoc/ydoc-plugin-search/core.js"></script><script src="../ydoc/ydoc-plugin-search/search.js"></script><script src="../ydoc/ydoc-plugin-edit-page/edit.script.js"></script><script src="../search_json.js"></script><script src="../edit_json.js"></script></body></html>