mirror of https://github.com/jkjoy/sunpeiwen.git
496 lines
24 KiB
HTML
496 lines
24 KiB
HTML
|
|
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
<link rel="icon" href="/img/logo.png">
|
|
|
|
|
|
<meta name="author" content="浪子">
|
|
|
|
|
|
<meta name="subtitle" content="一个分享自己生活的博客">
|
|
|
|
|
|
<meta name="description" content="曾梦想仗剑走天涯;因太胖放弃原计划.">
|
|
|
|
|
|
<meta name="keywords" content=",DIY,黑苹果,分享,自由">
|
|
|
|
|
|
<link rel="alternate" href="/atom.xml " title="提剑追梦" type="application/atom+xml">
|
|
|
|
|
|
|
|
|
|
<title>从memos的webhook开始 | 提剑追梦</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="/css/style.css" >
|
|
<link rel="stylesheet" href="/css/partial/dark.css" >
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="/css/partial/highlight/atom-one-light.css">
|
|
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css">
|
|
|
|
<link rel="stylesheet" href="https://cdnjs.sgcd.net/lxgw-wenkai-screen-webfont/lxgwwenkaigbscreen.css">
|
|
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css">
|
|
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/a2396837/CDN@latest/css/iconfont.css">
|
|
|
|
|
|
|
|
|
|
<script src="/js/todark.js"></script>
|
|
|
|
<meta name="generator" content="Hexo 6.3.0"></head>
|
|
</html>
|
|
|
|
<div class="nav index" style="height: 60px;">
|
|
<div class="title animated fadeInDown">
|
|
<div class="layui-container">
|
|
<div class="nav-title"><a href="/" title="提剑追梦">提剑追梦</a></div>
|
|
<div class="nav-list">
|
|
<button> <span class=""></span><span style="display: block;"></span><span class=""></span> </button>
|
|
<ul class="layui-nav" lay-filter="">
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/ ">
|
|
<i class=" fab fa-fort-awesome " style="color: rgb(255 107 107);"></i>
|
|
<span class="layui-nav-item-name">首页</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/archives/ ">
|
|
<i class=" fas fa-archive " style="color: rgb(10 189 227);"></i>
|
|
<span class="layui-nav-item-name">归档</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/tags/ ">
|
|
<i class=" fas fa-hashtag " style="color: rgb(254 202 87);"></i>
|
|
<span class="layui-nav-item-name">标签</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/fcircle/ ">
|
|
<i class=" fas fa-heart " style="color: rgb(29 209 161);"></i>
|
|
<span class="layui-nav-item-name">朋友圈</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/links/ ">
|
|
<i class=" fab fa-weixin " style="color: hsl(152deg 73% 45%);"></i>
|
|
<span class="layui-nav-item-name">友链</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/memos/ ">
|
|
<i class=" fas fa-coffee " style="color:#31c7c1;"></i>
|
|
<span class="layui-nav-item-name">说说</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
<li class="layui-nav-item">
|
|
<a href="/about/ ">
|
|
<i class=" fab fa-grav " style="color: rgb(154 106 247);"></i>
|
|
<span class="layui-nav-item-name">关于</span>
|
|
</a>
|
|
</li>
|
|
|
|
|
|
<li class="layui-nav-item" id="btn-toggle-dark">🌙</li>
|
|
|
|
<span class="layui-nav-bar" style="left: 342px; top: 78px; width: 0px; opacity: 0;"></span>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<header class="header">
|
|
|
|
<div class="logo">
|
|
<a href="/"><img src="https://img.imsun.org/avatar.jpg" onerror=this.onerror=null,this.src="/img/loading.gif"></a>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="motto">
|
|
<span>曾梦想仗剑走天涯</span>
|
|
</div>
|
|
|
|
|
|
<div class="social">
|
|
|
|
<a class="social-icon" href="https://github.com/jkjoy" target="_blank" title="Github">
|
|
<i class="iconfont icon-GitHub" aria-hidden="true"></i>
|
|
</a>
|
|
|
|
<a class="social-icon" href="mailto:jkjoy@163.com" target="_blank" title="Email">
|
|
<i class="iconfont icon-email" aria-hidden="true"></i>
|
|
</a>
|
|
|
|
<a class="social-icon" href="/atom.xml" target="_blank" title="rss">
|
|
<i class="iconfont icon-rss" aria-hidden="true"></i>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</header>
|
|
|
|
|
|
<article id="post">
|
|
<div class="post-title">从memos的webhook开始</div>
|
|
|
|
<div class="post-meta">
|
|
|
|
|
|
<div class="post-meta-item date">
|
|
<span title="发表于 2024.06.18"><i class="far fa-calendar-alt"></i> 2024.06.18</span>
|
|
</div>
|
|
<div class="post-meta-item updated">
|
|
<span title="更新于 2024.06.19"><i class="far fa-calendar-check"></i> 2024.06.19</span>
|
|
</div>
|
|
|
|
|
|
<div class="post-meta-item categories">
|
|
|
|
<i class="fas fa-inbox article-meta__icon"></i> <a href="/categories/%E5%88%86%E4%BA%AB/">分享</a>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="post-meta-item wordcount">
|
|
|
|
<i class="fas fa-pencil-alt"></i> <span class="post-count">618 字</span>
|
|
|
|
|
|
<i class="far fa-clock"></i> <span class="post-count">2 分钟</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="content">
|
|
<blockquote><h3>自动摘要</h3>
|
|
|
|
这篇文章介绍了 memos 在 v0.18 版本中加入的 webhook 功能,以及如何利用 webhook 实现对 memos 的更多玩法。作者分享了使用 webhook 自动保存 json 数据、解决跨域问题的方法,并提供了通过 BASH 获取最近 200 条 memos 的脚本以及部署 webhook 镜像的步骤。文章还介绍了如何在宝塔面板中创建网站并配置反向代理,实现 memos 更新时自动更新 memos.json 文件的功能。文章最后给出了一个演示链接。
|
|
</blockquote>
|
|
<div><h2 id="说在前面"><a href="#说在前面" class="headerlink" title="说在前面"></a>说在前面</h2><p>memos的<code>webhook</code>功能从v0.18 版本开始加入.<br><code>webhook</code>也为<code>memos</code>带来了不一样的玩法.</p>
|
|
<p>前段时间从<code>Typecho</code>主题<code>icefox</code>上直接<code>CTRL</code>+<code>C</code>了CSS布局,做了一个基于<code>memos</code>的单页面,类微信朋友圈.</p>
|
|
<p>然后使用<code>webhook</code>自动保存json到本地目录,快速加载. 解决跨域问题</p>
|
|
<h2 id="使用bash获取memos-json"><a href="#使用bash获取memos-json" class="headerlink" title="使用bash获取memos.json"></a>使用bash获取memos.json</h2><p>创建一个<code>memos.sh</code>文件</p>
|
|
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># API地址</span></span><br><span class="line">API_URL=<span class="string">"https://memos.ee/api/v1/memos"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 过滤参数</span></span><br><span class="line">FILTER=<span class="string">"visibilities == ['PUBLIC'] && creator == 'users/1'"</span> </span><br><span class="line">PAGE_SIZE=<span class="string">"200"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Authorization 头部</span></span><br><span class="line">AUTH_HEADER=<span class="string">"Bearer token"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 目标文件</span></span><br><span class="line">OUTPUT_FILE=<span class="string">"/config/memos.json"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用 curl 发送 GET 请求并将结果保存到文件</span></span><br><span class="line">curl -G <span class="string">"<span class="variable">${API_URL}</span>"</span> \</span><br><span class="line"> --data-urlencode <span class="string">"filter=<span class="variable">${FILTER}</span>"</span> \</span><br><span class="line"> --data-urlencode <span class="string">"pageSize=<span class="variable">${PAGE_SIZE}</span>"</span> \</span><br><span class="line"> -H <span class="string">"Authorization: <span class="variable">${AUTH_HEADER}</span>"</span> \</span><br><span class="line"> -H <span class="string">"Accept: application/json"</span> \</span><br><span class="line"> -o <span class="string">"<span class="variable">${OUTPUT_FILE}</span>"</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 检查是否成功</span></span><br><span class="line"><span class="keyword">if</span> [ $? -eq 0 ]; <span class="keyword">then</span></span><br><span class="line"> <span class="built_in">echo</span> <span class="string">"JSON 数据已成功保存到 <span class="variable">${OUTPUT_FILE}</span>"</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line"> <span class="built_in">echo</span> <span class="string">"获取 JSON 数据失败"</span></span><br><span class="line"><span class="keyword">fi</span></span><br></pre></td></tr></table></figure>
|
|
<p>这个脚本用于获取最近200条的memos</p>
|
|
<p>自行更改以上的<code>API_URL</code> <code>token</code> 以及过滤参数</p>
|
|
<h2 id="使用webhook功能"><a href="#使用webhook功能" class="headerlink" title="使用webhook功能"></a>使用webhook功能</h2><h3 id="部署webhook镜像"><a href="#部署webhook镜像" class="headerlink" title="部署webhook镜像"></a>部署webhook镜像</h3><p>此处使用一个<code>webhook</code>的DOCKER镜像</p>
|
|
<p>此Docker镜像是我根据官方dockerfile增加了中文支持编译而成.<br>推荐使用docker-compose部署 编辑<code>docker-compose.yaml</code>内容为</p>
|
|
<figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">services:</span></span><br><span class="line"> <span class="attr">webhook:</span></span><br><span class="line"> <span class="attr">image:</span> <span class="string">jkjoy/webhook</span></span><br><span class="line"> <span class="attr">container_name:</span> <span class="string">webhook</span></span><br><span class="line"> <span class="attr">command:</span> <span class="string">-verbose</span> <span class="string">-hooks=hooks.yml</span> <span class="string">-hotreload</span></span><br><span class="line"> <span class="attr">environment:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">TZ=Asia/Chongqing</span> <span class="comment">#中国时区</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">LANG=C.UTF-8</span> <span class="comment">#中文支持</span></span><br><span class="line"> <span class="attr">volumes:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="string">./:/config:rw</span></span><br><span class="line"> <span class="attr">ports:</span></span><br><span class="line"> <span class="bullet">-</span> <span class="number">9000</span><span class="string">:9000</span></span><br><span class="line"> <span class="attr">restart:</span> <span class="string">always</span></span><br></pre></td></tr></table></figure>
|
|
<p>创建<code>hooks.yml</code>文件并编辑内容为</p>
|
|
<figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">id:</span> <span class="string">memos</span></span><br><span class="line"> <span class="attr">execute-command:</span> <span class="string">"/config/memos.sh"</span></span><br><span class="line"> <span class="attr">command-working-directory:</span> <span class="string">"/"</span></span><br></pre></td></tr></table></figure>
|
|
<p>然后运行</p>
|
|
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose up -d</span><br></pre></td></tr></table></figure>
|
|
<p>即可</p>
|
|
<h3 id="使用Webhook"><a href="#使用Webhook" class="headerlink" title="使用Webhook"></a>使用Webhook</h3><p>hooks.yaml为webhook的配置文件</p>
|
|
<p>其中的execute-command为容器中的可执行脚本目录<br>webhook的访问地址格式为 <code>服务器 ip:端口/hooks/id</code><br>访问<a target="_blank" rel="noopener" href="http://127.0.0.1:9000/hooks/memos">http://127.0.0.1:9000/hooks/memos</a><br>即可触发执行<code>bash /config/memos.sh</code></p>
|
|
<p>在memos的webhook设置中填入<code>http://127.0.0.1:9000/hooks/memos</code>的webhook地址,<br>即可</p>
|
|
<h3 id="以宝塔为例"><a href="#以宝塔为例" class="headerlink" title="以宝塔为例"></a>以宝塔为例</h3><p>创建一个名为 <code>api.domain.com</code>的网站<br>在网站的根目录下创建 <code>docker-compose.yaml</code> <code>hooks.yaml</code> <code>memos.sh</code> 的文件<br>运行</p>
|
|
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">docker compose up -d</span><br></pre></td></tr></table></figure>
|
|
<p>创建一个反向代理<br>使 127.0.0.1:9000 代理到 api.domain.com 的 /webhook/ 目录<br>访问api.domain.com/webhook/hooks/memos<br>此时会在网站根目录下生成<code>memos.json</code><br>访问api.domain.com/memos.json<br>此时在memos的webhook地址中填入<code>api.domain.com/webhook/hooks/memos</code><br>实现在memos更新时自动更新memos.json文件</p>
|
|
<h2 id="演示"><a href="#演示" class="headerlink" title="演示"></a>演示</h2><p><a target="_blank" rel="noopener" href="https://memos.jkjoy.cn/">https://memos.jkjoy.cn</a></p>
|
|
</div>
|
|
|
|
<div class="post-copyright">
|
|
<div class="copyright-item">
|
|
<span> 作者: 浪子</span>
|
|
</div>
|
|
<div class="copyright-item">
|
|
<span> 链接: <a href="https://blog.jkjoy.cn/posts/8bf3d085.html">https://blog.jkjoy.cn/posts/8bf3d085.html</a></span>
|
|
</div>
|
|
<div class="copyright-item">
|
|
<span> 声明: 本博客所有文章除特别声明外,均采用许可协议 <a target="_blank" rel="noopener" href="http://creativecommons.org/licenses/by-nc/4.0/">CC-BY-NC-4.0</a> 转载请注明出处!</span>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="share-reward">
|
|
<div class="share">
|
|
|
|
<div class="social-share" data-sites="wechat,weibo,qq"></div>
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/social-share.js/dist/css/share.min.css">
|
|
<script src="https://cdn.jsdelivr.net/npm/social-share.js/dist/js/social-share.min.js"></script>
|
|
|
|
|
|
</div>
|
|
<div class="reward">
|
|
|
|
<div style="padding: 10px 0; margin-left: 20px; width: 90%; text-align: center;">
|
|
<div class="reward-content">
|
|
<ul id="donateBox" class="list pos-a">
|
|
|
|
<li id="PayPal"><a href="https://paypal.me/jkjoy" target="_blank" title="贝宝">贝宝</a></li>
|
|
|
|
|
|
<li id="AliPay" title="支付宝"><img data-img="https://blogcdn.loliko.cn/ali.png" onerror=this.onerror=null,this.src="/img/loading.gif"></img></li>
|
|
|
|
|
|
<li id="WeChat" title="微信"><img date-img="https://blogcdn.loliko.cn/wx.png" onerror=this.onerror=null,this.src="/img/loading.gif"></img></li>
|
|
|
|
</ul>
|
|
<div id="QRBox" class="pos-f left-100">
|
|
<div id="MainBox"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<div class="post_tags">
|
|
|
|
<i class="fas fa-tag"></i> <a href="/tags/memos/" class="tag">memos</a>
|
|
|
|
<i class="fas fa-tag"></i> <a href="/tags/webhook/" class="tag">webhook</a>
|
|
|
|
</div>
|
|
<div class="post-nav">
|
|
|
|
|
|
<div class="post-nav-next post-nav-item">
|
|
<a href="/posts/b5a1f33a.html" >EasyPanel:一款使用Docker部署的VPS面板<i class="fa fa-chevron-right"></i></a>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3><i class="far fa-comment"></i> 评论</h3>
|
|
<div id="tcomment"></div>
|
|
<script src="/js/twikoo.all.min.js"></script>
|
|
<script>
|
|
twikoo.init({
|
|
envId: 'https://t.jkjoy.cn',
|
|
el: '#tcomment',
|
|
})
|
|
</script>
|
|
|
|
|
|
</article>
|
|
|
|
|
|
<a id="gotop" href="javascript:" title="返回顶部"><i class="fa fa-arrow-up"></i></a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="bottom-outer">
|
|
<div id="bottom-inner">
|
|
© 2020 <i class="fa fa-heart" id="heart"></i> 浪子
|
|
<br>
|
|
Powered by
|
|
<a target="_blank" rel="noopener" href="http://hexo.io">hexo</a> | Theme is <a target="_blank" rel="noopener" href="https://github.com/a2396837/hexo-theme-blank/">blank</a>
|
|
|
|
<div class="icp-info">
|
|
|
|
<a href="https://beian.miit.gov.cn/" target="_blank"> 鄂ICP备16022970号-16</a>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/layui-src@2.5.5/dist/layui.min.js"></script>
|
|
|
|
|
|
|
|
|
|
<script src="/js/script.js"></script>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
window.lazyLoadOptions = {
|
|
elements_selector: 'img',
|
|
threshold: 0
|
|
}
|
|
</script>
|
|
<script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js"></script>
|
|
|
|
|
|
|
|
<script>
|
|
var images = $('img').not('.nav-logo img').not('.card img').not($('a>img')).not('.reward-content img')
|
|
images.each(function (i, o) {
|
|
var lazyloadSrc = $(o).attr('data-src') ? $(o).attr('data-src') : $(o).attr('src')
|
|
$(o).wrap(`<a href="${lazyloadSrc}" data-fancybox="group" data-caption="${$(o).attr('alt')}" class="fancybox"></a>`)
|
|
})
|
|
</script>
|
|
<script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js"></script>
|
|
<script>
|
|
$().fancybox({
|
|
selector: '[data-fancybox]',
|
|
loop: true,
|
|
transitionEffect: 'slide',
|
|
protect: true,
|
|
buttons: ['slideShow', 'fullScreen', 'thumbs', 'close']
|
|
})
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
jQuery(document).ready(function () {
|
|
var QRBox = $('#QRBox');
|
|
var MainBox = $('#MainBox');
|
|
var AliPayQR = 'https://blogcdn.loliko.cn/ali.png';
|
|
var WeChanQR = 'https://blogcdn.loliko.cn/wx.png';
|
|
|
|
function showQR(QR) {
|
|
if (QR) {
|
|
MainBox.css('background-image', 'url(' + QR + ')');
|
|
}
|
|
$('#donateBox').addClass('blur');
|
|
QRBox.fadeIn(300, function (argument) {
|
|
MainBox.addClass('showQR');
|
|
});
|
|
}
|
|
|
|
$('#donateBox>li').click(function (event) {
|
|
var thisID = $(this).attr('id');
|
|
if (thisID === 'AliPay') {
|
|
showQR(AliPayQR);
|
|
} else if (thisID === 'WeChat') {
|
|
showQR(WeChanQR);
|
|
}
|
|
});
|
|
|
|
MainBox.click(function (event) {
|
|
MainBox.removeClass('showQR').addClass('hideQR');
|
|
setTimeout(function (a) {
|
|
QRBox.fadeOut(300, function (argument) {
|
|
MainBox.removeClass('hideQR');
|
|
});
|
|
$('#DonateText,#donateBox,#github').removeClass('blur');
|
|
}, 600);
|
|
|
|
});
|
|
});
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/instant.page/instantpage.min.js" type="module" defer></script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.4/dist/clipboard.min.js"></script>
|
|
<script>
|
|
!function (e, t, a) {
|
|
var initCopyCode = function(){
|
|
var copyHtml = '';
|
|
copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
|
|
copyHtml += ' <i class="fa fa-clipboard"></i><span>复制</span>';
|
|
copyHtml += '</button>';
|
|
$(".highlight .code pre").before(copyHtml);
|
|
new ClipboardJS('.btn-copy', {
|
|
target: function(trigger) {
|
|
return trigger.nextElementSibling;
|
|
}
|
|
});
|
|
}
|
|
initCopyCode();
|
|
}(window, document);
|
|
</script>
|
|
|
|
|
|
<script>
|
|
var btntop = $('#gotop');
|
|
btntop.on('click', function (e) {
|
|
e.preventDefault();
|
|
$('html, body').animate({ scrollTop: 0 }, '300');
|
|
});
|
|
|
|
var $table = $('.content table').not($('figure.highlight > table'))
|
|
$table.each(function () {
|
|
$(this).wrap('<div class="table-wrap"></div>')
|
|
})
|
|
</script>
|
|
|
|
|
|
|
|
</html> |