diff --git a/404.html b/404.html
new file mode 100644
index 000000000..2c1b86ff8
--- /dev/null
+++ b/404.html
@@ -0,0 +1,1883 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 404 Not Found - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 404
+很抱歉,您访问的页面不存在
+可能是输入地址有误或该地址已被删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CNAME b/CNAME
new file mode 100644
index 000000000..13e19e06e
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+volantis.js.org
\ No newline at end of file
diff --git a/advanced-settings/index.html b/advanced-settings/index.html
new file mode 100644
index 000000000..7a85da146
--- /dev/null
+++ b/advanced-settings/index.html
@@ -0,0 +1,2317 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 进阶设定 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置子模块 将主题添加为子模块
+
+
git submodule add https://github.com/volantis-x/hexo-theme-volantis.git themes/volantis
+
+
+
+多人协同 默认的作者信息在主题配置文件中设置:
+blog/themes/volantis/_config.yml article: ... body: ... meta_library: author: avatar: name: 请设置文章作者 url: /
+
+Volantis 支持多作者,其他作者信息需要写在数据文件中,例如:
+blog/source/_data/author.yml Jon: name: Jon Snow avatar: https://cn.bing.com/th?id=AMMS_fc8f99fd41ebd737a71c4e13806db9a0&w=110&h=110&c=7&rs=1&qlt=80&pcl=f9f9f9&cdv=1&dpr=2&pid=16.1 url: https://gameofthrones.fandom.com/wiki/Jon_Snow Dany: name: Daenerys Targaryen avatar: https://tse1-mm.cn.bing.net/th?id=OIP.Yax4wLzIFbcBVUa_RsKywQHaLH&w=80&h=80&c=8&rs=1&qlt=90&dpr=2&pid=3.1&rm=2 url: https://gameofthrones.fandom.com/wiki/Daenerys_Targaryen
+
+在文章的 front-matter 中新增 author
即可:
+--- title: Jon Snow | Game of Thrones Wiki | Fandom author: Jon ---
+
+为网站提速 加载速度
+运行速度
+访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。
+
+
+
+
+优化 SEO blog/_config.volantis.yml seo: use_tags_as_keywords: true use_excerpt_as_description: true robots: home_first_page: index,follow home_other_pages: noindex,follow archive: noindex,follow category: noindex,follow tag: noindex,follow
+
+在 front-matter 中,可以设置 keywords
、description
、robots
和 seo_title
。其中 seo_title
仅仅用作网页标题,优先级高于 title
。
+
+文章内部不要使用 H1 标题。
+
+通过死链检测工具检查并删除无法访问的链接。
+
+安装 SEO 优化插件:
+
+
+
+页面不要堆砌关键词,不要频繁更改路径。
+
+
+使用 CDN 对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。
+开启方法 blog/_config.yml
+
+如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。
+
+自定义 CDN 如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。
+安装「相关文章」插件
+安装插件
+npm i -S hexo-related-popular-posts
+
+插件的自定义配置方法:
+
+
+
+
+如果您使用了头图,可以在站点配置文件中添加以下设置来让相关文章显示正确的文章头图:
+blog/_config.yml popularPosts: eyeCatchImageAttributeName: headimg
+
+注意
需要升级到 5.0.1 及以上版本才可以支持自定义头图,详见 #29
+
+分析与统计 默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。
+字数和阅读时长
+安装以下插件:npm i --save hexo-wordcount
+修改配置文件,将 wordcount
插件打开blog/_config.volantis.yml plugins: ... wordcount: enable:
+然后修改配置文件,将 wordcount
写入需要显示的 meta 位置:blog/_config.volantis.yml article: ... body: top_meta: [... , wordcount , ... ] ... bottom_meta: [... , wordcount , ... ]
+
+
+
+
+CNZZ 统计 请参考 ZYMIN 的这篇教程:
+
+
+更多进阶玩法 详见 @TRHX 的这篇博客:
+
+
+内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2013/12/index.html b/archives/2013/12/index.html
new file mode 100644
index 000000000..932e478dc
--- /dev/null
+++ b/archives/2013/12/index.html
@@ -0,0 +1,2440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2013/12 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a image test post.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post doesn't have a title. Make sure it's accessible.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The following contents should be invisible in home/archive page.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a video test post.
+
Youtube
+
VIDEO
+
+
Vimeo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post contains 4 photos:
+
+Widescreen wallpaper
+Portrait photo
+Dual widescreen wallpaper
+Small photo
+
+
All photos should be displayed properly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is used for testing tag plugins. See docs for more info.
+
Block Quote Normal blockquote
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+
Quote from a book Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
+
+
+
NEW: DevDocs now comes with syntax highlighting. http://devdocs.io
+
+
+
Quote from an article on the web Every interaction is both precious and an opportunity to delight.
+Seth Godin `http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html` Welcome to Island Marketing
+
+
Code Block Normal code block
+
+
With caption Array.map array.map(callback[, thisArg])
+
+
With caption and URL .compact Underscore.js .compact([0, 1, false, 2, ‘’, 3]); => [1, 2, 3]
+
+
With marked lines Line 1,7-8,10 should be marked with different color.
+
const http = require ('http' );const hostname = '127.0.0.1' ;const port = 1337 ;http.createServer((req, res ) => { res.writeHead(200 , { 'Content-Type' : 'text/plain' }); res.end('Hello World\n' ); }).listen(port, hostname, () => { console .log(`Server running at http://${hostname} :${port} /` ); });
+
+
Note: Theme's style should support .highlight.line.marked
(recommend to use the selection or current line color).
+
Gist
+
+
jsFiddle
+
+
Pullquote Left Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus molestie arcu, et fringilla mauris placerat ac. Nullam luctus bibendum risus. Ut cursus sed ipsum feugiat egestas. Suspendisse elementum, velit eu consequat consequat, augue lorem dapibus libero, eget pulvinar dolor est sit amet nulla. Suspendisse a porta tortor, et posuere mi. Pellentesque ultricies, mi quis volutpat malesuada, erat felis vulputate nisl, ac congue ante tortor ut ante. Proin aliquam sem vel mauris tincidunt, eget scelerisque tortor euismod. Nulla tincidunt enim nec commodo dictum. Mauris id sapien et orci gravida luctus id ut dui. In vel vulputate odio. Duis vel turpis molestie, scelerisque enim eu, lobortis eros. Cras at ipsum gravida, sagittis ante vel, viverra tellus. Nunc mauris turpis, elementum ullamcorper nisl pretium, ultrices cursus justo. Mauris porttitor commodo eros, ac ornare orci interdum in. Cras fermentum cursus leo sed mattis. In dignissim lorem sem, sit amet elementum mauris venenatis ac.
+
Right Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ligula justo, lobortis sit amet semper vel, dignissim sit amet libero. Praesent ac tempus ligula. Maecenas at gravida odio. Etiam tristique volutpat lacus eu faucibus. Donec non tempus arcu. Phasellus adipiscing, mauris nec mollis egestas, ipsum nunc auctor velit, et rhoncus lorem ipsum at ante. Praesent et sem in velit volutpat auctor. Duis vel mauris nulla. Maecenas mattis interdum ante, quis sagittis nibh cursus et. Nulla facilisi. Morbi convallis gravida tortor, ut fermentum enim gravida et. Nunc vel dictum nisl, non ultrices libero. Proin vestibulum felis eget orci consectetur lobortis. Vestibulum augue nulla, iaculis vitae augue vehicula, dignissim ultrices libero. Sed imperdiet urna et quam ultrices tincidunt nec ac magna. Etiam vel pharetra elit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a link post without a title. The title should be the link with or without protocol. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a Japanese test post.
+
私は昨日ついにその助力家というのの上よりするたなけれ。
+
最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。
+
がたを知っないはずも同時に九月をいよいよたありた。
+
もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。
+
+それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。
+
+
この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。
+
From すぐ使えるダミーテキスト - 日本語 Lorem ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a Chinese test post.
+
善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。
+
以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一?
+
就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。
+
國新故。
+
+工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不?
+
+
From 亂數假文產生器 - Chinese Lorem Ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post has a long title. Make sure the title displayed right.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 / 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2013/12/page/2/index.html b/archives/2013/12/page/2/index.html
new file mode 100644
index 000000000..ca728610b
--- /dev/null
+++ b/archives/2013/12/page/2/index.html
@@ -0,0 +1,2114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2013/12 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a link post. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The purpose of this post is to help you make sure all of HTML elements can display properly. If you use CSS reset, don't forget to redefine the style by yourself.
+
+
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6
+
Paragraph Lorem ipsum dolor sit amet, test link consectetur adipiscing elit. Strong text pellentesque ligula commodo viverra vehicula. Italic text at ullamcorper enim. Morbi a euismod nibh. Underline text non elit nisl. Deleted text tristique, sem id condimentum tempus, metus lectus venenatis mauris, sit amet semper lorem felis a eros. Fusce egestas nibh at sagittis auctor. Sed ultricies ac arcu quis molestie. Donec dapibus nunc in nibh egestas, vitae volutpat sem iaculis. Curabitur sem tellus, elementum nec quam id, fermentum laoreet mi. Ut mollis ullamcorper turpis, vitae facilisis velit ultricies sit amet. Etiam laoreet dui odio, id tempus justo tincidunt id. Phasellus scelerisque nunc sed nunc ultricies accumsan.
+
Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed erat diam
, blandit eget felis aliquam, rhoncus varius urna. Donec tellus sapien, sodales eget ante vitae, feugiat ullamcorper urna. Praesent auctor dui vitae dapibus eleifend. Proin viverra mollis neque, ut ullamcorper elit posuere eget.
+
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+
Maecenas ornare arcu at mi suscipit, non molestie tortor ultrices. Aenean convallis, diam et congue ultricies, erat magna tincidunt orci, pulvinar posuere mi sapien ac magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent vitae placerat mauris. Nullam laoreet ante posuere tortor blandit auctor. Sed id ligula volutpat leo consequat placerat. Mauris fermentum dolor sed augue malesuada sollicitudin. Vivamus ultrices nunc felis, quis viverra orci eleifend ut. Donec et quam id urna cursus posuere. Donec elementum scelerisque laoreet.
+
List Types Definition List (dl) Definition List Title This is a definition list division.
+
+
Ordered List (ol)
+List Item 1
+List Item 2
+List Item 3
+
+
Unordered List (ul)
+List Item 1
+List Item 2
+List Item 3
+
+
Checkbox List (ul)
+
Table
+
+
+Table Header 1
+Table Header 2
+Table Header 3
+
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+
Misc Stuff - abbr, acronym, sub, sup, kbd, etc. Lorem superscript dolor subscript amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. cite . Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. NBA Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. AVE . Use Crtl + C to stop.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to Hexo! This is your very first post. Check documentation to learn how to use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2 / 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2013/index.html b/archives/2013/index.html
new file mode 100644
index 000000000..524bdac5b
--- /dev/null
+++ b/archives/2013/index.html
@@ -0,0 +1,2440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2013 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a image test post.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post doesn't have a title. Make sure it's accessible.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The following contents should be invisible in home/archive page.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a video test post.
+
Youtube
+
VIDEO
+
+
Vimeo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post contains 4 photos:
+
+Widescreen wallpaper
+Portrait photo
+Dual widescreen wallpaper
+Small photo
+
+
All photos should be displayed properly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is used for testing tag plugins. See docs for more info.
+
Block Quote Normal blockquote
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+
Quote from a book Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
+
+
+
NEW: DevDocs now comes with syntax highlighting. http://devdocs.io
+
+
+
Quote from an article on the web Every interaction is both precious and an opportunity to delight.
+Seth Godin `http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html` Welcome to Island Marketing
+
+
Code Block Normal code block
+
+
With caption Array.map array.map(callback[, thisArg])
+
+
With caption and URL .compact Underscore.js .compact([0, 1, false, 2, ‘’, 3]); => [1, 2, 3]
+
+
With marked lines Line 1,7-8,10 should be marked with different color.
+
const http = require ('http' );const hostname = '127.0.0.1' ;const port = 1337 ;http.createServer((req, res ) => { res.writeHead(200 , { 'Content-Type' : 'text/plain' }); res.end('Hello World\n' ); }).listen(port, hostname, () => { console .log(`Server running at http://${hostname} :${port} /` ); });
+
+
Note: Theme's style should support .highlight.line.marked
(recommend to use the selection or current line color).
+
Gist
+
+
jsFiddle
+
+
Pullquote Left Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus molestie arcu, et fringilla mauris placerat ac. Nullam luctus bibendum risus. Ut cursus sed ipsum feugiat egestas. Suspendisse elementum, velit eu consequat consequat, augue lorem dapibus libero, eget pulvinar dolor est sit amet nulla. Suspendisse a porta tortor, et posuere mi. Pellentesque ultricies, mi quis volutpat malesuada, erat felis vulputate nisl, ac congue ante tortor ut ante. Proin aliquam sem vel mauris tincidunt, eget scelerisque tortor euismod. Nulla tincidunt enim nec commodo dictum. Mauris id sapien et orci gravida luctus id ut dui. In vel vulputate odio. Duis vel turpis molestie, scelerisque enim eu, lobortis eros. Cras at ipsum gravida, sagittis ante vel, viverra tellus. Nunc mauris turpis, elementum ullamcorper nisl pretium, ultrices cursus justo. Mauris porttitor commodo eros, ac ornare orci interdum in. Cras fermentum cursus leo sed mattis. In dignissim lorem sem, sit amet elementum mauris venenatis ac.
+
Right Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ligula justo, lobortis sit amet semper vel, dignissim sit amet libero. Praesent ac tempus ligula. Maecenas at gravida odio. Etiam tristique volutpat lacus eu faucibus. Donec non tempus arcu. Phasellus adipiscing, mauris nec mollis egestas, ipsum nunc auctor velit, et rhoncus lorem ipsum at ante. Praesent et sem in velit volutpat auctor. Duis vel mauris nulla. Maecenas mattis interdum ante, quis sagittis nibh cursus et. Nulla facilisi. Morbi convallis gravida tortor, ut fermentum enim gravida et. Nunc vel dictum nisl, non ultrices libero. Proin vestibulum felis eget orci consectetur lobortis. Vestibulum augue nulla, iaculis vitae augue vehicula, dignissim ultrices libero. Sed imperdiet urna et quam ultrices tincidunt nec ac magna. Etiam vel pharetra elit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a link post without a title. The title should be the link with or without protocol. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a Japanese test post.
+
私は昨日ついにその助力家というのの上よりするたなけれ。
+
最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。
+
がたを知っないはずも同時に九月をいよいよたありた。
+
もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。
+
+それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。
+
+
この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。
+
From すぐ使えるダミーテキスト - 日本語 Lorem ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a Chinese test post.
+
善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。
+
以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一?
+
就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。
+
國新故。
+
+工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不?
+
+
From 亂數假文產生器 - Chinese Lorem Ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post has a long title. Make sure the title displayed right.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 / 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2013/page/2/index.html b/archives/2013/page/2/index.html
new file mode 100644
index 000000000..38a9ecc8a
--- /dev/null
+++ b/archives/2013/page/2/index.html
@@ -0,0 +1,2114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2013 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a link post. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The purpose of this post is to help you make sure all of HTML elements can display properly. If you use CSS reset, don't forget to redefine the style by yourself.
+
+
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6
+
Paragraph Lorem ipsum dolor sit amet, test link consectetur adipiscing elit. Strong text pellentesque ligula commodo viverra vehicula. Italic text at ullamcorper enim. Morbi a euismod nibh. Underline text non elit nisl. Deleted text tristique, sem id condimentum tempus, metus lectus venenatis mauris, sit amet semper lorem felis a eros. Fusce egestas nibh at sagittis auctor. Sed ultricies ac arcu quis molestie. Donec dapibus nunc in nibh egestas, vitae volutpat sem iaculis. Curabitur sem tellus, elementum nec quam id, fermentum laoreet mi. Ut mollis ullamcorper turpis, vitae facilisis velit ultricies sit amet. Etiam laoreet dui odio, id tempus justo tincidunt id. Phasellus scelerisque nunc sed nunc ultricies accumsan.
+
Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed erat diam
, blandit eget felis aliquam, rhoncus varius urna. Donec tellus sapien, sodales eget ante vitae, feugiat ullamcorper urna. Praesent auctor dui vitae dapibus eleifend. Proin viverra mollis neque, ut ullamcorper elit posuere eget.
+
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+
Maecenas ornare arcu at mi suscipit, non molestie tortor ultrices. Aenean convallis, diam et congue ultricies, erat magna tincidunt orci, pulvinar posuere mi sapien ac magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent vitae placerat mauris. Nullam laoreet ante posuere tortor blandit auctor. Sed id ligula volutpat leo consequat placerat. Mauris fermentum dolor sed augue malesuada sollicitudin. Vivamus ultrices nunc felis, quis viverra orci eleifend ut. Donec et quam id urna cursus posuere. Donec elementum scelerisque laoreet.
+
List Types Definition List (dl) Definition List Title This is a definition list division.
+
+
Ordered List (ol)
+List Item 1
+List Item 2
+List Item 3
+
+
Unordered List (ul)
+List Item 1
+List Item 2
+List Item 3
+
+
Checkbox List (ul)
+
Table
+
+
+Table Header 1
+Table Header 2
+Table Header 3
+
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+
Misc Stuff - abbr, acronym, sub, sup, kbd, etc. Lorem superscript dolor subscript amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. cite . Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. NBA Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. AVE . Use Crtl + C to stop.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to Hexo! This is your very first post. Check documentation to learn how to use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2 / 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2017/10/index.html b/archives/2017/10/index.html
new file mode 100644
index 000000000..4af360b77
--- /dev/null
+++ b/archives/2017/10/index.html
@@ -0,0 +1,1970 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2017/10 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Volantis
+A Wonderful Theme for Hexo
+
+
+
+
Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+
开始使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2017/index.html b/archives/2017/index.html
new file mode 100644
index 000000000..60a7760d8
--- /dev/null
+++ b/archives/2017/index.html
@@ -0,0 +1,1970 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2017 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Volantis
+A Wonderful Theme for Hexo
+
+
+
+
Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+
开始使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2018/07/index.html b/archives/2018/07/index.html
new file mode 100644
index 000000000..825011c45
--- /dev/null
+++ b/archives/2018/07/index.html
@@ -0,0 +1,1976 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2018/7 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2018/index.html b/archives/2018/index.html
new file mode 100644
index 000000000..1c0c2dd21
--- /dev/null
+++ b/archives/2018/index.html
@@ -0,0 +1,1976 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2018 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2019/07/index.html b/archives/2019/07/index.html
new file mode 100644
index 000000000..c89412190
--- /dev/null
+++ b/archives/2019/07/index.html
@@ -0,0 +1,1970 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2019/7 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2019/index.html b/archives/2019/index.html
new file mode 100644
index 000000000..29fcbb58b
--- /dev/null
+++ b/archives/2019/index.html
@@ -0,0 +1,1970 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2019 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/02/index.html b/archives/2020/02/index.html
new file mode 100644
index 000000000..7c25ea306
--- /dev/null
+++ b/archives/2020/02/index.html
@@ -0,0 +1,2242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/2 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。
+
+不能使用封面
+mathjax
+有折叠框的页面,折叠框打开之后目录高亮位置不对应
+很多未知问题
+
+
+感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。
+
现在使用的文档页面源码是: volantis-docs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
使用 GitHub Issue 由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
+
遇到问题怎么办
+确定已经查阅文档找不到相关内容。
+前往「常见问题」页面,查看是否有解决方案。
+访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
+如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主版本号.子版本号.修订版本号
+
+
主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
+
+主版本号 : 较大改动、框架调整或重构
+子版本号 : 较小或局部的功能性更新
+修订版本号 : 修复BUG或无关紧要的细节调整
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
+
如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/03/index.html b/archives/2020/03/index.html
new file mode 100644
index 000000000..4df47ee26
--- /dev/null
+++ b/archives/2020/03/index.html
@@ -0,0 +1,2083 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/3 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:
+
+卸载 less
+npm uninstall hexo-renderer-less --save
+
+安装 stylus
+npm install hexo-renderer-stylus --save
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)
+
相关 Issue: #164
+
结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。
+
+
markdwon
解析插件为 hexo-renderer-marked
时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false
都可以避免 deploy 报错。 插件:hexo-renderer-marked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/04/index.html b/archives/2020/04/index.html
new file mode 100644
index 000000000..010cba7cc
--- /dev/null
+++ b/archives/2020/04/index.html
@@ -0,0 +1,1977 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/4 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。
+
+计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。
+当主题稳定后会提供英文文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/05/index.html b/archives/2020/05/index.html
new file mode 100644
index 000000000..e94aeca83
--- /dev/null
+++ b/archives/2020/05/index.html
@@ -0,0 +1,1973 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/5 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/07/index.html b/archives/2020/07/index.html
new file mode 100644
index 000000000..9ab41fa65
--- /dev/null
+++ b/archives/2020/07/index.html
@@ -0,0 +1,1973 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/7 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/08/index.html b/archives/2020/08/index.html
new file mode 100644
index 000000000..6b4bc6672
--- /dev/null
+++ b/archives/2020/08/index.html
@@ -0,0 +1,2136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/8 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于发布 issue 的成本远远低于发布一次博客更新(即便是使用了持续集成),可以用 issue 来简化每个独立博客都必备的友链系统,也可以通过 issue 来快速发布动态资讯,弥补静态博客必须更新静态文件才能更新内容的缺点。此功能已经集成到了主题中,使用非常方便。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
给博客加上最新评论栏目。以 Volantis 主题为例,给侧边栏加上最新评论功能,实现整站调用。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
很多网站首页都会有图片轮播效果,给网站的首页加上图片轮播的效果,可以很好的起到广告的作用也可以起到推荐优秀内容的作用。来吧,下面是给 Volantis 主题加上首页图片轮播的效果。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/09/index.html b/archives/2020/09/index.html
new file mode 100644
index 000000000..7df506840
--- /dev/null
+++ b/archives/2020/09/index.html
@@ -0,0 +1,2032 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020/9 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
对官方文档标签文档的一个补充,以volantis主题标签调用为例,展示不同用法下的标签示例。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/index.html b/archives/2020/index.html
new file mode 100644
index 000000000..1662a0c6d
--- /dev/null
+++ b/archives/2020/index.html
@@ -0,0 +1,2469 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
对官方文档标签文档的一个补充,以volantis主题标签调用为例,展示不同用法下的标签示例。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于发布 issue 的成本远远低于发布一次博客更新(即便是使用了持续集成),可以用 issue 来简化每个独立博客都必备的友链系统,也可以通过 issue 来快速发布动态资讯,弥补静态博客必须更新静态文件才能更新内容的缺点。此功能已经集成到了主题中,使用非常方便。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
给博客加上最新评论栏目。以 Volantis 主题为例,给侧边栏加上最新评论功能,实现整站调用。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
很多网站首页都会有图片轮播效果,给网站的首页加上图片轮播的效果,可以很好的起到广告的作用也可以起到推荐优秀内容的作用。来吧,下面是给 Volantis 主题加上首页图片轮播的效果。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。
+
+计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。
+当主题稳定后会提供英文文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:
+
+卸载 less
+npm uninstall hexo-renderer-less --save
+
+安装 stylus
+npm install hexo-renderer-stylus --save
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 / 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/2020/page/2/index.html b/archives/2020/page/2/index.html
new file mode 100644
index 000000000..949ec7917
--- /dev/null
+++ b/archives/2020/page/2/index.html
@@ -0,0 +1,2337 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档:2020 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)
+
相关 Issue: #164
+
结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。
+
+
markdwon
解析插件为 hexo-renderer-marked
时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false
都可以避免 deploy 报错。 插件:hexo-renderer-marked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。
+
+不能使用封面
+mathjax
+有折叠框的页面,折叠框打开之后目录高亮位置不对应
+很多未知问题
+
+
+感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。
+
现在使用的文档页面源码是: volantis-docs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
使用 GitHub Issue 由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
+
遇到问题怎么办
+确定已经查阅文档找不到相关内容。
+前往「常见问题」页面,查看是否有解决方案。
+访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
+如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主版本号.子版本号.修订版本号
+
+
主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
+
+主版本号 : 较大改动、框架调整或重构
+子版本号 : 较小或局部的功能性更新
+修订版本号 : 修复BUG或无关紧要的细节调整
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
+
如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2 / 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/index.html b/archives/index.html
new file mode 100644
index 000000000..b72d993c8
--- /dev/null
+++ b/archives/index.html
@@ -0,0 +1,2479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2020
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2019
+
+
+
+
+
+
+
+
+ 2018
+
+
+
+
+
+
+
+
+ 2017
+
+
+
+
+
+
+
+
+ 2013
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/page/2/index.html b/archives/page/2/index.html
new file mode 100644
index 000000000..b72d993c8
--- /dev/null
+++ b/archives/page/2/index.html
@@ -0,0 +1,2479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2020
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2019
+
+
+
+
+
+
+
+
+ 2018
+
+
+
+
+
+
+
+
+ 2017
+
+
+
+
+
+
+
+
+ 2013
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/page/3/index.html b/archives/page/3/index.html
new file mode 100644
index 000000000..b72d993c8
--- /dev/null
+++ b/archives/page/3/index.html
@@ -0,0 +1,2479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2020
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2019
+
+
+
+
+
+
+
+
+ 2018
+
+
+
+
+
+
+
+
+ 2017
+
+
+
+
+
+
+
+
+ 2013
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/archives/page/4/index.html b/archives/page/4/index.html
new file mode 100644
index 000000000..b72d993c8
--- /dev/null
+++ b/archives/page/4/index.html
@@ -0,0 +1,2479 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 归档 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2020
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2019
+
+
+
+
+
+
+
+
+ 2018
+
+
+
+
+
+
+
+
+ 2017
+
+
+
+
+
+
+
+
+ 2013
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/atom.xml b/atom.xml
new file mode 100644
index 000000000..77de9b43a
--- /dev/null
+++ b/atom.xml
@@ -0,0 +1,471 @@
+
+
+ Volantis
+
+
+
+
+
+ 2020-09-23T16:00:00.000Z
+ https://volantis.js.org/
+
+
+ Volantis Team
+
+
+
+ Hexo
+
+
+ Hexo 标签函数 list_tags 用法详解
+
+ https://volantis.js.org/blogs/2020-09-24-list-tags/
+ 2020-09-23T16:00:00.000Z
+ 2020-09-23T16:00:00.000Z
+
+
+
+ 对官方文档标签文档的一个补充,以volantis主题标签调用为例,展示不同用法下的标签示例。
+
+
+
+
+
+
+
+
+
+
+ 如何给博客添加弹窗通知
+
+ https://volantis.js.org/blogs/2020-09-03-message-prompt/
+ 2020-09-02T16:00:00.000Z
+ 2020-09-03T16:00:00.000Z
+
+
+
+
+
+
+
+
+
+
+
+
+ 博客访问速度提升:最佳线路分流
+
+ https://volantis.js.org/blogs/2020-08-31-hexospeed/
+ 2020-08-30T16:00:00.000Z
+ 2020-08-30T16:00:00.000Z
+
+
+
+
+
+
+
+
+
+
+
+
+ 静态博客使用 Issues API 发布动态、友链、书签
+
+ https://volantis.js.org/blogs/2020-08-28-issue-api/
+ 2020-08-27T16:00:00.000Z
+ 2020-08-27T16:00:00.000Z
+
+
+
+ 由于发布 issue 的成本远远低于发布一次博客更新(即便是使用了持续集成),可以用 issue 来简化每个独立博客都必备的友链系统,也可以通过 issue 来快速发布动态资讯,弥补静态博客必须更新静态文件才能更新内容的缺点。此功能已经集成到了主题中,使用非常方便。
+
+
+
+
+
+
+
+
+
+
+ 给 Volantis 主题调用 Valine 最新评论
+
+ https://volantis.js.org/blogs/2020-09-03-latest-comments/
+ 2020-08-27T16:00:00.000Z
+ 2020-09-02T16:00:00.000Z
+
+
+
+ 给博客加上最新评论栏目。以 Volantis 主题为例,给侧边栏加上最新评论功能,实现整站调用。
+
+
+
+
+
+
+
+
+
+
+ 给 Hexo Volantis 主题添加图片轮播功能
+
+ https://volantis.js.org/blogs/2020-08-21-main-banner/
+ 2020-08-20T16:00:00.000Z
+ 2020-08-21T16:00:00.000Z
+
+
+
+ 很多网站首页都会有图片轮播效果,给网站的首页加上图片轮播的效果,可以很好的起到广告的作用也可以起到推荐优秀内容的作用。来吧,下面是给 Volantis 主题加上首页图片轮播的效果。
+
+
+
+
+
+
+
+
+
+
+ 如何快速优雅地删除 Valine 的垃圾评论
+
+ https://volantis.js.org/blogs/2020-07-03-valine/
+ 2020-07-02T16:00:00.000Z
+ 2020-09-04T02:05:18.449Z
+
+ Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。操作演示 Your browser does not support the video tag.
App 只支持数据存储于 LeanCloud 的评论系统。
App 登录前需要配置 AppID 和 AppKey,由于字符比较长,输入不方便,所以支持 URL Scheme 配置。将 URL 生成一个二维码,然后用手机扫码就可以打开 App 并自动配置好。
格式为:
valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目
也可以把管理员用户的账号和密码配置上,扫码直接登录,但是注意不要泄露出去:
valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目&user=me@xaoxuu.com&psw=q
注意:这个管理员用户并不是 LeanCloud 的账号,而是当前 Valine 数据库中的 _User
表中的一个用户,可以在 App 中注册,然后在 LeanCloud 上把注册的用户设置为管理员。
设置管理员的方法:在 _Role
表中新建一个 admin
角色,然后在 admin
角色的 users
列中点击 Relations
把自己刚注册的用户添加进去,这个用户就有了修改和删除评论数据的权限。
App 测试版地址 ]]>
+
+
+
+ <p>Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。</p>
+
+
+
+
+
+
+
+
+
+
+ Volantis 主题部署 Pjax
+
+ https://volantis.js.org/blogs/2020-05-17-pjax/
+ 2020-05-16T16:00:00.000Z
+ 2020-08-06T16:00:00.000Z
+
+
+
+ 本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~
+
+
+
+
+
+
+
+
+
+
+ 关于主题与文档的更新
+
+ https://volantis.js.org/news/2020-04-04/
+ 2020-04-03T16:00:00.000Z
+ 2020-08-28T11:26:34.871Z
+
+ 由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。 当主题稳定后会提供英文文档。 ]]>
+
+
+
+ <p>由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。</p>
+<ul>
+<li>计划 <code>2.x</code> 的最后一个版本的文档会保留至 <code>5.0</code> 发布时,即最终会同时维护3个大版本的文档。</li>
+<li>当主题稳定后会提供英文文档。</li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」正式版发布
+
+ https://volantis.js.org/news/2020-03-10-2.0/
+ 2020-03-09T16:00:00.000Z
+ 2020-08-28T11:26:32.295Z
+
+ 本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:卸载 less
npm uninstall hexo-renderer-less --save
安装 stylus
npm install hexo-renderer-stylus --save
新功能 导航栏 导航栏获得了史诗级的增强,可以设置N级 子菜单。考虑到实用性,不太建议使用过多或者过深的菜单(超出屏幕的部分无法被看到)。
样式设置 现在可以在主题配置文件中设置更多的样式:
最大布局宽度 导航栏高度、特效(阴影、毛玻璃、鼠标hover时浮起) 卡片特效(阴影、毛玻璃、鼠标hover时浮起) 代码框是否显示语言 标题和正文文本布局(靠左、靠右、居中) 正文字体 代码字体 各部分颜色 封面 封面可以在主题配置文件中设置在首页、归档页面、其它页面默认是否显示。 封面中可以同时显示logo图片、标题、副标题了。
小部件 grid小部件可以设置 fixed: true
来固定网格宽度(适合文字长短不一的场景)。
其它 可以设置「评论」的标题和副标题。 可以创建多种颜色的折叠框。 友链增加分组描述。
功能调整与优化 样式渲染器 使用 stylus
重写了所有样式,无需安装less
插件了。相较于1.7.4
,css
文件体积缩小了19.75% 。
主题配置文件 主题配置文件经过了较大改动,使得层级结构更加清晰。 优化了二维码(微信)分享的使用体验 ]]>
+
+
+
+ <p>本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:</p>
+<ol>
+<li><p>卸载 <code>less</code></p>
+<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm uninstall hexo-renderer-less --save</span><br></pre></td></tr></table></figure>
+</li>
+<li><p>安装 <code>stylus</code></p>
+<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">npm install hexo-renderer-stylus --save</span><br></pre></td></tr></table></figure>
+
+
+</li>
+</ol>
+
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」测试版发布
+
+ https://volantis.js.org/news/2020-03-06-2.0-beta/
+ 2020-03-06T11:43:00.000Z
+ 2020-08-28T11:26:29.989Z
+
+ Beta6 Beta5 Beta4 Beta3 Beta2 Beta1 >div .info background-color : alpha($color -mac-cyan, 20% ) border-left : $borderradius -codeblock solid $color -mac-cyan border-radius : $borderradius -codeblock >:before ...(省略无关代码) background-size : 16px 16px background-position : 4px 4px background-repeat : no-repeat background-color : $color -mac-cyan background-image : url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyMTYgMTM0NHYxMjhxMCAyNi0xOSA0NXQtNDUgMTloLTUxMnEtMjYgMC00NS0xOXQtMTktNDV2LTEyOHEwLTI2IDE5LTQ1dDQ1LTE5aDY0di0zODRoLTY0cS0yNiAwLTQ1LTE5dC0xOS00NXYtMTI4cTAtMjYgMTktNDV0NDUtMTloMzg0cTI2IDAgNDUgMTl0MTkgNDV2NTc2aDY0cTI2IDAgNDUgMTl0MTkgNDV6bS0xMjgtMTE1MnYxOTJxMCAyNi0xOSA0NXQtNDUgMTloLTI1NnEtMjYgMC00NS0xOXQtMTktNDV2LTE5MnEwLTI2IDE5LTQ1dDQ1LTE5aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==" )
我试过把url里面的内容换成网络图片的URL是可以正常显示的。 源码在: themes/volantis/source/css/_third-party/container.styl
]]>
+
+
+
+ <details open><summary> Beta6 </summary>
+ <div class='content'>
+ <ul><li><input checked="" disabled="" type="checkbox"> 导航栏N级菜单支持分割线和小标题,详见我的个人博客。</li></ul>
+ </div>
+ </details>
+
+
+
+
+
+
+
+
+
+
+ 测试「文章内链接作文本的话无法生成静态文件」
+
+ https://volantis.js.org/test/2020-03-06-test-url/
+ 2020-03-05T16:00:00.000Z
+ 2020-08-21T02:39:20.199Z
+
+ 5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)相关 Issue: #164
结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。
markdwon
解析插件为 hexo-renderer-marked
时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false
都可以避免 deploy 报错。 插件:hexo-renderer-marked
]]>
+
+
+
+
+
+ <p>5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: <a href="http://localhost:8080/" target="_blank" rel="noopener external nofollow noreferrer">http://loc
+
+
+
+
+
+
+
+
+
+ 新增 pjax 开发分支
+
+ https://volantis.js.org/news/2020-02-25/
+ 2020-02-24T16:00:00.000Z
+ 2020-08-28T11:26:28.041Z
+
+ 由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。不能使用封面 mathjax 有折叠框的页面,折叠框打开之后目录高亮位置不对应 很多未知问题 感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
]]>
+
+
+
+
+
+ <p>由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。</p>
+<ul>
+<li>不能使用封面</li>
+<li>mathjax</li>
+<li>有折叠框的页面,折叠框打开之后目录高亮位置不对应</li>
+<li>很多未知问题</li>
+</ul>
+<blockqu
+
+
+
+
+
+
+
+
+
+
+
+ 主题更名为「Volantis」
+
+ https://volantis.js.org/news/2020-02-22/
+ 2020-02-21T16:00:00.000Z
+ 2020-08-28T11:26:25.818Z
+
+ 主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。]]>
+
+
+
+
+
+ <p>主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。</p>
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题文档网页更新并开源
+
+ https://volantis.js.org/news/2020-02-21/
+ 2020-02-20T16:00:00.000Z
+ 2020-08-28T11:26:23.376Z
+
+ 主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。现在使用的文档页面源码是: volantis-docs
]]>
+
+
+
+
+
+ <p>主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 <a href="https://github.com/xaoxuu/hexo-theme-vuex" target="_blank" rel="noopener external nofoll
+
+
+
+
+
+
+
+
+
+
+
+ 已关闭评论区
+
+ https://volantis.js.org/news/2020-02-20/
+ 2020-02-19T16:00:00.000Z
+ 2020-08-28T11:26:20.424Z
+
+ 使用 GitHub Issue由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
遇到问题怎么办 确定已经查阅文档找不到相关内容。 前往「常见问题」页面,查看是否有解决方案。 访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。 ]]>
+
+
+
+
+
+ <h4 id="使用-GitHub-Issue"><a href="#使用-GitHub-Issue" class="headerlink" title="使用 GitHub Issue"></a>使用 GitHub Issue</h4><p>由于 Valine 匿名评论不适合追
+
+
+
+
+
+
+
+
+
+
+
+ 版本命名规范化
+
+ https://volantis.js.org/news/2020-02-19/
+ 2020-02-18T16:00:00.000Z
+ 2020-08-28T11:26:17.378Z
+
+ 主版本号.子版本号.修订版本号主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
主版本号 : 较大改动、框架调整或重构子版本号 : 较小或局部的功能性更新修订版本号 : 修复BUG或无关紧要的细节调整 ]]>
+
+
+
+
+
+ <p class='p red bold'>主版本号.子版本号.修订版本号</p>
+
+<p>主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:</p>
+<ul>
+<li><strong>主版
+
+
+
+
+
+
+
+
+
+
+
+ 心率测量工具限免活动
+
+ https://volantis.js.org/news/2020-02-18/
+ 2020-02-17T16:00:00.000Z
+ 2020-08-28T11:26:14.369Z
+
+ 心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
]]>
+
+
+
+
+
+ <div class="gallery ">
+ <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/heartmate/screenshot01.jpg'><img src='http
+
+
+
+
+
+
+
+
+
+
+
+ Code Highlight Style test
+
+ https://volantis.js.org/test/code-highlight/
+ 2019-07-25T08:43:00.000Z
+ 2020-08-21T02:39:20.200Z
+
+ Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
#[derive(Debug)] pub enum State { Start, Transient, Closed, } impl From <&'a str > for State { fn from (s: &'a str ) -> Self { match s { "start" => State::Start, "closed" => State::Closed, _ => unreachable! (), } } }
[ { "title" : "apples" , "count" : [12000 , 20000 ], "description" : {"text" : "..." , "sensitive" : false } }, { "title" : "oranges" , "count" : [17500 , null ], "description" : {"text" : "..." , "sensitive" : false } } ]
class MyClass { public static myValue: string ; constructor (init: string ) { this .myValue = init; } } import fs = require ("fs" );module MyModule { export interface MyInterface extends Other { myProperty: any ; } } declare magicNumber number ;myArray.forEach(() => { });
@requires_authorization def somefunc (param1='' , param2=0 ): r'''A docstring''' if param1 > param2: print 'Gre\'ater' return (param2 - param1 + 1 + 0b10l ) or None class SomeClass : pass >>> message = '''interpreter ... prompt'''
<!DOCTYPE html > <title > Title</title > <style > body {width : 500px ;}</style > <script type ="application/javascript" > function $init ( ) {return true ;} </script > <body > <p checked class ="title" id ='title' > Title</p > </body >
function $initHighlight (block, cls ) { try { if (cls.search(/\bno\-highlight\b/ ) != -1 ) return process(block, true , 0x0F ) + ` class="${cls} "` ; } catch (e) { } for (var i = 0 / 2 ; i < classes.length; i++) { if (checkCondition(classes[i]) === undefined ) console .log('undefined' ); } return ( <div> <web-component>{block}</web-component> </div> ) } export $initHighlight;
#include <iostream> int main (int argc, char *argv[]) { for (auto i = 0 ; i < 0xFFFF ; i++) cout << "Hello, World!" << endl ; char c = '\n' ; unordered_map <string , vector <string > > m; m["key" ] = "\\\\" ; return -2e3 + 12l ; }
CREATE TABLE "topic" ( "id" serial NOT NULL PRIMARY KEY , "forum_id" integer NOT NULL , "subject" varchar (255 ) NOT NULL ); ALTER TABLE "topic" ADD CONSTRAINT forum_id FOREIGN KEY ("forum_id" )REFERENCES "forum" ("id" );insert into "topic" ("forum_id" , "subject" )values (2 , 'D''artagnian' );
#import <UIKit/UIKit.h> #import "Dependency.h" @protocol WorldDataSource @optional - (NSString *)worldName; @required - (BOOL )allowsToLive; @end @property (nonatomic , readonly ) NSString *title;- (IBAction ) show; @end
package l2f.gameserver.model;public abstract class L2Char extends L2Object { public static final Short ERROR = 0x0001 ; public void moveTo (int x, int y, int z) { _ai = null ; log("Should not be called" ); if (1 > 5 ) { return ; } } }
import Foundation@objc class Person : Entity { var name: String! var age: Int! init (name: String , age: Int ) { } func description (offset: Int = 0 ) -> String { return "\(name) is \(age + offset) years old" } }
@font-face { font-family : Chunkfive; src : url ('Chunkfive.otf' ); } body , .usertext { color : #F0F0F0 ; background : #600 ; font-family : Chunkfive, sans; } @import url(print.css);@media print { a [href^=http] ::after { content : attr (href) } }
class Greeter def initialize (name) @name = name.capitalize end def salute puts "Hello #{@name} !" end end g = Greeter.new("world" ) g.salute
BUILDDIR = _build EXTRAS ?= $(BUILDDIR) /extras .PHONY : main cleanmain: @echo "Building main facility..." build_main $(BUILDDIR) clean: rm -rf $(BUILDDIR) /*
package mainimport "fmt" func main () { ch := make (chan float64 ) ch <- 1.0e10 x, ok := <- ch defer fmt.Println(`exitting now\` ) go println (len ("hello world!" )) return }
#!/bin/bash ACCEPTED_HOSTS="/root/.hag_accepted.conf" BE_VERBOSE=false if [ "$UID " -ne 0 ]then echo "Superuser rights required" exit 2 fi genApacheConf (){ echo -e "# Host ${HOME_DIR} $1 /$2 :" }
[package] name = "some_name" authors = ["Author" ]description = "This is \ a description" [[lib]] name = ${NAME} default = True auto = no counter = 1_000
]]>
+
+
+
+ <p>Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of <a href="https://highlightjs.org/" target="_blank" rel="noopener external nofollow noreferrer">https://highlightjs.org</a></p>
+
+
+
+
+
+
+
+
+ Markdown Style test
+
+ https://volantis.js.org/test/markdown/
+ 2018-07-24T15:31:06.000Z
+ 2020-08-21T02:39:20.202Z
+
+ This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.# H1 ## H2 ### H3 #### H4 ##### H5 ###### H6 Alternatively, for H1 and H2, an underline-ish style: Alt-H1 ====== Alt-H2 ------
H1 H2 H3 H4 H5 H6 Alternatively, for H1 and H2, an underline-ish style:
Alt-H1 Alt-H2 Emphasis Emphasis, aka italics, with *asterisks* or _underscores_ . Strong emphasis, aka bold, with **asterisks** or __underscores__ . Combined emphasis with **asterisks and _underscores_ ** . Strikethrough uses two tildes. ~~Scratch this.~~
Emphasis, aka italics, with asterisks or underscores .
Strong emphasis, aka bold, with asterisks or underscores .
Combined emphasis with asterisks and underscores .
Strikethrough uses two tildes. Scratch this.
Lists 1. First ordered list item2. Another item * Unordered sub-list.1. Actual numbers don't matter, just that it's a number 1. Ordered sub-list4. And another item. You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) * Unordered list can use asterisks- Or minuses+ Or pluses- Paragraph In unordered list For example like this. Common Paragraph with some text. And more text.
First ordered list item
Another item
Actual numbers don't matter, just that it's a number
Ordered sub-list And another item.
You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
Unordered list can use asterisks Common Paragraph with some text. And more text.
Inline HTML <p > To reboot your computer, press <kbd > ctrl</kbd > +<kbd > alt</kbd > +<kbd > del</kbd > .</p >
To reboot your computer, press ctrl +alt +del .
<dl > <dt > Definition list</dt > <dd > Is something people use sometimes.</dd > <dt > Markdown in HTML</dt > <dd > Does *not* work **very** well. Use HTML <em > tags</em > .</dd > </dl >
Definition list Is something people use sometimes. <dt>Markdown in HTML</dt><dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
Links [I'm an inline-style link ](https://www.google.com ) [I'm an inline-style link with title ](https://www.google.com "Google's Homepage" ) [I'm a reference-style link ][Arbitrary case-insensitive reference text ] [I'm a relative reference to a repository file ](https://cdn.jsdelivr.net/gh/theme-volantis/hexo-theme-volantis/LICENSE ) [You can use numbers for reference-style link definitions ][1 ] Or leave it empty and use the [link text itself] Some text to show that the reference links can follow later. [arbitrary case-insensitive reference text ]: https://hexo.io [1 ]: https://hexo.io/docs/ [link text itself ]: https://hexo.io/api/
I'm an inline-style link
I'm an inline-style link with title
I'm a reference-style link
I'm a relative reference to a repository file
You can use numbers for reference-style link definitions
Or leave it empty and use the link text itself
Some text to show that the reference links can follow later.
Images hover to see the title text: Inline-style: ![alt text ](https://hexo.io/icon/favicon-196x196.png "Logo Title Text 1" ) Reference-style: ![alt text ][logo ] [logo ]: https://hexo.io/icon/favicon-196x196.png "Logo Title Text 2"
hover to see the title text:
Inline-style:
Reference-style:
Code and Syntax Highlighting Inline code
has back-ticks around
it.
var s = "JavaScript syntax highlighting" ;alert(s);
s = "Python syntax highlighting" print s
No language indicated, so no syntax highlighting. But let's throw in a <b>tag</b>.
Tables | |ASCII |HTML | |----------------|-------------------------------|-----------------------------| |Single backticks|`'Isn't this fun?'` |'Isn't this fun?' | |Quotes |`"Isn't this fun?"` |"Isn't this fun?" | |Dashes |`-- is en-dash, --- is em-dash` |-- is en-dash, --- is em-dash|
ASCII HTML Single backticks 'Isn't this fun?'
'Isn't this fun?' Quotes "Isn't this fun?"
"Isn't this fun?" Dashes -- is en-dash, --- is em-dash
-- is en-dash, --- is em-dash
Colons can be used to align columns.
| Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | right-aligned | | | col 2 is | centered | | | zebra stripes | are neat |
Tables Are Cool col 3 is right-aligned col 2 is centered zebra stripes are neat
The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty --- | --- | --- *Still* | `renders` | **nicely** 1 | 2 | 3
Markdown Less Pretty Still renders
nicely 1 2 3
You can find more information about LaTeX mathematical expressions here .
Blockquotes Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.
Quote break.
This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.
Horizontal Rule Three or more...
--- Hyphens *** Asterisks ___ Underscores
Hyphens
Asterisks
Underscores
Line Breaks Here's a line for us to start with. This line is separated from the one above by two newlines, so it will be a *separate paragraph* . This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the *same paragraph* .
Here's a line for us to start with.
This line is separated from the one above by two newlines, so it will be a separate paragraph .
This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the same paragraph .
This is a regular paragraph. <table > <tr> <td>Foo</td> </tr> </table> This is another regular paragraph.
This is a regular paragraph.
This is another regular paragraph.
Youtube videos <a href ="https://www.youtube.com/watch?feature=player_embedded&v=ARted4RniaU " target="_blank"> <img src ="https://img.youtube.com/vi/ARted4RniaU/0.jpg" alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10" /> </a > Pure markdown version: [![IMAGE ALT TEXT HERE ](https://img.youtube.com/vi/ARted4RniaU/0.jpg )](https://www.youtube.com/watch?v=ARted4RniaU )
Pure markdown version:
]]>
+
+
+
+ <p>This post is originated from <a href="https://gist.github.com/apackeer/4159268" target="_blank" rel="noopener external nofollow noreferrer">here</a> and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.</p>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blog/categories/index.html b/blog/categories/index.html
new file mode 100644
index 000000000..ae2a76d5c
--- /dev/null
+++ b/blog/categories/index.html
@@ -0,0 +1,1865 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 文章分类 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blog/tags/index.html b/blog/tags/index.html
new file mode 100644
index 000000000..fd6959cd0
--- /dev/null
+++ b/blog/tags/index.html
@@ -0,0 +1,1843 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 所有标签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-05-17-pjax/index.html b/blogs/2020-05-17-pjax/index.html
new file mode 100644
index 000000000..02945bd07
--- /dev/null
+++ b/blogs/2020-05-17-pjax/index.html
@@ -0,0 +1,2054 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis 主题部署 Pjax - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis 主题部署 Pjax
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-07-03-valine/index.html b/blogs/2020-07-03-valine/index.html
new file mode 100644
index 000000000..054646a03
--- /dev/null
+++ b/blogs/2020-07-03-valine/index.html
@@ -0,0 +1,2085 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如何快速优雅地删除 Valine 的垃圾评论 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如何快速优雅地删除 Valine 的垃圾评论
+
+
+
+
+
+
+
+ Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。
+
+
+操作演示 Your browser does not support the video tag.
+
+
+App 只支持数据存储于 LeanCloud 的评论系统。
+
+App 登录前需要配置 AppID 和 AppKey,由于字符比较长,输入不方便,所以支持 URL Scheme 配置。将 URL 生成一个二维码,然后用手机扫码就可以打开 App 并自动配置好。
+格式为:
+valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目
+
+也可以把管理员用户的账号和密码配置上,扫码直接登录,但是注意不要泄露出去:
+valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目&user=me@xaoxuu.com&psw=q
+
+注意:这个管理员用户并不是 LeanCloud 的账号,而是当前 Valine 数据库中的 _User
表中的一个用户,可以在 App 中注册,然后在 LeanCloud 上把注册的用户设置为管理员。
+设置管理员的方法:在 _Role
表中新建一个 admin
角色,然后在 admin
角色的 users
列中点击 Relations
把自己刚注册的用户添加进去,这个用户就有了修改和删除评论数据的权限。
+App 测试版地址
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-08-21-main-banner/index.html b/blogs/2020-08-21-main-banner/index.html
new file mode 100644
index 000000000..27e41c9e7
--- /dev/null
+++ b/blogs/2020-08-21-main-banner/index.html
@@ -0,0 +1,2052 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 给 Hexo Volantis 主题添加图片轮播功能 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 给 Hexo Volantis 主题添加图片轮播功能
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-08-28-issue-api/index.html b/blogs/2020-08-28-issue-api/index.html
new file mode 100644
index 000000000..fe66cc6ac
--- /dev/null
+++ b/blogs/2020-08-28-issue-api/index.html
@@ -0,0 +1,2054 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 静态博客使用 Issues API 发布动态、友链、书签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 静态博客使用 Issues API 发布动态、友链、书签
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-08-31-hexospeed/index.html b/blogs/2020-08-31-hexospeed/index.html
new file mode 100644
index 000000000..482be9025
--- /dev/null
+++ b/blogs/2020-08-31-hexospeed/index.html
@@ -0,0 +1,2052 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 博客访问速度提升:最佳线路分流 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 博客访问速度提升:最佳线路分流
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-09-03-latest-comments/index.html b/blogs/2020-09-03-latest-comments/index.html
new file mode 100644
index 000000000..bc2fb5607
--- /dev/null
+++ b/blogs/2020-09-03-latest-comments/index.html
@@ -0,0 +1,2054 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 给 Volantis 主题调用 Valine 最新评论 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 给 Volantis 主题调用 Valine 最新评论
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-09-03-message-prompt/index.html b/blogs/2020-09-03-message-prompt/index.html
new file mode 100644
index 000000000..7ade97961
--- /dev/null
+++ b/blogs/2020-09-03-message-prompt/index.html
@@ -0,0 +1,2052 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如何给博客添加弹窗通知 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如何给博客添加弹窗通知
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/blogs/2020-09-24-list-tags/index.html b/blogs/2020-09-24-list-tags/index.html
new file mode 100644
index 000000000..9846a36d8
--- /dev/null
+++ b/blogs/2020-09-24-list-tags/index.html
@@ -0,0 +1,2049 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hexo 标签函数 list_tags 用法详解 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hexo 标签函数 list_tags 用法详解
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/categories/\345\256\230\346\226\271\350\265\204\350\256\257/index.html" "b/categories/\345\256\230\346\226\271\350\265\204\350\256\257/index.html"
new file mode 100644
index 000000000..6b231ce4f
--- /dev/null
+++ "b/categories/\345\256\230\346\226\271\350\265\204\350\256\257/index.html"
@@ -0,0 +1,2456 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 分类:官方资讯 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。
+
+计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。
+当主题稳定后会提供英文文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:
+
+卸载 less
+npm uninstall hexo-renderer-less --save
+
+安装 stylus
+npm install hexo-renderer-stylus --save
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。
+
+不能使用封面
+mathjax
+有折叠框的页面,折叠框打开之后目录高亮位置不对应
+很多未知问题
+
+
+感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。
+
现在使用的文档页面源码是: volantis-docs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
使用 GitHub Issue 由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
+
遇到问题怎么办
+确定已经查阅文档找不到相关内容。
+前往「常见问题」页面,查看是否有解决方案。
+访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
+如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主版本号.子版本号.修订版本号
+
+
主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
+
+主版本号 : 较大改动、框架调整或重构
+子版本号 : 较小或局部的功能性更新
+修订版本号 : 修复BUG或无关紧要的细节调整
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
+
如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Volantis
+A Wonderful Theme for Hexo
+
+
+
+
Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+
开始使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/categories/\345\274\200\345\217\221\345\277\203\345\276\227/index.html" "b/categories/\345\274\200\345\217\221\345\277\203\345\276\227/index.html"
new file mode 100644
index 000000000..e3a1e463e
--- /dev/null
+++ "b/categories/\345\274\200\345\217\221\345\277\203\345\276\227/index.html"
@@ -0,0 +1,2031 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 分类:开发心得 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
对官方文档标签文档的一个补充,以volantis主题标签调用为例,展示不同用法下的标签示例。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/categories/\350\277\233\351\230\266\347\216\251\346\263\225/index.html" "b/categories/\350\277\233\351\230\266\347\216\251\346\263\225/index.html"
new file mode 100644
index 000000000..e2fa13463
--- /dev/null
+++ "b/categories/\350\277\233\351\230\266\347\216\251\346\263\225/index.html"
@@ -0,0 +1,2241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 分类:进阶玩法 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于发布 issue 的成本远远低于发布一次博客更新(即便是使用了持续集成),可以用 issue 来简化每个独立博客都必备的友链系统,也可以通过 issue 来快速发布动态资讯,弥补静态博客必须更新静态文件才能更新内容的缺点。此功能已经集成到了主题中,使用非常方便。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
给博客加上最新评论栏目。以 Volantis 主题为例,给侧边栏加上最新评论功能,实现整站调用。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
很多网站首页都会有图片轮播效果,给网站的首页加上图片轮播的效果,可以很好的起到广告的作用也可以起到推荐优秀内容的作用。来吧,下面是给 Volantis 主题加上首页图片轮播的效果。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/content.json b/content.json
new file mode 100644
index 000000000..2b6a5233e
--- /dev/null
+++ b/content.json
@@ -0,0 +1 @@
+{"meta":{"title":"Volantis","subtitle":"","description":"Volantis,一个高度模块化和可定制化、功能相对完善的Hexo博客主题,既可以用作个人博客,也适合用来搭建文档。","author":"Volantis Team","url":"https://volantis.js.org","root":"/"},"pages":[{"title":"","date":"2020-08-27T09:58:45.944Z","updated":"2020-08-27T09:58:45.944Z","comments":true,"path":"404.html","permalink":"https://volantis.js.org/404","excerpt":"","text":"404 很抱歉,您访问的页面不存在 可能是输入地址有误或该地址已被删除"},{"title":"进阶设定","date":"2020-10-09T01:48:12.529Z","updated":"2020-10-09T01:48:12.529Z","comments":true,"path":"advanced-settings/index.html","permalink":"https://volantis.js.org/advanced-settings/","excerpt":"","text":"设置子模块 将主题添加为子模块 git submodule add https://github.com/volantis-x/hexo-theme-volantis.git themes/volantis 多人协同默认的作者信息在主题配置文件中设置: blog/themes/volantis/_config.yml# 文章布局article: ... body: ... meta_library: author: avatar: name: 请设置文章作者 url: / Volantis 支持多作者,其他作者信息需要写在数据文件中,例如: blog/source/_data/author.ymlJon: name: Jon Snow avatar: https://cn.bing.com/th?id=AMMS_fc8f99fd41ebd737a71c4e13806db9a0&w=110&h=110&c=7&rs=1&qlt=80&pcl=f9f9f9&cdv=1&dpr=2&pid=16.1 url: https://gameofthrones.fandom.com/wiki/Jon_SnowDany: name: Daenerys Targaryen avatar: https://tse1-mm.cn.bing.net/th?id=OIP.Yax4wLzIFbcBVUa_RsKywQHaLH&w=80&h=80&c=8&rs=1&qlt=90&dpr=2&pid=3.1&rm=2 url: https://gameofthrones.fandom.com/wiki/Daenerys_Targaryen 在文章的 front-matter 中新增 author 即可: ---title: Jon Snow | Game of Thrones Wiki | Fandomauthor: Jon--- 为网站提速加载速度 尝试安装 hexo-neat 插件来压缩文件。 减少不必要的 js 插件,例如字数统计、动态背景。 查找并解决拖慢速度的资源,以 Chrome 浏览器为例: 页面中点击右键,选择「检查」。 在右边的窗口中「Network」选项卡,并勾选「Disable cache」。 刷新网页,查看加载速度慢的资源。3.1. 加载缓慢的图片,建议使用 CDN。3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。 运行速度 访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。 优化 SEOblog/_config.volantis.ymlseo: # When there are no keywords in the article's front-matter, use tags as keywords. use_tags_as_keywords: true # When there is no description in the article's front-matter, use excerpt as the description. use_excerpt_as_description: true robots: home_first_page: index,follow home_other_pages: noindex,follow archive: noindex,follow category: noindex,follow tag: noindex,follow # robots can be written in front-matter 在 front-matter 中,可以设置 keywords、description、robots 和 seo_title。其中 seo_title 仅仅用作网页标题,优先级高于 title。 文章内部不要使用 H1 标题。 通过死链检测工具检查并删除无法访问的链接。 安装 SEO 优化插件: hexo-autonofollowhttps://github.com/liuzc/hexo-autonofollow hexo-generator-seo-friendly-sitemaphttps://github.com/ludoviclefevre/hexo-generator-seo-friendly-sitemap 页面不要堆砌关键词,不要频繁更改路径。 使用 CDN对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。 开启方法blog/_config.ymluse_cdn: true 如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。 自定义 CDN如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。 安装「相关文章」插件 安装插件 npm i -S hexo-related-popular-posts 插件的自定义配置方法: hexo-related-popular-postshttps://github.com/tea3/hexo-related-popular-posts 如果您使用了头图,可以在站点配置文件中添加以下设置来让相关文章显示正确的文章头图: blog/_config.ymlpopularPosts: eyeCatchImageAttributeName: headimg 注意需要升级到 5.0.1 及以上版本才可以支持自定义头图,详见 #29 分析与统计默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。 字数和阅读时长 安装以下插件:npm i --save hexo-wordcount 修改配置文件,将 wordcount 插件打开blog/_config.volantis.ymlplugins: ... # 文章字数统计、阅读时长,开启需要安装插件: npm i --save hexo-wordcount wordcount: enable: #true 然后修改配置文件,将 wordcount 写入需要显示的 meta 位置:blog/_config.volantis.yml# 文章布局article: ... # 文章详情页面的文章卡片本体布局方案 body: # 文章顶部信息 # 从 meta_library 中取 top_meta: [..., wordcount, ...] ... # 文章底部信息 # 从 meta_library 中取 bottom_meta: [..., wordcount, ...] CNZZ 统计请参考 ZYMIN 的这篇教程: Hexo hexo+ejs+material x 添加CNZZ统计代码https://zymin.cn/arcticle/hexo+ejs+material.html 更多进阶玩法详见 @TRHX 的这篇博客: Hexo 博客主题个性化https://www.itrhx.com/2018/08/27/A04-Hexo-blog-topic-personalization/ 内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。 主题官网 #进阶玩法https://volantis.js.org/categories/进阶玩法/"},{"title":"加入社区与团队","date":"2020-09-21T08:49:05.364Z","updated":"2020-09-21T08:49:05.364Z","comments":true,"path":"contributors/index.html","permalink":"https://volantis.js.org/contributors/","excerpt":"开源项目越多人参与就越有生命力,希望有兴趣的小伙伴可以加入团队~ 那么如何成为团队的一员呢? 成为团队的一员,首先要满足的前置条件是:使用主题至少一个月、长期活跃于社区:「留言评论」或者「解答 issues」或者「在 issues 提交有效的建议」。 在您满足了上述的前置条件后,并且根据情况做了自己力所能及的事情,例如: 发现和解决问题如提 issue 或者解答 issue 或者提交 PR 完善文档、纠正文档错误、语病、翻译问题等 发布文章推荐主题 发布相关文章并转载外链到官网或者直接在官网发布文章 则可以在论坛发帖申请加入团队。 在 GitHub 页面可以看到团队成员","text":"开源项目越多人参与就越有生命力,希望有兴趣的小伙伴可以加入团队~ 那么如何成为团队的一员呢? 成为团队的一员,首先要满足的前置条件是:使用主题至少一个月、长期活跃于社区:「留言评论」或者「解答 issues」或者「在 issues 提交有效的建议」。 在您满足了上述的前置条件后,并且根据情况做了自己力所能及的事情,例如: 发现和解决问题如提 issue 或者解答 issue 或者提交 PR 完善文档、纠正文档错误、语病、翻译问题等 发布文章推荐主题 发布相关文章并转载外链到官网或者直接在官网发布文章 则可以在论坛发帖申请加入团队。 在 GitHub 页面可以看到团队成员 感谢项目贡献者非常感谢直接提交了 PR 的朋友! xaoxuu MHuiG inkss Colsrch Drew233 Linhk1606 ericclose Flexiston CRainyDay 查看全部 同样感谢那些在评论和 Issue 中互相帮助的网友~ 如果您有一个好点子或者解决了这里没有解决的问题,欢迎去 GitHub 贡献一下代码。👏 发布与分享文章如果您有与 Hexo 博客搭建相关的原创文章,可以转载到 Volantis 官网,示例如下: _posts/blogs/2020-05-17-pjax.md---title: Volantis 主题部署 Pjaxdate: 2020-05-17updated: 2020-08-07categories: [开发心得]author: inksslink: https://inkss.cn/article/other/76993423.htmldescription: 本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~headimg: # 可以设置文章头图--- 如果您是第一次在官网投稿,还需要在 _data/author.yml 文件中添加作者信息,例如: _data/author.yml...inkss: name: 枋柚梓 avatar: https://cdn.jsdelivr.net/gh/inkss/common@1.4.2/hexo/img/static/avatar.jpg url: https://inkss.cn 要求文章存放在 _posts/blogs/ 目录中,且文件名格式为「年-月-日-文章主题」。必须是原创文章,摘要部分200字符以内。(也可以不写摘要)最好选择一个文章分类,如果现有的分类中没有合适的,可以自己新增。如果有文章头图,请确保图片内最多只有一个单词或短语。 开始行动吧https://github.com/volantis-x/volantis-docs/tree/master/source/_posts/blogs 可供交流的渠道解决问题 渠道 方式 用途 Issues @volantis-x/hexo-theme-volantis 和开发者沟通的唯一渠道,用于跟进和解决问题 请不要发送邮件开源项目的开发者很反感别人不通过正确的途径如 Issues 而是通过私人邮件询问开源项目问题,所以一般不会回复此类邮件。 交流 渠道 方式 用途 论坛 @volantis-x/forum 慢,相对正式,方便检索,可以给其他用户参考 QQ群 1146399464 (验证码: vlts-2020) 非正式,即时通讯,易于斗图;不利于给其他用户参考 佛系互动 渠道 方式 用途 评论区 留言 可以测试、灌水、推广自己的博客。"},{"title":"","date":"2020-09-21T08:45:14.454Z","updated":"2020-09-21T08:45:14.454Z","comments":true,"path":"examples/index.html","permalink":"https://volantis.js.org/examples/","excerpt":"示 例 博 客 团队成员的博客xaoxuu简约风格 inkss这不是一段关于这个网站的描述文字啊喂 MHuiG这是一段关于这个网站的描述文字 Colsrch愿多年以后,我可以酌一杯清酒,烂醉如泥,梦中回到我们的曾经。 Linhk1606这是一段关于这个网站的描述文字","text":"示 例 博 客 团队成员的博客xaoxuu简约风格 inkss这不是一段关于这个网站的描述文字啊喂 MHuiG这是一段关于这个网站的描述文字 Colsrch愿多年以后,我可以酌一杯清酒,烂醉如泥,梦中回到我们的曾经。 Linhk1606这是一段关于这个网站的描述文字 如何添加自己的博客链接 第一步:新建 Issue 按照格式填写并提交 { "title": "", "description": "", "screenshot": "", "url": "", "avatar": "", "version": "版本:^4.0"}为了提高图片加载速度,建议优化图片尺寸:打开 压缩图 上传自己的截图,将图片的高度调整到 360px 后下载。将压缩后的图片上传到 去不图床 并使用此图片链接作为截图链接。 第二步:刷新 回来刷新即可生效。 如何更新自己的博客链接 如果是自己创建的 issue ,可以自己修改。 如果是管理员创建的,请自己重新创建一份,然后让管理员删掉旧的。"},{"title":"常见问题","date":"2020-09-04T04:38:30.084Z","updated":"2020-09-04T04:38:30.084Z","comments":true,"path":"faqs/index.html","permalink":"https://volantis.js.org/faqs/","excerpt":"通常来说,一个全新的工程全部使用默认配置是正常没有故障的。如果无法使用或者效果与示例有较大区别,可以使用 Hexo 官方提供的用于单元测试的博客应用本主题查看样式是否正常,对比 _config.yml 文件排查问题。 Hexo 官方的单元测试项目: https://github.com/hexojs/hexo-theme-unit-test 向开发者反馈问题","text":"通常来说,一个全新的工程全部使用默认配置是正常没有故障的。如果无法使用或者效果与示例有较大区别,可以使用 Hexo 官方提供的用于单元测试的博客应用本主题查看样式是否正常,对比 _config.yml 文件排查问题。 Hexo 官方的单元测试项目: https://github.com/hexojs/hexo-theme-unit-test 向开发者反馈问题 如何更新主题使用主题的时候,尽量 fork 主题到自己的 GitHub,然后进行修改并使用。这样做的好处是:当主题进行重要更新的时候可以根据需要拉取合并代码,使自己 DIY 的主题能够通过更新获取 BUG 修复或者新特性。 如果不懂请自行搜索关键词:fork 更新 实用小技巧所有需要写在主题配置文件中的配置都可以写在站点配置文件的 theme_config: 中,在 Hexo 5.0 后,还可以写在 _config.volantis.yml 文件中,详见 Hexo 官方文档:覆盖主题配置https://hexo.io/zh-cn/docs/configuration#%E8%A6%86%E7%9B%96%E4%B8%BB%E9%A2%98%E9%85%8D%E7%BD%AE也可以直接查看本站源码中站点配置文件的写法:_config.volantis.yml 无法成功运行本地预览 可能是没有安装依赖,请按照「开始」页面中的步骤进行安装,并安装所需依赖。 如果开启了某些第三方服务,请查看文档中是否要求安装插件。 如果报错信息有 lastIndex,你可以尝试把博客根目录配置文件中找到 highlight,并将 auto_detect 设置为 false。 主题配置修改没有生效请确认文档中要求修改的是博客主目录的配置文件 blog/_config.yml 还是主题的配置文件 blog/_config.volantis.yml。 主题样式修改没有生效如果主题配置文件中开启了 cdn 服务,那么修改本地的样式是不会生效的,需要关闭 cdn 服务。 修改什么都没有生效需要 hexo clean 然后重新 hexo s 如果安装了「相关文章推荐」插件后,每次修改 md 文件后都需要重新 hexo s 关掉 CDN 之后样式错乱 请前往文档「开始」页面,检查是否安装了必要的依赖包。 搜索无法使用 请前往文档「开始」页面,检查是否安装了必要的依赖包。 检查根目录配置文件是否有 search 字段冲突。 如果以上两步都无法找到问题,请下载示例源码进行对比。 搜索结果链接不正确请检查根目录配置文件中的链接是否正确,如: blog/_config.ymlurl: https://xaoxuu.comroot: / 教程与指南 Hexo 官方文档 | Valine 官方文档请一定要阅读官方文档!"},{"title":"","date":"2020-10-09T01:48:12.529Z","updated":"2020-10-09T01:48:12.529Z","comments":true,"path":"getting-started/index.html","permalink":"https://volantis.js.org/getting-started/","excerpt":"","text":"Volantis A Wonderful Theme for Hexo Volantis 是一个功能丰富、高度模块化的 Hexo 博客主题。得益于其强大的模块化特性,您可以轻松搭建一个极简风格的博客,也可以仿照官网搭建一个多人协作的、包含文档模块的大体量综合型博客。 示例博客https://volantis.js.org/examples/ 所有的 Volantis 用户都可以按照格式自行创建 Issue 来将自己的博客添加到官网的示例博客页面中。 准备工作能力条件环境配置条件自建博客需要一定的相关知识,在开始前,请务必确保您会使用 markdown 语法,掌握简单的 git 知识,最最重要的是,遇到困难知道该怎么寻求解决: 翻阅和搜索文档 搜索 issues 中是否有解决办法 新建 issue 并按照要求进行操作,详尽地描述您遇到的问题 如果您没有使用过 Hexo 也不要着急,可以先通读一遍 Hexo 中文文档,要想使用地得心应手,最好参照团队提供的开源项目的源码进行搭建: Demo 源码 | 官网源码如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。 Hexo: 4.2 ~ 5.xhexo-cli: 3.1 ~ 4.xnode.js: 12.16 ~ latest # 推荐使用 LTS 版npm: 6.13 ~ latest 快速体验如果您已经具备环境配置条件,可以在终端中输入下面这行代码,稍等片刻即可尝鲜体验: git clone https://github.com/volantis-x/demo.git && cd demo && npm i && hexo s 下载与安装全新博客安装从其它主题迁移第 1/2 步:修改站点配置文件 在 blog/_config.yml 文件中找到并修改:theme: volantis 第 2/2 步:下载主题 在终端中输入:npm i hexo-theme-volantis 如果您是 Mac 用户,可以使用脚本完成全部流程 在博客路径打开终端,下载安装并应用主题:curl -s https://volantis.js.org/start | bash这行命令将会自动检测并安装所需环境,初始化博客,然后下载安装并应用主题。脚本详细使用方法:#hexo.sh 第 1/3 步:修改站点配置文件 在 blog/_config.yml 文件中找到并修改:theme: volantis 第 2/3 步:下载主题 如果您已经升级到 Hexo 5.0.2 及以上,可以直接使用 npm 命令安装:npm i hexo-theme-volantis对于旧版本,需要下载主题源码到 themes/ 文件夹:git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis如果您无法访问 GitHub 可以使用国内镜像源:git clone https://e.coding.net/volantis/volantis/volantis.git themes/volantis 第 3/3 步:检查并安装依赖 安装 Hexo 搜索的依赖包:npm i hexo-generator-search hexo-generator-json-content安装 Stylus 渲染器:npm i hexo-renderer-stylus 版本更新请对照 更新日志 进行更新,下面是更新之后需要注意的事项: 2020-09-26 3.0.0 -> 4.0.0 4.0.0 的配置文件改动非常大,强烈建议不要在旧的配置文件上改。原数据文件中的配置项不再支持,请在配置文件中进行设置。主题配置文件进行了重新设计,需要「完全」重新配置一遍。友链使用数据文件,并支持 issues 标签实现动态自助友链。原 meta 自定义布局现在只支持文章内部的 top_meta 和 bottom_meta 。文章列表页面布局现在只能在有限范围内进行自定义。侧边栏组件现在只支持侧边栏位置;文章末尾有专用的组件。如果安装了懒加载插件,需要卸载掉,使用主题内置的懒加载(和插件冲突)。如果想要关闭评论,需要改为 comments: false 。如果要隐藏文章顶部或者底部的 meta 标签,需设置 top_meta: false 或者 bottom_meta: false 。如果需要同时隐藏标题和顶部的 meta 标签也可以把 title: xxx 改为 seo_title: xxx 。多作者的信息使用数据文件进行定义,文章中只需要写 author: xxx 而不需要重复写作者的信息了。现在只有 gallery 标签的图片支持放大。 许可协议本主题采用 MIT开源许可协议 ,永久无限制免费使用。 MIT开源许可协议被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。被授权人可根据程式的需要修改授权条款为适当的内容。在软件和软件的所有副本中都必须包含版权声明和许可声明。 配置与使用配置与使用/wiki/volantis/site-settings/configuration/"},{"title":"内置标签插件","date":"2020-10-09T01:58:13.590Z","updated":"2020-10-09T01:58:13.590Z","comments":true,"path":"tag-plugins/index.html","permalink":"https://volantis.js.org/tag-plugins/","excerpt":"","text":"Volantis 专用标签文本类#text 文本样式标签/wiki/volantis/tag-plugins/text/ #span 行内文本标签/wiki/volantis/tag-plugins/span/ #p 段落文本标签/wiki/volantis/tag-plugins/p/ #note 引用标签/wiki/volantis/tag-plugins/note/ #noteblock 引用块标签/wiki/volantis/tag-plugins/noteblock/ #checkbox 复选列表标签/wiki/volantis/tag-plugins/checkbox/ #radio 单选列表标签/wiki/volantis/tag-plugins/radio/ #timeline 时间线标签/wiki/volantis/tag-plugins/timeline/ 链接、按钮、菜单#link 链接卡片标签/wiki/volantis/tag-plugins/link/ #button 按钮标签/wiki/volantis/tag-plugins/button/ #ghcard GitHub 卡片标签/wiki/volantis/tag-plugins/ghcard/ #site 网站卡片标签/wiki/volantis/tag-plugins/site/ #dropmenu 网站卡片标签/wiki/volantis/tag-plugins/dropmenu/ 容器类#tab 分栏标签/wiki/volantis/tag-plugins/tab/ #folding 折叠框标签/wiki/volantis/tag-plugins/folding/ 多媒体类#inlineimage 行内图片标签/wiki/volantis/tag-plugins/inlineimage/ #image 单张图片标签/wiki/volantis/tag-plugins/image/ #gallery 相册、组图标签/wiki/volantis/tag-plugins/gallery/ #audio 音频标签/wiki/volantis/tag-plugins/audio/ #video 视频标签/wiki/volantis/tag-plugins/video/ #frame 带框架的图片视频标签/wiki/volantis/tag-plugins/frame/ #aplayer 音乐播放器标签/wiki/volantis/tag-plugins/aplayer/ 数据集合类#issues Issues API 标签/wiki/volantis/tag-plugins/issues/ Hexo 通用标签在文章中使用 <!-- more -->,那么 <!-- more --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 Hexo 官方文档: Hexo 官方文档 #标签插件https://hexo.io/zh-cn/docs/tag-plugins"},{"title":"文章分类","date":"2020-08-28T11:47:51.622Z","updated":"2020-08-28T11:47:51.622Z","comments":true,"path":"blog/categories/index.html","permalink":"https://volantis.js.org/blog/categories/","excerpt":"","text":""},{"title":"所有标签","date":"2020-08-28T11:47:58.568Z","updated":"2020-08-28T11:47:58.568Z","comments":true,"path":"blog/tags/index.html","permalink":"https://volantis.js.org/blog/tags/","excerpt":"","text":""},{"title":"页面自定义布局","date":"2020-10-09T01:48:12.530Z","updated":"2020-10-09T01:48:12.530Z","comments":true,"path":"page-settings/body/index.html","permalink":"https://volantis.js.org/page-settings/body/","excerpt":"","text":"显示迷你音乐播放器标题右边显示迷你音乐播放器,支持的字段有:server、type、id。 front-matter---music: server: netease # netease, tencent, kugou, xiami, baidu type: song # song, playlist, album, search, artist id: 16846091 # song id / playlist id / album id / search keyword--- 实际效果见: #contributors 显示 meta 标签文章顶部和底部的日期、分类、更新日期、标签、分享等属于 meta 标签。 front-matter---top_meta: falsebottom_meta: false--- 如果一个页面没有 title 则不会显示 top_meta ,像404、关于页面就可以完全隐藏: front-matter---seo_title: 关于top_meta: falsebottom_meta: false--- 标题右边显示缩略图front-matter---thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png--- 缩略图仅在文章列表和文章页面显示,不会在归档页面显示。 标题右边显示图标front-matter---icons: [fas fa-fire red, fas fa-star green]--- 图标仅在归档页面中显示,可以用来标注热门文章。 可以通过 red / blue / green / yellow / orange / theme / accent 来设置图标的颜色 是否要显示封面如果某个页面需要封面,可以这样写: front-matter---cover: true--- 显示侧边栏通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。 如果某个页面不需要侧边栏,可以这样写: front-matter---sidebar: []--- 某个页面想指定显示某几个侧边栏,就这样写: front-matter---sidebar: [grid, toc, tags] # 放置任何你想要显示的侧边栏部件--- 关闭评论front-matter---comments: false---"},{"title":"front-matter","date":"2020-10-09T01:48:12.530Z","updated":"2020-10-09T01:48:12.530Z","comments":true,"path":"page-settings/front-matter/index.html","permalink":"https://volantis.js.org/page-settings/front-matter/","excerpt":"","text":"front-matterfront-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter 字段 含义 值类型 默认值 layout 布局模版 String - title 页面标题 String - seo_title 网页标题 String page.title short_title 页面标题(在group列表中显示) String page.title date 创建时间 Date 文件创建时间 updated 更新日期 Date 文件修改时间 link 外部文章网址 String - music 内部音乐控件 [Object] - robots robots String - keywords 页面关键词 String - description 页面描述、摘要 String - cover 是否显示封面 Bool true top_meta 是否显示文章或页面顶部的meta信息 Bool true bottom_meta 是否显示文章或页面底部的meta信息 Bool true sidebar 页面侧边栏 Bool, Array theme.layout.*.sidebar body 页面主体元素 Array theme.layout.on_page.body mathjax 是否渲染公式 Bool, String false thumbnail 缩略图 String false icons 图标 Array [] pin 是否置顶 Bool false layout:post 时特有的字段: 字段 含义 值类型 默认值 author 文章作者 [Object] config.author categories 分类 String, Array - tags 标签 String, Array - toc 是否生成目录 Bool true author 字段 含义 值类型 默认值 name 作者名 String config.author avatar 头像 String config.avatar url 链接 String config.url music 字段 是否必须 值类型 server 是 netease, tencent, kugou, xiami, baidu type 是 song, playlist, album, search, artist id 是 song id / playlist id / album id / search keyword 文章置顶在 front-matter 中设置以下值: front-matterpin: true 文章分类多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。 多级分类: front-matter---categories: [分类A, 分类B]--- 或者 front-matter---categories: - 分类A - 分类B--- 并列分类 front-mattercategories: - [分类A] - [分类B] 多级+并列分类 front-mattercategories: - [分类A, 分类B] - [分类C, 分类D] 文章摘要在文章中插入 <!-- more -->,前面的部分即为摘要。 某篇文章源码---title: xxxdate: 2020-02-21---这是摘要<!-- more -->这是正文 注意: <!-- more --> 前后一定要有空行,不然可能导致显示错位。 设置文章作者由于支持多作者共同维护一个博客,所以可以设置单独一篇文章的作者: front-matter---author: name: 作者 avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com--- 引入外部文章利用 link,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如: front-matter---layout: postdate: 2017-07-05title: [转]如何搭建基于Hexo的独立博客categories: [Dev, Hexo]tags: - Hexoauthor: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.comlink: https://xaoxuu.com/blog/2017-07-05-hexo-blog/---![](https://img.vim-cn.com/d9/a9af7dc49fc0af8ca3e6dd2450a2f7095a87db.png) 置顶对于任何文章或者页面,设置 pin: true 即可置顶在首页。 front-matter---pin: true--- 这会导致一个小问题:首页 post 卡片数量多于设定值,如果有强迫症希望每一个分页数量一致,可以安装插件来实现,详见:#421 不归档存放在 _posts 文件夹下的文章一般都会出现在归档页,如果某篇文章不希望出现在归档页面: front-matter---archive: false---"},{"title":"页面布局模板","date":"2020-10-09T01:48:12.530Z","updated":"2020-10-09T01:48:12.530Z","comments":true,"path":"page-settings/layout/index.html","permalink":"https://volantis.js.org/page-settings/layout/","excerpt":"","text":"布局模板 取值 含义 page 独立页面 post 文章页面 docs 文档页面 category 分类页面 tag 标签页面 friends 友链页面 list 列表页面 page & post & docs这三种页面相同,但是有以下细微区别: post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 和 docs 不会。 post 文章末尾最多可以显示「参考资料」、「相关文章」、「版权标识」、「打赏」四个模块。 docs 文章末尾最多可以显示「参考资料」一个模块。 除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。 归档页面归档页面是自动生成的,并且初始化的时候已经生成,路径如下: blog/_config.yml# Directoryarchive_dir: archives 关于页面Create file if not exists: source/about/index.md---layout: docsseo_title: 关于bottom_meta: falsesidebar: []valine: placeholder: 有什么想对我说的呢?---下面写关于自己的内容 分类页面Create file if not exists: source/categories/index.md---layout: categoryindex: truetitle: 所有分类--- 标签页面Create file if not exists: source/tags/index.md---layout: tagindex: truetitle: 所有标签--- 列表页面Create file if not exists: source/mylist/index.md---layout: listgroup: mylistindex: true--- 结果就是筛选出所有文章中 front-matter 部分含有 group: mylist 的文章。 友链页面创建页面文件Create file if not exists: source/friends/index.md---layout: friends # 必须title: 我的朋友们 # 可选,这是友链页的标题---这里写友链上方的内容。<!-- more -->这里可以写友链页面下方的文字备注,例如自己的友链规范、示例等。 选择布局方案在主题配置文件中找到以下内容: pages: # 友链页面配置 friends: layout_scheme: traditional # simple: 简单布局, traditional: 传统布局, sites: 网站卡片布局 目前提供三种布局方案: simple: 简单布局,只有头像和标题。 traditional: 传统布局,是 Volantis 旧版本的风格。 sites: 网站卡片布局,是 Volantis 4.x 新增的网站卡片标签的样式。 设置数据源静态数据源动态数据源友链的数据源写在以下路径,如果没有请自行创建: blog/source/_data/friends.yml 内容格式为: blog/source/_data/friends.yml- group: # 分组标题 description: # 分组描述 items: - title: # 名称 avatar: # 头像 url: # 链接 screenshot: # 截图 keywords: # 关键词 description: # 描述 - title: # 名称 avatar: # 头像 url: # 链接 screenshot: # 截图 keywords: # 关键词 description: # 描述 不同的布局方式,会用到一部分的字段,一般来说,title、avatar 和 url 都是必须的。这些数据被转成 HTML 标签插入到友链页面的 <!-- more --> 部分。使用 issues 标签可以从 issues 中获取 JSON 数据解析并生成 HTML 填充到页面中,使用方法如下: {% issues sites | api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %} 这样添加友链的方式就变成了:对方提 Issue ,自己审核,然后添加 active 标签,然后刷新网页就生效了。更新友链内容也变得十分方便, Issue 的创建者拥有修改和关闭的权限。 新建一个 GitHub 或者 Gitee 仓库,创建 Issues 模板,如下: { "title": "", "screenshot": "", "url": "", "avatar": "", "description": "", "keywords": ""} 关于如何使用 issues 标签,详见这篇文章: 静态博客使用 Issues API 发布动态、友链、书签https://xaoxuu.com/blog/2020-08-23-issues-api/ 建议两者是可以同时使用的哦,建议开放 issues 友链给大家,常联系的自己再保存到静态友链。实测 GitHub API 速度和稳定性不如 Gitee ,如果追求稳定建议使用 Gitee。 404页面Create file if not exists: source/404.md---cover: truerobots: noindex,nofollowsitemap: falseseo_title: 404 Not Foundbottom_meta: falsesidebar: []valine: path: /404.html placeholder: 请留言告诉我您要访问哪个页面找不到了---{% p logo center huge, 404 %}{% p center bold, 很抱歉,您访问的页面不存在 %}{% p center small, 可能是输入地址有误或该地址已被删除 %}"},{"title":"渲染公式","date":"2020-10-09T01:48:12.531Z","updated":"2020-10-09T01:48:12.531Z","comments":true,"path":"page-settings/math/index.html","permalink":"https://volantis.js.org/page-settings/math/","excerpt":"默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。即便开启了,文章列表中也不会进行渲染,请注意不要把公式写在文章开头。","text":"默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。即便开启了,文章列表中也不会进行渲染,请注意不要把公式写在文章开头。 example.md:---title: 渲染公式(MathJax)date: 2020-02-23mathjax: true # false: 不渲染, true: 渲染---添加一段描述性文字<!-- more -->$$t+1=2$$$$\\mbox{积累因子}=\\begin{cases}1+ni & \\mbox{单利}\\\\\\\\(1+i)^n & \\mbox{复利}\\end{cases}$$$$\\begin{equation}\\sum_{i=0}^n F_i \\cdot \\phi (H, p_i) - \\sum_{i=1}^n a_i \\cdot ( \\tilde{x_i}, \\tilde{y_i}) + b_i \\cdot ( \\tilde{x_i}^2 , \\tilde{y_i}^2 )\\end{equation}$$$$\\begin{equation}\\beta^*(D) = \\mathop{argmin} \\limits_{\\beta} \\lambda {||\\beta||}^2 + \\sum_{i=1}^n max(0, 1 - y_i f_{\\beta}(x_i))\\end{equation}$$ 查看公式渲染效果 $$t+1=2$$$$\\mbox{积累因子}=\\begin{cases}1+ni & \\mbox{单利}\\\\(1+i)^n & \\mbox{复利}\\end{cases}$$$$\\begin{equation}\\sum_{i=0}^n F_i \\cdot \\phi (H, p_i) - \\sum_{i=1}^n a_i \\cdot ( \\tilde{x_i}, \\tilde{y_i}) + b_i \\cdot ( \\tilde{x_i}^2 , \\tilde{y_i}^2 )\\end{equation}$$$$\\begin{equation}\\beta^*(D) = \\mathop{argmin} \\limits_{\\beta} \\lambda {||\\beta||}^2 + \\sum_{i=1}^n max(0, 1 - y_i f_{\\beta}(x_i))\\end{equation}$$ 如果公式仍无法正确渲染可以阅读 @MicDZ 的这篇文章: 在Material-X上使用KaTeXhttps://www.micdz.cn/article/katex-on-volantis/"},{"title":"修改站点配置文件","date":"2020-10-09T01:48:12.531Z","updated":"2020-10-09T01:48:12.531Z","comments":true,"path":"site-settings/configuration/index.html","permalink":"https://volantis.js.org/site-settings/configuration/","excerpt":"","text":"博客根目录下的 _config.yml 文件通常负责站点相关配置、第三方 npm 插件相关的配置。 网站标题blog/_config.yml# 网站标题title: my blog 网站图标简单方式完全自定义blog/_config.yml# 网站图标,更多尺寸等图标请使用import方式批量导入favicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.icoblog/_config.ymlimport: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> 多语言设置blog/_config.ymllanguage: - zh-CN - en - zh-HK - zh-TW 对应的翻译文件路径: themes/volantis/languages/ 使用 Import 导入外部文件Volantis 用户可以在不修改主题文件的情况下向 head 和 body 中添加各种标签。meta 和 link 对应 head 中的 <meta> 和 <link> 标签。script 可以在 body 末尾导入 js 代码。 blog/_config.ymlimport: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> script: - <script></script> 更多Hexo 官方文档 #配置https://hexo.io/zh-cn/docs/configuration"},{"title":"tag-plugins: aplayer","date":"2020-10-09T01:48:12.531Z","updated":"2020-10-09T01:48:12.531Z","comments":true,"path":"tag-plugins/aplayer/index.html","permalink":"https://volantis.js.org/tag-plugins/aplayer/","excerpt":"","text":"主题对 APlayer 插件的样式进行了兼容。安装插件: npm i -S hexo-tag-aplayer 使用方法: hexo-tag-aplayerhttps://github.com/MoePlayer/hexo-tag-aplayer"},{"title":"tag-plugins: audio","date":"2020-10-09T01:48:12.532Z","updated":"2020-10-09T01:48:12.532Z","comments":true,"path":"tag-plugins/audio/index.html","permalink":"https://volantis.js.org/tag-plugins/audio/","excerpt":"","text":"本插件最后更新于 2.4 版本{% audio 音频链接 %} 演示效果Your browser does not support the audio tag. 上述示例的源码example:{% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}"},{"title":"tag-plugins: button","date":"2020-10-09T01:48:12.532Z","updated":"2020-10-09T01:48:12.532Z","comments":true,"path":"tag-plugins/button/index.html","permalink":"https://volantis.js.org/tag-plugins/button/","excerpt":"","text":"这个页面的标签将会在不久后重构 基础按钮请将您的 Volantis 升级至 2.4 版本以上使用。 语法格式参数列表示例写法示例效果{% btn 样式参数(可选), 标题, 链接, 图标(可选) %} 可选的参数可以省略,但是前后顺序不能乱。样式参数 regular, large, center 图标 第1个或者第2个参数包含 fa- 的那个被识别为图标。example.md:不设置任何参数的 {% btn 按钮, / %} 适合融入段落中。regular 按钮适合独立于段落之外:{% btn regular, 示例博客, https://xaoxuu.com, fas fa-play-circle %}large 按钮更具有强调作用,建议搭配 center 使用:{% btn center large, 开始使用, https://volantis.js.org/v3/getting-started/, fas fa-download %}行内按钮 不设置任何参数的 按钮 适合融入段落中。 空心按钮 示例博客 示例博客 示例博客 示例博客 居中: 开始使用 实心按钮 示例博客 示例博客 示例博客 示例博客 居中: 开始使用 富文本按钮请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果{% btns 样式参数 %}{% cell 标题, 链接, 图片或者图标 %}{% cell 标题, 链接, 图片或者图标 %}{% endbtns %}样式参数位置可以写图片样式、布局方式,多个样式参数用空格隔开。 圆角样式 默认为方形 rounded, circle 布局方式 默认为自动宽度,适合视野内只有一两个的情况。 参数 含义 wide 宽一点的按钮 fill 填充布局,自动铺满至少一行,多了会换行。 center 居中,按钮之间是固定间距。 around 居中分散 grid2 等宽最多2列,屏幕变窄会适当减少列数。 grid3 等宽最多3列,屏幕变窄会适当减少列数。 grid4 等宽最多4列,屏幕变窄会适当减少列数。 grid5 等宽最多5列,屏幕变窄会适当减少列数。 增加文字样式 可以在容器内增加 <b>标题</b> 和 <p>描述文字</p>如果需要显示类似「团队成员」之类的一组含有头像的链接: example.md:{% btns circle grid5 %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% endbtns %} 或者含有图标的按钮: example.md:{% btns rounded grid5 %}{% cell 下载源码, /, fas fa-download %}{% cell 查看文档, /, fas fa-book-open %}{% endbtns %} 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中 example.md:{% btns circle center grid5 %}<a href='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1'> <i class='fab fa-apple'></i> <b>心率管家</b> {% p red, 专业版 %} <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png'></a><a href='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1'> <i class='fab fa-apple'></i> <b>心率管家</b> {% p green, 免费版 %} <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'></a>{% endbtns %}如果需要显示类似「团队成员」之类的一组含有头像的链接: xaoxuu xaoxuu xaoxuu xaoxuu xaoxuu 或者含有图标的按钮: 下载源码 查看文档 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中 心率管家 专业版 心率管家 免费版"},{"title":"tag-plugins: checkbox","date":"2020-10-09T01:48:12.533Z","updated":"2020-10-09T01:48:12.533Z","comments":true,"path":"tag-plugins/checkbox/index.html","permalink":"https://volantis.js.org/tag-plugins/checkbox/","excerpt":"","text":"最后更新于 2.6 版本{% checkbox 样式参数(可选), 文本(支持简单md) %} 演示效果 纯文本测试 支持简单的 markdown 语法 支持自定义颜色 绿色 + 默认选中 黄色 + 默认选中 青色 + 默认选中 蓝色 + 默认选中 增加 减少 叉 上述示例的源码example:{% checkbox 纯文本测试 %}{% checkbox checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}{% checkbox red, 支持自定义颜色 %}{% checkbox green checked, 绿色 + 默认选中 %}{% checkbox yellow checked, 黄色 + 默认选中 %}{% checkbox cyan checked, 青色 + 默认选中 %}{% checkbox blue checked, 蓝色 + 默认选中 %}{% checkbox plus green checked, 增加 %}{% checkbox minus yellow checked, 减少 %}{% checkbox times red checked, 叉 %} 可以支持的参数颜色red, yellow, green, cyan, blue 样式plus, minus, times 选中状态checked"},{"title":"tag-plugins: dropmenu","date":"2020-10-09T01:48:12.533Z","updated":"2020-10-09T01:48:12.533Z","comments":true,"path":"tag-plugins/dropmenu/index.html","permalink":"https://volantis.js.org/tag-plugins/dropmenu/","excerpt":"","text":"这个页面的标签将会在不久后重构 下拉菜单请将您的 Volantis 升级至 3.0 版本以上使用。 语法格式示例写法示例效果容器 {% menu 前缀(可省略), 标题, 后缀(可省略) %}菜单内容{% endmenu %} 菜单内容 菜单项 {% menuitem 文本, 链接, 图标 %} 分割线 {% menuitem hr %} 子菜单 {% submenu 嵌套菜单, 图标 %}菜单内容{% endsubmenu %}示例1 {% menu 下拉菜单 %}{% menuitem 主题源码, https://github.com/volantis-x/hexo-theme-volantis/, fas fa-file-code %}{% menuitem 更新日志, https://github.com/volantis-x/hexo-theme-volantis/releases/, fas fa-clipboard-list %}{% menuitem hr %}{% submenu 有疑问?, fas fa-question-circle %}{% menuitem 看 FAQ, /faqs/ %}{% menuitem 看 本站源码, https://github.com/volantis-x/volantis-docs/ %}{% menuitem 提 Issue, https://github.com/volantis-x/hexo-theme-volantis/issues/ %}{% endsubmenu %}{% endmenu %} 示例2 {% menu 这个是, 下拉菜单 %}(同上){% endmenu %} 示例3 {% menu 这个是, 下拉菜单, 的示例效果。 %}(同上){% endmenu %}示例1 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 示例2 这个是 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 示例3 这个是 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 的示例效果。"},{"title":"tag-plugins: folding","date":"2020-10-09T01:48:12.533Z","updated":"2020-10-09T01:48:12.533Z","comments":true,"path":"tag-plugins/folding/index.html","permalink":"https://volantis.js.org/tag-plugins/folding/","excerpt":"","text":"最后更新于 2.3 版本{% folding 参数(可选), 标题 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %} 演示效果 查看图片测试 查看默认打开的折叠框 这是一个默认打开的折叠框。 查看代码测试 {% folding green, 查看代码测试 %}查看代码测试{% endfolding %} 查看列表测试 hahahehe 查看嵌套测试 查看嵌套测试2 查看嵌套测试3 hahaha 上述示例的源码example:{% folding 查看图片测试 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %}{% folding cyan open, 查看默认打开的折叠框 %}这是一个默认打开的折叠框。{% endfolding %}{% folding green, 查看代码测试 %}{% endfolding %}{% folding yellow, 查看列表测试 %}- haha- hehe{% endfolding %}{% folding red, 查看嵌套测试 %}{% folding blue, 查看嵌套测试2 %}{% folding 查看嵌套测试3 %}hahaha <span><img src='https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style='height:24px'></span>{% endfolding %}{% endfolding %}{% endfolding %} 可以支持的参数参数位置可以填写颜色和状态,多个参数用空格隔开。 颜色blue, cyan, green, yellow, red 状态状态填写 open 代表默认打开。"},{"title":"tag-plugins: frame","date":"2020-10-09T01:48:12.533Z","updated":"2020-10-09T01:48:12.533Z","comments":true,"path":"tag-plugins/frame/index.html","permalink":"https://volantis.js.org/tag-plugins/frame/","excerpt":"","text":"这是一个能够将图片或者视频套入设备框架中的标签,可以用来更优雅地显示截图、录屏。 本插件最后更新于 4.0 版本{% frame 框架名 | img=图片链接 | alt=图片描述(可选) | part=top/bottom(可选) %}{% frame 框架名 | video=视频链接 | part=top/bottom(可选) %} {% frame iphone11 | img=https://gitee.com/xaoxuu/cdn-assets/raw/master/wiki/prohud/toast-loading@2x.jpg | video=https://gitee.com/xaoxuu/cdn-assets/raw/master/wiki/prohud/toast-loading@2x.mov | part=top %} 在这个示例中同时出现了 img 和 video 那么它就是一个带有封面的视频,在视频加载完成之前会先显示视频封面。 设备框架目前支持的有: iphone11 如果您有以下其它设备框架图(svg),欢迎 PR 兼容。 android, ipad, macbook, watch 剪裁通过设置 part=top 或者 part=bottom 来显示上半部分或者下半部分,否则将显示完整的框架及其中的图片/视频。"},{"title":"tag-plugins: gallery","date":"2020-10-09T01:48:12.534Z","updated":"2020-10-09T01:48:12.534Z","comments":true,"path":"tag-plugins/gallery/index.html","permalink":"https://volantis.js.org/tag-plugins/gallery/","excerpt":"","text":"Gallery 标签是一种针对一组图片应用场景的标签。 本插件最后更新于 3.0 版本{% gallery 参数, 列数 %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg){% endgallery %} 演示效果一行一个图片 一行多个图片(不换行) 多行多个图片(每行2~8个图片) 上述示例的源码一行一个图片 example.md:{% gallery %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endgallery %} 一行多个图片(不换行) example.md:{% gallery %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg){% endgallery %} 多行多个图片(每行2~8个图片) example.md:{% gallery stretch, 4 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg){% endgallery %} 可以支持的参数对齐方向left, center, right 缩放stretch 列数逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch 来时图片放大填充。"},{"title":"tag-plugins: ghcard","date":"2020-10-09T01:48:12.534Z","updated":"2020-10-09T01:48:12.534Z","comments":true,"path":"tag-plugins/ghcard/index.html","permalink":"https://volantis.js.org/tag-plugins/ghcard/","excerpt":"","text":"最后更新于 4.0 版本{% ghcard 用户名, 其它参数(可选) %}{% ghcard 用户名/仓库, 其它参数(可选) %} 用户信息卡片 上述示例的源码: example:| {% ghcard xaoxuu %} | {% ghcard xaoxuu, theme=vue %} || -- | -- || {% ghcard xaoxuu, theme=buefy %} | {% ghcard xaoxuu, theme=solarized-light %} || {% ghcard xaoxuu, theme=onedark %} | {% ghcard xaoxuu, theme=solarized-dark %} || {% ghcard xaoxuu, theme=algolia %} | {% ghcard xaoxuu, theme=calm %} | 仓库信息卡片 上述示例的源码: example:| {% ghcard volantis-x/hexo-theme-volantis %} | {% ghcard volantis-x/hexo-theme-volantis, theme=vue %} || -- | -- || {% ghcard volantis-x/hexo-theme-volantis, theme=buefy %} | {% ghcard volantis-x/hexo-theme-volantis, theme=solarized-light %} || {% ghcard volantis-x/hexo-theme-volantis, theme=onedark %} | {% ghcard volantis-x/hexo-theme-volantis, theme=solarized-dark %} || {% ghcard volantis-x/hexo-theme-volantis, theme=algolia %} | {% ghcard volantis-x/hexo-theme-volantis, theme=calm %} | 更多参数选择GitHub 卡片 API 参数https://github-readme-stats.vercel.app"},{"title":"tag-plugins: image","date":"2020-10-09T01:48:12.534Z","updated":"2020-10-09T01:48:12.534Z","comments":true,"path":"tag-plugins/image/index.html","permalink":"https://volantis.js.org/tag-plugins/image/","excerpt":"","text":"Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。 本插件最后更新于 4.0 版本{% image 链接, width=宽度(可选), height=高度(可选), alt=描述(可选), bg=占位颜色(可选) %} 演示效果添加描述: 每天下课回宿舍的路,没有什么故事。 指定宽度: 指定宽度并添加描述: 每天下课回宿舍的路,没有什么故事。 设置占位背景色: 优化不同宽度浏览的观感 上述示例的源码example:添加描述:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, alt=每天下课回宿舍的路,没有什么故事。 %}指定宽度:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px %}指定宽度并添加描述:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, alt=每天下课回宿舍的路,没有什么故事。 %}设置占位背景色:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, bg=#1D0C04, alt=优化不同宽度浏览的观感 %} 可以支持的参数图片宽高度example:width=300px, height=32px 图片描述example:alt=图片描述 占位背景色example:bg=#f2f2f2"},{"title":"tag-plugins: inlineimage","date":"2020-10-09T01:48:12.535Z","updated":"2020-10-09T01:48:12.535Z","comments":true,"path":"tag-plugins/inlineimage/index.html","permalink":"https://volantis.js.org/tag-plugins/inlineimage/","excerpt":"","text":"Inlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。 本插件最后更新于 4.0 版本{% inlineimage 图片链接, height=高度(可选) %} 演示效果这是 一段话。 这又是 一段话。 上述示例的源码example:这是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %} 一段话。这又是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %} 一段话。 可以支持的参数高度height=20px"},{"title":"tag-plugins: link","date":"2020-10-09T01:48:12.536Z","updated":"2020-10-09T01:48:12.536Z","comments":true,"path":"tag-plugins/link/index.html","permalink":"https://volantis.js.org/tag-plugins/link/","excerpt":"","text":"最后更新于 3.0 版本{% link 标题, 链接, 图片链接(可选) %} 演示效果如何参与项目https://volantis.js.org/contributors/ 上述示例的源码example:{% link 如何参与项目, https://volantis.js.org/contributors/, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets@master/logo/256/safari.png %}"},{"title":"tag-plugins: issues","date":"2020-10-09T01:48:12.535Z","updated":"2020-10-09T01:48:12.535Z","comments":true,"path":"tag-plugins/issues/index.html","permalink":"https://volantis.js.org/tag-plugins/issues/","excerpt":"","text":"最后更新于 4.0 版本{% issues type | api=url | group=key:value1,value2(可选) %} 类型根据需求不同,会将 issues 内容解析成不同的 HTML 标签,目前支持的类型有: timeline: 解析成 timeline 标签,issue 的标题对应 timeline 的时间, issue 的内容对应 timeline 的内容。 sites: 解析成 sites 标签,需要有 JSON 代码块:{ "title": "", "screenshot": "", "url": "", "avatar": "", "description": "", "keywords": ""} API传可以调得通的 URL ,例如: api=https://gitee.com/api/v5/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=activeapi=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active 分组sites 类型的 issues 默认不分组,如果需要分组,可指定分组依据「key」,和分组白名单「value1」「value2」等,例如: group=version:v4,v3,v2 这个参数的作用就是,筛选出 JSON 中包含 "version": "v4" 或者 "version": "v3" 或者 "version": "v2" 的数据,并分组显示。 示例时间线{% issues timeline | api=https://gitee.com/api/v5/repos/xaoxuu/timeline/issues?state=open&creator=xaoxuu&sort=created&direction=desc&page=1&per_page=100 %} 显示效果: 对应的仓库链接: Gitee: xaoxuu/timelinehttps://gitee.com/xaoxuu/timeline/issues 友链{% issues sites | api=https://gitee.com/api/v5/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %}{% issues sites | api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %} 上例中的 labels=active 参数可以控制默认的 issue 不显示,只有自己审核通过添加了 active 标签之后才会显示。上述示例对应的仓库链接: GitHub: xaoxuu/friendshttps://github.com/xaoxuu/friends/issues 分组这是主题官网的「示例博客」页面的数据: {% issues sites | api=https://api.github.com/repos/volantis-x/examples/issues?sort=updated&state=open&page=1&per_page=100 | group=version:版本:^4.0,版本:^3.0,版本:^2.0 %} 上述示例对应的仓库链接: GitHub: volantis-x/exampleshttps://github.com/volantis-x/examples/issues"},{"title":"tag-plugins: note","date":"2020-10-09T01:48:12.536Z","updated":"2020-10-09T01:48:12.536Z","comments":true,"path":"tag-plugins/note/index.html","permalink":"https://volantis.js.org/tag-plugins/note/","excerpt":"","text":"NoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。 最后更新于 2.3 版本{% note 样式参数, 文本内容 %} 演示效果经典用法可以在配置文件中设置默认样式,为简单的一句话提供最的简便写法。 note quote 适合引用一段话 note info 默认主题色,适合中性的信息 note warning 默认黄色,适合警告性的信息 note error/danger 默认红色,适合危险性的信息 note done/success 默认绿色,适合正确操作的信息 更多图标这些都是默认样式,可以手动加上颜色: note radiation 默认样式 note radiation yellow 可以加上颜色 note bug red 说明还存在的一些故障 note link green 可以放置一些链接 note paperclip blue 放置一些附件链接 note todo 待办事项 note guide clear 可以加上一段向导 note download 可以放置下载链接 note message gray 一段消息 note up 可以说明如何进行更新 note undo light 可以说明如何撤销或者回退 上述示例的源码example:### 经典用法{% note, 可以在配置文件中设置默认样式,为简单的一句话提供最的简便写法。 %}{% note quote, note quote 适合引用一段话 %}{% note info, note info 默认主题色,适合中性的信息 %}{% note warning, note warning 默认黄色,适合警告性的信息 %}{% note danger, note error/danger 默认红色,适合危险性的信息 %}{% note success, note done/success 默认绿色,适合正确操作的信息 %}### 更多图标这些都是默认样式,可以手动加上颜色:{% note radiation, note radiation 默认样式 %}{% note radiation yellow, note radiation yellow 可以加上颜色 %}{% note bug red, note bug red 说明还存在的一些故障 %}{% note link green, note link green 可以放置一些链接 %}{% note paperclip blue, note paperclip blue 放置一些附件链接 %}{% note todo, note todo 待办事项 %}{% note guide clear, note guide clear 可以加上一段向导 %}{% note download, note download 可以放置下载链接 %}{% note message gray, note message gray 一段消息 %}{% note up, note up 可以说明如何进行更新 %}{% note undo light, note undo light 可以说明如何撤销或者回退 %} 可以支持的参数样式参数位置可以写图标和颜色,多个样式参数用空格隔开。 图标彩色的quote, info, warning, done/success, error/danger 灰色的,也可以指定颜色radiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo 颜色指定颜色clear, light, gray, red, yellow, green, cyan, blue"},{"title":"tag-plugins: noteblock","date":"2020-10-09T01:48:12.536Z","updated":"2020-10-09T01:48:12.536Z","comments":true,"path":"tag-plugins/noteblock/index.html","permalink":"https://volantis.js.org/tag-plugins/noteblock/","excerpt":"","text":"NoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。 最后更新于 4.0 版本{% noteblock 样式参数(可选), 标题(可选) %}文本段落{% endnoteblock %} 演示效果可以在区块中放置一些复杂的结构,支持嵌套。 标题(可选)Windows 10不是為所有人設計,而是為每個人設計嵌套测试: 请坐和放宽,我正在帮你搞定一切... Folding 测试: 点击查看更多 不要说我们没有警告过你我们都有不顺利的时候 上述示例的源码example:{% noteblock, 标题(可选) %}Windows 10不是為所有人設計,而是為每個人設計{% noteblock done %}嵌套测试: 请坐和放宽,我正在帮你搞定一切...{% endnoteblock %}{% folding yellow, Folding 测试: 点击查看更多 %}{% note warning, 不要说我们没有警告过你 %}{% noteblock bug red %}我们都有不顺利的时候{% endnoteblock %}{% endfolding %}{% endnoteblock %} 可以支持的参数样式参数位置可以写图标和颜色,多个样式参数用空格隔开。 图标彩色的quote, info, warning, done/success, error/danger 灰色的,也可以指定颜色radiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo 颜色指定颜色clear, light, gray, red, yellow, green, cyan, blue"},{"title":"tag-plugins: p","date":"2020-10-09T01:48:12.536Z","updated":"2020-10-09T01:48:12.536Z","comments":true,"path":"tag-plugins/p/index.html","permalink":"https://volantis.js.org/tag-plugins/p/","excerpt":"","text":"本插件最后更新于 2.5 版本{% p 样式参数, 文本内容 %} 演示效果彩色文字在一段话中方便插入各种颜色的标签,包括:红色、黄色、绿色、青色、蓝色、灰色。 超大号文字文档「开始」页面中的标题部分就是超大号文字。 Volantis A Wonderful Theme for Hexo 上述示例的源码example:### 彩色文字在一段话中方便插入各种颜色的标签,包括:{% p red, 红色 %}、{% p yellow, 黄色 %}、{% p green, 绿色 %}、{% p cyan, 青色 %}、{% p blue, 蓝色 %}、{% p gray, 灰色 %}。### 超大号文字文档「开始」页面中的标题部分就是超大号文字。{% p center logo large, Volantis %}{% p center small, A Wonderful Theme for Hexo %} 可以支持的参数样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。 字体logo, code 颜色red, yellow, green, cyan, blue, gray 大小small, h4, h3, h2, h1, large, huge, ultra 对齐方向left, center, right"},{"title":"tag-plugins: radio","date":"2020-10-09T01:48:12.537Z","updated":"2020-10-09T01:48:12.537Z","comments":true,"path":"tag-plugins/radio/index.html","permalink":"https://volantis.js.org/tag-plugins/radio/","excerpt":"","text":"最后更新于 2.6 版本{% checkbox 样式参数(可选), 文本(支持简单md) %} 演示效果 纯文本测试 支持简单的 markdown 语法 支持自定义颜色 绿色 黄色 青色 蓝色 上述示例的源码example:{% radio 纯文本测试 %}{% radio checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}{% radio red, 支持自定义颜色 %}{% radio green, 绿色 %}{% radio yellow, 黄色 %}{% radio cyan, 青色 %}{% radio blue, 蓝色 %} 可以支持的参数颜色red, yellow, green, cyan, blue 选中状态checked"},{"title":"tag-plugins: site","date":"2020-10-09T01:48:12.537Z","updated":"2020-10-09T01:48:12.537Z","comments":true,"path":"tag-plugins/site/index.html","permalink":"https://volantis.js.org/tag-plugins/site/","excerpt":"","text":"最后更新于 4.0 版本{% sitegroup %}{% site 标题, url=链接, screenshot=截图链接, avatar=头像链接(可选), description=描述(可选) %}{% site 标题, url=链接, screenshot=截图链接, avatar=头像链接(可选), description=描述(可选) %}{% endsitegroup %} 演示效果xaoxuu简约风格 inkss这是一段关于这个网站的描述文字 MHuiG这是一段关于这个网站的描述文字 Colsrch这是一段关于这个网站的描述文字 Linhk1606这是一段关于这个网站的描述文字 上述示例的源码example:{% sitegroup %}{% site xaoxuu, url=https://xaoxuu.com, screenshot=https://i.loli.net/2020/08/21/VuSwWZ1xAeUHEBC.jpg, avatar=https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png, description=简约风格 %}{% site inkss, url=https://inkss.cn, screenshot=https://i.loli.net/2020/08/21/Vzbu3i8fXs6Nh5Y.jpg, avatar=https://cdn.jsdelivr.net/gh/inkss/common@master/static/web/avatar.jpg, description=这是一段关于这个网站的描述文字 %}{% site MHuiG, url=https://blog.mhuig.top, screenshot=https://i.loli.net/2020/08/22/d24zpPlhLYWX6D1.png, avatar=https://cdn.jsdelivr.net/gh/MHuiG/imgbed@master/data/p.png, description=这是一段关于这个网站的描述文字 %}{% site Colsrch, url=https://colsrch.top, screenshot=https://i.loli.net/2020/08/22/dFRWXm52OVu8qfK.png, avatar=https://cdn.jsdelivr.net/gh/Colsrch/images/Colsrch/avatar.jpg, description=这是一段关于这个网站的描述文字 %}{% site Linhk1606, url=https://linhk1606.github.io, screenshot=https://i.loli.net/2020/08/21/3PmGLCKicnfow1x.png, avatar=https://i.loli.net/2020/02/09/PN7I5RJfFtA93r2.png, description=这是一段关于这个网站的描述文字 %}{% endsitegroup %}"},{"title":"tag-plugins: span","date":"2020-10-09T01:48:12.538Z","updated":"2020-10-09T01:48:12.538Z","comments":true,"path":"tag-plugins/span/index.html","permalink":"https://volantis.js.org/tag-plugins/span/","excerpt":"","text":"本插件最后更新于 2.5 版本{% span 样式参数, 文本内容 %} 演示效果彩色文字在一段话中方便插入各种颜色的标签,包括:红色、黄色、绿色、青色、蓝色、灰色。 超大号文字文档「开始」页面中的标题部分就是超大号文字。 Volantis A Wonderful Theme for Hexo 上述示例的源码example:### 彩色文字在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。### 超大号文字文档「开始」页面中的标题部分就是超大号文字。{% span center logo large, Volantis %}{% span center small, A Wonderful Theme for Hexo %} 可以支持的参数样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。 字体logo, code 颜色red, yellow, green, cyan, blue, gray 大小small, h4, h3, h2, h1, large, huge, ultra 对齐方向left, center, right"},{"title":"tag-plugins: tab","date":"2020-10-09T01:48:12.538Z","updated":"2020-10-09T01:48:12.538Z","comments":true,"path":"tag-plugins/tab/index.html","permalink":"https://volantis.js.org/tag-plugins/tab/","excerpt":"","text":"此插件移植自 NexT #tabs 最后更新于 2.1 版本{% tabs 页面内不重复的ID %}<!-- tab 栏目1 -->内容<!-- endtab --><!-- tab 栏目2 -->内容<!-- endtab -->{% endtabs %} 演示效果栏目1栏目2。。。!!! 上述示例的源码example:{% tabs tab-id %}<!-- tab 栏目1 -->。。。<!-- endtab --><!-- tab 栏目2 -->!!!<!-- endtab -->{% endtabs %}"},{"title":"tag-plugins: text","date":"2020-10-09T01:48:12.538Z","updated":"2020-10-09T01:48:12.538Z","comments":true,"path":"tag-plugins/text/index.html","permalink":"https://volantis.js.org/tag-plugins/text/","excerpt":"","text":"这是一些文本样式标签: 带 下划线 的文本 example.md:带 {% u 下划线 %} 的文本 带 着重号 的文本 example.md:带 {% emp 着重号 %} 的文本 带 波浪线 的文本 example.md:带 {% wavy 波浪线 %} 的文本 带 删除线 的文本 example.md:带 {% del 删除线 %} 的文本 键盘样式的文本 command + D example.md:键盘样式的文本 {% kbd command %} + {% kbd D %} 密码样式的文本:这里没有验证码 example.md:密码样式的文本:{% psw 这里没有验证码 %}"},{"title":"tag-plugins: timeline","date":"2020-10-09T01:48:12.538Z","updated":"2020-10-09T01:48:12.538Z","comments":true,"path":"tag-plugins/timeline/index.html","permalink":"https://volantis.js.org/tag-plugins/timeline/","excerpt":"","text":"最后更新于 3.0 版本{% timeline 时间线标题(可选) %}{% timenode 时间节点(标题) %}正文内容{% endtimenode %}{% timenode 时间节点(标题) %}正文内容{% endtimenode %}{% endtimeline %} 演示效果 2020-07-24 2.6.6 -> 3.0 如果有 hexo-lazyload-image 插件,需要删除并重新安装最新版本,设置 lazyload.isSPA: true。2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true 则需要删除。2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。2.x 版本的置顶 top: true 改为了 pin: true,并且同样适用于 layout: page 的页面。如果使用了 hexo-offline 插件,建议卸载,3.0 版本默认开启了 pjax 服务。 2020-05-15 2.6.3 -> 2.6.6 不需要额外处理。 2020-04-20 2.6.2 -> 2.6.3 全局搜索 seotitle 并替换为 seo_title。group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name。group 组件的列表名优先显示文章的 short_title 其次是 title。 上述示例的源码example:{% timeline %}{% timenode 2020-07-24 [2.6.6 -> 3.0](https://github.com/volantis-x/hexo-theme-volantis/releases) %}1. 如果有 `hexo-lazyload-image` 插件,需要删除并重新安装最新版本,设置 `lazyload.isSPA: true`。2. 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 `use_cdn: true` 则需要删除。3. 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。4. 2.x 版本的置顶 `top: true` 改为了 `pin: true`,并且同样适用于 `layout: page` 的页面。5. 如果使用了 `hexo-offline` 插件,建议卸载,3.0 版本默认开启了 pjax 服务。{% endtimenode %}{% timenode 2020-05-15 [2.6.3 -> 2.6.6](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6) %}不需要额外处理。{% endtimenode %}{% timenode 2020-04-20 [2.6.2 -> 2.6.3](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.3) %}1. 全局搜索 `seotitle` 并替换为 `seo_title`。2. group 组件的索引规则有变,使用 group 组件的文章内,`group: group_name` 对应的组件名必须是 `group_name`。2. group 组件的列表名优先显示文章的 `short_title` 其次是 `title`。{% endtimenode %}{% endtimeline %}"},{"title":"tag-plugins: video","date":"2020-10-09T01:48:12.539Z","updated":"2020-10-09T01:48:12.539Z","comments":true,"path":"tag-plugins/video/index.html","permalink":"https://volantis.js.org/tag-plugins/video/","excerpt":"","text":"本插件最后更新于 2.3 版本{% video 视频链接 %} 演示效果100%宽度 Your browser does not support the video tag. 50%宽度 Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. 25%宽度 Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. 上述示例的源码100%宽度 example.md:{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} 50%宽度 example.md:{% videos, 2 %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% endvideos %} 25%宽度 example.md:{% videos, 4 %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% endvideos %} 可以支持的参数对齐方向left, center, right 列数逗号后面直接写列数,支持 1 ~ 4 列。"},{"title":"选择评论系统","date":"2020-10-09T01:48:12.539Z","updated":"2020-10-09T01:48:12.539Z","comments":true,"path":"theme-settings/comments/index.html","permalink":"https://volantis.js.org/theme-settings/comments/","excerpt":"","text":"目前支持的评论系统有: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover blog/_config.volantis.ymlcomments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine # valine, minivaline, disqus, gitalk, vssue, livere, isso, hashover ValineMiniValineVssueGitalkDisqusLivereIssoHashover... 一款快速、简洁且高效的无后端评论系统 https://valine.js.org blog/_config.volantis.ymlcomments: ... service: valine ... valine: appId: # your appId appKey: # your appKey js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js ... 可选配置项详见源码 其中,placeholder 支持在 front-matter 中设置。 front-matter---valine: placeholder: 你觉得xxx怎么样呢?--- 也可以通过设置 valine.path 实现多个页面共用一个评论框。 front-matter---valine: path: /wiki/volantis/--- 一款快速、简洁且高效的无后端评论系统 https://github.com/MiniValine/MiniValine/ blog/_config.volantis.ymlcomments: ... service: minivaline ... minivaline: appId: # Your leancloud application appid appKey: # Your leancloud application appkey ... 可选配置项详见源码 Vue 驱动的、基于 Issue 的评论插件 https://vssue.js.org/zh/ blog/_config.volantis.ymlcomments: ... service: vssue ... vssue: owner: repo: clientId: clientSecret: A modern comment component based on Github Issue and Preact. https://gitalk.github.io/ blog/_config.volantis.ymlcomments: ... service: gitalk ... gitalk: clientID: clientSecret: repo: owner: admin: # [] clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤: 点击 GitHub -> Settings https://github.com/settings/profile 点击 Developer settings https://github.com/settings/developers 点击 New OAuth App https://github.com/settings/applications/new 填写信息: Application name 随便填,我的是:xaoxuu.comHomepage URL 和 Authorization callback URL 都写你的网址,我的是:https://xaoxuu.com 可以通过设置 gitalk.id 实现多个页面共用一个评论框。 front-matter---gitalk: id: /wiki/volantis/--- Disqus - The #1 way to build an audience on your website. https://disqus.com/ blog/_config.volantis.ymlcomments: ... service: disqus ... disqus: shortname: Communication makes better world. https://www.livere.com/ blog/_config.volantis.ymlcomments: ... service: livere ... livere: uid: #你的livere的uid 在这里查看你的 uid:https://livere.com/insight/myCode,在【代码管理 -> 一般网站】中找到如下这段代码,其中 data-uid 中的内容就是你的 livere_uid。 <!-- 来必力City版安装代码 --><div id="lv-container" data-id="city" data-uid="你的livere的uid">... A commenting server similar to Disqus. https://posativ.org/isso/ blog/_config.volantis.ymlcomments: ... service: isso ... isso: url: https://example.com/(path/) src: https://example.com/(path/)js/embed.min.js A free and open source PHP comment system designed to allow completely anonymous comments and easy theming. https://www.barkdull.org/software/hashover blog/_config.volantis.ymlcomments: ... service: hashover ... hashover: src: https://example.com/(path/)comments.phpblog/themes/volantis/layout/_third-party/comments/评论系统名称/layout.ejs这里写布局代码 blog/themes/volantis/layout/_third-party/comments/评论系统名称/script.ejs这里要写加载 js 的代码 收录更多评论系统"},{"title":"创建主题配置文件","date":"2020-10-09T01:48:12.540Z","updated":"2020-10-09T01:48:12.540Z","comments":true,"path":"theme-settings/configuration/index.html","permalink":"https://volantis.js.org/theme-settings/configuration/","excerpt":"","text":"主题目录下的 _config.yml 文件通常负责主题相关配置,我们强烈建议您使用代替的主题配置文件以防止自己的配置丢失。那么如何使用代替主题配置文件呢? 第 1/2 步:创建配置文件 在博客根目录的 _config.yml 文件旁边新建一个文件: _config.volantis.yml ,这个文件中的配置信息优先级高于主题文件夹中的配置文件。 第 2/2 步:覆盖自定义配置 当您需要修改某项内容时,例如导航栏菜单,那么您需要在主题配置文件中找到相关内容,复制进自己创建的配置文件中:blog/_config.volantis.ymlnavbar: visiable: auto # always, auto logo: # choose [img] or [icon + title] img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/Logo-NavBar@3x.png icon: title: menu: - name: 博客 icon: fas fa-rss url: /小提示使用「npm i hexo-theme-volantis」方式安装的主题,主题配置文件在「blog/node_modules/hexo-theme-volantis/_config.yml」使用传统方式安装的主题,主题配置文件在「blog/themes/volantis/_config.yml」"},{"title":"网站与文章封面","date":"2020-10-09T01:48:12.540Z","updated":"2020-10-09T01:48:12.540Z","comments":true,"path":"theme-settings/cover/index.html","permalink":"https://volantis.js.org/theme-settings/cover/","excerpt":"","text":"封面高度blog/_config.volantis.ymlcover: height_scheme: full # full, half ... 目前主题提供两种首页封面高度方案,其它页面均为半屏幕高度。 封面布局方案blog/_config.volantis.ymlcover: ... scheme: dock # search (搜索), dock (坞), featured (精选), focus (焦点) ... 布局方案 适合场景 search 注重搜索 dock 入口选项比较多 featured 选项在4个左右 focus 选项在4个左右 默认显示设置blog/_config.volantis.ymlcover: ... display: home: true archive: false others: false # can be written in front-matter 'cover: true' 由于主页、归档是 hexo 自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter 中通过设置 cover: true/false 来决定显示封面或者不显示封面。"},{"title":"设置网站页脚","date":"2020-10-09T01:48:12.540Z","updated":"2020-10-09T01:48:12.540Z","comments":true,"path":"theme-settings/footer/index.html","permalink":"https://volantis.js.org/theme-settings/footer/","excerpt":"","text":"您通过 layout 可以自由布局网站页脚内容 aplayer, social, license, info, copyright。 blog/_config.volantis.ymlsite_footer: # layout of footer: [aplayer, social, license, info, copyright] layout: [aplayer, social, license, info, copyright] social: - icon: fas fa-rss url: atom.xml - icon: fas fa-envelope url: mailto:me@xaoxuu.com - icon: fab fa-github url: https://github.com/xaoxuu - icon: fas fa-headphones-alt url: https://music.163.com/#/user/home?id=63035382 copyright: '[Copyright © 2017-2020 Mr. X](https://xaoxuu.com)' # You can add your own property here. (Support markdown, for example: br: '<br>') br: '<br>' 其中,aplayer 需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如: blog/_config.volantis.ymlsite_footer: layout: [..., br, hello, ...] ... # You can add your own property here. (Support markdown, for example: br: '<br>') br: '<br>' hello: '[Hello World](/)'"},{"title":"文章布局配置","date":"2020-10-09T01:48:12.541Z","updated":"2020-10-09T01:48:12.541Z","comments":true,"path":"theme-settings/layout/index.html","permalink":"https://volantis.js.org/theme-settings/layout/","excerpt":"","text":"# 文章布局article: # 文章列表页面的文章卡片布局方案 preview: scheme: landscape # landscape # pin icon for post pin_icon: https://cdn.jsdelivr.net/gh/twitter/twemoji@13.0/assets/svg/1f4cc.svg # auto generate title if not exist auto_title: true # false, true # auto generate excerpt if not exist auto_excerpt: true # false, true # show split line or not line_style: solid # hidden, solid, dashed, dotted # show readmore button readmore: auto # auto, always # 文章详情页面的文章卡片本体布局方案 body: # 文章顶部信息 # 从 meta_library 中取 top_meta: [author, category, date, counter] # ---------------- # 文章页脚组件 footer_widget: # ---------------- # 参考资料、相关资料等 (for layout: post/docs) references: title: 参考资料 icon: fas fa-quote-left # 在 front-matter 中: # references: # - title: 某篇文章 # url: https:// # 即可显示此组件。 # ---------------- # 相关文章,需要安装插件 (for layout: post) # npm i hexo-related-popular-posts related_posts: enable: false title: 相关文章 icon: fas fa-bookmark max_count: 5 # 设为空则不使用文章头图 placeholder_img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg # ---------------- # 版权声明组件 (for layout: post/docs) copyright: enable: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink # ---------------- # 打赏组件 (for layout: post/docs) donate: enable: false images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png # 文章底部信息 # 从 meta_library 中取 bottom_meta: [updated, tags, share] # meta library meta_library: # 默认文章作者(可在 front-matter 中覆盖) author: avatar: name: 请设置文章作者 url: / # 文章创建日期 date: icon: fas fa-calendar-alt title: '发布于:' format: 'll' # 日期格式 http://momentjs.com/docs/ # 文章更新日期 updated: icon: fas fa-edit title: '更新于:' format: 'll' # 日期格式 http://momentjs.com/docs/ # 文章分类 category: icon: fas fa-folder-open # 文章浏览计数 counter: icon: fas fa-eye unit: '次浏览' # 文章评论数量:只支持 valine valinecount: icon: fas fa-comment-dots desc: '' # 条评论 # 文章字数和阅读时长 wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half # 文章标签 tags: icon: fas fa-hashtag # 分享 share: - id: qq img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png - id: qzone img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png - id: weibo img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png - id: # qrcode # 当id为qrcode时需要安装插件 npm i hexo-helper-qrcode img: # https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/wechat.png - id: # telegram img: # https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/telegram.png 其中 top_meta 和 bottom_meta 部分的取值自 meta_library 库。"},{"title":"设置网站导航栏","date":"2020-10-09T01:48:12.541Z","updated":"2020-10-09T01:48:12.541Z","comments":true,"path":"theme-settings/navbar/index.html","permalink":"https://volantis.js.org/theme-settings/navbar/","excerpt":"","text":"导航栏配置导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。 blog/_config.volantis.ymlnavbar: logo: # choose [img] or [icon + title] img: icon: title: menu: # The following can be written in `blog/source/_data/menu.yml` - name: 博客 icon: fas fa-rss url: / - name: 分类 icon: fas fa-folder-open url: categories/ - name: 标签 icon: fas fa-tags url: tags/ - name: 归档 icon: fas fa-archive url: archives/ - name: 友链 icon: fas fa-link url: friends/ - name: 关于 icon: fas fa-info-circle url: about/ search: 搜索 # Search bar placeholder 使用数据文件 建议新建一个文件,专门存放导航栏菜单配置,文件的路径为: blog/source/_data/menu.yml 文件的内容为: blog/source/_data/menu.yml- name: 博客 icon: fas fa-rss url: /... 菜单嵌套导航栏菜单支持嵌套,嵌套的属性名为 rows ,写法示例: blog/source/_data/menu.yml...- name: 更多 icon: fas fa-ellipsis-v rows: - name: 主题源码 url: https://github.com/volantis-x/hexo-theme-volantis/ - name: 更新日志 url: https://github.com/volantis-x/hexo-theme-volantis/releases/ - name: hr - name: 有疑问? rows: - name: 看 FAQ url: faqs/ - name: 看 本站源码 url: https://github.com/volantis-x/volantis-docs/ - name: 提 Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: hr - name: 公告和测试博文 url: archives/ - name: 示例博客 url: examples/ - name: 特别感谢 url: contributors/ 分割线在子菜单中,新增一个只有 name: hr 的“菜单”就会被渲染成一个分割线。 - name: hr 小标题在子菜单中,新增一个只有 name: 小标题内容(也可以有 icon: 小标题的图标)的“菜单”就会被渲染成一个小标题。 ...- name: 近期 icon: fas fa-clock url: / rows: - name: 热门文章 icon: fas fa-fire - name: ProHUD 开源库的设计思路 url: blog/2019-08-27-prohud/ - name: ValueX:实用的安全对象类型转换库 url: blog/2019-08-29-valuex/ - name: 心率管家 App 的设计与开发 url: blog/2019-07-23-heartmate/"},{"title":"第三方插件","date":"2020-10-09T01:48:12.541Z","updated":"2020-10-09T01:48:12.541Z","comments":true,"path":"theme-settings/plugins/index.html","permalink":"https://volantis.js.org/theme-settings/plugins/","excerpt":"","text":"插件库Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。 blog/_config.volantis.ymlplugins: ################ required plugins ################ # jquery jquery: https://cdn.jsdelivr.net/npm/jquery@3.5/dist/jquery.min.js # fontawesome fontawesome: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.14/css/all.min.css ################ optional plugins ################ ######## Plugins to improve loading speed: # 预加载 preload: enable: true service: flying_pages # instant_page, flying_pages instant_page: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js flying_pages: https://cdn.jsdelivr.net/gh/gijo-varghese/flying-pages@2.1.2/flying-pages.min.js # 图片懒加载 # https://www.npmjs.com/package/vanilla-lazyload lazyload: enable: true js: https://cdn.jsdelivr.net/npm/vanilla-lazyload@17.1.0/dist/lazyload.min.js onlypost: false loadingImg: # https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/placeholder/c617bfd2497fcea598e621413e315c368f8d8e.svg blurIn: true # 模糊加载效果 (loadingImg为空时有效) ######## Plugins to optimize the experience: # highlight.js highlightjs: enable: #true # Please set hexo.config.highlight.enable = false !!! js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css # more: https://www.jsdelivr.com/package/npm/highlight.js?path=styles # https://scrollrevealjs.org/api/reveal.html scrollreveal: enable: #true js: https://cdn.jsdelivr.net/npm/scrollreveal@4.0.6/dist/scrollreveal.min.js distance: 32px duration: 800 # ms interval: 20 # ms scale: 1 # 0.1~1 # Codeblock Copy Button clipboard: enable: true js: https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js ######## Plugins for SEO: # npm i hexo-wordcount wordcount: enable: #true ######## Plugins for ... # Button Ripple Effect nodewaves: enable: #true css: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css js: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js # fontawesome animation fontawesome_animation: enable: #true css: https://cdn.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css # Typing Effects comment_typing: enable: #true js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js # Slide Background backstretch: enable: #true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover # cover: sticky on the cover. fixed: Fixed as background for the site. shuffle: true # shuffle playlist duration: 10000 # Duration (ms) fade: 1500 # fade duration (ms) (Not more than 1500) images: # For personal use only. At your own risk if used for commercial purposes !!! - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/056.jpg # APlayer is only available in mainland China. # APlayer config: https://github.com/metowolf/MetingJS aplayer: enable: #true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js # Required server: netease # netease, tencent, kugou, xiami, baidu type: playlist # song, playlist, album, search, artist id: 3175833810 # song id / playlist id / album id / search keyword # Optional fixed: false # enable fixed mode theme: '#1BCDFC' # main color autoplay: false # audio autoplay order: list # player play order, values: 'list', 'random' loop: all # player loop play, values: 'all', 'one', 'none' volume: 0.7 # default volume, notice that player will remember user setting, default volume will not work after user set volume themselves list_max_height: 320px # list max height list_folded: true pjax: enable: true timeout: 5000 # The timeout in milliseconds for the XHR requests. Set to 0 to disable the timeout. cacheBust: false # When set to true, Pjax appends a timestamp to skip the browser cache. animation: nprogress # nprogress, circle banUrl: # 被屏蔽的 url 地址将不启用 pjax 跳转,可以在控制台下使用 window.location.pathname 获取 # - /artitalk/ # artitalk 不支持 pjax # Artitalk https://artitalk.js.org # 配置过程请参考:https://artitalk.js.org/doc.html # 除appID和appKEY外均为选填项 artitalk: # Set `layout: artitalk` to enable in page appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # severurl: #leancloud绑定的安全域名,使用国际版的话不需要填写 # slanguage: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语 # per: #每页说说的显示数量 # placeholder1: #在编辑说说的输入框中的占位符 # placeholder2: #自定义头像url的输入框的占位符 # lazy: #加载动画的开关,1为开,0为关,默认为开 # bgimg: #说说输入框背景图片url # color1: #说说背景颜色1&按钮颜色1 # color2: #说说背景颜色2&按钮颜色2 # color3: #说说字体颜色 ################################## # 暗黑模式 darkmodejs # https://darkmodejs.learn.uno # 暗黑模式样式:https://github.com/volantis-x/hexo-theme-volantis/blob/master/source/css/_third-party/darkmode.styl darkmodejs: enable: #true js: https://cdn.jsdelivr.net/npm/darkmode-js@1.5/lib/darkmode-js.min.js button: # button 使用默认或自行开发 enable: true left: '16px' bottom: '32px' buttonDark: '#333' buttonLight: '#ddd' compatible: true # 卡片兼容性处理,如果未发现卡片出现兼容问题设置为false 幻灯片背景blog/_config.volantis.ymlplugins: ... backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover # cover: sticky on the cover. fixed: Fixed as background for the site. duration: 20000 # Duration (ms) fade: 1500 # fade duration (ms) (Not more than 1500) images: # For personal use only. At your own risk if used for commercial purposes !!! - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ... 幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。 highlight.jsblog/_config.volantis.ymlplugins: ... highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css 如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable 设置为 false 否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。 如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。 经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。 APlayer 音乐播放器blog/_config.volantis.ymlplugins: ... aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js # Required server: netease # netease, tencent, kugou, xiami, baidu type: playlist # song, playlist, album, search, artist id: 3175833810 # song id / playlist id / album id / search keyword # Optional fixed: false # enable fixed mode theme: '#1BCDFC' # main color autoplay: false # audio autoplay order: list # player play order, values: 'list', 'random' loop: all # player loop play, values: 'all', 'one', 'none' volume: 0.7 # default volume, notice that player will remember user setting, default volume will not work after user set volume themselves list_max_height: 340px # list max height list_folded: true APlayer播放器只可以在中国大陆地区使用。相关文档: APlayer | MetingJS Artitalkblog/_config.volantis.ymlplugins: ... # Artitalk https://artitalk.js.org # 配置过程请参考:https://artitalk.js.org/doc.html # 除appID和appKEY外均为选填项 Artitalk: enable: false # true为开启,false为关闭 appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # severurl: #leancloud绑定的安全域名,使用国际版的话不需要填写 # slanguage: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语 # per: #每页说说的显示数量 # placeholder1: #在编辑说说的输入框中的占位符 # placeholder2: #自定义头像url的输入框的占位符 # lazy: #加载动画的开关,1为开,0为关,默认为开 # bgimg: #说说输入框背景图片url # color1: #说说背景颜色1&按钮颜色1 # color2: #说说背景颜色2&按钮颜色2 # color3: #说说字体颜色"},{"title":"站内搜索","date":"2020-10-09T01:48:12.542Z","updated":"2020-10-09T01:48:12.542Z","comments":true,"path":"theme-settings/search/index.html","permalink":"https://volantis.js.org/theme-settings/search/","excerpt":"","text":"blog/_config.volantis.ymlsearch: enable: true service: hexo # hexo, google, algolia, azure, baidu js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2.6.4/js/search.js google: apiKey: engineId: algolia: applicationID: apiKey: indexName: azure: serviceName: indexName: queryKey: baidu: apiId: 默认配置为 Hexo 搜索,但是需要安装插件才能使用: npm i -S hexo-generator-search hexo-generator-json-content"},{"title":"侧边栏配置","date":"2020-10-09T01:48:12.542Z","updated":"2020-10-09T01:48:12.542Z","comments":true,"path":"theme-settings/sidebar/index.html","permalink":"https://volantis.js.org/theme-settings/sidebar/","excerpt":"","text":"侧边栏小组件与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。 查看所有相关配置 blog/_config.volantis.ymlsidebar: # 主页、分类、归档等独立页面 for_page: [blogger, category, tagcloud, qrcode] # layout: docs/post 这类文章页面 for_post: [toc] # 侧边栏组件库 widget_library: # --------------------------------------- # blogger info widget blogger: class: blogger display: [desktop, mobile] # [desktop, mobile] avatar: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/Logo-NavBar@3x.png shape: rectangle # circle, rectangle url: /about/ title: subtitle: jinrishici: true # Poetry Today. You can set a string, and it will be displayed when loading fails. social: true # --------------------------------------- # toc widget (valid only in articles) toc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 # --------------------------------------- # category widget category: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ # --------------------------------------- # tagcloud widget tagcloud: class: tagcloud display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' # --------------------------------------- # qrcode widget donate: class: qrcode display: [desktop, mobile] # [desktop, mobile] height: 64px # Automatic height if not set images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png # --------------------------------------- # webinfo widget webinfo: class: webinfo display: [desktop] header: icon: fas fa-award title: 站点信息 type: article: enable: true text: '文章数目:' unit: '篇' runtime: enable: true data: '2020/01/01' # 填写建站日期 text: '已运行时间:' unit: '天' wordcount: enable: true text: '本站总字数:' # 需要启用 wordcount unit: '字' siteuv: enable: true text: '本站访客数:' # 需要启用 busuanzi unit: '人' sitepv: enable: true text: '本站总访问量:' # 需要启用 busuanzi unit: '次' lastupd: enable: true friendlyShow: true # 更友好的时间显示 text: '最后活动时间:' unit: '日' 每一个小部件都有 class 和 display,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。 小部件名: class: 小部件类别 display: [小部件在桌面端是否显示, 小部件在移动设备是否显示] 博主信息部件blog/_config.volantis.ymlblogger: class: blogger display: [desktop] # [desktop, mobile] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true # Poetry Today. You can set a string, and it will be displayed when loading fails. social: true 其中,今日诗词 jinrishici 如果设置为一个字符串,这个字符串会变成占位文字,加载失败时显示。如果不需要,就请设置为 jinrishici: false。social 的具体内容请在网站页脚部分设置。 文章目录部件blog/_config.volantis.ymltoc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 这个部件只能放置在侧边栏,并且在文章中有效。在移动设备中预览时,手指向上滑动时,导航栏右边会出现 TOC 按钮,点击即可展开 TOC 部件。如果您需要显示章节序号,请设置 list_number。 min_depth 和 max_depth 代表 TOC 支持的标题层级,最大范围是2~6。 文章分类部件blog/_config.volantis.ymlcategory: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ 这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。 标签云部件blog/_config.volantis.ymltagcloud: class: tagcloud display: [desktop] # [desktop, mobile] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' 这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。 二维码部件blog/_config.volantis.ymldonate: class: qrcode display: [desktop, mobile] # [desktop, mobile] height: 64px # Automatic height if not set images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png 您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。 通用文本部件blog/_config.volantis.ymlrepos: class: text display: [desktop] # [desktop, mobile] header: icon: fab fa-github title: 点个赞吧 url: https://github.com/xaoxuu/ content: - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/xaoxuu/Inspire)' 您可以创建用于展示任何文本内容的文本部件。 通用列表部件blog/_config.volantis.ymlwiki-hexo-theme: class: list display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-chevron-left title: Hexo Themes url: /wiki/ rows: - name: Volantis for Hexo url: /wiki/volantis/ - name: Resume for Hexo url: /wiki/resume/ 您可以创建用于展示任何链接列表的列表部件。列表的 rows 中的每一项支持的属性有: name、url、icon、img、avatar,其中 img 是方形图片的链接,avatar 是圆形图片的链接。 组索引这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。 blog/_config.volantis.ymlgroup-1: class: group display: [desktop, mobile] # [desktop, mobile] header: icon: fab fa-github title: Git url: /wiki/git/ 在文章的 front-matter 中设置: front-mattergroup: group-1order: 16sidebar: [group-1, toc] 「group-1」卡片将会以列表的形式显示所有设置了 group: group-1 的文章,顺序按照 order 从小到大排列。 通用网格部件blog/_config.volantis.ymlfeedback: class: grid display: [desktop, mobile] header: icon: fas fa-headset title: 联系开发者 url: https://github.com/volantis-x/hexo-theme-volantis fixed: true # 固定宽度 rows: - name: 反馈BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 疑问求助 icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 提个建议 icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/ 您可以创建用于展示任何链接列表的网格部件。网格默认根据文字长度自动确定每一个格子的宽度,如果文字长短不一,建议通过设置 fixed: true 来固定宽度,此时文字过长的格子中的文字会换行显示。 通用页面部件blog/_config.volantis.ymltest: class: page display: [desktop, mobile] pid: haha content: excerpt # excerpt, more, content 您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid 属性和文章的 front-matter 中设置一样的 pid 即可。 content 代表这个部件显示的内容,可选 excerpt,more,content 分别对应文章的摘要、摘要后面的内容、全文。"},{"title":"自定义主题外观","date":"2020-10-09T01:48:12.543Z","updated":"2020-10-09T01:48:12.543Z","comments":true,"path":"theme-settings/style/index.html","permalink":"https://volantis.js.org/theme-settings/style/","excerpt":"","text":"最大布局宽度blog/_config.volantis.ymlcustom_css: ... max_width: 1080px # Sum of body width and sidebar width 网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。 抗锯齿blog/_config.volantis.ymlcustom_css: ... font_smoothing: true # font-smoothing for webkit 自定义光标样式blog/_config.volantis.ymlcustom_css: ... cursor: enable: true text: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/text.png pointer: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png default: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png not-allowed: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/circle.png zoom-out: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png zoom-in: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png grab: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png 导航栏样式您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有: shadow:卡片阴影。 floatable:当鼠标移动到容器内时,呈现出浮起来的效果。 blur:背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。 blog/_config.volantis.ymlcustom_css: ... navbar: height: 64px effect: [shadow, blur] # [shadow, floatable, blur] 滚动条样式blog/_config.volantis.ymlcustom_css: ... scrollbar: size: 4px border: 2px color: '#2196f3' hover: '#ff5722' 侧边栏样式视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。 blog/_config.volantis.ymlcustom_css: ... sidebar: effect: [shadow] # [shadow, floatable, blur] 正文区域样式视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。您可以在 language: true 这里设置代码块显示语言名称。text_align 可以设置 h1/h2/h3/h4/p 的文字对齐方向。 blog/_config.volantis.ymlcustom_css: ... body: effect: [shadow] # [shadow, floatable, blur] highlight: language: true # show language of codeblock copy_btn: true text_align: # left, right, justify, center h1: left h2: left h3: left h4: left p: justify note: # style for default note: {% note text %} icon: '\\f054' color: '' 布局间距您可以设置几种标题的布局间距 h2/h3/h4、段落间距 line、区块内部的段落间距 inline。 blog/_config.volantis.ymlcustom_css: ... gap: h2: 48px # Spacing above H2 (only px unit) h3: 32px # Spacing above H3 (only px unit) h4: 16px # Spacing above H4 (only px unit) paragraph: 1rem # Paragraph spacing between paragraphs row: .5rem # Paragraph spacing between other elements 自定义字体您可以自定义正文和代码字体。 blog/_config.volantis.ymlcustom_css: ... fontfamily: logofont: fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'Varela Round' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf weight: normal style: normal bodyfont: fontfamily: 'UbuntuMono, "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'UbuntuMono' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf weight: normal style: normal codefont: fontfamily: 'Menlo, Monaco' name: 'Monaco' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf weight: normal style: normal 自定义颜色blog/_config.volantis.ymlcolor_scheme: # ------------ # 通用颜色 common: # 主题色 theme: '#44D7B6' # 链接色 link: '#2196f3' # 按钮色 button: '#44D7B6' # 鼠标放到交互元素上时的色 hover: '#ff5722' # 主题色块内部的文字颜色 inner: '#fff' # 选中区域文字的背景颜色 selection: 'alpha(#2196f3, 0.2)' # ------------ # 亮色主题(默认) light: # 网站背景色 site_bg: '#f4f4f4' # 网站背景上的文字 site_inner: '#fff' # 网站页脚文字 site_footer: '#666' # 卡片背景色 card: '#fff' # 卡片上的普通文字 text: '#444' # 区块和代码块背景色 block: '#f6f6f6' # 代码块高亮时的背景色 codeblock: '#FFF7EA' # 行内代码颜色 inlinecode: '#D56D28' # 文章部分 h1: '#444' h2: '#444' h3: '#444' h4: '#444' h5: '#444' h6: '#444' p: '#444' # 列表文字 list: '#666' # 列表 hover 时的文字 list_hl: 'mix($color-theme, #000, 80)' # 辅助性文字 meta: '#888' # ------------ # 暗色主题 dark: # 网站背景色 site_bg: '#222' # 网站背景上的文字 site_inner: '#eee' # 网站页脚文字 site_footer: '#aaa' # 卡片背景色 card: '#444' # 卡片上的普通文字 text: '#eee' # 区块和代码块背景色 block: '#3a3a3a' # 代码块高亮时的背景色 codeblock: '#343a3c' # 行内代码颜色 inlinecode: '#D56D28' # 文章部分 h1: '#eee' h2: '#eee' h3: '#ddd' h4: '#ddd' h5: '#ddd' h6: '#ddd' p: '#bbb' # 列表文字 list: '#aaa' # 列表 hover 时的文字 list_hl: 'mix($color-theme, #fff, 80)' # 辅助性文字 meta: '#888' # 夜间图片亮度 brightness: 70% 自定义右键菜单blog/_config.volantis.ymlrightmenu: enable: true # hr: 分割线, music: 音乐控制器 layout: [home, help, examples, contributors, hr, source_docs, source_theme, hr, print, hr, music] # 可选功能项 print: name: 打印页面 icon: fa fa-print onclick: document.execCommand('print') # 自定义菜单的格式如下 help: name: 常见问题 icon: fa fa-question url: https://volantis.js.org/faqs/ examples: name: 示例博客 icon: fa fa-rss url: https://volantis.js.org/examples/ contributors: name: 加入社区 icon: fa fa-fan fa-spin url: https://volantis.js.org/contributors/ source_docs: name: 本站源码 icon: fa fa-code-branch url: https://github.com/volantis-x/volantis-docs/ source_theme: name: 主题源码 icon: fa fa-code-branch url: https://github.com/volantis-x/hexo-theme-volantis/"},{"title":"进阶设定","date":"2020-09-21T10:19:27.607Z","updated":"2020-09-21T10:19:27.607Z","comments":true,"path":"v2/advanced-settings/index.html","permalink":"https://volantis.js.org/v2/advanced-settings/","excerpt":"","text":"建议有一定基础知识的朋友进行尝试。 将主题添加为子模块 git submodule add https://github.com/volantis-x/hexo-theme-volantis themes/volantis 为网站提速加载速度 尝试安装 hexo-all-minifier 插件来压缩文件。 减少不必要的 js 插件,例如字数统计、动态背景。 查找并解决拖慢速度的资源,以 Chrome 浏览器为例: 页面中点击右键,选择「检查」。 在右边的窗口中「Network」选项卡,并勾选「Disable cache」。 刷新网页,查看加载速度慢的资源。3.1. 加载缓慢的图片,建议使用 CDN。3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。 运行速度 访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。 强烈推荐安装 hexo-offline 插件,初次加载速度不变,后期切换页面和刷新网页速度越来越快。 推荐安装图片懒加载插件 hexo-lazyload-image(需同时安装 hexo-fs 依赖库)。 优化 SEO在 front-matter 中,可以设置 keywords、description、robots 和 seo_title。其中 seo_title 仅仅用作网页标题,优先级高于 title。 文章内部不要使用 H1 标题。 通过死链检测工具检查并删除无法访问的链接。 安装 SEO 优化插件: hexo-autonofollow hexo-generator-seo-friendly-sitemap 页面不要堆砌关键词,不要频繁更改路径。 使用 CDN对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。 开启方法blog/_config.ymluse_cdn: true 如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。 自定义 CDN如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。 安装「相关文章」插件 安装插件 npm i -S hexo-related-popular-posts 在需要显示的位置添加 related_posts 例如放在侧边栏: blog/themes/volantis/_config.ymllayout: on_page: sidebar: [related_posts] 插件的自定义配置方法: hexo-related-popular-posts 分析与统计默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。 字数和阅读时长 安装以下插件:npm i --save hexo-wordcount 修改配置文件,将 wordcount 插件打开blog/themes/volantis/_config.ymlplugins: ... # 文章字数统计、阅读时长,开启需要安装插件: npm i --save hexo-wordcount wordcount: true 然后修改配置文件,将 wordcount 写入需要显示的 meta 位置:blog/themes/volantis/_config.yml# 布局layout: on_list: meta: [..., wordcount, ...] on_page: meta: header: [..., wordcount, ...] footer: [..., wordcount, ...] 百度统计blog/_config.ymlbaidu_analytics_key: 百度统计的key Google Analyticsblog/_config.ymlgoogle_analytics_key: Google Analytics Key CNZZ 统计请参考 ZYMIN 的这篇教程:《hexo+ejs+material x 添加CNZZ统计代码》 网站运行时间等请参考 TRHX 的这篇教程:《Hexo 博客主题个性化》 更多 DIY 玩法详见 @TRHX 的这篇博客:《Hexo 博客主题个性化》 内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。"},{"title":"开始使用","date":"2020-09-21T10:19:30.796Z","updated":"2020-09-21T10:19:30.796Z","comments":true,"path":"v2/getting-started/index.html","permalink":"https://volantis.js.org/v2/getting-started/","excerpt":"","text":" Volantis2 A Wonderful Theme for Hexo Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。 这些是使用了本主题的博客: 示例博客 能力要求自建博客需要一定的相关知识,在开始前,请务必确保: 已掌握 markdown 语法 已阅读 Hexo 官方文档 会使用终端(命令行),会使用 git 会阅读文档、搜索文档 为了更好地使用,还建议掌握以下知识: 规范地使用 GitHub Issues(解决文档中没有的问题) GitHub Fork、Pull Request 操作(使主题保持更新) 环境要求如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。 Hexo: 4.2hexo-cli: 3.1node.js: 12.16 # LTS版npm: 6.13 下载与安装脚本自动安装手动安装在博客路径打开终端,下载安装并应用主题: curl -s https://volantis.js.org/start | bash 如果您还没有博客,执行这行命令将会自动检测并安装所需环境,初始化博客,然后下载安装并应用主题。 脚本更多使用方法:#hexo.sh第1/3步:下载主题源码到 themes/ 文件夹 git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis 第2/3步:修改站点配置文件 blog/_config.ymltheme: volantis 第3/3步:检查并安装依赖 安装 Hexo 搜索的依赖包:npm i -S hexo-generator-search hexo-generator-json-content 安装 stylus 渲染器:npm i -S hexo-renderer-stylus 升级小助手升级前请查看 更新日志 2.6.3 -> 2.6.6 不需要额外处理。 2.6.2 -> 2.6.3 全局搜索 seotitle 并替换为 seo_title。group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name。group 组件的列表名优先显示文章的 short_title 其次是 title。 许可协议本主题采用 MIT开源许可协议 ,永久无限制免费使用。 MIT开源许可协议被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。被授权人可根据程式的需要修改授权条款为适当的内容。在软件和软件的所有副本中都必须包含版权声明和许可声明。"},{"title":"页面配置","date":"2020-09-21T10:19:34.553Z","updated":"2020-09-21T10:19:34.553Z","comments":true,"path":"v2/page-settings/index.html","permalink":"https://volantis.js.org/v2/page-settings/","excerpt":"","text":"如无特殊说明,本页面的配置信息写在 页面 文件的 front-matter 中。 布局模板 取值 含义 page 独立页面 post 文章页面 category 分类页面 tag 标签页面 links 友链页面 list 列表页面 page & postpost 页面布局几乎与 page 页面相同,但是有以下细微区别: post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 不会。 主题配置中的 article_footer 只作用于 post,如果 page 也要显示,可以在 front-matter 中设置meta: article_footer: [xxx] front-matterfront-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter 查看全部取值 字段含义值类型默认值layout布局模版String-title页面标题String-seo_title网页标题Stringpage.titleshort_title页面标题(在group列表中显示)Stringpage.titledate创建时间Date文件创建时间updated更新日期Date文件修改时间link外部文章网址String-music内部音乐控件[Object]-robotsrobotsString-keywords页面关键词String-description页面描述、摘要String-cover是否显示封面Booltruemeta文章或页面的meta信息Bool, Arraytheme.layout.*.metasidebar页面侧边栏Bool, Arraytheme.layout.*.sidebarbody页面主体元素Arraytheme.layout.on_page.bodymathjax是否渲染公式Bool, Stringfalsethumbnail缩略图Stringfalseicons图标Array[]layout:post 时特有的字段:字段含义值类型默认值author文章作者[Object]config.authorcategories分类String, Array-tags标签String, Array-toc是否生成目录Booltruetop是否置顶Boolfalseauthor字段含义值类型默认值name作者名Stringconfig.authoravatar头像Stringconfig.avatarurl链接Stringconfig.urlmusic字段是否必须值类型server是netease, tencent, kugou, xiami, baidutype是song, playlist, album, search, artistid是song id / playlist id / album id / search keyword 独立页面除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。 归档页面归档页面是自动生成的,并且初始化的时候已经生成,路径如下: blog/_config.yml# Directoryarchive_dir: archives 关于页面Create file if not exists: source/about/index.md---layout: pagetitle: 关于meta: header: [] footer: []sidebar: []valine: placeholder: 有什么想对我说的呢?---下面写关于自己的内容 分类页面Create file if not exists: source/categories/index.md---layout: categoryindex: truetitle: 所有分类--- 标签页面Create file if not exists: source/tags/index.md---layout: tagindex: truetitle: 所有标签--- 列表页面Create file if not exists: source/mylist/index.md---layout: listgroup: mylistindex: true--- 结果就是筛选出所有文章中 front-matter 部分含有 group: mylist 的文章。 友链页面Create file if not exists: source/friends/index.md---layout: links # 必须title: 我的朋友们 # 可选,这是友链页的标题links: - group: 分组1 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: # 博客名 avatar: # 头像链接 url: # 博客链接 backgroundColor: '#3E74C9' # 卡片背景颜色 textColor: '#fff' # 卡片文字颜色 tags: [标签1, 标签2] # 标签 desc: 描述文字 - group: 分组2 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: # 博客名 avatar: # 头像链接 url: # 博客链接 backgroundColor: '#3E74C9' # 卡片背景颜色 textColor: '#fff' # 卡片文字颜色 tags: [标签1, 标签2] # 标签 desc: 描述文字---这里写友链上方的内容。<!-- more -->这里可以写友链页面下方的文字备注,例如自己的友链规范、示例等。 姓名、头像、链接是必填项,其它选填。 404页面Create file if not exists: source/404.md---layout: pagetitle: 404 Not Foundbody: [article, comments]meta: header: [] footer: []sidebar: []valine: path: /404.html placeholder: 请留言告诉我您要访问哪个页面找不到了---{% p center huge, 404 %}{% p center bold, 很抱歉,您访问的页面不存在 %}{% p center small, 可能是输入地址有误或该地址已被删除 %} 页面元素排列默认是文章+评论: front-matter---body: [article, comments]--- 如果你想把相关文章卡片显示在评论前,可以这样写: front-matter---body: [article, related_posts, comments]--- 如果想全局修改,在主题配置文件中的 layout.on_page.body 中设置。 文章属性文章置顶在 front-matter 中设置以下值: front-mattertop: true 如果想自定义置顶标签的文字,可以直接设置为字符串,例如: front-mattertop: 近期更新 文章分类多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。 多级分类: front-matter---categories: [分类A, 分类B]--- 或者 front-matter---categories: - 分类A - 分类B--- 并列分类 front-mattercategories: - [分类A] - [分类B] 多级+并列分类 front-mattercategories: - [分类A, 分类B] - [分类C, 分类D] 文章摘要在文章中插入 <!-- more -->,前面的部分即为摘要。 某篇文章源码---title: xxxdate: 2020-02-21---这是摘要<!-- more -->这是正文 注意: <!-- more --> 前后一定要有空行,不然可能导致显示错位。 设置文章作者由于支持多作者共同维护一个博客,所以可以设置单独一篇文章的作者: front-matter---author: name: 作者 avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com--- 显示迷你音乐播放器标题右边显示迷你音乐播放器,支持的字段有:server、type、id。 front-matter---music: server: netease # netease, tencent, kugou, xiami, baidu type: song # song, playlist, album, search, artist id: 16846091 # song id / playlist id / album id / search keyword--- 实际效果见: #contributors 显示 meta 标签文章顶部和底部的日期、分类、更新日期、标签、分享等属于 meta 标签,默认跟随主题配置文件,可在 front-matter 中关闭。 front-matter---top_meta: falsebottom_meta: false--- 标题右边显示缩略图front-matter---thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png--- 缩略图仅在文章列表和文章页面显示,不会在归档页面显示。 标题右边显示图标front-matter---icons: [fas fa-fire red, fas fa-star green]--- 图标仅在归档页面中显示,可以用来标注热门文章。 可以通过 red / blue / green / yellow / orange / theme / accent 来设置图标的颜色 meta 区域显示外链按钮例如当前文档页面的设置: front-matter---meta: footer: [btns]btns: repo: https://github.com/volantis-x/hexo-theme-volantis bug: https://github.com/volantis-x/hexo-theme-volantis/issues/ doubt: https://github.com/volantis-x/hexo-theme-volantis/issues/ idea: https://github.com/volantis-x/hexo-theme-volantis/issues/--- 按钮的颜色、图标、标题在主题配置文件中设置。 是否要显示封面如果某个页面需要封面,可以这样写: front-matter---cover: true--- 引入外部文章利用 link,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如: front-matter---layout: postdate: 2017-07-05title: [转]如何搭建基于Hexo的独立博客categories: [Dev, Hexo]tags: - Hexoauthor: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.comlink: https://xaoxuu.com/blog/2017-07-05-hexo-blog/---![](https://img.vim-cn.com/d9/a9af7dc49fc0af8ca3e6dd2450a2f7095a87db.png) 显示侧边栏通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。 如果某个页面不需要侧边栏,可以这样写: front-matter---sidebar: []--- 某个页面想指定显示某几个侧边栏,就这样写: front-matter---sidebar: [grid, toc, tags] # 放置任何你想要显示的侧边栏部件--- 关闭评论可以 front-matter---comments: false--- 也可以 front-matter---body: [article]--- 只显示留言板如果你想创建一个只有留言板的页面 front-matter---body: [comments]---"},{"title":"站点配置","date":"2020-09-21T10:19:37.913Z","updated":"2020-09-21T10:19:37.913Z","comments":true,"path":"v2/site-settings/index.html","permalink":"https://volantis.js.org/v2/site-settings/","excerpt":"","text":"如无特殊说明,本页面的配置信息写在 博客根目录 的 _config.yml 文件中。 网站标题blog/_config.yml# 网站标题title: my blog 网站图标简单方式完全自定义blog/_config.yml# 网站图标,更多尺寸等图标请使用import方式批量导入favicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.icoblog/_config.ymlimport: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> Import可以在无需修改主题文件的情况下在 head 和 body 中添加各种标签。meta 和 link 对应 head 中的 <meta> 和 <link> 标签。script 可以在 body 末尾导入 js 文件。 blog/_config.ymlimport: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> script: 更多配置更多请见 Hexo 官方文档:#Hexo配置"},{"title":"进阶设定","date":"2020-09-21T10:18:48.003Z","updated":"2020-09-21T10:18:48.003Z","comments":true,"path":"v3/advanced-settings/index.html","permalink":"https://volantis.js.org/v3/advanced-settings/","excerpt":"","text":"使用数据文件有时您可能需要在主题中使用某些资料,而这些资料并不在文章内,并且是需要重复使用的,那么您可以考虑使用 Hexo 3.0 新增的「数据文件」功能。此功能会载入 source/_data 内的 YAML 或 JSON 文件,如此一来您便能在网站中复用这些文件了。 举例来说,在 source/_data 文件夹中新建 menu.yml 文件: Home: /Gallery: /gallery/Archives: /archives/ 您就能在模板中使用这些资料: <% for (var link in site.data.menu) { %> <a href="<%= site.data.menu[link] %>"> <%= link %> </a><% } %> 渲染结果如下 : <a href="/"> Home </a><a href="/gallery/"> Gallery </a><a href="/archives/"> Archives </a> Volantis 的数据文件source/_data/layout.ymlsource/_data/menu.ymlsource/_data/widget.yml 设置子模块 将主题添加为子模块 git submodule add git@github.com:theme-volantis/hexo-theme-volantis themes/volantisorgit submodule add https://github.com/volantis-x/hexo-theme-volantis.git themes/volantis 为网站提速加载速度 尝试安装 hexo-all-minifier 插件来压缩文件。 减少不必要的 js 插件,例如字数统计、动态背景。 查找并解决拖慢速度的资源,以 Chrome 浏览器为例: 页面中点击右键,选择「检查」。 在右边的窗口中「Network」选项卡,并勾选「Disable cache」。 刷新网页,查看加载速度慢的资源。3.1. 加载缓慢的图片,建议使用 CDN。3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。 运行速度 访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。 推荐安装图片懒加载插件 hexo-lazyload-image(需同时安装 hexo-fs 依赖库)。 优化 SEOblog/_config.volantis.ymlseo: # When there are no keywords in the article's front-matter, use tags as keywords. use_tags_as_keywords: true # When there is no description in the article's front-matter, use excerpt as the description. use_excerpt_as_description: true robots: home_first_page: index,follow home_other_pages: noindex,follow archive: noindex,follow category: noindex,follow tag: noindex,follow # robots can be written in front-matter 在 front-matter 中,可以设置 keywords、description、robots 和 seo_title。其中 seo_title 仅仅用作网页标题,优先级高于 title。 文章内部不要使用 H1 标题。 通过死链检测工具检查并删除无法访问的链接。 安装 SEO 优化插件: hexo-autonofollowhttps://github.com/liuzc/hexo-autonofollow hexo-generator-seo-friendly-sitemaphttps://github.com/ludoviclefevre/hexo-generator-seo-friendly-sitemap 页面不要堆砌关键词,不要频繁更改路径。 使用 CDN对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。 开启方法blog/_config.ymluse_cdn: true 如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。 自定义 CDN如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。 安装「相关文章」插件 安装插件 npm i -S hexo-related-popular-posts 在需要显示的位置添加 related_posts 例如放在侧边栏: blog/_config.volantis.ymllayout: on_page: sidebar: [related_posts] 插件的自定义配置方法: hexo-related-popular-postshttps://github.com/tea3/hexo-related-popular-posts 分析与统计默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。 字数和阅读时长 安装以下插件:npm i --save hexo-wordcount 修改配置文件,将 wordcount 插件打开blog/_config.volantis.ymlplugins: ... # 文章字数统计、阅读时长,开启需要安装插件: npm i --save hexo-wordcount wordcount: true 然后修改配置文件,将 wordcount 写入需要显示的 meta 位置:blog/_config.volantis.yml# 布局layout: on_list: meta: [..., wordcount, ...] on_page: meta: header: [..., wordcount, ...] footer: [..., wordcount, ...] 百度统计blog/_config.ymlbaidu_analytics_key: 百度统计的key Google Analyticsblog/_config.ymlgoogle_analytics_key: Google Analytics Key CNZZ 统计请参考 ZYMIN 的这篇教程: Hexo hexo+ejs+material x 添加CNZZ统计代码https://zymin.cn/arcticle/hexo+ejs+material.html 更多 DIY 玩法详见 @TRHX 的这篇博客: Hexo 博客主题个性化https://www.itrhx.com/2018/08/27/A04-Hexo-blog-topic-personalization/ 内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。"},{"title":"安装与版本更新","date":"2020-09-21T10:20:08.151Z","updated":"2020-09-21T10:20:08.151Z","comments":true,"path":"v3/getting-started/index.html","permalink":"https://volantis.js.org/v3/getting-started/","excerpt":"","text":" Volantis3 A Wonderful Theme for Hexo 5 Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。 这些是使用了本主题的博客: 示例博客 能力要求 !!!自建博客需要一定的相关知识,在开始前,请务必确保: 已掌握 markdown 语法 已阅读 Hexo 官方文档 会使用终端(命令行),会使用 git 会阅读文档、搜索文档 为了更好地使用,还建议掌握以下知识: 会阅读源码,知道本站源码在哪里,会参照源码仿写、对比差异 规范地使用 GitHub Issues(解决文档中没有的问题) GitHub Fork、Pull Request 操作(使主题保持最新) 环境要求如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。 Hexo: 4.2 ~ 5.xhexo-cli: 3.1 ~ 4.xnode.js: 12.16 ~ latest # 推荐使用 LTS 版npm: 6.13 ~ latest 下载与安装全新博客安装从其它主题迁移第 1/2 步:修改站点配置文件 在 blog/_config.yml 文件中找到并修改:theme: volantis 第 2/2 步:下载主题 在终端中输入:npm i hexo-theme-volantis 如果您是 Mac 用户,可以使用脚本完成全部流程 在博客路径打开终端,下载安装并应用主题:curl -s https://volantis.js.org/start | bash这行命令将会自动检测并安装所需环境,初始化博客,然后下载安装并应用主题。脚本详细使用方法:#hexo.sh 第 1/3 步:修改站点配置文件 在 blog/_config.yml 文件中找到并修改:theme: volantis 第 2/3 步:下载主题 如果您已经升级到 Hexo 5.0.2 及以上,可以直接使用 npm 命令安装:npm i hexo-theme-volantis对于旧版本,需要下载主题源码到 themes/ 文件夹:git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis如果您无法访问 GitHub 可以使用国内镜像源:git clone https://e.coding.net/volantis/volantis/volantis.git themes/volantis 第 3/3 步:检查并安装依赖 安装 Hexo 搜索的依赖包:npm i hexo-generator-search hexo-generator-json-content安装 Stylus 渲染器:npm i hexo-renderer-stylus 版本更新请对照 更新日志 进行更新,下面是更新之后需要注意的事项: 2020-08-09 2.6.6 -> 3.0.0 如果有 hexo-lazyload-image 插件,需要重新安装最新版本并增加设置 lazyload.isSPA: true 。2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true 则需要删除。2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。2.x 版本的置顶 top: true 改为了 pin: true 并且同样适用于 layout: page 的页面。如果使用了 hexo-offline 插件,建议卸载,3.0 版本使用了 pjax 服务。欢迎补充 许可协议本主题采用 MIT开源许可协议 ,永久无限制免费使用。 MIT开源许可协议被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。被授权人可根据程式的需要修改授权条款为适当的内容。在软件和软件的所有副本中都必须包含版权声明和许可声明。"},{"title":"页面自定义布局","date":"2020-09-21T10:20:13.065Z","updated":"2020-09-21T10:20:13.065Z","comments":true,"path":"v3/page-settings/body/index.html","permalink":"https://volantis.js.org/v3/page-settings/body/","excerpt":"","text":"正文布局默认是文章+评论: front-matter---body: [article, comments]--- 如果你想把相关文章卡片显示在评论前,可以这样写: front-matter---body: [article, related_posts, comments]--- 如果想全局修改,在主题配置文件中的 layout.on_page.body 中设置。 显示迷你音乐播放器标题右边显示迷你音乐播放器,支持的字段有:server、type、id。 front-matter---music: server: netease # netease, tencent, kugou, xiami, baidu type: song # song, playlist, album, search, artist id: 16846091 # song id / playlist id / album id / search keyword--- 实际效果见: #contributors 显示 meta 标签文章顶部和底部的日期、分类、更新日期、标签、分享等属于 meta 标签。顶部的为 header,底部的为 footer,取值见主题配置文件中的 meta 库。 front-matter---# 默认的meta信息,文章中没有配置则按照这里的配置来显示,设置为false则不显示# 其中,title只在header中有效,music和thumbnail无需在这里设置,文章中有则显示# 如果tags放置在meta.header中,那么在post列表中不显示(因为卡片下方已经有了)meta: header: [title, author, date, category, counter, top] footer: [updated, tags, share]--- 像404、关于页面就可以完全隐藏: front-matter---meta: header: [] footer: []--- 居中标题模式如果标题居中且下方不想显示任何 meta 信息,可以这样设置: front-matter---meta: header: [centertitle]--- 标题右边显示缩略图front-matter---thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png--- 缩略图仅在文章列表和文章页面显示,不会在归档页面显示。 标题右边显示图标front-matter---icons: [fas fa-fire red, fas fa-star green]--- 图标仅在归档页面中显示,可以用来标注热门文章。 可以通过 red / blue / green / yellow / orange / theme / accent 来设置图标的颜色 meta 区域显示外链按钮例如当前文档页面的设置: front-matter---meta: footer: [btns]btns: repo: https://github.com/volantis-x/hexo-theme-volantis bug: https://github.com/volantis-x/hexo-theme-volantis/issues/ doubt: https://github.com/volantis-x/hexo-theme-volantis/issues/ idea: https://github.com/volantis-x/hexo-theme-volantis/issues/--- 按钮的颜色、图标、标题在主题配置文件中设置。 是否要显示封面如果某个页面需要封面,可以这样写: front-matter---cover: true--- 显示侧边栏通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。 如果某个页面不需要侧边栏,可以这样写: front-matter---sidebar: []--- 某个页面想指定显示某几个侧边栏,就这样写: front-matter---sidebar: [grid, toc, tags] # 放置任何你想要显示的侧边栏部件--- 关闭评论默认是 body: [article, comments],如果某个页面不要评论,只需要去掉 comments 即可。 front-matter---body: [article]--- 只显示留言板如果你想创建一个只有留言板的页面 front-matter---body: [comments]---"},{"title":"页面布局模板","date":"2020-09-21T10:20:21.243Z","updated":"2020-09-21T10:20:21.243Z","comments":true,"path":"v3/page-settings/layout/index.html","permalink":"https://volantis.js.org/v3/page-settings/layout/","excerpt":"","text":"布局模板 取值 含义 page 独立页面 post 文章页面 category 分类页面 tag 标签页面 links 友链页面 list 列表页面 page & postpost 页面布局几乎与 page 页面相同,但是有以下细微区别: post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 不会。 主题配置中的 article_footer 只作用于 post,如果 page 也要显示,可以在 front-matter 中设置meta: article_footer: [xxx] 除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。 归档页面归档页面是自动生成的,并且初始化的时候已经生成,路径如下: blog/_config.yml# Directoryarchive_dir: archives 关于页面Create file if not exists: source/about/index.md---layout: pagetitle: 关于meta: header: [] footer: []sidebar: []valine: placeholder: 有什么想对我说的呢?---下面写关于自己的内容 分类页面Create file if not exists: source/categories/index.md---layout: categoryindex: truetitle: 所有分类--- 标签页面Create file if not exists: source/tags/index.md---layout: tagindex: truetitle: 所有标签--- 列表页面Create file if not exists: source/mylist/index.md---layout: listgroup: mylistindex: true--- 结果就是筛选出所有文章中 front-matter 部分含有 group: mylist 的文章。 友链页面Create file if not exists: source/friends/index.md---layout: links # 必须title: 我的朋友们 # 可选,这是友链页的标题links: - group: 分组1 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: # 博客名 avatar: # 头像链接 url: # 博客链接 backgroundColor: '#3E74C9' # 卡片背景颜色 textColor: '#fff' # 卡片文字颜色 tags: [标签1, 标签2] # 标签 desc: 描述文字 - group: 分组2 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: # 博客名 avatar: # 头像链接 url: # 博客链接 backgroundColor: '#3E74C9' # 卡片背景颜色 textColor: '#fff' # 卡片文字颜色 tags: [标签1, 标签2] # 标签 desc: 描述文字---这里写友链上方的内容。<!-- more -->这里可以写友链页面下方的文字备注,例如自己的友链规范、示例等。 姓名、头像、链接是必填项,其它选填。 404页面Create file if not exists: source/404.md---layout: pagetitle: 404 Not Foundbody: [article, comments]meta: header: [] footer: []sidebar: []valine: path: /404.html placeholder: 请留言告诉我您要访问哪个页面找不到了---{% p center huge, 404 %}{% p center bold, 很抱歉,您访问的页面不存在 %}{% p center small, 可能是输入地址有误或该地址已被删除 %}"},{"title":"front-matter","date":"2020-09-21T10:20:17.537Z","updated":"2020-09-21T10:20:17.537Z","comments":true,"path":"v3/page-settings/front-matter/index.html","permalink":"https://volantis.js.org/v3/page-settings/front-matter/","excerpt":"","text":"front-matterfront-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter 字段 含义 值类型 默认值 layout 布局模版 String - title 页面标题 String - seo_title 网页标题 String page.title short_title 页面标题(在group列表中显示) String page.title date 创建时间 Date 文件创建时间 updated 更新日期 Date 文件修改时间 link 外部文章网址 String - music 内部音乐控件 [Object] - robots robots String - keywords 页面关键词 String - description 页面描述、摘要 String - cover 是否显示封面 Bool true meta 文章或页面的meta信息 Bool, Array theme.layout.*.meta sidebar 页面侧边栏 Bool, Array theme.layout.*.sidebar body 页面主体元素 Array theme.layout.on_page.body mathjax 是否渲染公式 Bool, String false thumbnail 缩略图 String false icons 图标 Array [] pin 是否置顶 Bool false layout:post 时特有的字段: 字段 含义 值类型 默认值 author 文章作者 [Object] config.author categories 分类 String, Array - tags 标签 String, Array - toc 是否生成目录 Bool true author 字段 含义 值类型 默认值 name 作者名 String config.author avatar 头像 String config.avatar url 链接 String config.url music 字段 是否必须 值类型 server 是 netease, tencent, kugou, xiami, baidu type 是 song, playlist, album, search, artist id 是 song id / playlist id / album id / search keyword 文章置顶在 front-matter 中设置以下值: front-matterpin: true 文章分类多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。 多级分类: front-matter---categories: [分类A, 分类B]--- 或者 front-matter---categories: - 分类A - 分类B--- 并列分类 front-mattercategories: - [分类A] - [分类B] 多级+并列分类 front-mattercategories: - [分类A, 分类B] - [分类C, 分类D] 文章摘要在文章中插入 <!-- more -->,前面的部分即为摘要。 某篇文章源码---title: xxxdate: 2020-02-21---这是摘要<!-- more -->这是正文 注意: <!-- more --> 前后一定要有空行,不然可能导致显示错位。 设置文章作者由于支持多作者共同维护一个博客,所以可以设置单独一篇文章的作者: front-matter---author: name: 作者 avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com--- 引入外部文章利用 link,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如: front-matter---layout: postdate: 2017-07-05title: [转]如何搭建基于Hexo的独立博客categories: [Dev, Hexo]tags: - Hexoauthor: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.comlink: https://xaoxuu.com/blog/2017-07-05-hexo-blog/---![](https://img.vim-cn.com/d9/a9af7dc49fc0af8ca3e6dd2450a2f7095a87db.png) 置顶对于任何文章或者页面,设置 pin: true 即可置顶在首页。 front-matter---pin: true--- 这会导致一个小问题:首页 post 卡片数量多于设定值,如果有强迫症希望每一个分页数量一致,可以安装插件来实现,详见:#421 不归档存放在 _posts 文件夹下的文章一般都会出现在归档页,如果某篇文章不希望出现在归档页面: front-matter---archive: false---"},{"title":"渲染公式","date":"2020-09-21T10:20:26.311Z","updated":"2020-09-21T10:20:26.311Z","comments":true,"path":"v3/page-settings/math/index.html","permalink":"https://volantis.js.org/v3/page-settings/math/","excerpt":"","text":"MathJax默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。 example.md:---title: 渲染公式(MathJax)date: 2020-02-23mathjax: true # false: 不渲染, true: 渲染, internal: 只在文章内部渲染,文章列表中不渲染---$$t+1=2$$$$\\mbox{积累因子}=\\begin{cases}1+ni & \\mbox{单利}\\\\\\\\(1+i)^n & \\mbox{复利}\\end{cases}$$$$\\begin{equation}\\sum_{i=0}^n F_i \\cdot \\phi (H, p_i) - \\sum_{i=1}^n a_i \\cdot ( \\tilde{x_i}, \\tilde{y_i}) + b_i \\cdot ( \\tilde{x_i}^2 , \\tilde{y_i}^2 )\\end{equation}$$$$\\begin{equation}\\beta^*(D) = \\mathop{argmin} \\limits_{\\beta} \\lambda {||\\beta||}^2 + \\sum_{i=1}^n max(0, 1 - y_i f_{\\beta}(x_i))\\end{equation}$$ 示例效果 $$t+1=2$$$$\\mbox{积累因子}=\\begin{cases}1+ni & \\mbox{单利}\\\\(1+i)^n & \\mbox{复利}\\end{cases}$$$$\\begin{equation}\\sum_{i=0}^n F_i \\cdot \\phi (H, p_i) - \\sum_{i=1}^n a_i \\cdot ( \\tilde{x_i}, \\tilde{y_i}) + b_i \\cdot ( \\tilde{x_i}^2 , \\tilde{y_i}^2 )\\end{equation}$$$$\\begin{equation}\\beta^*(D) = \\mathop{argmin} \\limits_{\\beta} \\lambda {||\\beta||}^2 + \\sum_{i=1}^n max(0, 1 - y_i f_{\\beta}(x_i))\\end{equation}$$ 如果公式仍无法正确渲染可以阅读 @MicDZ 的这篇文章:在Material-X上使用KaTeXhttps://www.micdz.cn/article/katex-on-volantis/"},{"title":"站点配置文件","date":"2020-09-21T10:20:31.142Z","updated":"2020-09-21T10:20:31.142Z","comments":true,"path":"v3/site-settings/configuration/index.html","permalink":"https://volantis.js.org/v3/site-settings/configuration/","excerpt":"","text":"网站标题blog/_config.yml# 网站标题title: my blog 网站图标简单方式完全自定义blog/_config.yml# 网站图标,更多尺寸等图标请使用import方式批量导入favicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.icoblog/_config.ymlimport: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> 多语言设置blog/_config.ymllanguage:- zh-CN- en- zh-HK- zh-TW 对应的翻译文件路径: themes/volantis/languages/ Import 导入外部文件可以在无需修改主题文件的情况下在 head 和 body 中添加各种标签。meta 和 link 对应 head 中的 <meta> 和 <link> 标签。script 可以在 body 末尾导入 js 文件。 blog/_config.ymlimport: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> script: 网站 参数 描述 title 网站标题 subtitle 网站副标题 description 网站描述 keywords 网站的关键词。支援多个关键词。 author 您的名字 language 网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans和 zh-CN。 timezone 网站时区。Hexo 默认使用您电脑的时区。请参考 时区列表 进行设置,如 America/New_York, Japan, 和 UTC 。一般的,对于中国大陆地区可以使用 Asia/Shanghai。 其中,description主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。author参数用于主题显示文章的作者。 网址 参数 描述 默认值 url 网址 root 网站根目录 permalink 文章的 永久链接 格式 :year/:month/:day/:title/ permalink_defaults 永久链接中各部分的默认值 pretty_urls 改写 permalink 的值来美化 URL pretty_urls.trailing_index 是否在永久链接中保留尾部的 index.html,设置为 false 时去除 true pretty_urls.trailing_html 是否在永久链接中保留尾部的 .html, 设置为 false 时去除 (对尾部的 index.html无效) true 网站存放在子目录如果您的网站存放在子目录中,例如 http://yoursite.com/blog,则请将您的 url 设为 http://yoursite.com/blog 并把 root 设为 /blog/。 例如: # 比如,一个页面的永久链接是 http://example.com/foo/bar/index.htmlpretty_urls: trailing_index: false# 此时页面的永久链接会变为 http://example.com/foo/bar/ 目录 参数 描述 默认值 source_dir 资源文件夹,这个文件夹用来存放内容。 source public_dir 公共文件夹,这个文件夹用于存放生成的站点文件。 public tag_dir 标签文件夹 tags archive_dir 归档文件夹 archives category_dir 分类文件夹 categories code_dir Include code 文件夹,source_dir 下的子目录 downloads/code i18n_dir 国际化(i18n)文件夹 :lang skip_render 跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public 目录中。您可使用 glob 表达式 来匹配路径。 例如: skip_render: "mypage/**/*"# 将会直接将 `source/mypage/index.html` 和 `source/mypage/code.js` 不做改动地输出到 'public' 目录# 你也可以用这种方法来跳过对指定文章文件的渲染skip_render: "_posts/test-post.md"# 这将会忽略对 'test-post.md' 的渲染 提示如果您刚刚开始接触 Hexo,通常没有必要修改这一部分的值。 文章 参数 描述 默认值 new_post_name 新文章的文件名称 :title.md default_layout 预设布局 post auto_spacing 在中文和英文之间加入空格 false titlecase 把标题转换为 title case false external_link 在新标签中打开链接 true external_link.enable 在新标签中打开链接 true external_link.field 对整个网站(site)生效或仅对文章(post)生效 site external_link.exclude 需要排除的域名。主域名和子域名如 www 需分别配置 [] filename_case 把文件名称转换为 (1) 小写或 (2) 大写 0 render_drafts 显示草稿 false post_asset_folder 启动 Asset 文件夹 false relative_link 把链接改为与根目录的相对位址 false future 显示未来的文章 true highlight 代码块的设置, see Highlight.js section for usage guide prismjs 代码块的设置, see PrismJS section for usage guide 相对地址默认情况下,Hexo 生成的超链接都是绝对地址。例如,如果您的网站域名为 example.com,您有一篇文章名为 hello,那么绝对链接可能像这样:http://example.com/hello.html,它是绝对于域名的。相对链接像这样:/hello.html,也就是说,无论用什么域名访问该站点,都没有关系,这在进行反向代理时可能用到。通常情况下,建议使用绝对地址。 分类 & 标签 参数 描述 默认值 default_category 默认分类 uncategorized category_map 分类别名 tag_map 标签别名 日期 / 时间格式Hexo 使用 Moment.js 来解析和显示时间。 参数 描述 默认值 date_format 日期格式 YYYY-MM-DD time_format 时间格式 HH:mm:ss updated_option 当 Front Matter 中没有指定 updated 时 updated 的取值 mtime updated_optionupdated_option 控制了当 Front Matter 中没有指定 updated 时,updated 如何取值:mtime: 使用文件的最后修改时间。这是从 Hexo 3.0.0 开始的默认行为。date: 使用 date 作为 updated 的值。可被用于 Git 工作流之中,因为使用 Git 管理站点时,文件的最后修改日期常常会发生改变empty: 直接删除 updated。使用这一选项可能会导致大部分主题和插件无法正常工作。use_date_for_updated 选项已经被废弃,将会在下个重大版本发布时去除。请改为使用 updated_option: 'date'。 use_date_for_updated | 启用以后,如果 Front Matter 中没有指定 updated, post.updated 将会使用 date 的值而不是文件的创建时间。在 Git 工作流中这个选项会很有用 | true 分页 参数 描述 默认值 per_page 每页显示的文章量 (0 = 关闭分页功能) 10 pagination_dir 分页目录 page 扩展 参数 描述 theme 当前主题名称。值为false时禁用主题 theme_config 主题的配置文件。在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置 deploy 部署部分的设置 meta_generator Meta generator 标签。 值为 false 时 Hexo 不会在头部插入该标签 包括或不包括目录和文件在 Hexo 配置文件中,通过设置 include/exclude 可以让 Hexo 进行处理或忽略某些目录和文件夹。你可以使用 glob 表达式 对目录和文件进行匹配。 include and exclude options only apply to the source/ folder, whereas ignore option applies to all folders. 参数 描述 include Hexo 默认会忽略隐藏文件和文件夹(包括名称以下划线和 . 开头的文件和文件夹,Hexo 的 _posts 和 _data 等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source 目录下。 exclude Hexo 会忽略这些文件和目录 ignore Ignore files/folders 举例: # Include/Exclude Files/Foldersinclude: - ".nojekyll" # 包括 'source/css/_typing.css' - "css/_typing.css" # 包括 'source/_css/' 中的任何文件,但不包括子目录及其其中的文件。 - "_css/*" # 包含 'source/_css/' 中的任何文件和子目录下的任何文件 - "_css/**/*"exclude: # 不包括 'source/js/test.js' - "js/test.js" # 不包括 'source/js/' 中的文件、但包括子目录下的所有目录和文件 - "js/*" # 不包括 'source/js/' 中的文件和子目录下的任何文件 - "js/**/*" # 不包括 'source/js/' 目录下的所有文件名以 'test' 开头的文件,但包括其它文件和子目录下的单文件 - "js/test*" # 不包括 'source/js/' 及其子目录中任何以 'test' 开头的文件 - "js/**/test*" # 不要用 exclude 来忽略 'source/_posts/' 中的文件。你应该使用 'skip_render',或者在要忽略的文件的文件名之前加一个下划线 '_' # 在这里配置一个 - "_posts/hello-world.md" 是没有用的。ignore: # Ignore any folder named 'foo'. - "**/foo" # Ignore 'foo' folder in 'themes/' only. - "**/themes/*/foo" # Same as above, but applies to every subfolders of 'themes/'. - "**/themes/**/foo" 列表中的每一项都必须用单引号或双引号包裹起来。 include 和 exclude 并不适用于 themes/ 目录下的文件。如果需要忽略 themes/ 目录下的部分文件或文件夹,可以使用 ignore 或在文件名之前添加下划线 _。 使用代替配置文件可以在 hexo-cli 中使用 --config 参数来指定自定义配置文件的路径。你可以使用一个 YAML 或 JSON 文件的路径,也可以使用逗号分隔(无空格)的多个 YAML 或 JSON 文件的路径。例如: # use 'custom.yml' in place of '_config.yml'$ hexo server --config custom.yml# use 'custom.yml' & 'custom2.json', prioritizing 'custom3.yml', then 'custom2.json'$ hexo generate --config custom.yml,custom2.json,custom3.yml 当你指定了多个配置文件以后,Hexo 会按顺序将这部分配置文件合并成一个 _multiconfig.yml。如果遇到重复的配置,排在后面的文件的配置会覆盖排在前面的文件的配置。这个原则适用于任意数量、任意深度的 YAML 和 JSON 文件。 例如,使用 --options 指定了两个自定义配置文件: $ hexo generate --config custom.yml,custom2.json 如果 custom.yml 中指定了 foo: bar,在 custom2.json 中指定了 "foo": "dinosaur",那么在 _multiconfig.yml 中你会得到 foo: dinosaur。 使用代替主题配置文件通常情况下,Hexo 主题是一个独立的项目,并拥有一个独立的 _config.yml 配置文件。 除了自行维护独立的主题配置文件,你也可以在其它地方对主题进行配置。 配置文件中的 theme_config 该特性自 Hexo 2.8.2 起提供 # _config.ymltheme: "my-theme"theme_config: bio: "My awesome bio" foo: bar: 'a' # themes/my-theme/_config.ymlbio: "Some generic bio"logo: "a-cool-image.png" foo: baz: 'b' 最终主题配置的输出是: { bio: "My awesome bio", logo: "a-cool-image.png", foo: { bar: "a", baz: "b" }} 独立的 _config.[theme].yml 文件 该特性自 Hexo 5.0.0 起提供 独立的主题配置文件应放置于站点根目录下,支持 yml 或 json 格式。需要配置站点 _config.yml 文件中的 theme 以供 Hexo 寻找 _config.[theme].yml 文件。 # _config.ymltheme: "my-theme" # _config.my-theme.ymlbio: "My awesome bio"foo: bar: 'a' # themes/my-theme/_config.ymlbio: "Some generic bio"logo: "a-cool-image.png" foo: baz: 'b' 最终主题配置的输出是: { bio: "My awesome bio", logo: "a-cool-image.png", foo: { bar: "a", baz: "b" }} 我们强烈建议你将所有的主题配置集中在一处。如果你不得不在多处配置你的主题,那么这些信息对你将会非常有用:Hexo 在合并主题配置时,Hexo 配置文件中的 theme_config 的优先级最高,其次是 _config.[theme].yml 文件,最后是位于主题目录下的 _config.yml 文件。"},{"title":"容器类标签","date":"2020-09-21T10:20:35.465Z","updated":"2020-09-21T10:20:35.465Z","comments":true,"path":"v3/tag-plugins/container/index.html","permalink":"https://volantis.js.org/v3/tag-plugins/container/","excerpt":"","text":"Tab此插件移植自 NexT #tabs 。请将您的 Volantis 升级至 2.1 版本以上使用。 语法格式参数列表{% tabs tab-id %}<!-- tab tab-name -->![](https://i.loli.net/2020/03/18/f5PQlWisvm9zbgK.jpg)<!-- endtab --><!-- tab tab-name -->这里面写内容,支持的语法格式有限,请尽量<u>不要</u>写太过复杂的东西。<!-- endtab -->{% endtabs %}tab-id 必填,如果一个页面有多个 tabs 时,tab-id 不能重复。 tab-name 标签文本。 Folding请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果{% folding 参数(可选), 标题 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %}参数位置可以填写颜色和状态,多个参数用空格隔开。 颜色 blue, cyan, green, yellow, red 状态 状态填写 open 代表默认打开。{% folding 查看图片测试 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %}{% folding cyan open, 查看默认打开的折叠框 %}这是一个默认打开的折叠框。{% endfolding %}{% folding green, 查看代码测试 %}{% endfolding %}{% folding yellow, 查看列表测试 %}- haha- hehe{% endfolding %}{% folding red, 查看嵌套测试 %}{% folding blue, 查看嵌套测试2 %}{% folding 查看嵌套测试3 %}hahaha <span><img src='https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style='height:24px'></span>{% endfolding %}{% endfolding %}{% endfolding %} 查看图片测试 查看默认打开的折叠框 这是一个默认打开的折叠框。 查看代码测试 {% folding green, 查看代码测试 %}查看代码测试{% endfolding %} 查看列表测试 hahahehe 查看嵌套测试 查看嵌套测试2 查看嵌套测试3 hahaha"},{"title":"Hexo 内置标签","date":"2020-09-21T10:20:39.664Z","updated":"2020-09-21T10:20:39.664Z","comments":true,"path":"v3/tag-plugins/hexo/index.html","permalink":"https://volantis.js.org/v3/tag-plugins/hexo/","excerpt":"","text":"文章摘要和截断在文章中使用 <!-- more -->,那么 <!-- more --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 Hexo 官方文档: 标签插件https://hexo.io/zh-cn/docs/tag-plugins 引用块引用书上的句子 Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy. David LevithanWide Awake 代码块{% codeblock [title] [lang:language] [url] [link text] [additional options] %}code snippet{% endcodeblock %} 指定语言[rectangle setX: 10 y: 10 width: 20 height: 20]; example.md:{% codeblock lang:objc %}[rectangle setX: 10 y: 10 width: 20 height: 20];{% endcodeblock %} 附加说明Array.maparray.map(callback[, thisArg]) example.md:{% codeblock Array.map %}array.map(callback[, thisArg]){% endcodeblock %} 行标、高亮12345678n=eval(input())if n==0: print("Hello World")elif n>0: print("He\\nll\\no \\nWo\\nrl\\nd")else: for c in "Hello World": print(c) example.md:{% codeblock lang:python line_number:true mark:3,5,8 %}n=eval(input())if n==0: print("Hello World")elif n>0: print("He\\nll\\no \\nWo\\nrl\\nd")else: for c in "Hello World": print(c){% endcodeblock %} Pull Quote在文章中插入 Pull quote example.md:{% pullquote [class] %}content{% endpullquote %} jsFiddle在文章中嵌入 jsFiddle example.md:{% jsfiddle shorttag [tabs] [skin] [width] [height] %} Gist在文章中嵌入 Gist,注意:在国内无法加载。 example.md:{% gist gist_id [filename] %} iframe在文章中插入 iframe example.md:{% iframe url [width] [height] %} Image在文章中插入指定大小的图片。 example.md:{% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %} Link在文章中插入链接,并自动给外部链接添加 target="_blank" 属性。 example.md:{% link text url [external] [title] %} Include Code插入 source/downloads/code 文件夹内的代码文件。source/downloads/code 不是固定的,取决于你在配置文件中 code_dir 的配置。 example.md:{% include_code [title] [lang:language] [from:line] [to:line] path/to/file %} 示例 嵌入 test.js 文件全文{% include_code lang:javascript test.js %}只嵌入第 3 行{% include_code lang:javascript from:3 to:3 test.js %}嵌入第 5 行至第 8 行{% include_code lang:javascript from:5 to:8 test.js %}嵌入第 5 行至文件结束{% include_code lang:javascript from:5 test.js %}嵌入第 1 行至第 8 行{% include_code lang:javascript to:8 test.js %} 引用文章引用其他文章的链接。 {% post_path filename %}{% post_link filename [title] [escape] %} 示例 引用这篇文章:主题更名为「Volantis」example.md:引用这篇文章:{% post_link news/2020-02-22 %}"},{"title":"文本和段落标签","date":"2020-09-21T10:20:58.554Z","updated":"2020-09-21T10:20:58.554Z","comments":true,"path":"v3/tag-plugins/text/index.html","permalink":"https://volantis.js.org/v3/tag-plugins/text/","excerpt":"","text":"行内小标签请将您的 Volantis 升级至 3.0 版本以上使用。 语法格式示例写法示例效果带下划线的文本 {% u 带下划线的文本 %} 带着重号的文本 {% emp 带着重号的文本 %} 带波浪线的文本 {% wavy 波浪线 %} 带删除线的文本 {% del 带删除线的文本 %} 键盘样式的文本 {% kbd 键盘样式的文本 %} 密码样式的文本 {% psw 密码样式的文本 %}带下划线的文本 example.md:带 {% u 下划线 %} 的文本 带着重号的文本 example.md:带 {% emp 着重号 %} 的文本 带波浪线的文本 example.md:带 {% wavy 波浪线 %} 的文本 带删除线的文本 example.md:带 {% del 删除线 %} 的文本 键盘样式的文本 example.md:收藏页面:{% kbd command %} + {% kbd D %} 密码样式的文本 example.md:验证码:{% psw 这里没有验证码 %}带下划线的文本 带 下划线 的文本 带着重号的文本 带 着重号 的文本 带波浪线的文本 带 波浪线 的文本 带删除线的文本 带 删除线 的文本 键盘样式的文本 收藏页面:command + D 密码样式的文本 验证码:这里没有验证码 Span & P请将您的 Volantis 升级至 2.5 版本以上使用。 语法格式参数列表示例写法示例效果行内文本 {% span 样式参数, 文本内容 %} 独立段落 {% p 样式参数, 文本内容 %}样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。 字体 logo, code 颜色 red, yellow, green, cyan, blue, gray 大小 small, h4, h3, h2, h1, large, huge, ultra 对齐方向 left, center, right彩色文字 example.md:在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。 超大文字 example.md:文档「开始」页面中的标题部分就是超大文字。{% p center logo large, Volantis %}{% p center small, A Wonderful Theme for Hexo %}彩色文字 在一段话中方便插入各种颜色的标签,包括:红色、黄色、绿色、青色、蓝色、灰色。 超大文字 文档「开始」页面中的标题部分就是超大文字。 Volantis A Wonderful Theme for Hexo Note & NoteBlockNoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果Note {% note 样式参数, 文本内容 %} NoteBlock {% noteblock 样式参数 %}文本段落{% endnoteblock %}样式参数位置可以写图标和颜色,多个样式参数用空格隔开。 图标 彩色的quote, info, warning, done/success, error/danger 灰色的,也可以指定颜色radiation, bug, idea, link, paperclip, todo, msg, guide, download, up, undo 颜色 指定颜色clear, light, gray, red, yellow, green, cyan, blueNote example.md:{% note, 为简单的一句话提供的简便写法。 %}{% note success, 支持同样丰富的参数。 %} NoteBlock example.md:可以在区块中放置一些复杂的结构,支持嵌套。{% noteblock quote %}{% p subtitle, 小标题 %}Windows 10不是為所有人設計,而是為每個人設計{% p subtitle, 嵌套测试 %}{% noteblock %}请坐和放宽,我正在帮你搞定一切...{% endnoteblock %}{% p subtitle, Folding 测试 %}{% folding 点击查看更多 %}{% note warning, 不要说我们没有警告过你 %}{% noteblock bug red %}我们都有不顺利的时候{% endnoteblock %}{% endfolding %}{% endnoteblock %}Note 为简单的一句话提供的简便写法。 支持同样丰富的参数。 NoteBlock 可以在区块中放置一些复杂的结构,支持嵌套。 小标题Windows 10不是為所有人設計,而是為每個人設計嵌套测试请坐和放宽,我正在帮你搞定一切...Folding 测试 点击查看更多 不要说我们没有警告过你我们都有不顺利的时候 Checkbox & Radio请将您的 Volantis 升级至 2.6 版本以上使用。 语法格式参数列表示例写法示例效果{% checkbox 样式参数(可选), 文本(支持简单md) %}颜色 red, yellow, green, cyan, blue 样式 plus, minus, times 选中状态 checkedCheckbox example.md:{% checkbox 纯文本测试 %}{% checkbox checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}{% checkbox red, 支持自定义颜色 %}{% checkbox green checked, 绿色 + 默认选中 %}{% checkbox yellow checked, 黄色 + 默认选中 %}{% checkbox cyan checked, 青色 + 默认选中 %}{% checkbox blue checked, 蓝色 + 默认选中 %}{% checkbox plus green checked, 增加 %}{% checkbox minus yellow checked, 减少 %}{% checkbox times red checked, 叉 %} Radio example.md:{% radio 纯文本测试 %}{% radio checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}{% radio red, 支持自定义颜色 %}{% radio green, 绿色 %}{% radio yellow, 黄色 %}{% radio cyan, 青色 %}{% radio blue, 蓝色 %}Checkbox 纯文本测试 支持简单的 markdown 语法 支持自定义颜色 绿色 + 默认选中 黄色 + 默认选中 青色 + 默认选中 蓝色 + 默认选中 增加 减少 叉 Radio 纯文本测试 支持简单的 markdown 语法 支持自定义颜色 绿色 黄色 青色 蓝色 Timeline请将您的 Volantis 升级至 3.0 版本以上使用。 语法格式示例写法示例效果{% timeline 时间线标题 %}{% timenode 时间节点(标题) %}正文内容{% endtimenode %}{% timenode 时间节点(标题) %}正文内容{% endtimenode %}{% endtimeline %}example.md:{% timeline 升级小助手 %}{% timenode 2020-07-24 [2.6.6 -> 3.0](https://github.com/volantis-x/hexo-theme-volantis/releases) %}1. 如果有 `hexo-lazyload-image` 插件,需要删除并重新安装最新版本,设置 `lazyload.isSPA: true`。2. 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 `use_cdn: true` 则需要删除。3. 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。4. 2.x 版本的置顶 `top: true` 改为了 `pin: true`,并且同样适用于 `layout: page` 的页面。5. 如果使用了 `hexo-offline` 插件,建议卸载,3.0 版本默认开启了 pjax 服务。{% endtimenode %}{% timenode 2020-05-15 [2.6.3 -> 2.6.6](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6) %}不需要额外处理。{% endtimenode %}{% timenode 2020-04-20 [2.6.2 -> 2.6.3](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.3) %}1. 全局搜索 `seotitle` 并替换为 `seo_title`。2. group 组件的索引规则有变,使用 group 组件的文章内,`group: group_name` 对应的组件名必须是 `group_name`。2. group 组件的列表名优先显示文章的 `short_title` 其次是 `title`。{% endtimenode %}{% endtimeline %}升级小助手 2020-07-24 2.6.6 -> 3.0.0 如果有 hexo-lazyload-image 插件,需要删除并重新安装最新版本,设置 lazyload.isSPA: true。2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true 则需要删除。2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。2.x 版本的置顶 top: true 改为了 pin: true,并且同样适用于 layout: page 的页面。如果使用了 hexo-offline 插件,建议卸载,3.0 版本默认开启了 pjax 服务。 2020-07-24 2.6.3 -> 2.6.6 不需要额外处理。 2020-07-24 2.6.2 -> 2.6.3 全局搜索 seotitle 并替换为 seo_title。group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name。group 组件的列表名优先显示文章的 short_title 其次是 title。"},{"title":"多媒体标签","date":"2020-09-21T10:20:50.782Z","updated":"2020-09-21T10:20:50.782Z","comments":true,"path":"v3/tag-plugins/media/index.html","permalink":"https://volantis.js.org/v3/tag-plugins/media/","excerpt":"","text":"InlineimageInlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。请将您的 Volantis 升级至 3.0.0 版本以上使用。 语法格式参数列表示例写法示例效果这是一段话 {% inlineimage 链接, height=高度(可选) %} 这是一段话。图片高度 阿拉伯数字 + px example:height=20pxexample.md:这是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %} 一段话。这又是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %} 一段话。这是 一段话。 这又是 一段话。 ImageImage 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。请将您的 Volantis 升级至 2.6 版本以上使用。 语法格式参数列表示例写法示例效果{% image 链接, 宽度(可选), 描述(可选) %}图片宽度 阿拉伯数字 + px example:300px 图片描述 纯文本,不能包含引号。example.md:添加描述:{% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, alt=每天下课回宿舍的路,承载了太多记忆。 %}指定宽度:{% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px %}指定宽度并添加描述:{% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px, alt=每天下课回宿舍的路,承载了太多记忆。 %}添加描述: 每天下课回宿舍的路,承载了太多记忆。 指定宽度: 指定宽度并添加描述: 每天下课回宿舍的路,承载了太多记忆。 GalleryGallery 标签是一种针对一组图片应用场景的标签。请将您的 Volantis 升级至 3.0 版本以上使用。 语法格式参数列表示例写法示例效果{% gallery 参数, 列数 %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg){% endgallery %}对齐方向 left, center, right 缩放 stretch 列数 逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch 来时图片放大填充。一行一个图片 example.md:{% gallery %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endgallery %} 一行多个图片(不换行) example.md:{% gallery %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg){% endgallery %} 多行多个图片(每行2~8个图片) example.md:{% gallery stretch, 4 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg){% endgallery %}一行一个图片 一行多个图片(不换行) 多行多个图片(每行2~8个图片) Audio请将您的 Volantis 升级至 2.4 版本以上使用。 语法格式示例写法示例效果example.md:{% audio 音频链接 %}example.md:{% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}Your browser does not support the audio tag. Video请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果单个视频 example.md:{% video 视频链接 %} 多个视频 example.md:{% videos 对齐方向, 列数 %}{% video 视频链接 %}{% video 视频链接 %}{% video 视频链接 %}{% endvideos %}对齐方向 left, center, right 列数 逗号后面直接写列数,支持 1 ~ 4 列。100%宽度 example.md:{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} 50%宽度 example.md:{% videos, 2 %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% endvideos %} 25%宽度 example.md:{% videos, 4 %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% endvideos %}100%宽度 Your browser does not support the video tag. 50%宽度 Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. 25%宽度 Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. APlayer主题对 APlayer 插件的样式进行了兼容。安装插件: npm i -S hexo-tag-aplayer hexo-tag-aplayerhttps://github.com/MoePlayer/hexo-tag-aplayer"},{"title":"链接、按钮和菜单标签","date":"2020-09-21T10:20:46.511Z","updated":"2020-09-21T10:20:46.511Z","comments":true,"path":"v3/tag-plugins/link/index.html","permalink":"https://volantis.js.org/v3/tag-plugins/link/","excerpt":"","text":"外链卡片请将您的 Volantis 升级至 3.0 版本以上使用。 语法格式示例写法示例效果{% link 标题, 链接, 图片 %}example.md:{% link 如何参与项目, http://localhost:4000/contributors/, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets@master/logo/256/safari.png %}如何参与项目http://localhost:4000/contributors/ 基础按钮请将您的 Volantis 升级至 2.4 版本以上使用。 语法格式参数列表示例写法示例效果{% btn 样式参数(可选), 标题, 链接, 图标(可选) %} 可选的参数可以省略,但是前后顺序不能乱。样式参数 regular, large, center 图标 第1个或者第2个参数包含 fa- 的那个被识别为图标。example.md:不设置任何参数的 {% btn 按钮, / %} 适合融入段落中。regular 按钮适合独立于段落之外:{% btn regular, 示例博客, https://xaoxuu.com, fas fa-play-circle %}large 按钮更具有强调作用,建议搭配 center 使用:{% btn center large, 开始使用, https://volantis.js.org/v3/getting-started/, fas fa-download %}行内按钮 不设置任何参数的 按钮 适合融入段落中。 空心按钮 示例博客 示例博客 示例博客 示例博客 居中: 开始使用 实心按钮 示例博客 示例博客 示例博客 示例博客 居中: 开始使用 富文本按钮请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果{% btns 样式参数 %}{% cell 标题, 链接, 图片或者图标 %}{% cell 标题, 链接, 图片或者图标 %}{% endbtns %}样式参数位置可以写图片样式、布局方式,多个样式参数用空格隔开。 圆角样式 默认为方形 rounded, circle 布局方式 默认为自动宽度,适合视野内只有一两个的情况。 参数 含义 wide 宽一点的按钮 fill 填充布局,自动铺满至少一行,多了会换行。 center 居中,按钮之间是固定间距。 around 居中分散 grid2 等宽最多2列,屏幕变窄会适当减少列数。 grid3 等宽最多3列,屏幕变窄会适当减少列数。 grid4 等宽最多4列,屏幕变窄会适当减少列数。 grid5 等宽最多5列,屏幕变窄会适当减少列数。 增加文字样式 可以在容器内增加 <b>标题</b> 和 <p>描述文字</p>如果需要显示类似「团队成员」之类的一组含有头像的链接: example.md:{% btns circle grid5 %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% endbtns %} 或者含有图标的按钮: example.md:{% btns rounded grid5 %}{% cell 下载源码, /, fas fa-download %}{% cell 查看文档, /, fas fa-book-open %}{% endbtns %} 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中 example.md:{% btns circle center grid5 %}<a href='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1'> <i class='fab fa-apple'></i> <b>心率管家</b> {% p red, 专业版 %} <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png'></a><a href='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1'> <i class='fab fa-apple'></i> <b>心率管家</b> {% p green, 免费版 %} <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'></a>{% endbtns %}如果需要显示类似「团队成员」之类的一组含有头像的链接: xaoxuu xaoxuu xaoxuu xaoxuu xaoxuu 或者含有图标的按钮: 下载源码 查看文档 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中 心率管家 专业版 心率管家 免费版 下拉菜单请将您的 Volantis 升级至 3.0 版本以上使用。 语法格式示例写法示例效果容器 {% menu 前缀(可省略), 标题, 后缀(可省略) %}菜单内容{% endmenu %} 菜单内容 菜单项 {% menuitem 文本, 链接, 图标 %} 分割线 {% menuitem hr %} 子菜单 {% submenu 嵌套菜单, 图标 %}菜单内容{% endsubmenu %}示例1 {% menu 下拉菜单 %}{% menuitem 主题源码, https://github.com/volantis-x/hexo-theme-volantis/, fas fa-file-code %}{% menuitem 更新日志, https://github.com/volantis-x/hexo-theme-volantis/releases/, fas fa-clipboard-list %}{% menuitem hr %}{% submenu 有疑问?, fas fa-question-circle %}{% menuitem 看 FAQ, /faqs/ %}{% menuitem 看 本站源码, https://github.com/volantis-x/volantis-docs/ %}{% menuitem 提 Issue, https://github.com/volantis-x/hexo-theme-volantis/issues/ %}{% endsubmenu %}{% endmenu %} 示例2 {% menu 这个是, 下拉菜单 %}(同上){% endmenu %} 示例3 {% menu 这个是, 下拉菜单, 的示例效果。 %}(同上){% endmenu %}示例1 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 示例2 这个是 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 示例3 这个是 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 的示例效果。"},{"title":"选择评论系统","date":"2020-09-21T10:21:33.824Z","updated":"2020-09-21T10:21:33.824Z","comments":true,"path":"v3/theme-settings/comments/index.html","permalink":"https://volantis.js.org/v3/theme-settings/comments/","excerpt":"","text":"目前支持的评论系统有: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover blog/_config.volantis.ymlcomments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine # valine, minivaline, disqus, gitalk, vssue, livere, isso, hashover ValineMiniValineVssueGitalkDisqusLivereIssoHashover... 一款快速、简洁且高效的无后端评论系统 https://valine.js.org blog/_config.volantis.ymlcomments: ... service: valine ... valine: appId: # your appId appKey: # your appKey js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js ... 可选配置项详见源码 其中,placeholder 支持在 front-matter 中设置。 front-matter---valine: placeholder: 你觉得xxx怎么样呢?--- 也可以通过设置 valine.path 实现多个页面共用一个评论框。 front-matter---valine: path: /wiki/volantis/--- 一款快速、简洁且高效的无后端评论系统 https://github.com/MiniValine/MiniValine/ blog/_config.volantis.ymlcomments: ... service: minivaline ... minivaline: appId: # Your leancloud application appid appKey: # Your leancloud application appkey ... 可选配置项详见源码 Vue 驱动的、基于 Issue 的评论插件 https://vssue.js.org/zh/ blog/_config.volantis.ymlcomments: ... service: vssue ... vssue: owner: repo: clientId: clientSecret: A modern comment component based on Github Issue and Preact. https://gitalk.github.io/ blog/_config.volantis.ymlcomments: ... service: gitalk ... gitalk: clientID: clientSecret: repo: owner: admin: # [] clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤: 点击 GitHub -> Settings https://github.com/settings/profile 点击 Developer settings https://github.com/settings/developers 点击 New OAuth App https://github.com/settings/applications/new 填写信息: Application name 随便填,我的是:xaoxuu.comHomepage URL 和 Authorization callback URL 都写你的网址,我的是:https://xaoxuu.com 可以通过设置 gitalk.id 实现多个页面共用一个评论框。 front-matter---gitalk: id: /wiki/volantis/--- Disqus - The #1 way to build an audience on your website. https://disqus.com/ blog/_config.volantis.ymlcomments: ... service: disqus ... disqus: shortname: Communication makes better world. https://www.livere.com/ blog/_config.volantis.ymlcomments: ... service: livere ... livere: uid: #你的livere的uid 在这里查看你的 uid:https://livere.com/insight/myCode,在【代码管理 -> 一般网站】中找到如下这段代码,其中 data-uid 中的内容就是你的 livere_uid。 <!-- 来必力City版安装代码 --><div id="lv-container" data-id="city" data-uid="你的livere的uid">... A commenting server similar to Disqus. https://posativ.org/isso/ blog/_config.volantis.ymlcomments: ... service: isso ... isso: url: https://example.com/(path/) src: https://example.com/(path/)js/embed.min.js A free and open source PHP comment system designed to allow completely anonymous comments and easy theming. https://www.barkdull.org/software/hashover blog/_config.volantis.ymlcomments: ... service: hashover ... hashover: src: https://example.com/(path/)comments.phpblog/themes/volantis/layout/_third-party/comments/评论系统名称/layout.ejs这里写布局代码 blog/themes/volantis/layout/_third-party/comments/评论系统名称/script.ejs这里要写加载 js 的代码 收录更多评论系统"},{"title":"主题配置文件","date":"2020-09-21T10:21:41.704Z","updated":"2020-09-21T10:21:41.704Z","comments":true,"path":"v3/theme-settings/configuration/index.html","permalink":"https://volantis.js.org/v3/theme-settings/configuration/","excerpt":"","text":"使用代替主题配置文件 第 1/2 步:找到原主题配置文件 使用 npm i hexo-theme-volantis 方式安装的主题,配置文件在 blog/node_modules/hexo-theme-volantis/_config.yml使用传统方式安装的主题,配置文件在 blog/themes/volantis/_config.yml 第 2/2 步:复制主题配置文件 将主题配置文件复制并重命名到以下路径:blog/_config.volantis.yml"},{"title":"网站与文章封面","date":"2020-09-21T10:21:45.718Z","updated":"2020-09-21T10:21:45.718Z","comments":true,"path":"v3/theme-settings/cover/index.html","permalink":"https://volantis.js.org/v3/theme-settings/cover/","excerpt":"","text":"封面方案blog/_config.volantis.ymlcover: scheme: docs # docs, blog ... 目前主题提供两种封面方案,全屏封面适用于项目文档,半屏封面适用于个人博客。您可以修改参数决定在任何页面是否显示。 封面布局blog/_config.volantis.ymlcover: ... layout: dock # search (搜索), dock (坞), featured (精选), focus (焦点) ... 默认显示设置blog/_config.volantis.ymlcover: ... display: home: true archive: false others: false # can be written in front-matter 'cover: true' 由于主页、归档是hexo自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter 中通过设置 cover: true/false 来决定显示封面或者不显示封面。"},{"title":"设置网站页脚","date":"2020-09-21T10:21:49.284Z","updated":"2020-09-21T10:21:49.284Z","comments":true,"path":"v3/theme-settings/footer/index.html","permalink":"https://volantis.js.org/v3/theme-settings/footer/","excerpt":"","text":"您通过 layout 可以自由布局网站页脚内容 aplayer, social, license, info, copyright。 blog/_config.volantis.ymlfooter: # layout of footer: [aplayer, social, license, info, copyright] layout: [aplayer, social, license, info, copyright] social: - icon: fas fa-rss url: atom.xml - icon: fas fa-envelope url: mailto:me@xaoxuu.com - icon: fab fa-github url: https://github.com/xaoxuu - icon: fas fa-headphones-alt url: https://music.163.com/#/user/home?id=63035382 copyright: '[Copyright © 2017-2020 Mr. X](https://xaoxuu.com)' # You can add your own property here. (Support markdown, for example: br: '<br>') br: '<br>' 其中,aplayer 需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如: blog/_config.volantis.ymlfooter: layout: [..., br, hello, ...] ... # You can add your own property here. (Support markdown, for example: br: '<br>') br: '<br>' hello: '[Hello World](/)'"},{"title":"设置默认布局","date":"2020-09-21T10:21:54.155Z","updated":"2020-09-21T10:21:54.155Z","comments":true,"path":"v3/theme-settings/layout/index.html","permalink":"https://volantis.js.org/v3/theme-settings/layout/","excerpt":"","text":"您可以自由决定每个页面是否显示侧边栏,侧边栏显示什么小部件,正文区域显示什么卡片,文章卡片显示什么 meta 信息。 layout: # The following can be written in `blog/source/_data/layout.yml` # 文章列表(主页、自定义的列表)布局 on_list: # 列表中每一篇文章的meta信息 meta: [title, author, date, category, top] # 列表类页面的侧边栏 sidebar: [blogger, category, tagcloud, qrcode] # 页面布局 on_page: # 文章页面主体元素,你也可以在页面的Front-matter中设置 body: [article, comments] # 默认的meta信息,文章中没有配置则按照这里的配置来显示,设置为false则不显示 # 其中,title只在header中有效,music和thumbnail无需在这里设置,文章中有则显示 # 如果tags放置在meta.header中,那么在post列表中不显示(因为卡片下方已经有了) meta: header: [title, author, category, date, top] footer: [updated, tags, btns, share] # 文章页面的侧边栏 sidebar: [qrcode, toc] # 文章布局,参数继承自 on_page on_post: # 文章页脚,自动在每一篇文章末尾添加 article_footer: [copyright, donate] # 其他的页面布局暂时等于 on_list 其中 meta 部分的取值自 meta 库, 其余部分取值自 widget 库, ( body 除了可以从 widget 库中取值外,还可以选择 article 和 comments )。 请别着急,具体的库配置将在下文详细讲解。"},{"title":"元数据组件","date":"2020-09-21T10:21:58.954Z","updated":"2020-09-21T10:21:58.954Z","comments":true,"path":"v3/theme-settings/meta/index.html","permalink":"https://volantis.js.org/v3/theme-settings/meta/","excerpt":"","text":"meta 即文章的元数据,描述文章的作者、发布时间、更新时间等等信息,Volantis 不替您决定,显示什么图标、如何描述都可以自定义。 blog/_config.volantis.ymlmeta: # 文章标题 title: # 暂无配置 # 默认文章作者(可在front-matter中覆盖) author: avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png name: Mr. X url: https://xaoxuu.com # 文章创建日期 date: icon: fas fa-edit title: '发布于:' format: 'll' # 日期格式 http://momentjs.com/docs/ # 文章更新日期 updated: icon: fas fa-save title: '更新于:' format: 'll' # 日期格式 http://momentjs.com/docs/ # 文章分类 category: icon: fas fa-folder-open # 文章置顶 top: icon: fas fa-angle-double-up # 文章浏览计数 counter: icon: fas fa-eye # 文章字数和阅读时长 wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half # 文章标签 tags: icon: fas fa-hashtag # 分享 share: - id: qq img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png - id: qzone img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png - id: weibo img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png # - id: qrcode # 当id为qrcode时需要安装插件 npm i -S hexo-helper-qrcode # img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/wechat.png # 链接 btns: edit: icon: fas fa-edit title: 在GitHub上编辑此页 color: '#888' repo: # 源码链接 icon: fas fa-file-code title: 源码 color: '#508EF2' bug: # BUG反馈链接 icon: fas fa-bug title: BUG color: '#FE5F58' doubt: # 疑问链接 icon: fas fa-question-circle title: 疑问 color: '#FFBD2B' idea: # 建议链接 icon: fas fa-lightbulb title: 建议 color: '#3DC550' faq: # FAQ链接 icon: fas fa-comments title: FAQ color: '#29B1C9' feedback: # 反馈链接 icon: fas fa-comment-dots title: 反馈 color: '#1BCDFC'"},{"title":"设置网站导航栏","date":"2020-09-21T10:22:02.607Z","updated":"2020-09-21T10:22:02.607Z","comments":true,"path":"v3/theme-settings/navbar/index.html","permalink":"https://volantis.js.org/v3/theme-settings/navbar/","excerpt":"","text":"导航栏配置导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。 blog/_config.volantis.ymlnavbar: logo: # choose [img] or [icon + title] img: icon: title: menu: # The following can be written in `blog/source/_data/menu.yml` - name: 博客 icon: fas fa-rss url: / - name: 分类 icon: fas fa-folder-open url: categories/ - name: 标签 icon: fas fa-tags url: tags/ - name: 归档 icon: fas fa-archive url: archives/ - name: 友链 icon: fas fa-link url: friends/ - name: 关于 icon: fas fa-info-circle url: about/ search: 搜索 # Search bar placeholder 使用数据文件 建议新建一个文件,专门存放导航栏菜单配置,文件的路径为: blog/source/_data/menu.yml 文件的内容为: blog/source/_data/menu.yml- name: 博客 icon: fas fa-rss url: /... 菜单嵌套导航栏菜单支持嵌套,嵌套的属性名为 rows ,写法示例: blog/source/_data/menu.yml...- name: 更多 icon: fas fa-ellipsis-v rows: - name: 主题源码 url: https://github.com/volantis-x/hexo-theme-volantis/ - name: 更新日志 url: https://github.com/volantis-x/hexo-theme-volantis/releases/ - name: hr - name: 有疑问? rows: - name: 看 FAQ url: faqs/ - name: 看 本站源码 url: https://github.com/volantis-x/volantis-docs/ - name: 提 Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: hr - name: 公告和测试博文 url: archives/ - name: 示例博客 url: examples/ - name: 特别感谢 url: contributors/ 分割线在子菜单中,新增一个只有 name: hr 的“菜单”就会被渲染成一个分割线。 - name: hr 小标题在子菜单中,新增一个只有 name: 小标题内容(也可以有 icon: 小标题的图标)的“菜单”就会被渲染成一个小标题。 ...- name: 近期 icon: fas fa-clock url: / rows: - name: 热门文章 icon: fas fa-fire - name: ProHUD 开源库的设计思路 url: blog/2019-08-27-prohud/ - name: ValueX:实用的安全对象类型转换库 url: blog/2019-08-29-valuex/ - name: 心率管家 App 的设计与开发 url: blog/2019-07-23-heartmate/"},{"title":"第三方插件","date":"2020-09-21T10:22:06.562Z","updated":"2020-09-21T10:22:06.562Z","comments":true,"path":"v3/theme-settings/plugins/index.html","permalink":"https://volantis.js.org/v3/theme-settings/plugins/","excerpt":"","text":"插件库Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。 blog/_config.volantis.ymlplugins: ################ required plugins ################ # jquery jquery: https://cdn.jsdelivr.net/npm/jquery@3.5/dist/jquery.min.js ################ optional plugins ################ # fontawesome fontawesome: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13/css/all.min.css # fontawesome animation fontawesome_animation: https://cdn.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css # fancybox fancybox: https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css ######## Plugins to improve loading speed: # Preload (The menu's url must end with ‘/’) instant_page: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js ######## Plugins to optimize the experience: # highlight.js highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css # more: https://www.jsdelivr.com/package/npm/highlight.js?path=styles # https://scrollrevealjs.org/api/reveal.html scrollreveal: js: https://cdn.jsdelivr.net/npm/scrollreveal@4.0.6/dist/scrollreveal.min.js distance: 32px duration: 800 # ms interval: 20 # ms scale: 1 # 0.1~1 # Codeblock Copy Button clipboard: https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js ######## Plugins for SEO: # Traffic statistics (very slow loading) busuanzi: https://cdn.jsdelivr.net/gh/volantis-x/cdn-busuanzi@2.3/js/busuanzi.pure.mini.js # npm i --save hexo-wordcount wordcount: #true ######## Plugins for ... # Button Ripple Effect nodewaves: css: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css js: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js # Typing Effects comment_typing: #https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js # Slide Background backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover # cover: sticky on the cover. fixed: Fixed as background for the site. shuffle: true # shuffle playlist duration: 20000 # Duration (ms) fade: 1500 # fade duration (ms) (Not more than 1500) images: # For personal use only. At your own risk if used for commercial purposes !!! - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/056.jpg # APlayer is only available in mainland China. # APlayer config: https://github.com/metowolf/MetingJS aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js - js/aplayer.js # Required server: netease # netease, tencent, kugou, xiami, baidu type: playlist # song, playlist, album, search, artist id: 3175833810 # song id / playlist id / album id / search keyword # Optional fixed: false # enable fixed mode theme: '#1BCDFC' # main color autoplay: false # audio autoplay order: list # player play order, values: 'list', 'random' loop: all # player loop play, values: 'all', 'one', 'none' volume: 0.7 # default volume, notice that player will remember user setting, default volume will not work after user set volume themselves list_max_height: 320px # list max height list_folded: true pjax: enable: true timeout: 5000 # The timeout in milliseconds for the XHR requests. Set to 0 to disable the timeout. cacheBust: false # When set to true, Pjax appends a timestamp to skip the browser cache. animation: nprogress # nprogress, circle banUrl: # 被屏蔽的 url 地址将不启用 pjax 跳转,可以在控制台下使用 window.location.pathname 获取 # - '/about/index.html' # Artitalk https://artitalk.js.org # 配置过程请参考:https://artitalk.js.org/doc.html # 除appID和appKEY外均为选填项 Artitalk: enable: false # true为开启,false为关闭 appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # severurl: #leancloud绑定的安全域名,使用国际版的话不需要填写 # slanguage: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语 # per: #每页说说的显示数量 # placeholder1: #在编辑说说的输入框中的占位符 # placeholder2: #自定义头像url的输入框的占位符 # lazy: #加载动画的开关,1为开,0为关,默认为开 # bgimg: #说说输入框背景图片url # color1: #说说背景颜色1&按钮颜色1 # color2: #说说背景颜色2&按钮颜色2 # color3: #说说字体颜色 ################################## # 暗黑模式 darkmodejs # https://darkmodejs.learn.uno # 暗黑模式样式:https://github.com/volantis-x/hexo-theme-volantis/blob/master/source/css/_third-party/darkmode.styl darkmodejs: enable: false js: https://cdn.jsdelivr.net/npm/darkmode-js@1.5/lib/darkmode-js.min.js bottom: 32px right: unset left: 16px time: 0s mixColor: '#f4f4f4' backgroundColor: '#f4f4f4' buttonColorDark: '#100f2c' buttonColorLight: '#f4f4f4' saveInCookies: true label: 🌓 autoMatchOsTheme: true 幻灯片背景blog/_config.volantis.ymlplugins: ... backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover # cover: sticky on the cover. fixed: Fixed as background for the site. duration: 20000 # Duration (ms) fade: 1500 # fade duration (ms) (Not more than 1500) images: # For personal use only. At your own risk if used for commercial purposes !!! - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ... 幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。 highlight.jsblog/_config.volantis.ymlplugins: ... highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css 如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable 设置为 false 否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。 如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。 经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。 APlayer 音乐播放器blog/_config.volantis.ymlplugins: ... aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js # Required server: netease # netease, tencent, kugou, xiami, baidu type: playlist # song, playlist, album, search, artist id: 3175833810 # song id / playlist id / album id / search keyword # Optional fixed: false # enable fixed mode theme: '#1BCDFC' # main color autoplay: false # audio autoplay order: list # player play order, values: 'list', 'random' loop: all # player loop play, values: 'all', 'one', 'none' volume: 0.7 # default volume, notice that player will remember user setting, default volume will not work after user set volume themselves list_max_height: 340px # list max height list_folded: true APlayer播放器只可以在中国大陆地区使用。相关文档: APlayer | MetingJS Artitalkblog/_config.volantis.ymlplugins: ... # Artitalk https://artitalk.js.org # 配置过程请参考:https://artitalk.js.org/doc.html # 除appID和appKEY外均为选填项 Artitalk: enable: false # true为开启,false为关闭 appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # severurl: #leancloud绑定的安全域名,使用国际版的话不需要填写 # slanguage: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语 # per: #每页说说的显示数量 # placeholder1: #在编辑说说的输入框中的占位符 # placeholder2: #自定义头像url的输入框的占位符 # lazy: #加载动画的开关,1为开,0为关,默认为开 # bgimg: #说说输入框背景图片url # color1: #说说背景颜色1&按钮颜色1 # color2: #说说背景颜色2&按钮颜色2 # color3: #说说字体颜色"},{"title":"站内搜索","date":"2020-09-21T10:22:10.657Z","updated":"2020-09-21T10:22:10.657Z","comments":true,"path":"v3/theme-settings/search/index.html","permalink":"https://volantis.js.org/v3/theme-settings/search/","excerpt":"","text":"blog/_config.volantis.ymlsearch: enable: true service: hexo # hexo, google, algolia, azure, baidu js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2.6.4/js/search.js google: apiKey: engineId: algolia: applicationID: apiKey: indexName: azure: serviceName: indexName: queryKey: baidu: apiId: 默认配置为 Hexo 搜索,但是需要安装插件才能使用: npm i -S hexo-generator-search hexo-generator-json-content"},{"title":"自定义主题外观","date":"2020-09-21T10:22:15.109Z","updated":"2020-09-21T10:22:15.109Z","comments":true,"path":"v3/theme-settings/style/index.html","permalink":"https://volantis.js.org/v3/theme-settings/style/","excerpt":"","text":"最大布局宽度blog/_config.volantis.ymlstyle: ... max_width: 1080px # Sum of body width and sidebar width 网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。 抗锯齿blog/_config.volantis.ymlstyle: ... font_smoothing: true # font-smoothing for webkit 自定义光标样式blog/_config.volantis.ymlstyle: ... cursor: enable: true text: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/text.png pointer: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png default: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png not-allowed: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/circle.png zoom-out: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png zoom-in: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png grab: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png 导航栏样式您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有: shadow:卡片阴影。 floatable:当鼠标移动到容器内时,呈现出浮起来的效果。 blur:背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。 blog/_config.volantis.ymlstyle: ... navbar: height: 64px effect: [shadow, blur] # [shadow, floatable, blur] 滚动条样式blog/_config.volantis.ymlstyle: ... scrollbar: size: 4px border: 2px color: '#2196f3' hover: '#ff5722' 侧边栏样式视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。 blog/_config.volantis.ymlstyle: ... sidebar: effect: [shadow] # [shadow, floatable, blur] 正文区域样式视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。您可以在 language: true 这里设置代码块显示语言名称。text_align 可以设置 h1/h2/h3/h4/p 的文字对齐方向。 blog/_config.volantis.ymlstyle: ... body: effect: [shadow] # [shadow, floatable, blur] highlight: language: true # show language of codeblock copy_btn: true text_align: # left, right, justify, center h1: left h2: left h3: left h4: left p: justify note: # style for default note: {% note text %} icon: '\\f054' color: '' 布局间距您可以设置几种标题的布局间距 h2/h3/h4、段落间距 line、区块内部的段落间距 inline。 blog/_config.volantis.ymlstyle: ... gap: h2: 48px # Spacing above H2 (only px unit) h3: 32px # Spacing above H3 (only px unit) h4: 16px # Spacing above H4 (only px unit) paragraph: 1rem # Paragraph spacing between paragraphs row: .5rem # Paragraph spacing between other elements 自定义字体您可以自定义正文和代码字体。 blog/_config.volantis.ymlstyle: ... fontfamily: logofont: fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'Varela Round' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf weight: normal style: normal bodyfont: fontfamily: 'UbuntuMono, "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'UbuntuMono' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf weight: normal style: normal codefont: fontfamily: 'Menlo, Monaco' name: 'Monaco' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf weight: normal style: normal 自定义颜色blog/_config.volantis.ymlstyle: ... color: site: '#21232F' # Website background color card: '#444' # Card background color text: '#fff' # The color of the text on the card. theme: '#ff9800' # Main color link: '#1BCDFC' # Link color hover: '#ff5722' # Link highlight color inner: '#333' # Text color inside the button block: '#555' # Block color inlinecode: yellow # Inline code color codeblock: '#555' # Codeblock color p: '#ccc' # Paragraph color 自定义右键菜单blog/_config.volantis.ymlrightmenu: enable: true # hr: 分割线, music: 音乐控制器 layout: [home, help, examples, contributors, hr, source_docs, source_theme, hr, print, hr, music] # 可选功能项 print: name: 打印页面 icon: fa fa-print onclick: document.execCommand('print') # 自定义菜单的格式如下 help: name: 常见问题 icon: fa fa-question url: https://volantis.js.org/faqs/ examples: name: 示例博客 icon: fa fa-rss url: https://volantis.js.org/examples/ contributors: name: 加入社区 icon: fa fa-fan fa-spin url: https://volantis.js.org/contributors/ source_docs: name: 本站源码 icon: fa fa-code-branch url: https://github.com/volantis-x/volantis-docs/ source_theme: name: 主题源码 icon: fa fa-code-branch url: https://github.com/volantis-x/hexo-theme-volantis/"},{"title":"卡片式组件","date":"2020-09-21T10:22:19.856Z","updated":"2020-09-21T10:22:19.856Z","comments":true,"path":"v3/theme-settings/widget/index.html","permalink":"https://volantis.js.org/v3/theme-settings/widget/","excerpt":"","text":"widget 即小部件,大部分小部件都可以放置在侧边栏,一部分已经为正文区域显示做了优化,还有一部分只可以放置在文章页脚部分。与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。 查看所有相关配置 blog/_config.volantis.ymlwidget: # The following can be written in `blog/source/_data/widget.yml` # --------------------------------------- # blogger info widget blogger: class: blogger display: [desktop] # [desktop, mobile] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true # Poetry Today. You can set a string, and it will be displayed when loading fails. social: true # --------------------------------------- # toc widget (valid only in articles) toc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 # --------------------------------------- # category widget category: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ # --------------------------------------- # tagcloud widget tagcloud: class: tagcloud display: [desktop] # [desktop, mobile] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' # --------------------------------------- # related posts widget related_posts: class: related_posts # npm i -S hexo-related-popular-posts display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-bookmark title: 相关文章 max_count: 5 # --------------------------------------- # copyright widget (valid only in articles) copyright: class: copyright display: [desktop, mobile] # [desktop, mobile] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink # --------------------------------------- # qrcode widget donate: class: qrcode display: [desktop, mobile] # [desktop, mobile] height: 64px # Automatic height if not set fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png # You can add your own widget here or 'blog/source/_data/widget.yml' # class: text, list, grid, qrcode, page, ... see more at https://volantis.js.org/ 每一个小部件都有 class 和 display,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。 小部件名: class: 小部件类别 display: [小部件在桌面端显示, 小部件在移动设备显示] 博主信息部件blog/_config.volantis.ymlblogger: class: blogger display: [desktop] # [desktop, mobile] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true # Poetry Today. You can set a string, and it will be displayed when loading fails. social: true 其中,今日诗词 jinrishici 如果设置为一个字符串,这个字符串会变成占位文字,加载失败时显示。如果不需要,就请设置为 jinrishici: false。social 的具体内容请在网站页脚部分设置。 文章目录部件blog/_config.volantis.ymltoc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 这个部件只能放置在侧边栏,并且在文章中有效。在移动设备中预览时,手指向上滑动时,导航栏右边会出现 TOC 按钮,点击即可展开 TOC 部件。如果您需要显示章节序号,请设置 list_number。 min_depth 和 max_depth 代表 TOC 支持的标题层级,最大范围是2~6。 文章分类部件blog/_config.volantis.ymlcategory: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ 这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。 标签云部件blog/_config.volantis.ymltagcloud: class: tagcloud display: [desktop] # [desktop, mobile] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' 这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。 相关文章部件blog/_config.volantis.ymlrelated_posts: class: related_posts # npm i -S hexo-related-popular-posts display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-bookmark title: 相关文章 max_count: 5 这个小部件建议放置在文章页脚,要使用这个部件,您需要安装插件: npm i -S hexo-related-popular-posts 值得注意的是,开启了这个功能之后,每次修改文章内容包括 front-matter 之后,都需要重新 hexo s。 文章版权部件blog/_config.volantis.ymlcopyright: class: copyright display: [desktop, mobile] # [desktop, mobile] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink 这个部件只可以放置在文章页脚。 二维码部件blog/_config.volantis.ymldonate: class: qrcode display: [desktop, mobile] # [desktop, mobile] height: 64px # Automatic height if not set fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png 您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。 通用文本部件blog/_config.volantis.ymlrepos: class: text display: [desktop] # [desktop, mobile] header: icon: fab fa-github title: 点个赞吧 url: https://github.com/xaoxuu/ content: - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/xaoxuu/Inspire)' 您可以创建用于展示任何文本内容的文本部件。 通用列表部件blog/_config.volantis.ymlwiki-hexo-theme: class: list display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-chevron-left title: Hexo Themes url: /wiki/ rows: - name: Volantis for Hexo url: /wiki/volantis/ - name: Resume for Hexo url: /wiki/resume/ 您可以创建用于展示任何链接列表的列表部件。列表的 rows 中的每一项支持的属性有: name、url、icon、img、avatar,其中 img 是方形图片的链接,avatar 是圆形图片的链接。 参考资料这个部件的布局继承自 list 部件,用于展示文章的参考资料。请将您的 Volantis 升级至 2.5 版本以上使用。 blog/_config.volantis.ymlreferences: class: references # is subclass of list display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-quote-left title: 参考资料 在文章的 front-matter 中设置: front-matterreferences: - name: Apple Developer Documentation url: https://developer.apple.com/documentation/ 组索引这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。 blog/_config.volantis.ymlgroup-1: class: group display: [desktop, mobile] # [desktop, mobile] header: icon: fab fa-apple title: Developer url: /wiki/ios/ 在文章的 front-matter 中设置: front-mattergroup: group-1order: 16sidebar: [group-1, toc] 「group-1」卡片将会以列表的形式显示所有设置了 group: group-1 的文章,顺序按照 order 从小到大排列。 通用网格部件blog/_config.volantis.ymlfeedback: class: grid display: [desktop, mobile] header: icon: fas fa-headset title: 联系开发者 url: https://github.com/volantis-x/hexo-theme-volantis fixed: true # 固定宽度 rows: - name: 反馈BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 疑问求助 icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 提个建议 icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/ 您可以创建用于展示任何链接列表的网格部件。网格默认根据文字长度自动确定每一个格子的宽度,如果文字长短不一,建议通过设置 fixed: true 来固定宽度,此时文字过长的格子中的文字会换行显示。 通用页面部件blog/_config.volantis.ymltest: class: page display: [desktop, mobile] pid: haha content: excerpt # excerpt, more, content 您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid 属性和文章的 front-matter 中设置一样的 pid 即可。 content 代表这个部件显示的内容,可选 excerpt,more,content 分别对应文章的摘要、摘要后面的内容、全文。 部件库文件部件库中的所有部件都可以写在部件库文件中,您需要创建一个文件在以下路径: blog/source/_data/widget.yml 文件内容示例:widget.yml"},{"title":"标签插件","date":"2020-09-21T10:19:40.544Z","updated":"2020-09-21T10:19:40.544Z","comments":true,"path":"v2/tag-plugins/index.html","permalink":"https://volantis.js.org/v2/tag-plugins/","excerpt":"","text":"主题原生支持丰富多彩的标签。 文本和段落Span & P请将您的 Volantis 升级至 2.5 版本以上使用。 语法格式参数列表示例写法示例效果行内文本 {% span 样式参数, 文本内容 %} 独立段落 {% p 样式参数, 文本内容 %}样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。 字体 logo, code 颜色 red, yellow, green, cyan, blue, gray 大小 small, h4, h3, h2, h1, large, huge, ultra 对齐方向 left, center, right彩色文字 example.md:在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。 超大文字 example.md:文档「开始」页面中的标题部分就是超大文字。{% p center logo large, Volantis %}{% p center small, A Wonderful Theme for Hexo %}彩色文字 在一段话中方便插入各种颜色的标签,包括:红色、黄色、绿色、青色、蓝色、灰色。 超大文字 文档「开始」页面中的标题部分就是超大文字。 Volantis A Wonderful Theme for Hexo Note & NoteBlockNoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果Note {% note 样式参数, 文本内容 %} NoteBlock {% noteblock 样式参数 %}文本段落{% endnoteblock %}样式参数位置可以写图标和颜色,多个样式参数用空格隔开。 图标 彩色的quote, info, warning, done/success, error/danger 灰色的,也可以指定颜色radiation, bug, idea, link, paperclip, todo, msg, guide, download, up, undo 颜色 指定颜色clear, light, gray, red, yellow, green, cyan, blueNote example.md:{% note, 为简单的一句话提供的简便写法。 %}{% note success, 支持同样丰富的参数。 %} NoteBlock example.md:可以在区块中放置一些复杂的结构,支持嵌套。{% noteblock quote %}{% p subtitle, 小标题 %}Windows 10不是為所有人設計,而是為每個人設計{% p subtitle, 嵌套测试 %}{% noteblock %}请坐和放宽,我正在帮你搞定一切...{% endnoteblock %}{% p subtitle, Folding 测试 %}{% folding 点击查看更多 %}{% note warning, 不要说我们没有警告过你 %}{% noteblock bug red %}我们都有不顺利的时候{% endnoteblock %}{% endfolding %}{% endnoteblock %}Note 为简单的一句话提供的简便写法。 支持同样丰富的参数。 NoteBlock 可以在区块中放置一些复杂的结构,支持嵌套。 小标题Windows 10不是為所有人設計,而是為每個人設計嵌套测试请坐和放宽,我正在帮你搞定一切...Folding 测试 点击查看更多 不要说我们没有警告过你我们都有不顺利的时候 Checkbox & Radio请将您的 Volantis 升级至 2.6 版本以上使用。 语法格式参数列表示例写法示例效果{% checkbox 样式参数(可选), 文本(支持简单md) %}颜色 red, yellow, green, cyan, blue 样式 plus, minus, times 选中状态 checkedCheckbox example.md:{% checkbox 纯文本测试 %}{% checkbox checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}{% checkbox red, 支持自定义颜色 %}{% checkbox green checked, 绿色 + 默认选中 %}{% checkbox yellow checked, 黄色 + 默认选中 %}{% checkbox cyan checked, 青色 + 默认选中 %}{% checkbox blue checked, 蓝色 + 默认选中 %}{% checkbox plus green checked, 增加 %}{% checkbox minus yellow checked, 减少 %}{% checkbox times red checked, 叉 %} Radio example.md:{% radio 纯文本测试 %}{% radio checked, 支持简单的 [markdown](https://guides.github.com/features/mastering-markdown/) 语法 %}{% radio red, 支持自定义颜色 %}{% radio green, 绿色 %}{% radio yellow, 黄色 %}{% radio cyan, 青色 %}{% radio blue, 蓝色 %}Checkbox 纯文本测试 支持简单的 markdown 语法 支持自定义颜色 绿色 + 默认选中 黄色 + 默认选中 青色 + 默认选中 蓝色 + 默认选中 增加 减少 叉 Radio 纯文本测试 支持简单的 markdown 语法 支持自定义颜色 绿色 黄色 青色 蓝色 按钮和菜单基础按钮请将您的 Volantis 升级至 2.4 版本以上使用。 语法格式参数列表示例写法示例效果{% btn 样式参数(可选), 标题, 链接, 图标(可选) %} 可选的参数可以省略,但是前后顺序不能乱。样式参数 regular, large, center 图标 第1个或者第2个参数包含 fa- 的那个被识别为图标。example.md:不设置任何参数的 {% btn 按钮, / %} 适合融入段落中。regular 按钮适合独立于段落之外:{% btn regular, 示例博客, https://xaoxuu.com, fas fa-play-circle %}large 按钮更具有强调作用,建议搭配 center 使用:{% btn center large, 开始使用, https://volantis.js.org/v3/getting-started/, fas fa-download %}不设置任何参数的 按钮 适合融入段落中。 regular 按钮适合独立于段落之外: 示例博客 large 按钮更具有强调作用,建议搭配 center 使用: 开始使用 富文本按钮请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果{% btns 样式参数 %}{% cell 标题, 链接, 图片或者图标 %}{% cell 标题, 链接, 图片或者图标 %}{% endbtns %}样式参数位置可以写图片样式、布局方式,多个样式参数用空格隔开。 圆角样式 默认为方形 rounded, circle 布局方式 默认为自动宽度,适合视野内只有一两个的情况。 参数 含义 wide 宽一点的按钮 fill 填充布局,自动铺满至少一行,多了会换行。 center 居中,按钮之间是固定间距。 around 居中分散 grid2 等宽最多2列,屏幕变窄会适当减少列数。 grid3 等宽最多3列,屏幕变窄会适当减少列数。 grid4 等宽最多4列,屏幕变窄会适当减少列数。 grid5 等宽最多5列,屏幕变窄会适当减少列数。 增加文字样式 可以在容器内增加 <b>标题</b> 和 <p>描述文字</p>如果需要显示类似「团队成员」之类的一组含有头像的链接: example.md:{% btns circle grid5 %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}{% endbtns %} 或者含有图标的按钮: example.md:{% btns rounded grid5 %}{% cell 下载源码, /, fas fa-download %}{% cell 查看文档, /, fas fa-book-open %}{% endbtns %} 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中 example.md:{% btns circle center grid5 %}<a href='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1'> <i class='fab fa-apple'></i> <b>心率管家</b> {% p red, 专业版 %} <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png'></a><a href='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1'> <i class='fab fa-apple'></i> <b>心率管家</b> {% p green, 免费版 %} <img src='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'></a>{% endbtns %}如果需要显示类似「团队成员」之类的一组含有头像的链接: xaoxuu xaoxuu xaoxuu xaoxuu xaoxuu 或者含有图标的按钮: 下载源码 查看文档 圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中 心率管家 专业版 心率管家 免费版 Menu请将您的 Volantis 升级至 2.4 版本以上使用。 语法格式示例写法示例效果容器 {% menu 下拉菜单, 图标 %}菜单内容{% endmenu %} 菜单内容 菜单项 {% menuitem 文本, 链接, 图标 %} 分割线 {% menuitem hr %} 子菜单 {% submenu 嵌套菜单, 图标 %}菜单内容{% endsubmenu %}{% menu 下拉菜单 %}{% menuitem 主题源码, https://github.com/volantis-x/hexo-theme-volantis/, fas fa-file-code %}{% menuitem 更新日志, https://github.com/volantis-x/hexo-theme-volantis/releases/, fas fa-clipboard-list %}{% menuitem hr %}{% submenu 有疑问?, fas fa-question-circle %}{% menuitem 看 FAQ, /faqs/ %}{% menuitem 看 本站源码, https://github.com/volantis-x/volantis-docs/ %}{% menuitem 提 Issue, https://github.com/volantis-x/hexo-theme-volantis/issues/ %}{% endsubmenu %}{% endmenu %} 下拉菜单 主题源码 更新日志 有疑问? 看 FAQ 看 本站源码 提 Issue 容器Tab此插件移植自 NexT #tabs 。请将您的 Volantis 升级至 2.1 版本以上使用。 语法格式参数列表{% tabs tab-id %}<!-- tab tab-name -->![](https://i.loli.net/2020/03/18/f5PQlWisvm9zbgK.jpg)<!-- endtab --><!-- tab tab-name -->这里面写内容,支持的语法格式有限,请尽量<u>不要</u>写太过复杂的东西。<!-- endtab -->{% endtabs %}tab-id 必填,如果一个页面有多个 tabs 时,tab-id 不能重复。 tab-name 标签文本。 Folding请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果{% folding 参数(可选), 标题 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %}参数位置可以填写颜色和状态,多个参数用空格隔开。 颜色 blue, cyan, green, yellow, red 状态 状态填写 open 代表默认打开。{% folding 查看图片测试 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %}{% folding cyan open, 查看默认打开的折叠框 %}这是一个默认打开的折叠框。{% endfolding %}{% folding green, 查看代码测试 %}{% endfolding %}{% folding yellow, 查看列表测试 %}- haha- hehe{% endfolding %}{% folding red, 查看嵌套测试 %}{% folding blue, 查看嵌套测试2 %}{% folding 查看嵌套测试3 %}hahaha <span><img src='https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style='height:24px'></span>{% endfolding %}{% endfolding %}{% endfolding %} 查看图片测试 查看默认打开的折叠框 这是一个默认打开的折叠框。 查看代码测试 {% folding green, 查看代码测试 %}查看代码测试{% endfolding %} 查看列表测试 hahahehe 查看嵌套测试 查看嵌套测试2 查看嵌套测试3 hahaha 多媒体包括图片、音频、视频。 ImageImage 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。请将您的 Volantis 升级至 2.6 版本以上使用。 语法格式参数列表示例写法示例效果{% image 链接, width=宽度(可选), alt=描述(可选) %}图片宽度 阿拉伯数字 + px example:width=300px 图片描述 纯文本,不能包含引号。example.md:添加描述:{% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, alt=每天下课回宿舍的路,承载了太多记忆。 %}指定宽度:{% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px %}指定宽度并添加描述:{% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px, alt=每天下课回宿舍的路,承载了太多记忆。 %}添加描述: 每天下课回宿舍的路,承载了太多记忆。 指定宽度: 指定宽度并添加描述: 每天下课回宿舍的路,承载了太多记忆。 FancyboxFancybox 标签是一种针对一组图片应用场景的标签。请将您的 Volantis 升级至 2.2 版本以上使用。 语法格式参数列表示例写法示例效果{% fancybox 参数, 列数 %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg){% endfancybox %}对齐方向 left, center, right 缩放 stretch 列数 逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch 来时图片放大填充。一行一个图片 example.md:{% fancybox %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfancybox %} 一行多个图片(不换行) example.md:{% fancybox %}![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)![图片描述](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg){% endfancybox %} 多行多个图片(每行2~8个图片) example.md:{% fancybox stretch, 4 %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg){% endfancybox %}一行一个图片 一行多个图片(不换行) 多行多个图片(每行2~8个图片) Audio请将您的 Volantis 升级至 2.4 版本以上使用。 语法格式示例写法示例效果example.md:{% audio 音频链接 %}example.md:{% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}Your browser does not support the audio tag. Video请将您的 Volantis 升级至 2.3 版本以上使用。 语法格式参数列表示例写法示例效果单个视频 example.md:{% video 视频链接 %} 多个视频 example.md:{% videos 对齐方向, 列数 %}{% video 视频链接 %}{% video 视频链接 %}{% video 视频链接 %}{% endvideos %}对齐方向 left, center, right 列数 逗号后面直接写列数,支持 1 ~ 4 列。100%宽度 example.md:{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} 50%宽度 example.md:{% videos, 2 %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% endvideos %} 25%宽度 example.md:{% videos, 4 %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}{% endvideos %}100%宽度 Your browser does not support the video tag. 50%宽度 Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. 25%宽度 Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. Your browser does not support the video tag. APlayer主题对 APlayer 插件的样式进行了兼容。安装插件: npm i -S hexo-tag-aplayer 官方文档: hexo-tag-aplayer 公式MathJax公式默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。 example.md:---title: 渲染公式(MathJax)date: 2020-02-23mathjax: true # false: 不渲染, true: 渲染, internal: 只在文章内部渲染,文章列表中不渲染---$$t+1=2$$$$\\mbox{积累因子}=\\begin{cases}1+ni & \\mbox{单利}\\\\\\\\(1+i)^n & \\mbox{复利}\\end{cases}$$$$\\begin{equation}\\sum_{i=0}^n F_i \\cdot \\phi (H, p_i) - \\sum_{i=1}^n a_i \\cdot ( \\tilde{x_i}, \\tilde{y_i}) + b_i \\cdot ( \\tilde{x_i}^2 , \\tilde{y_i}^2 )\\end{equation}$$$$\\begin{equation}\\beta^*(D) = \\mathop{argmin} \\limits_{\\beta} \\lambda {||\\beta||}^2 + \\sum_{i=1}^n max(0, 1 - y_i f_{\\beta}(x_i))\\end{equation}$$ 示例效果 $$t+1=2$$$$\\mbox{积累因子}=\\begin{cases}1+ni & \\mbox{单利}\\\\(1+i)^n & \\mbox{复利}\\end{cases}$$$$\\begin{equation}\\sum_{i=0}^n F_i \\cdot \\phi (H, p_i) - \\sum_{i=1}^n a_i \\cdot ( \\tilde{x_i}, \\tilde{y_i}) + b_i \\cdot ( \\tilde{x_i}^2 , \\tilde{y_i}^2 )\\end{equation}$$$$\\begin{equation}\\beta^*(D) = \\mathop{argmin} \\limits_{\\beta} \\lambda {||\\beta||}^2 + \\sum_{i=1}^n max(0, 1 - y_i f_{\\beta}(x_i))\\end{equation}$$ 如果公式仍无法正确渲染可以阅读 @MicDZ 的这篇文章:《在material-x上使用KaTeX》。 Hexo 标签引用块引用书上的句子 Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy. David LevithanWide Awake 代码块{% codeblock [title] [lang:language] [url] [link text] [additional options] %}code snippet{% endcodeblock %} 指定语言[rectangle setX: 10 y: 10 width: 20 height: 20]; example.md:{% codeblock lang:objc %}[rectangle setX: 10 y: 10 width: 20 height: 20];{% endcodeblock %} 附加说明Array.maparray.map(callback[, thisArg]) example.md:{% codeblock Array.map %}array.map(callback[, thisArg]){% endcodeblock %} 行标、高亮12345678n=eval(input())if n==0: print("Hello World")elif n>0: print("He\\nll\\no \\nWo\\nrl\\nd")else: for c in "Hello World": print(c) example.md:{% codeblock lang:python line_number:true mark:3,5,8 %}n=eval(input())if n==0: print("Hello World")elif n>0: print("He\\nll\\no \\nWo\\nrl\\nd")else: for c in "Hello World": print(c){% endcodeblock %} Pull Quote在文章中插入 Pull quote example.md:{% pullquote [class] %}content{% endpullquote %} jsFiddle在文章中嵌入 jsFiddle example.md:{% jsfiddle shorttag [tabs] [skin] [width] [height] %} Gist在文章中嵌入 Gist,注意:在国内无法加载。 example.md:{% gist gist_id [filename] %} iframe在文章中插入 iframe example.md:{% iframe url [width] [height] %} Image在文章中插入指定大小的图片。 example.md:{% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %} Link在文章中插入链接,并自动给外部链接添加 target="_blank" 属性。 example.md:{% link text url [external] [title] %} Include Code插入 source/downloads/code 文件夹内的代码文件。source/downloads/code 不是固定的,取决于你在配置文件中 code_dir 的配置。 example.md:{% include_code [title] [lang:language] [from:line] [to:line] path/to/file %} 示例 嵌入 test.js 文件全文{% include_code lang:javascript test.js %}只嵌入第 3 行{% include_code lang:javascript from:3 to:3 test.js %}嵌入第 5 行至第 8 行{% include_code lang:javascript from:5 to:8 test.js %}嵌入第 5 行至文件结束{% include_code lang:javascript from:5 test.js %}嵌入第 1 行至第 8 行{% include_code lang:javascript to:8 test.js %} 引用文章引用其他文章的链接。 {% post_path filename %}{% post_link filename [title] [escape] %} 示例 引用这篇文章:主题更名为「Volantis」example.md:引用这篇文章:{% post_link news/2020-02-22 %} 文章摘要和截断在文章中使用 <!-- more -->,那么 <!-- more --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。 更多请见Hexo官方文档:#标签插件"},{"title":"主题配置","date":"2020-09-21T10:19:43.447Z","updated":"2020-09-21T10:19:43.447Z","comments":true,"path":"v2/theme-settings/index.html","permalink":"https://volantis.js.org/v2/theme-settings/","excerpt":"","text":"如无特殊说明,本页面的配置信息写在 主题 的 config.yml 文件中。 实用小技巧所有需要写在主题配置文件中的配置都可以写在站点配置文件的 theme_config: 中详见 Hexo 官方文档 #覆盖主题配置也可以直接查看本站源码中站点配置文件的写法:_config.yml 主题样式您可以在主题配置文件中设定一些简单的样式,在开始前,确保没有使用 CDN 服务,否则修改不会生效。 最大布局宽度blog/themes/volantis/_config.ymlstyle: ... max_width: 1080px # Sum of body width and sidebar width 网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。 导航栏样式您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有: shadow:卡片阴影。 floatable:当鼠标移动到容器内时,呈现出浮起来的效果。 blur:背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。 blog/themes/volantis/_config.ymlstyle: ... navbar: height: 64px effect: [shadow, blur] # [shadow, floatable, blur] 滚动条样式blog/themes/volantis/_config.ymlstyle: ... scrollbar: size: 4px border: 2px color: '#2196f3' hover: '#ff5722' 侧边栏样式视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。 blog/themes/volantis/_config.ymlstyle: ... sidebar: effect: [shadow] # [shadow, floatable, blur] 正文区域样式视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。您可以在 language: true 这里设置代码块显示语言名称。text_align 可以设置 h1/h2/h3/h4/p 的文字对齐方向。 blog/themes/volantis/_config.ymlstyle: ... body: effect: [shadow] # [shadow, floatable, blur] highlight: language: true # show language of codeblock copy_btn: true text_align: # left, right, justify, center h1: left h2: left h3: left h4: left p: justify note: # style for default note: {% note text %} icon: '\\f054' color: '' 布局间距您可以设置几种标题的布局间距 h2/h3/h4、段落间距 line、区块内部的段落间距 inline。 blog/themes/volantis/_config.ymlstyle: ... gap: h2: 48px # Spacing above H2 (only px unit) h3: 32px # Spacing above H3 (only px unit) h4: 16px # Spacing above H4 (only px unit) paragraph: 1rem # Paragraph spacing between paragraphs row: .5rem # Paragraph spacing between other elements 自定义字体您可以自定义正文和代码字体。 blog/themes/volantis/_config.ymlstyle: ... fontfamily: logofont: fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'Varela Round' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf weight: normal style: normal bodyfont: fontfamily: 'UbuntuMono, "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'UbuntuMono' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf weight: normal style: normal codefont: fontfamily: 'Menlo, Monaco' name: 'Monaco' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf weight: normal style: normal 颜色样式blog/themes/volantis/_config.ymlstyle: ... color: site: '#21232F' # Website background color card: '#444' # Card background color text: '#fff' # The color of the text on the card. theme: '#ff9800' # Main color link: '#1BCDFC' # Link color hover: '#ff5722' # Link highlight color inner: '#333' # Text color inside the button block: '#555' # Block color inlinecode: yellow # Inline code color codeblock: '#555' # Codeblock color p: '#ccc' # Paragraph color 设置封面目前主题提供两种封面方案,全屏封面适用于项目文档,半屏封面适用于个人博客。您可以修改参数决定在任何页面是否显示。 默认显示设置blog/themes/volantis/_config.ymlcover: ... display: home: true archive: false others: false # can be written in front-matter 'cover: true' 由于主页、归档是hexo自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter 中通过设置 cover: true/false 来决定显示封面或者不显示封面。 设置导航栏导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。 blog/themes/volantis/_config.ymlnavbar: logo: # choose [img] or [icon + title] img: icon: title: menu: # The following can be written in `blog/source/_data/menu.yml` - name: 博客 icon: fas fa-rss url: / - name: 分类 icon: fas fa-folder-open url: categories/ - name: 标签 icon: fas fa-tags url: tags/ - name: 归档 icon: fas fa-archive url: archives/ - name: 友链 icon: fas fa-link url: friends/ - name: 关于 icon: fas fa-info-circle url: about/ search: 搜索 # Search bar placeholder 使用数据文件建议新建一个文件,专门存放导航栏菜单配置,文件的路径为: blog/source/_data/menu.yml 文件的内容为: blog/source/_data/menu.yml- name: 博客 icon: fas fa-rss url: /... 菜单嵌套导航栏菜单支持嵌套,嵌套的属性名为 rows ,写法示例: blog/source/_data/menu.yml...- name: 更多 icon: fas fa-ellipsis-v rows: - name: 主题源码 url: https://github.com/volantis-x/hexo-theme-volantis/ - name: 更新日志 url: https://github.com/volantis-x/hexo-theme-volantis/releases/ - name: hr - name: 有疑问? rows: - name: 看 FAQ url: faqs/ - name: 看 本站源码 url: https://github.com/volantis-x/volantis-docs/ - name: 提 Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: hr - name: 公告和测试博文 url: archives/ - name: 示例博客 url: examples/ - name: 特别感谢 url: contributors/ 分割线在子菜单中,新增一个只有 name: hr 的“菜单”就会被渲染成一个分割线。 - name: hr 小标题在子菜单中,新增一个只有 name: 小标题内容(也可以有 icon: 小标题的图标)的“菜单”就会被渲染成一个小标题。 ...- name: 近期 icon: fas fa-clock url: / rows: - name: 热门文章 icon: fas fa-fire - name: ProHUD 开源库的设计思路 url: blog/2019-08-27-prohud/ - name: ValueX:实用的安全对象类型转换库 url: blog/2019-08-29-valuex/ - name: 心率管家 App 的设计与开发 url: blog/2019-07-23-heartmate/ 这个示例的实际效果: https://xaoxuu.com 播放器在子菜单中,新增一个 icon: fas fa-compact-disc 的“菜单”就会被渲染成一个 APlayer 播放器。 - name: 背景音乐 icon: fas fa-compact-disc 模块化布局您可以自由决定每个页面是否显示侧边栏,侧边栏显示什么小部件,正文区域显示什么卡片,文章卡片显示什么 meta 信息。 layout: # The following can be written in `blog/source/_data/layout.yml` # 文章列表(主页、自定义的列表)布局 on_list: # 列表中每一篇文章的meta信息 meta: [title, author, date, category, top] # 列表类页面的侧边栏 sidebar: [blogger, category, tagcloud, qrcode] # 页面布局 on_page: # 文章页面主体元素,你也可以在页面的Front-matter中设置 body: [article, comments] # 默认的meta信息,文章中没有配置则按照这里的配置来显示,设置为false则不显示 # 其中,title只在header中有效,music和thumbnail无需在这里设置,文章中有则显示 # 如果tags放置在meta.header中,那么在post列表中不显示(因为卡片下方已经有了) meta: header: [title, author, category, date, top] footer: [updated, tags, btns, share] # 文章页面的侧边栏 sidebar: [qrcode, toc] # 文章布局,参数继承自 on_page on_post: # 文章页脚,自动在每一篇文章末尾添加 article_footer: [copyright, donate] # 其他的页面布局暂时等于 on_list 其中 meta 部分的取值自 meta 库, 其余部分取值自 widget 库, ( body 除了可以从 widget 库中取值外,还可以选择 article 和 comments )。 请别着急,具体的库配置将在下文详细讲解。 meta 库meta 即文章的元数据,描述文章的作者、发布时间、更新时间等等信息,Volantis 不替您决定,显示什么图标、如何描述都可以自定义。 查看所有相关配置 blog/themes/volantis/_config.ymlmeta: # 文章标题 title: # 暂无配置 # 默认文章作者(可在front-matter中覆盖) author: avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png name: Mr. X url: https://xaoxuu.com # 文章创建日期 date: icon: fas fa-edit title: '发布于:' format: 'll' # 日期格式 http://momentjs.com/docs/ # 文章更新日期 updated: icon: fas fa-save title: '更新于:' format: 'll' # 日期格式 http://momentjs.com/docs/ # 文章分类 category: icon: fas fa-folder-open # 文章置顶 top: icon: fas fa-angle-double-up # 文章浏览计数 counter: icon: fas fa-eye # 文章字数和阅读时长 wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half # 文章标签 tags: icon: fas fa-hashtag # 分享 share: - id: qq img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png - id: qzone img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png - id: weibo img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png # - id: qrcode # 当id为qrcode时需要安装插件 npm i -S hexo-helper-qrcode # img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/wechat.png # 链接 btns: edit: icon: fas fa-edit title: 在GitHub上编辑此页 color: '#888' repo: # 源码链接 icon: fas fa-file-code title: 源码 color: '#508EF2' bug: # BUG反馈链接 icon: fas fa-bug title: BUG color: '#FE5F58' doubt: # 疑问链接 icon: fas fa-question-circle title: 疑问 color: '#FFBD2B' idea: # 建议链接 icon: fas fa-lightbulb title: 建议 color: '#3DC550' faq: # FAQ链接 icon: fas fa-comments title: FAQ color: '#29B1C9' feedback: # 反馈链接 icon: fas fa-comment-dots title: 反馈 color: '#1BCDFC' widget 库widget 即小部件,大部分小部件都可以放置在侧边栏,一部分已经为正文区域显示做了优化,还有一部分只可以放置在文章页脚部分。与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。 查看所有相关配置 blog/themes/volantis/_config.ymlwidget: # The following can be written in `blog/source/_data/widget.yml` # --------------------------------------- # blogger info widget blogger: class: blogger display: [desktop] # [desktop, mobile] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true # Poetry Today. You can set a string, and it will be displayed when loading fails. social: true # --------------------------------------- # toc widget (valid only in articles) toc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 # --------------------------------------- # category widget category: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ # --------------------------------------- # tagcloud widget tagcloud: class: tagcloud display: [desktop] # [desktop, mobile] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' # --------------------------------------- # related posts widget related_posts: class: related_posts # npm i -S hexo-related-popular-posts display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-bookmark title: 相关文章 max_count: 5 # --------------------------------------- # copyright widget (valid only in articles) copyright: class: copyright display: [desktop, mobile] # [desktop, mobile] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink # --------------------------------------- # qrcode widget donate: class: qrcode display: [desktop, mobile] # [desktop, mobile] height: 64px # Automatic height if not set fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png # You can add your own widget here or 'blog/source/_data/widget.yml' # class: text, list, grid, qrcode, page, ... see more at https://volantis.js.org/ 每一个小部件都有 class 和 display,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。 小部件名: class: 小部件类别 display: [小部件在桌面端显示, 小部件在移动设备显示] 博主信息部件blog/themes/volantis/_config.ymlblogger: class: blogger display: [desktop] # [desktop, mobile] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true # Poetry Today. You can set a string, and it will be displayed when loading fails. social: true 其中,今日诗词 jinrishici 如果设置为一个字符串,这个字符串会变成占位文字,加载失败时显示。如果不需要,就请设置为 jinrishici: false。social 的具体内容请在网站页脚部分设置。 文章目录部件blog/themes/volantis/_config.ymltoc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 这个部件只能放置在侧边栏,并且在文章中有效。在移动设备中预览时,手指向上滑动时,导航栏右边会出现 TOC 按钮,点击即可展开 TOC 部件。如果您需要显示章节序号,请设置 list_number。 min_depth 和 max_depth 代表 TOC 支持的标题层级,最大范围是2~6。 文章分类部件blog/themes/volantis/_config.ymlcategory: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ 这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。 标签云部件blog/themes/volantis/_config.ymltagcloud: class: tagcloud display: [desktop] # [desktop, mobile] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' 这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。 相关文章部件blog/themes/volantis/_config.ymlrelated_posts: class: related_posts # npm i -S hexo-related-popular-posts display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-bookmark title: 相关文章 max_count: 5 这个小部件建议放置在文章页脚,要使用这个部件,您需要安装插件: npm i -S hexo-related-popular-posts 值得注意的是,开启了这个功能之后,每次修改文章内容包括 front-matter 之后,都需要重新 hexo s。 文章版权部件blog/themes/volantis/_config.ymlcopyright: class: copyright display: [desktop, mobile] # [desktop, mobile] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink 这个部件只可以放置在文章页脚。 二维码部件blog/themes/volantis/_config.ymldonate: class: qrcode display: [desktop, mobile] # [desktop, mobile] height: 64px # Automatic height if not set fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png 您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。 通用文本部件blog/themes/volantis/_config.ymlrepos: class: text display: [desktop] # [desktop, mobile] header: icon: fab fa-github title: 点个赞吧 url: https://github.com/xaoxuu/ content: - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/xaoxuu/Inspire)' 您可以创建用于展示任何文本内容的文本部件。 通用列表部件blog/themes/volantis/_config.ymlwiki-hexo-theme: class: list display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-chevron-left title: Hexo Themes url: /wiki/ rows: - name: Volantis for Hexo url: /wiki/volantis/ - name: Resume for Hexo url: /wiki/resume/ 您可以创建用于展示任何链接列表的列表部件。列表的 rows 中的每一项支持的属性有: name、url、icon、img、avatar,其中 img 是方形图片的链接,avatar 是圆形图片的链接。 参考资料这个部件的布局继承自 list 部件,用于展示文章的参考资料。请将您的 Volantis 升级至 2.5 版本以上使用。 blog/themes/volantis/_config.ymlreferences: class: references # is subclass of list display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-quote-left title: 参考资料 在文章的 front-matter 中设置: front-matterreferences: - name: Apple Developer Documentation url: https://developer.apple.com/documentation/ 组索引这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。 blog/themes/volantis/_config.ymlgroup-1: class: group display: [desktop, mobile] # [desktop, mobile] header: icon: fab fa-apple title: Developer url: /wiki/ios/ 在文章的 front-matter 中设置: front-mattergroup: group-1order: 16sidebar: [group-1, toc] 「group-1」卡片将会以列表的形式显示所有设置了 group: group-1 的文章,顺序按照 order 从小到大排列。 效果见: https://xaoxuu.com/wiki/ios/ 通用网格部件blog/themes/volantis/_config.ymlfeedback: class: grid display: [desktop, mobile] header: icon: fas fa-headset title: 联系开发者 url: https://github.com/volantis-x/hexo-theme-volantis fixed: true # 固定宽度 rows: - name: 反馈BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 疑问求助 icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 提个建议 icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/ 您可以创建用于展示任何链接列表的网格部件。网格默认根据文字长度自动确定每一个格子的宽度,如果文字长短不一,建议通过设置 fixed: true 来固定宽度,此时文字过长的格子中的文字会换行显示。 通用页面部件blog/themes/volantis/_config.ymltest: class: page display: [desktop, mobile] pid: haha content: excerpt # excerpt, more, content 您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid 属性和文章的 front-matter 中设置一样的 pid 即可。 content 代表这个部件显示的内容,可选 excerpt,more,content 分别对应文章的摘要、摘要后面的内容、全文。 部件库文件部件库中的所有部件都可以写在部件库文件中,您需要创建一个文件在以下路径: blog/source/_data/widget.yml 文件内容示例:widget.yml 设置网站页脚您通过 layout 可以自由布局网站页脚内容 aplayer, social, license, info, copyright。 blog/themes/volantis/_config.ymlfooter: # layout of footer: [aplayer, social, license, info, copyright] layout: [aplayer, social, license, info, copyright] social: - icon: fas fa-rss url: atom.xml - icon: fas fa-envelope url: mailto:me@xaoxuu.com - icon: fab fa-github url: https://github.com/xaoxuu - icon: fas fa-headphones-alt url: https://music.163.com/#/user/home?id=63035382 copyright: '[Copyright © 2017-2020 Mr. X](https://xaoxuu.com)' # You can add your own property here. (Support markdown, for example: br: '<br>') br: '<br>' 其中,aplayer 需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如: blog/themes/volantis/_config.ymlfooter: layout: [..., br, hello, ...] ... # You can add your own property here. (Support markdown, for example: br: '<br>') br: '<br>' hello: '[Hello World](/)' SEOblog/themes/volantis/_config.ymlseo: # When there are no keywords in the article's front-matter, use tags as keywords. use_tags_as_keywords: true # When there is no description in the article's front-matter, use excerpt as the description. use_excerpt_as_description: true robots: home_first_page: index,follow home_other_pages: noindex,follow archive: noindex,follow category: noindex,follow tag: noindex,follow # robots can be written in front-matter 这部分一般不需要修改。 插件库Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。 幻灯片背景blog/themes/volantis/_config.ymlplugins: ... backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover # cover: sticky on the cover. fixed: Fixed as background for the site. duration: 20000 # Duration (ms) fade: 1500 # fade duration (ms) (Not more than 1500) images: # For personal use only. At your own risk if used for commercial purposes !!! - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ... 幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。 highlight.jsblog/themes/volantis/_config.ymlplugins: ... highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css 如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable 设置为 false 否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。 如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。 经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。 APlayer 音乐播放器blog/themes/volantis/_config.ymlplugins: ... aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js # Required server: netease # netease, tencent, kugou, xiami, baidu type: playlist # song, playlist, album, search, artist id: 3175833810 # song id / playlist id / album id / search keyword # Optional fixed: false # enable fixed mode theme: '#1BCDFC' # main color autoplay: false # audio autoplay order: list # player play order, values: 'list', 'random' loop: all # player loop play, values: 'all', 'one', 'none' volume: 0.7 # default volume, notice that player will remember user setting, default volume will not work after user set volume themselves list_max_height: 340px # list max height list_folded: true APlayer播放器只可以在中国大陆地区使用。相关文档: APlayer | MetingJS 评论系统blog/themes/volantis/_config.ymlcomments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine # valine, disqus, gitalk, livere valine: appId: # your appId appKey: # your appKey js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js path: # All pages use the same path (share the same comments data) meta: nick,mail,link # valine comment header info requiredFields: ['nick','mail'] enableQQ: true # Unstable avatar link placeholder: 快来评论吧~ # valine comment input placeholder(like: Please leave your footprints ) avatar: robohash # gravatar style https://valine.js.org/avatar pageSize: 10 # comment list page size lang: zh-cn highlight: true visitor: true mathJax: false disqus: shortname: gitalk: clientID: clientSecret: repo: owner: admin: # [] livere: uid: Disqus官网: https://disqus.com/ blog/themes/volantis/_config.ymlcomments: ... disqus: shortname: Gitalk官网: https://github.com/gitalk/gitalk blog/themes/volantis/_config.ymlcomments: ... gitalk: clientID: clientSecret: repo: owner: admin: # [] clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤: 点击 GitHub -> Settings https://github.com/settings/profile 点击 Developer settings https://github.com/settings/developers 点击 New OAuth App https://github.com/settings/applications/new 填写信息: Application name 随便填,我的是:xaoxuu.comHomepage URL 和 Authorization callback URL 都写你的网址,我的是:https://xaoxuu.com 可以通过设置 gitalk.id 实现多个页面共用一个评论框。 front-matter---gitalk: id: /wiki/volantis/--- Valine官网: https://valine.js.org blog/themes/volantis/_config.ymlcomments: ... valine: appId: # your appId appKey: # your appKey js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js path: # All pages use the same path (share the same comments data) meta: nick,mail,link # valine comment header info requiredFields: ['nick','mail'] enableQQ: true # Unstable avatar link placeholder: 快来评论吧~ # valine comment input placeholder(like: Please leave your footprints ) avatar: robohash # gravatar style https://valine.js.org/avatar pageSize: 10 # comment list page size lang: zh-cn highlight: true visitor: true mathJax: false 其中,placeholder 支持在 front-matter 中设置。 front-matter---valine: placeholder: 你觉得xxx怎么样呢?--- 也可以通过设置 valine.path 实现多个页面共用一个评论框。 front-matter---valine: path: /wiki/volantis/--- MiniValine官网: https://github.com/MiniValine/MiniValine/ blog/themes/volantis/_config.ymlcomments: ... minivaline: appId: # Your leancloud application appid appKey: # Your leancloud application appkey placeholder: Write a Comment # Comment box placeholder adminEmailMd5: # The MD5 of Admin Email to show Admin Flag. math: true # Support MathJax. md: true # Support Markdown. # MiniValine's display language depends on user's browser or system environment # If you want everyone visiting your site to see a uniform language, you can set a force language value # Available values: en | zh-CN | (and many more) # More i18n info: https://github.com/MiniValine/minivaline-i18n lang: Livere官网: https://www.livere.com/ blog/themes/volantis/_config.ymlcomments: ... livere: uid: #你的livere的uid 在这里查看你的 uid:https://livere.com/insight/myCode,在【代码管理 -> 一般网站】中找到如下这段代码,其中 data-uid 中的内容就是你的 livere_uid。 <!-- 来必力City版安装代码 --><div id="lv-container" data-id="city" data-uid="你的livere的uid">... 开启搜索功能blog/themes/volantis/_config.ymlsearch: enable: true service: hexo # hexo, google, algolia, azure, baidu js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2.6.4/js/search.js google: apiKey: engineId: algolia: applicationID: apiKey: indexName: azure: serviceName: indexName: queryKey: baidu: apiId: 默认配置为 Hexo 搜索,但是需要安装插件才能使用: npm i -S hexo-generator-search hexo-generator-json-content"}],"posts":[{"title":"Hexo 标签函数 list_tags 用法详解","slug":"blogs/2020-09-24-list-tags","date":"2020-09-23T16:00:00.000Z","updated":"2020-09-23T16:00:00.000Z","comments":true,"path":"blogs/2020-09-24-list-tags/","link":"https://www.heson10.com/posts/59108.html","permalink":"https://volantis.js.org/blogs/2020-09-24-list-tags/","excerpt":"","text":"","categories":[{"name":"开发心得","slug":"开发心得","permalink":"https://volantis.js.org/categories/%E5%BC%80%E5%8F%91%E5%BF%83%E5%BE%97/"}],"tags":[],"author":"Heson"},{"title":"如何给博客添加弹窗通知","slug":"blogs/2020-09-03-message-prompt","date":"2020-09-02T16:00:00.000Z","updated":"2020-09-03T16:00:00.000Z","comments":true,"path":"blogs/2020-09-03-message-prompt/","link":"https://colsrch.cn/posts/72bb5148/","permalink":"https://volantis.js.org/blogs/2020-09-03-message-prompt/","excerpt":"","text":"","categories":[{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"}],"tags":[],"author":"Colsrch"},{"title":"博客访问速度提升:最佳线路分流","slug":"blogs/2020-08-31-hexospeed","date":"2020-08-30T16:00:00.000Z","updated":"2020-08-30T16:00:00.000Z","comments":true,"path":"blogs/2020-08-31-hexospeed/","link":"https://colsrch.cn/posts/56951997/","permalink":"https://volantis.js.org/blogs/2020-08-31-hexospeed/","excerpt":"","text":"","categories":[{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"}],"tags":[],"author":"Colsrch"},{"title":"静态博客使用 Issues API 发布动态、友链、书签","slug":"blogs/2020-08-28-issue-api","date":"2020-08-27T16:00:00.000Z","updated":"2020-08-27T16:00:00.000Z","comments":true,"path":"blogs/2020-08-28-issue-api/","link":"https://xaoxuu.com/blog/2020-08-23-issues-api/","permalink":"https://volantis.js.org/blogs/2020-08-28-issue-api/","excerpt":"","text":"","categories":[{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"}],"tags":[],"author":"xaoxuu"},{"title":"给 Volantis 主题调用 Valine 最新评论","slug":"blogs/2020-09-03-latest-comments","date":"2020-08-27T16:00:00.000Z","updated":"2020-09-02T16:00:00.000Z","comments":true,"path":"blogs/2020-09-03-latest-comments/","link":"https://www.heson10.com/posts/7207.html","permalink":"https://volantis.js.org/blogs/2020-09-03-latest-comments/","excerpt":"","text":"","categories":[{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"}],"tags":[],"author":"Heson"},{"title":"给 Hexo Volantis 主题添加图片轮播功能","slug":"blogs/2020-08-21-main-banner","date":"2020-08-20T16:00:00.000Z","updated":"2020-08-21T16:00:00.000Z","comments":true,"path":"blogs/2020-08-21-main-banner/","link":"https://www.heson10.com/posts/19736.html","permalink":"https://volantis.js.org/blogs/2020-08-21-main-banner/","excerpt":"","text":"","categories":[{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"}],"tags":[],"author":"Heson"},{"title":"如何快速优雅地删除 Valine 的垃圾评论","slug":"blogs/2020-07-03-valine","date":"2020-07-02T16:00:00.000Z","updated":"2020-09-04T02:05:18.449Z","comments":true,"path":"blogs/2020-07-03-valine/","link":"","permalink":"https://volantis.js.org/blogs/2020-07-03-valine/","excerpt":"Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。","text":"Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。 操作演示Your browser does not support the video tag. App 只支持数据存储于 LeanCloud 的评论系统。 App 登录前需要配置 AppID 和 AppKey,由于字符比较长,输入不方便,所以支持 URL Scheme 配置。将 URL 生成一个二维码,然后用手机扫码就可以打开 App 并自动配置好。 格式为: valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目 也可以把管理员用户的账号和密码配置上,扫码直接登录,但是注意不要泄露出去: valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目&user=me@xaoxuu.com&psw=q 注意:这个管理员用户并不是 LeanCloud 的账号,而是当前 Valine 数据库中的 _User 表中的一个用户,可以在 App 中注册,然后在 LeanCloud 上把注册的用户设置为管理员。 设置管理员的方法:在 _Role 表中新建一个 admin 角色,然后在 admin 角色的 users 列中点击 Relations 把自己刚注册的用户添加进去,这个用户就有了修改和删除评论数据的权限。 App 测试版地址 Valine for iOS Valine for Android","categories":[{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"}],"tags":[],"author":"xaoxuu"},{"title":"Volantis 主题部署 Pjax","slug":"blogs/2020-05-17-pjax","date":"2020-05-16T16:00:00.000Z","updated":"2020-08-06T16:00:00.000Z","comments":true,"path":"blogs/2020-05-17-pjax/","link":"https://inkss.cn/article/other/76993423.html","permalink":"https://volantis.js.org/blogs/2020-05-17-pjax/","excerpt":"","text":"","categories":[{"name":"开发心得","slug":"开发心得","permalink":"https://volantis.js.org/categories/%E5%BC%80%E5%8F%91%E5%BF%83%E5%BE%97/"}],"tags":[],"author":"inkss"},{"title":"关于主题与文档的更新","slug":"news/2020-04-04","date":"2020-04-03T16:00:00.000Z","updated":"2020-08-28T11:26:34.871Z","comments":true,"path":"news/2020-04-04/","link":"https://github.com/volantis-x/hexo-theme-volantis/issues/215","permalink":"https://volantis.js.org/news/2020-04-04/","excerpt":"由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。 当主题稳定后会提供英文文档。","text":"由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。 当主题稳定后会提供英文文档。","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"新版本「2.0」正式版发布","slug":"news/2020-03-10-2.0","date":"2020-03-09T16:00:00.000Z","updated":"2020-08-28T11:26:32.295Z","comments":true,"path":"news/2020-03-10-2.0/","link":"","permalink":"https://volantis.js.org/news/2020-03-10-2.0/","excerpt":"本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的: 卸载 less npm uninstall hexo-renderer-less --save 安装 stylus npm install hexo-renderer-stylus --save","text":"本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的: 卸载 less npm uninstall hexo-renderer-less --save 安装 stylus npm install hexo-renderer-stylus --save 新功能导航栏导航栏获得了史诗级的增强,可以设置N级子菜单。考虑到实用性,不太建议使用过多或者过深的菜单(超出屏幕的部分无法被看到)。 样式设置现在可以在主题配置文件中设置更多的样式: 最大布局宽度 导航栏高度、特效(阴影、毛玻璃、鼠标hover时浮起) 卡片特效(阴影、毛玻璃、鼠标hover时浮起) 代码框是否显示语言 标题和正文文本布局(靠左、靠右、居中) 正文字体 代码字体 各部分颜色 封面封面可以在主题配置文件中设置在首页、归档页面、其它页面默认是否显示。封面中可以同时显示logo图片、标题、副标题了。 小部件grid小部件可以设置 fixed: true 来固定网格宽度(适合文字长短不一的场景)。 其它可以设置「评论」的标题和副标题。可以创建多种颜色的折叠框。友链增加分组描述。 功能调整与优化样式渲染器使用 stylus 重写了所有样式,无需安装less插件了。相较于1.7.4,css文件体积缩小了19.75%。 主题配置文件 主题配置文件经过了较大改动,使得层级结构更加清晰。 优化了二维码(微信)分享的使用体验","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"新版本「2.0」测试版发布","slug":"news/2020-03-06-2.0-beta","date":"2020-03-06T11:43:00.000Z","updated":"2020-08-28T11:26:29.989Z","comments":true,"path":"news/2020-03-06-2.0-beta/","link":"","permalink":"https://volantis.js.org/news/2020-03-06-2.0-beta/","excerpt":"Beta6 导航栏N级菜单支持分割线和小标题,详见我的个人博客。","text":"Beta6 导航栏N级菜单支持分割线和小标题,详见我的个人博客。 Beta5 导航栏二级N级菜单 支持微信二维码分享(需安装二维码生成插件) Beta4 优化样式 更多样式可以在主题配置文件中自定义 调整主题配置文件 Beta3 优化样式 grid 部件新增 fixed: true 参数,用于固定宽度。 Beta2 可以创建多种颜色的折叠框 友链增加分组描述 Beta1 新版本使用 stylus 完全重写了样式。 可在主题配置文件中修改配色、标题等多种样式(需要关闭CDN)。已知的BUG有: Container左侧的图标(图片)始终显示不出来,原因未知。>div.info background-color: alpha($color-mac-cyan, 20%) border-left: $borderradius-codeblock solid $color-mac-cyan border-radius: $borderradius-codeblock >:before ...(省略无关代码) background-size: 16px 16px background-position: 4px 4px background-repeat: no-repeat background-color: $color-mac-cyan background-image: url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyMTYgMTM0NHYxMjhxMCAyNi0xOSA0NXQtNDUgMTloLTUxMnEtMjYgMC00NS0xOXQtMTktNDV2LTEyOHEwLTI2IDE5LTQ1dDQ1LTE5aDY0di0zODRoLTY0cS0yNiAwLTQ1LTE5dC0xOS00NXYtMTI4cTAtMjYgMTktNDV0NDUtMTloMzg0cTI2IDAgNDUgMTl0MTkgNDV2NTc2aDY0cTI2IDAgNDUgMTl0MTkgNDV6bS0xMjgtMTE1MnYxOTJxMCAyNi0xOSA0NXQtNDUgMTloLTI1NnEtMjYgMC00NS0xOXQtMTktNDV2LTE5MnEwLTI2IDE5LTQ1dDQ1LTE5aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==")我试过把url里面的内容换成网络图片的URL是可以正常显示的。源码在: themes/volantis/source/css/_third-party/container.styl","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"测试「文章内链接作文本的话无法生成静态文件」","slug":"test/2020-03-06-test-url","date":"2020-03-05T16:00:00.000Z","updated":"2020-08-21T02:39:20.199Z","comments":true,"path":"test/2020-03-06-test-url/","link":"","permalink":"https://volantis.js.org/test/2020-03-06-test-url/","excerpt":"","text":"5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错) 相关 Issue: #164 结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。 markdwon 解析插件为 hexo-renderer-marked 时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false 都可以避免 deploy 报错。插件:hexo-renderer-marked","categories":[],"tags":[]},{"title":"新增 pjax 开发分支","slug":"news/2020-02-25","date":"2020-02-24T16:00:00.000Z","updated":"2020-08-28T11:26:28.041Z","comments":true,"path":"news/2020-02-25/","link":"","permalink":"https://volantis.js.org/news/2020-02-25/","excerpt":"","text":"由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。 不能使用封面 mathjax 有折叠框的页面,折叠框打开之后目录高亮位置不对应 很多未知问题 感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"主题更名为「Volantis」","slug":"news/2020-02-22","date":"2020-02-21T16:00:00.000Z","updated":"2020-08-28T11:26:25.818Z","comments":true,"path":"news/2020-02-22/","link":"","permalink":"https://volantis.js.org/news/2020-02-22/","excerpt":"","text":"主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"主题文档网页更新并开源","slug":"news/2020-02-21","date":"2020-02-20T16:00:00.000Z","updated":"2020-08-28T11:26:23.376Z","comments":true,"path":"news/2020-02-21/","link":"","permalink":"https://volantis.js.org/news/2020-02-21/","excerpt":"","text":"主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。 现在使用的文档页面源码是: volantis-docs","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"已关闭评论区","slug":"news/2020-02-20","date":"2020-02-19T16:00:00.000Z","updated":"2020-08-28T11:26:20.424Z","comments":true,"path":"news/2020-02-20/","link":"","permalink":"https://volantis.js.org/news/2020-02-20/","excerpt":"","text":"使用 GitHub Issue由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。为了精准高效解决问题,请前往 GitHub Issue 遇到问题怎么办 确定已经查阅文档找不到相关内容。 前往「常见问题」页面,查看是否有解决方案。 访问在线示例,查看是否具有相同第问题。3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"版本命名规范化","slug":"news/2020-02-19","date":"2020-02-18T16:00:00.000Z","updated":"2020-08-28T11:26:17.378Z","comments":true,"path":"news/2020-02-19/","link":"","permalink":"https://volantis.js.org/news/2020-02-19/","excerpt":"","text":"主版本号.子版本号.修订版本号 主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范: 主版本号: 较大改动、框架调整或重构 子版本号: 较小或局部的功能性更新 修订版本号: 修复BUG或无关紧要的细节调整","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"心率测量工具限免活动","slug":"news/2020-02-18","date":"2020-02-17T16:00:00.000Z","updated":"2020-08-28T11:26:14.369Z","comments":true,"path":"news/2020-02-18/","link":"","permalink":"https://volantis.js.org/news/2020-02-18/","excerpt":"","text":"心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。 如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。 心率管家 专业版 心率管家 免费版","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"Code Highlight Style test","slug":"test/code-highlight","date":"2019-07-25T08:43:00.000Z","updated":"2020-08-21T02:39:20.200Z","comments":true,"path":"test/code-highlight/","link":"","permalink":"https://volantis.js.org/test/code-highlight/","excerpt":"Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org","text":"Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. #[derive(Debug)]pub enum State { Start, Transient, Closed,}impl From<&'a str> for State { fn from(s: &'a str) -> Self { match s { "start" => State::Start, "closed" => State::Closed, _ => unreachable!(), } }} [ { "title": "apples", "count": [12000, 20000], "description": {"text": "...", "sensitive": false} }, { "title": "oranges", "count": [17500, null], "description": {"text": "...", "sensitive": false} }] class MyClass { public static myValue: string; constructor(init: string) { this.myValue = init; }}import fs = require("fs");module MyModule { export interface MyInterface extends Other { myProperty: any; }}declare magicNumber number;myArray.forEach(() => { }); // fat arrow syntax @requires_authorizationdef somefunc(param1='', param2=0): r'''A docstring''' if param1 > param2: # interesting print 'Gre\\'ater' return (param2 - param1 + 1 + 0b10l) or Noneclass SomeClass: pass>>> message = '''interpreter... prompt''' <!DOCTYPE html><title>Title</title><style>body {width: 500px;}</style><script type="application/javascript"> function $init() {return true;}</script><body> <p checked class="title" id='title'>Title</p> <!-- here goes the rest of the page --></body> function $initHighlight(block, cls) { try { if (cls.search(/\\bno\\-highlight\\b/) != -1) return process(block, true, 0x0F) + ` class="${cls}"`; } catch (e) { /* handle exception */ } for (var i = 0 / 2; i < classes.length; i++) { if (checkCondition(classes[i]) === undefined) console.log('undefined'); } return ( <div> <web-component>{block}</web-component> </div> )}export $initHighlight; #include <iostream>int main(int argc, char *argv[]) { /* An annoying "Hello World" example */ for (auto i = 0; i < 0xFFFF; i++) cout << "Hello, World!" << endl; char c = '\\n'; unordered_map <string, vector<string> > m; m["key"] = "\\\\\\\\"; // this is an error return -2e3 + 12l;} CREATE TABLE "topic" ( "id" serial NOT NULL PRIMARY KEY, "forum_id" integer NOT NULL, "subject" varchar(255) NOT NULL);ALTER TABLE "topic"ADD CONSTRAINT forum_id FOREIGN KEY ("forum_id")REFERENCES "forum" ("id");-- Initialsinsert into "topic" ("forum_id", "subject")values (2, 'D''artagnian'); #import <UIKit/UIKit.h>#import "Dependency.h"@protocol WorldDataSource@optional- (NSString *)worldName;@required- (BOOL)allowsToLive;@end// comment@property (nonatomic, readonly) NSString *title;- (IBAction) show;@end /** * @author John Smith <john.smith@example.com>*/package l2f.gameserver.model;public abstract class L2Char extends L2Object { public static final Short ERROR = 0x0001; public void moveTo(int x, int y, int z) { _ai = null; log("Should not be called"); if (1 > 5) { // wtf!? return; } }} import Foundation@objc class Person: Entity { var name: String! var age: Int! init(name: String, age: Int) { /* /* ... */ */ } // Return a descriptive string for this person func description(offset: Int = 0) -> String { return "\\(name) is \\(age + offset) years old" }} @font-face { font-family: Chunkfive; src: url('Chunkfive.otf');}body, .usertext { color: #F0F0F0; background: #600; font-family: Chunkfive, sans;}@import url(print.css);@media print { a[href^=http]::after { content: attr(href) }} # The Greeter classclass Greeter def initialize(name) @name = name.capitalize end def salute puts "Hello #{@name}!" endendg = Greeter.new("world")g.salute # MakefileBUILDDIR = _buildEXTRAS ?= $(BUILDDIR)/extras.PHONY: main cleanmain: @echo "Building main facility..." build_main $(BUILDDIR)clean: rm -rf $(BUILDDIR)/* package mainimport "fmt"func main() { ch := make(chan float64) ch <- 1.0e10 // magic number x, ok := <- ch defer fmt.Println(`exitting now\\`) go println(len("hello world!")) return} #!/bin/bash###### CONFIGACCEPTED_HOSTS="/root/.hag_accepted.conf"BE_VERBOSE=falseif [ "$UID" -ne 0 ]then echo "Superuser rights required" exit 2figenApacheConf(){ echo -e "# Host ${HOME_DIR}$1/$2 :"} ; boilerplate[package]name = "some_name"authors = ["Author"]description = "This is \\a description"[[lib]]name = ${NAME}default = Trueauto = nocounter = 1_000","categories":[],"tags":[]},{"title":"Markdown Style test","slug":"test/markdown","date":"2018-07-24T15:31:06.000Z","updated":"2020-08-21T02:39:20.202Z","comments":true,"path":"test/markdown/","link":"","permalink":"https://volantis.js.org/test/markdown/","excerpt":"This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.","text":"This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly. Headers# H1## H2### H3#### H4##### H5###### H6Alternatively, for H1 and H2, an underline-ish style:Alt-H1======Alt-H2------ H1H2H3H4H5H6Alternatively, for H1 and H2, an underline-ish style: Alt-H1Alt-H2EmphasisEmphasis, aka italics, with *asterisks* or _underscores_.Strong emphasis, aka bold, with **asterisks** or __underscores__.Combined emphasis with **asterisks and _underscores_**.Strikethrough uses two tildes. ~~Scratch this.~~ Emphasis, aka italics, with asterisks or underscores. Strong emphasis, aka bold, with asterisks or underscores. Combined emphasis with asterisks and underscores. Strikethrough uses two tildes. Scratch this. Lists1. First ordered list item2. Another item * Unordered sub-list.1. Actual numbers don't matter, just that it's a number 1. Ordered sub-list4. And another item. You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)* Unordered list can use asterisks- Or minuses+ Or pluses- Paragraph In unordered list For example like this.Common Paragraph with some text.And more text. First ordered list item Another item Unordered sub-list. Actual numbers don't matter, just that it's a number Ordered sub-list And another item. You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). To have a line break without a paragraph, you will need to use two trailing spaces.Note that this line is separate, but within the same paragraph.(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) Unordered list can use asterisks Or minuses Or pluses Paragraph In unordered list For example like this. Common Paragraph with some text.And more text. Inline HTML<p>To reboot your computer, press <kbd>ctrl</kbd>+<kbd>alt</kbd>+<kbd>del</kbd>.</p> To reboot your computer, press ctrl+alt+del. <dl> <dt>Definition list</dt> <dd>Is something people use sometimes.</dd> <dt>Markdown in HTML</dt> <dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd></dl> Definition list Is something people use sometimes. <dt>Markdown in HTML</dt> <dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd> Links[I'm an inline-style link](https://www.google.com)[I'm an inline-style link with title](https://www.google.com "Google's Homepage")[I'm a reference-style link][Arbitrary case-insensitive reference text][I'm a relative reference to a repository file](https://cdn.jsdelivr.net/gh/theme-volantis/hexo-theme-volantis/LICENSE)[You can use numbers for reference-style link definitions][1]Or leave it empty and use the [link text itself]Some text to show that the reference links can follow later.[arbitrary case-insensitive reference text]: https://hexo.io[1]: https://hexo.io/docs/[link text itself]: https://hexo.io/api/ I'm an inline-style link I'm an inline-style link with title I'm a reference-style link I'm a relative reference to a repository file You can use numbers for reference-style link definitions Or leave it empty and use the link text itself Some text to show that the reference links can follow later. Imageshover to see the title text:Inline-style:![alt text](https://hexo.io/icon/favicon-196x196.png "Logo Title Text 1")Reference-style:![alt text][logo][logo]: https://hexo.io/icon/favicon-196x196.png "Logo Title Text 2" hover to see the title text: Inline-style: Reference-style: Code and Syntax HighlightingInline code has back-ticks around it. var s = "JavaScript syntax highlighting";alert(s); s = "Python syntax highlighting"print s No language indicated, so no syntax highlighting.But let's throw in a <b>tag</b>. Tables| |ASCII |HTML ||----------------|-------------------------------|-----------------------------||Single backticks|`'Isn't this fun?'` |'Isn't this fun?' ||Quotes |`"Isn't this fun?"` |"Isn't this fun?" ||Dashes |`-- is en-dash, --- is em-dash`|-- is en-dash, --- is em-dash| ASCII HTML Single backticks 'Isn't this fun?' 'Isn't this fun?' Quotes "Isn't this fun?" "Isn't this fun?" Dashes -- is en-dash, --- is em-dash -- is en-dash, --- is em-dash Colons can be used to align columns. | Tables | Are | Cool || ------------- |:-------------:| -----:|| col 3 is | right-aligned | || col 2 is | centered | || zebra stripes | are neat | Tables Are Cool col 3 is right-aligned col 2 is centered zebra stripes are neat The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown. Markdown | Less | Pretty--- | --- | ---*Still* | `renders` | **nicely**1 | 2 | 3 Markdown Less Pretty Still renders nicely 1 2 3 You can find more information about LaTeX mathematical expressions here. Blockquotes Blockquotes are very handy in email to emulate reply text.This line is part of the same quote. Quote break. This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote. Horizontal RuleThree or more... ---Hyphens***Asterisks___Underscores Hyphens Asterisks Underscores Line BreaksHere's a line for us to start with.This line is separated from the one above by two newlines, so it will be a *separate paragraph*.This line is also a separate paragraph, but...This line is only separated by a single newline, so it's a separate line in the *same paragraph*. Here's a line for us to start with. This line is separated from the one above by two newlines, so it will be a separate paragraph. This line is also a separate paragraph, but...This line is only separated by a single newline, so it's a separate line in the same paragraph. This is a regular paragraph.<table> <tr> <td>Foo</td> </tr></table>This is another regular paragraph. This is a regular paragraph. Foo This is another regular paragraph. Youtube videos<a href="https://www.youtube.com/watch?feature=player_embedded&v=ARted4RniaU" target="_blank"><img src="https://img.youtube.com/vi/ARted4RniaU/0.jpg"alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10" /></a>Pure markdown version:[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/ARted4RniaU/0.jpg)](https://www.youtube.com/watch?v=ARted4RniaU) Pure markdown version:","categories":[],"tags":[{"name":"Foo","slug":"foo","permalink":"https://volantis.js.org/tags/foo/"},{"name":"Bar","slug":"bar","permalink":"https://volantis.js.org/tags/bar/"}]},{"title":"","slug":"news/2017-10-24","date":"2017-10-23T16:00:00.000Z","updated":"2020-10-09T01:48:12.528Z","comments":true,"path":"news/2017-10-24/","link":"","permalink":"https://volantis.js.org/news/2017-10-24/","excerpt":"","text":"Volantis A Wonderful Theme for Hexo Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。 开始使用","categories":[{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[]},{"title":"Images","slug":"test/images","date":"2013-12-26T14:46:49.000Z","updated":"2020-08-21T02:39:20.201Z","comments":true,"path":"test/images/","link":"","permalink":"https://volantis.js.org/test/images/","excerpt":"","text":"This is a image test post.","categories":[],"tags":[]},{"title":"","slug":"test/no-title","date":"2013-12-25T14:57:49.000Z","updated":"2020-08-21T02:39:20.202Z","comments":true,"path":"test/no-title/","link":"","permalink":"https://volantis.js.org/test/no-title/","excerpt":"","text":"This post doesn't have a title. Make sure it's accessible.","categories":[],"tags":[]},{"title":"Excerpts","slug":"test/excerpts","date":"2013-12-24T16:23:23.000Z","updated":"2020-08-21T02:39:20.200Z","comments":true,"path":"test/excerpts/","link":"","permalink":"https://volantis.js.org/test/excerpts/","excerpt":"The following contents should be invisible in home/archive page.","text":"The following contents should be invisible in home/archive page. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eget urna vitae velit eleifend interdum at ac nisi. In nec ligula lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed eu cursus erat, ut dapibus quam. Aliquam eleifend dolor vitae libero pharetra adipiscing. Etiam adipiscing dolor a quam tempor, eu convallis nulla varius. Aliquam sollicitudin risus a porta aliquam. Ut nec velit dolor. Proin eget leo lobortis, aliquam est sed, mollis mauris. Fusce vitae leo pretium massa accumsan condimentum. Fusce malesuada gravida lectus vel vulputate. Donec bibendum porta nibh ut aliquam. Sed lorem felis, congue non fringilla eu, aliquam eu eros. Curabitur orci libero, mollis sed semper vitae, adipiscing in lectus. Aenean non egestas odio. Donec sollicitudin nisi quis lorem gravida, in pharetra mauris fringilla. Duis sit amet faucibus dolor, id aliquam neque. In egestas, odio gravida tempor dictum, mauris felis faucibus purus, sit amet commodo lacus diam vitae est. Ut ut quam eget massa semper sodales. Aenean non ipsum cursus, blandit lectus in, ornare odio. Curabitur ultrices porttitor vulputate.","categories":[],"tags":[]},{"title":"Videos","slug":"test/videos","date":"2013-12-24T16:19:15.000Z","updated":"2020-08-21T02:39:20.203Z","comments":true,"path":"test/videos/","link":"","permalink":"https://volantis.js.org/test/videos/","excerpt":"","text":"This is a video test post. Youtube Vimeo","categories":[],"tags":[]},{"title":"Gallery Post","slug":"test/gallery-post","date":"2013-12-24T16:16:18.000Z","updated":"2020-08-21T02:39:20.200Z","comments":true,"path":"test/gallery-post/","link":"","permalink":"https://volantis.js.org/test/gallery-post/","excerpt":"","text":"This post contains 4 photos: Widescreen wallpaper Portrait photo Dual widescreen wallpaper Small photo All photos should be displayed properly.","categories":[],"tags":[]},{"title":"Tag Plugins","slug":"test/tag-plugins","date":"2013-12-24T16:14:39.000Z","updated":"2020-08-21T02:39:20.202Z","comments":true,"path":"test/tag-plugins/","link":"","permalink":"https://volantis.js.org/test/tag-plugins/","excerpt":"","text":"This post is used for testing tag plugins. See docs for more info. Block QuoteNormal blockquote Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna. Quote from a bookDo not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy. David LevithanWide Awake Quote from TwitterNEW: DevDocs now comes with syntax highlighting. http://devdocs.io @DevDocstwitter.com/devdocs/status/356095192085962752 Quote from an article on the webEvery interaction is both precious and an opportunity to delight. Seth Godin `http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html` Welcome to Island Marketing Code BlockNormal code blockalert('Hello World!'); With captionArray.maparray.map(callback[, thisArg]) With caption and URL.compactUnderscore.js.compact([0, 1, false, 2, ‘’, 3]);=> [1, 2, 3] With marked linesLine 1,7-8,10 should be marked with different color. const http = require('http');const hostname = '127.0.0.1';const port = 1337;http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World\\n');}).listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`);}); Note: Theme's style should support .highlight.line.marked (recommend to use the selection or current line color). Gist jsFiddle PullquoteLeftLorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus molestie arcu, et fringilla mauris placerat ac. Nullam luctus bibendum risus. Ut cursus sed ipsum feugiat egestas. Suspendisse elementum, velit eu consequat consequat, augue lorem dapibus libero, eget pulvinar dolor est sit amet nulla. Suspendisse a porta tortor, et posuere mi. Pellentesque ultricies, mi quis volutpat malesuada, erat felis vulputate nisl, ac congue ante tortor ut ante. Proin aliquam sem vel mauris tincidunt, eget scelerisque tortor euismod. Nulla tincidunt enim nec commodo dictum. Mauris id sapien et orci gravida luctus id ut dui. In vel vulputate odio. Duis vel turpis molestie, scelerisque enim eu, lobortis eros. Cras at ipsum gravida, sagittis ante vel, viverra tellus. Nunc mauris turpis, elementum ullamcorper nisl pretium, ultrices cursus justo. Mauris porttitor commodo eros, ac ornare orci interdum in. Cras fermentum cursus leo sed mattis. In dignissim lorem sem, sit amet elementum mauris venenatis ac. RightLorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ligula justo, lobortis sit amet semper vel, dignissim sit amet libero. Praesent ac tempus ligula. Maecenas at gravida odio. Etiam tristique volutpat lacus eu faucibus. Donec non tempus arcu. Phasellus adipiscing, mauris nec mollis egestas, ipsum nunc auctor velit, et rhoncus lorem ipsum at ante. Praesent et sem in velit volutpat auctor. Duis vel mauris nulla. Maecenas mattis interdum ante, quis sagittis nibh cursus et. Nulla facilisi. Morbi convallis gravida tortor, ut fermentum enim gravida et. Nunc vel dictum nisl, non ultrices libero. Proin vestibulum felis eget orci consectetur lobortis. Vestibulum augue nulla, iaculis vitae augue vehicula, dignissim ultrices libero. Sed imperdiet urna et quam ultrices tincidunt nec ac magna. Etiam vel pharetra elit.","categories":[],"tags":[]},{"title":"www.google.com","slug":"test/link-post-without-title","date":"2013-12-24T15:44:13.000Z","updated":"2020-08-21T02:39:20.201Z","comments":true,"path":"test/link-post-without-title/","link":"http://www.google.com/","permalink":"https://volantis.js.org/test/link-post-without-title/","excerpt":"","text":"This is a link post without a title. The title should be the link with or without protocol. Clicking on the link should open Google in a new tab or window.","categories":[],"tags":[]},{"title":"日本語テスト","slug":"test/日本語テスト","date":"2013-12-24T15:33:26.000Z","updated":"2020-08-21T02:39:20.204Z","comments":true,"path":"test/日本語テスト/","link":"","permalink":"https://volantis.js.org/test/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%86%E3%82%B9%E3%83%88/","excerpt":"","text":"This is a Japanese test post. 私は昨日ついにその助力家というのの上よりするたなけれ。 最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。 がたを知っないはずも同時に九月をいよいよたありた。 もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。 それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。 この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。 From すぐ使えるダミーテキスト - 日本語 Lorem ipsum","categories":[],"tags":[]},{"title":"中文測試","slug":"test/中文測試","date":"2013-12-24T15:31:30.000Z","updated":"2020-08-21T02:39:20.203Z","comments":true,"path":"test/中文測試/","link":"","permalink":"https://volantis.js.org/test/%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6/","excerpt":"","text":"This is a Chinese test post. 善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。 以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一? 就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。 國新故。 工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不? From 亂數假文產生器 - Chinese Lorem Ipsum","categories":[],"tags":[]},{"title":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam justo turpis, tincidunt ac convallis id.","slug":"test/long-title","date":"2013-12-24T15:31:06.000Z","updated":"2020-08-21T02:39:20.202Z","comments":true,"path":"test/long-title/","link":"","permalink":"https://volantis.js.org/test/long-title/","excerpt":"","text":"This post has a long title. Make sure the title displayed right.","categories":[],"tags":[]},{"title":"Link Post","slug":"test/link-post","date":"2013-12-24T15:30:04.000Z","updated":"2020-08-21T02:39:20.201Z","comments":true,"path":"test/link-post/","link":"http://www.google.com/","permalink":"https://volantis.js.org/test/link-post/","excerpt":"","text":"This is a link post. Clicking on the link should open Google in a new tab or window.","categories":[],"tags":[]},{"title":"Elements","slug":"test/elements","date":"2013-12-24T15:29:08.000Z","updated":"2020-08-21T02:39:20.200Z","comments":true,"path":"test/elements/","link":"","permalink":"https://volantis.js.org/test/elements/","excerpt":"","text":"The purpose of this post is to help you make sure all of HTML elements can display properly. If you use CSS reset, don't forget to redefine the style by yourself. Heading 1Heading 2Heading 3Heading 4Heading 5Heading 6 ParagraphLorem ipsum dolor sit amet, test link consectetur adipiscing elit. Strong text pellentesque ligula commodo viverra vehicula. Italic text at ullamcorper enim. Morbi a euismod nibh. Underline text non elit nisl. Deleted text tristique, sem id condimentum tempus, metus lectus venenatis mauris, sit amet semper lorem felis a eros. Fusce egestas nibh at sagittis auctor. Sed ultricies ac arcu quis molestie. Donec dapibus nunc in nibh egestas, vitae volutpat sem iaculis. Curabitur sem tellus, elementum nec quam id, fermentum laoreet mi. Ut mollis ullamcorper turpis, vitae facilisis velit ultricies sit amet. Etiam laoreet dui odio, id tempus justo tincidunt id. Phasellus scelerisque nunc sed nunc ultricies accumsan. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed erat diam, blandit eget felis aliquam, rhoncus varius urna. Donec tellus sapien, sodales eget ante vitae, feugiat ullamcorper urna. Praesent auctor dui vitae dapibus eleifend. Proin viverra mollis neque, ut ullamcorper elit posuere eget. Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna. Maecenas ornare arcu at mi suscipit, non molestie tortor ultrices. Aenean convallis, diam et congue ultricies, erat magna tincidunt orci, pulvinar posuere mi sapien ac magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent vitae placerat mauris. Nullam laoreet ante posuere tortor blandit auctor. Sed id ligula volutpat leo consequat placerat. Mauris fermentum dolor sed augue malesuada sollicitudin. Vivamus ultrices nunc felis, quis viverra orci eleifend ut. Donec et quam id urna cursus posuere. Donec elementum scelerisque laoreet. List TypesDefinition List (dl)Definition List TitleThis is a definition list division. Ordered List (ol) List Item 1 List Item 2 List Item 3 Unordered List (ul) List Item 1 List Item 2 List Item 3 Checkbox List (ul) List Item 1 unchecked List Item 2 checked List Item 3 checked Table Table Header 1 Table Header 2 Table Header 3 Division 1 Division 2 Division 3 Division 1 Division 2 Division 3 Division 1 Division 2 Division 3 Misc Stuff - abbr, acronym, sub, sup, kbd, etc.Lorem superscript dolor subscript amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. cite. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. NBA Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. AVE. Use Crtl + C to stop.","categories":[],"tags":[]},{"title":"Hello World","slug":"test/hello-world","date":"2013-12-24T09:49:32.000Z","updated":"2020-08-21T02:39:20.201Z","comments":true,"path":"test/hello-world/","link":"","permalink":"https://volantis.js.org/test/hello-world/","excerpt":"","text":"Welcome to Hexo! This is your very first post. Check documentation to learn how to use.","categories":[],"tags":[]}],"categories":[{"name":"开发心得","slug":"开发心得","permalink":"https://volantis.js.org/categories/%E5%BC%80%E5%8F%91%E5%BF%83%E5%BE%97/"},{"name":"进阶玩法","slug":"进阶玩法","permalink":"https://volantis.js.org/categories/%E8%BF%9B%E9%98%B6%E7%8E%A9%E6%B3%95/"},{"name":"官方资讯","slug":"官方资讯","permalink":"https://volantis.js.org/categories/%E5%AE%98%E6%96%B9%E8%B5%84%E8%AE%AF/"}],"tags":[{"name":"Foo","slug":"foo","permalink":"https://volantis.js.org/tags/foo/"},{"name":"Bar","slug":"bar","permalink":"https://volantis.js.org/tags/bar/"}]}
\ No newline at end of file
diff --git a/contributors/index.html b/contributors/index.html
new file mode 100644
index 000000000..de7d1038b
--- /dev/null
+++ b/contributors/index.html
@@ -0,0 +1,2143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加入社区与团队 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加入社区与团队
+
+
+
+
+
+
+
+ 开源项目越多人参与就越有生命力,希望有兴趣的小伙伴可以加入团队~
+那么如何成为团队的一员呢?
+
+成为团队的一员,首先要满足的前置条件是:使用主题至少一个月 、长期活跃于社区 :「留言评论 」或者「解答 issues 」或者「在 issues 提交有效的建议 」。
+在您满足了上述的前置条件后,并且根据情况做了自己力所能及的事情,例如:
+
+发现和解决问题如提 issue 或者解答 issue 或者提交 PR
+完善文档、纠正文档错误、语病、翻译问题等
+发布文章推荐主题
+发布相关文章并转载外链到官网或者直接在官网发布文章
+
+则可以在论坛 发帖申请加入团队。
+
+
+
+
+
+
+感谢项目贡献者 非常感谢直接提交了 PR 的朋友!
+
+
+
+同样感谢那些在评论和 Issue 中互相帮助的网友~
+
+如果您有一个好点子或者解决了这里没有解决的问题,欢迎去 GitHub 贡献一下代码。👏
+发布与分享文章 如果您有与 Hexo 博客搭建相关的原创文章,可以转载到 Volantis 官网,示例如下:
+_posts/blogs/2020-05-17-pjax.md --- title: Volantis 主题部署 Pjax date: 2020-05-17 updated: 2020-08-07 categories: [开发心得] author: inkss link: https://inkss.cn/article/other/76993423.html description: 本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~ headimg: # 可以设置文章头图 ---
+
+如果您是第一次在官网投稿,还需要在 _data/author.yml
文件中添加作者信息,例如:
+_data/author.yml ... inkss: name: 枋柚梓 avatar: https://cdn.jsdelivr.net/gh/inkss/common@1.4.2/hexo/img/static/avatar.jpg url: https://inkss.cn
+
+
+要求
文章存放在 _posts/blogs/
目录中,且文件名格式为「年-月-日-文章主题」。 必须是原创文章,摘要部分200字符以内。(也可以不写摘要) 最好选择一个文章分类,如果现有的分类中没有合适的,可以自己新增。 如果有文章头图,请确保图片内最多只有一个单词或短语。
+
+
+
+
+
+
+可供交流的渠道 解决问题
+
+
+
+请不要发送邮件
开源项目的开发者很反感别人不通过正确的途径如 Issues 而是通过私人邮件询问开源项目问题,所以一般不会回复此类邮件。
+
+交流
+
+
+
+渠道
+方式
+用途
+
+
+
+论坛
+@volantis-x/forum
+慢,相对正式,方便检索,可以给其他用户参考
+
+
+QQ群
+1146399464 (验证码: vlts-2020 )
+非正式,即时通讯,易于斗图;不利于给其他用户参考
+
+
+
+
+佛系互动
+
+
+
+渠道
+方式
+用途
+
+
+
+评论区
+留言
+可以测试、灌水、推广自己的博客。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/css/style.css b/css/style.css
new file mode 100644
index 000000000..2799638f5
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,6900 @@
+@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {
+ .blur {
+ background: rgba(255,255,255,0.9) !important;
+ -webkit-backdrop-filter: saturate(200%) blur(20px);
+ backdrop-filter: saturate(200%) blur(20px);
+ }
+}
+.shadow {
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+}
+.shadow.floatable {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.shadow.floatable:hover {
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+}
+@font-face {
+ font-family: 'UbuntuMono';
+ src: url("https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf");
+ font-weight: 'normal';
+ font-style: 'normal';
+}
+@font-face {
+ font-family: 'Varela Round';
+ src: url("https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf");
+ font-weight: 'normal';
+ font-style: 'normal';
+}
+:root {
+ --color-site-bg: #f4f4f4;
+ --color-site-inner: #fff;
+ --color-site-footer: #666;
+ --color-card: #fff;
+ --color-text: #444;
+ --color-block: #f6f6f6;
+ --color-inlinecode: #c74f00;
+ --color-codeblock: #fff7ea;
+ --color-h1: #3a3a3a;
+ --color-h2: #3a3a3a;
+ --color-h3: #333;
+ --color-h4: #444;
+ --color-h5: #555;
+ --color-h6: #666;
+ --color-p: #444;
+ --color-list: #666;
+ --color-list-hl: #36ac91;
+ --color-meta: #888;
+}
+* {
+ box-sizing: border-box;
+ outline: none;
+ margin: 0;
+ padding: 0;
+}
+html {
+ color: var(--color-text);
+ width: 100%;
+ height: 100%;
+ font-family: UbuntuMono, "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif;
+ font-size: 16px;
+}
+html >::-webkit-scrollbar {
+ height: 4px;
+ width: 4px;
+}
+html >::-webkit-scrollbar-track-piece {
+ background: transparent;
+}
+html >::-webkit-scrollbar-thumb {
+ background: #44d7b6;
+ cursor: pointer;
+ border-radius: 2px;
+}
+html >::-webkit-scrollbar-thumb:hover {
+ background: #ff5722;
+}
+body {
+ background-color: var(--color-site-bg);
+ text-rendering: optimizelegibility;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ line-height: 1.6;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body.modal-active {
+ overflow: hidden;
+}
+@media screen and (max-width: 680px) {
+ body.modal-active {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+}
+::-moz-selection {
+ background: rgba(33,150,243,0.2);
+}
+::selection {
+ background: rgba(33,150,243,0.2);
+}
+h1 {
+ font-size: 1.5rem;
+}
+h2 {
+ font-size: 1.5rem;
+}
+h3 {
+ font-size: 1.25rem;
+}
+h4 {
+ font-size: 1.125rem;
+}
+h5 {
+ font-size: 1rem;
+}
+h6 {
+ font-size: 1rem;
+}
+h1,
+h2,
+h3,
+h4,
+h6 {
+ font-weight: normal;
+}
+a {
+ color: #2196f3;
+ cursor: pointer;
+ text-decoration: none;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+a:hover {
+ color: #ff5722;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+a:not([href]) {
+ cursor: default;
+}
+pre {
+ tab-size: 4;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ -webkit-tab-size: 4;
+}
+.clearfix {
+ zoom: 1;
+}
+.clearfix:before,
+.clearfix:after {
+ content: " ";
+ display: table;
+}
+.clearfix:after {
+ clear: both;
+}
+.hidden {
+ text-indent: -9999px;
+ visibility: hidden;
+ display: none;
+}
+.inner {
+ position: relative;
+ width: 80%;
+ max-width: 710px;
+ margin: 0 auto;
+}
+.vertical {
+ display: table-cell;
+ vertical-align: middle;
+}
+ul,
+ol {
+ padding-left: 0;
+}
+ul li,
+ol li {
+ list-style: none;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+article {
+ overflow: hidden;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+mark {
+ background: #ff0;
+ color: #000;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ font-size: 50%;
+ line-height: 1em;
+}
+sup {
+ vertical-align: text-top;
+}
+sub {
+ vertical-align: text-bottom;
+}
+img {
+ border: 0;
+ background: none;
+ max-width: 100%;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ box-sizing: content-box;
+ height: 0;
+ border: 0;
+ border-radius: 1px;
+ border-bottom: 1px solid rgba(68,68,68,0.1);
+}
+pre {
+ overflow: auto;
+}
+span.dot,
+span.sep {
+ font-size: 0.9em;
+ margin: 0 0.2rem;
+}
+span.dot:before {
+ content: '·';
+}
+span.sep:before {
+ content: '/';
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit /* 1 */;
+ font: inherit /* 2 */;
+ margin: 0 /* 3 */;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button /* 2 */;
+ cursor: pointer /* 3 */;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box /* 1 */;
+ padding: 0 /* 2 */;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: textfield /* 1 */;
+ box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+legend {
+ border: 0 /* 1 */;
+ padding: 0 /* 2 */;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table:not([class]) {
+ border-collapse: collapse;
+ overflow: auto;
+ display: inline-block;
+ max-width: 100%;
+ vertical-align: text-top;
+}
+table:not([class]) th {
+ background-color: #f1f1f1;
+}
+table:not([class]) td,
+table:not([class]) th {
+ padding: 8px 16px;
+ border: 2px solid #f1f1f1;
+ line-height: 1.5;
+ font-size: 90%;
+}
+table:not([class]) tr {
+ word-break: keep-all;
+ background-color: #fefefe;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+table:not([class]) tr:hover {
+ background-color: #f1f1f1;
+}
+td,
+th {
+ padding: 0;
+}
+.article span.btn,
+.md span.btn {
+ display: inline;
+}
+.article span.btn a,
+.md span.btn a {
+ text-decoration: none;
+ border-bottom: none;
+ display: inline-block;
+ padding: 3px 4px 2px 4px;
+ margin: 2px;
+ line-height: 1.1;
+ border-radius: 2px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.article span.btn a i,
+.md span.btn a i {
+ margin-right: 2px;
+}
+.article span.btn a:not([href]),
+.md span.btn a:not([href]) {
+ opacity: 0.5;
+}
+.article span.btn a:not([href]):hover,
+.md span.btn a:not([href]):hover {
+ cursor: $not-allowed, not-allowed;
+}
+.article span.btn a,
+.md span.btn a,
+.article span.btn.regular a,
+.md span.btn.regular a {
+ color: #44d7b6;
+ border: 1px solid #44d7b6;
+}
+.article span.btn a:hover,
+.md span.btn a:hover,
+.article span.btn.regular a:hover,
+.md span.btn.regular a:hover {
+ color: #ff5722;
+ border-color: #ff5722;
+}
+.article span.btn a i,
+.md span.btn a i,
+.article span.btn.regular a i,
+.md span.btn.regular a i {
+ margin-right: 4px;
+}
+.article span.btn.regular a,
+.md span.btn.regular a,
+.article span.btn.solid a,
+.md span.btn.solid a {
+ padding: 8px 12px;
+}
+.article span.btn.solid a,
+.md span.btn.solid a {
+ border: none;
+ background: #44d7b6;
+ color: #fff;
+}
+.article span.btn.solid a:hover,
+.md span.btn.solid a:hover {
+ color: #fff;
+ background: #ff5722;
+}
+.article span.btn.large a,
+.md span.btn.large a {
+ font-size: 1rem;
+ padding: 12px 36px;
+}
+.article span.btn.large a i,
+.md span.btn.large a i {
+ margin-right: 8px;
+}
+.article span.btn.center,
+.md span.btn.center {
+ display: block;
+ text-align: center;
+}
+.article div.btns,
+.md div.btns {
+ margin: 0 -8px;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ overflow: visible;
+ line-height: 1.8;
+}
+.article div.btns,
+.md div.btns,
+.article div.btns p,
+.md div.btns p,
+.article div.btns a,
+.md div.btns a {
+ font-size: 0.8125rem;
+ color: var(--color-p);
+}
+.article div.btns b,
+.md div.btns b {
+ font-size: 0.875rem;
+}
+.article div.btns.wide>a,
+.md div.btns.wide>a {
+ padding-left: 32px;
+ padding-right: 32px;
+}
+.article div.btns.fill>a,
+.md div.btns.fill>a {
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ width: auto;
+}
+.article div.btns.around,
+.md div.btns.around {
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+}
+.article div.btns.center,
+.md div.btns.center {
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+.article div.btns.grid2>a,
+.md div.btns.grid2>a {
+ width: calc(100%/2 - 16px);
+}
+@media screen and (max-width: 1024px) {
+ .article div.btns.grid2>a,
+ .md div.btns.grid2>a {
+ width: calc(100%/2 - 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .article div.btns.grid2>a,
+ .md div.btns.grid2>a {
+ width: calc(100%/2 - 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .article div.btns.grid2>a,
+ .md div.btns.grid2>a {
+ width: calc(100%/1 - 16px);
+ }
+}
+.article div.btns.grid3>a,
+.md div.btns.grid3>a {
+ width: calc(100%/3 - 16px);
+}
+@media screen and (max-width: 1024px) {
+ .article div.btns.grid3>a,
+ .md div.btns.grid3>a {
+ width: calc(100%/3 - 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .article div.btns.grid3>a,
+ .md div.btns.grid3>a {
+ width: calc(100%/3 - 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .article div.btns.grid3>a,
+ .md div.btns.grid3>a {
+ width: calc(100%/1 - 16px);
+ }
+}
+.article div.btns.grid4>a,
+.md div.btns.grid4>a {
+ width: calc(100%/4 - 16px);
+}
+@media screen and (max-width: 1024px) {
+ .article div.btns.grid4>a,
+ .md div.btns.grid4>a {
+ width: calc(100%/3 - 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .article div.btns.grid4>a,
+ .md div.btns.grid4>a {
+ width: calc(100%/3 - 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .article div.btns.grid4>a,
+ .md div.btns.grid4>a {
+ width: calc(100%/2 - 16px);
+ }
+}
+.article div.btns.grid5>a,
+.md div.btns.grid5>a {
+ width: calc(100%/5 - 16px);
+}
+@media screen and (max-width: 1024px) {
+ .article div.btns.grid5>a,
+ .md div.btns.grid5>a {
+ width: calc(100%/4 - 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .article div.btns.grid5>a,
+ .md div.btns.grid5>a {
+ width: calc(100%/3 - 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .article div.btns.grid5>a,
+ .md div.btns.grid5>a {
+ width: calc(100%/2 - 16px);
+ }
+}
+.article div.btns a,
+.md div.btns a {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ text-decoration: none;
+ border-bottom: none;
+ margin: 8px;
+ margin-top: calc(1.25 * 16px + 32px);
+ min-width: 120px;
+ font-weight: bold;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ padding: 8px;
+ text-align: center;
+ background: var(--color-block);
+ border-radius: 4px;
+}
+.article div.btns a>img:first-child,
+.md div.btns a>img:first-child,
+.article div.btns a>i:first-child,
+.md div.btns a>i:first-child {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ height: 64px;
+ width: 64px;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ margin: 16px 8px 4px 8px;
+ margin-top: calc(-1.25 * 16px - 32px);
+ border: 2px solid var(--color-card);
+ background: #fff;
+ line-height: 60px;
+ font-size: 28px;
+}
+.article div.btns a>img:first-child.auto,
+.md div.btns a>img:first-child.auto,
+.article div.btns a>i:first-child.auto,
+.md div.btns a>i:first-child.auto {
+ width: auto;
+}
+.article div.btns a>i:first-child,
+.md div.btns a>i:first-child {
+ color: #fff;
+ background: #44d7b6;
+}
+.article div.btns a p,
+.md div.btns a p,
+.article div.btns a b,
+.md div.btns a b {
+ margin: 0.25em;
+ font-weight: normal;
+ line-height: 1.25;
+ word-wrap: break-word;
+}
+.article div.btns a b,
+.md div.btns a b {
+ font-weight: bold;
+ line-height: 1.3;
+}
+.article div.btns a img,
+.md div.btns a img {
+ margin: 0.4em auto;
+}
+.article div.btns a:not([href]),
+.md div.btns a:not([href]) {
+ cursor: default;
+ color: inherit;
+}
+.article div.btns a[href]:hover,
+.md div.btns a[href]:hover {
+ background: rgba(255,87,34,0.15);
+}
+.article div.btns a[href]:hover,
+.md div.btns a[href]:hover,
+.article div.btns a[href]:hover b,
+.md div.btns a[href]:hover b {
+ color: #ff5722;
+}
+.article div.btns a[href]:hover>img:first-child,
+.md div.btns a[href]:hover>img:first-child,
+.article div.btns a[href]:hover>i:first-child,
+.md div.btns a[href]:hover>i:first-child {
+ transform: scale(1.1) translateY(-8px);
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);
+}
+.article div.btns a[href]:hover>i:first-child,
+.md div.btns a[href]:hover>i:first-child {
+ background: #ff5722;
+}
+.article div.btns.circle a>img:first-child,
+.md div.btns.circle a>img:first-child,
+.article div.btns.circle a>i:first-child,
+.md div.btns.circle a>i:first-child {
+ border-radius: 32px;
+}
+.article div.btns.rounded a>img:first-child,
+.md div.btns.rounded a>img:first-child,
+.article div.btns.rounded a>i:first-child,
+.md div.btns.rounded a>i:first-child {
+ border-radius: 16px;
+}
+.md .checkbox {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: center;
+ align-items: center;
+ margin-top: 1em;
+ margin-bottom: 1em;
+/* Checkbox */
+/* Radio */
+/* Colors */
+}
+.md .checkbox+.checkbox {
+ margin-top: -1em;
+}
+.md .checkbox input {
+ transform: translate(0, -1px);
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -ms-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ position: relative;
+ height: 16px;
+ width: 16px;
+ transition: all 0.15s ease-out 0s;
+ cursor: pointer;
+ display: inline-block;
+ outline: none;
+ border-radius: 2px;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ margin-right: 8px;
+ pointer-events: none;
+}
+.md .checkbox input[type=checkbox]:before,
+.md .checkbox input[type=checkbox]:after {
+ position: absolute;
+ content: "";
+ background: #fff;
+}
+.md .checkbox input[type=checkbox]:before {
+ left: 1px;
+ top: 5px;
+ width: 0px;
+ height: 2px;
+ transition: all 0.2s ease-in;
+ transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ -ms-transform: rotate(45deg);
+ -o-transform: rotate(45deg);
+}
+.md .checkbox input[type=checkbox]:after {
+ right: 7px;
+ bottom: 3px;
+ width: 2px;
+ height: 0px;
+ transition: all 0.2s ease-out;
+ transform: rotate(40deg);
+ -webkit-transform: rotate(40deg);
+ -moz-transform: rotate(40deg);
+ -ms-transform: rotate(40deg);
+ -o-transform: rotate(40deg);
+ transition-delay: 0.25s;
+}
+.md .checkbox input[type=checkbox]:checked:before {
+ left: 0px;
+ top: 7px;
+ width: 6px;
+ height: 2px;
+}
+.md .checkbox input[type=checkbox]:checked:after {
+ right: 3px;
+ bottom: 1px;
+ width: 2px;
+ height: 10px;
+}
+.md .checkbox.minus input[type=checkbox]:before {
+ transform: rotate(0);
+ left: 1px;
+ top: 5px;
+ width: 0px;
+ height: 2px;
+}
+.md .checkbox.minus input[type=checkbox]:after {
+ transform: rotate(0);
+ left: 1px;
+ top: 5px;
+ width: 0px;
+ height: 2px;
+}
+.md .checkbox.minus input[type=checkbox]:checked:before {
+ left: 1px;
+ top: 5px;
+ width: 10px;
+ height: 2px;
+}
+.md .checkbox.minus input[type=checkbox]:checked:after {
+ left: 1px;
+ top: 5px;
+ width: 10px;
+ height: 2px;
+}
+.md .checkbox.plus input[type=checkbox]:before {
+ transform: rotate(0);
+ left: 1px;
+ top: 5px;
+ width: 0px;
+ height: 2px;
+}
+.md .checkbox.plus input[type=checkbox]:after {
+ transform: rotate(0);
+ left: 5px;
+ top: 1px;
+ width: 2px;
+ height: 0px;
+}
+.md .checkbox.plus input[type=checkbox]:checked:before {
+ left: 1px;
+ top: 5px;
+ width: 10px;
+ height: 2px;
+}
+.md .checkbox.plus input[type=checkbox]:checked:after {
+ left: 5px;
+ top: 1px;
+ width: 2px;
+ height: 10px;
+}
+.md .checkbox.times input[type=checkbox]:before {
+ transform: rotate(45deg);
+ left: 3px;
+ top: 1px;
+ width: 0px;
+ height: 2px;
+}
+.md .checkbox.times input[type=checkbox]:after {
+ transform: rotate(135deg);
+ right: 3px;
+ top: 1px;
+ width: 0px;
+ height: 2px;
+}
+.md .checkbox.times input[type=checkbox]:checked:before {
+ left: 1px;
+ top: 5px;
+ width: 10px;
+ height: 2px;
+}
+.md .checkbox.times input[type=checkbox]:checked:after {
+ right: 1px;
+ top: 5px;
+ width: 10px;
+ height: 2px;
+}
+.md .checkbox input[type=radio] {
+ border-radius: 50%;
+}
+.md .checkbox input[type=radio]:before {
+ content: "";
+ display: block;
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ margin: 2px;
+ transform: scale(0);
+ transition: all 0.25s ease-out;
+}
+.md .checkbox input[type=radio]:checked:before {
+ transform: scale(1);
+}
+.md .checkbox input {
+ border: 2px solid #44d7b6;
+}
+.md .checkbox input[type=checkbox]:checked {
+ background: #44d7b6;
+}
+.md .checkbox input[type=radio]:checked:before {
+ background: #44d7b6;
+}
+.md .checkbox.red input {
+ border-color: #fe5f58;
+}
+.md .checkbox.red input[type=checkbox]:checked {
+ background: #fe5f58;
+}
+.md .checkbox.red input[type=radio]:checked:before {
+ background: #fe5f58;
+}
+.md .checkbox.green input {
+ border-color: #3dc550;
+}
+.md .checkbox.green input[type=checkbox]:checked {
+ background: #3dc550;
+}
+.md .checkbox.green input[type=radio]:checked:before {
+ background: #3dc550;
+}
+.md .checkbox.yellow input {
+ border-color: #ffbd2b;
+}
+.md .checkbox.yellow input[type=checkbox]:checked {
+ background: #ffbd2b;
+}
+.md .checkbox.yellow input[type=radio]:checked:before {
+ background: #ffbd2b;
+}
+.md .checkbox.cyan input {
+ border-color: #1bcdfc;
+}
+.md .checkbox.cyan input[type=checkbox]:checked {
+ background: #1bcdfc;
+}
+.md .checkbox.cyan input[type=radio]:checked:before {
+ background: #1bcdfc;
+}
+.md .checkbox.blue input {
+ border-color: #2196f3;
+}
+.md .checkbox.blue input[type=checkbox]:checked {
+ background: #2196f3;
+}
+.md .checkbox.blue input[type=radio]:checked:before {
+ background: #2196f3;
+}
+article .checkbox p {
+ display: inline-block;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+div.dropmenu-wrapper {
+ display: inline-block;
+}
+div.dropmenu {
+ position: relative;
+ display: inline-block;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ color: #2196f3;
+}
+div.dropmenu:hover {
+ color: inherit;
+}
+div.dropmenu:hover >ul {
+ display: block;
+ left: 0;
+ margin-left: 0;
+ margin-top: 0px;
+}
+div.dropmenu ul>li {
+ list-style: none;
+}
+div.dropmenu ul>li >a:hover {
+ text-decoration: none !important;
+}
+div.dropmenu .list-v .list-v {
+ left: calc(100% - 0.5 * 16px);
+}
+details {
+ display: block;
+ padding: 16px;
+ margin: 1em 0;
+ border-radius: 4px;
+ background: var(--color-card);
+ font-size: 0.9375rem;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ border: 1px solid var(--color-block);
+}
+details summary {
+ cursor: pointer;
+ padding: 16px;
+ margin: -16px;
+ border-radius: 4px;
+ color: rgba(68,68,68,0.7);
+ font-size: 0.875rem;
+ font-weight: bold;
+ position: relative;
+ line-height: normal;
+}
+details summary > p,
+details summary > h1,
+details summary > h2,
+details summary > h3,
+details summary > h4,
+details summary > h5,
+details summary > h6 {
+ display: inline;
+ border-bottom: none !important;
+}
+details summary:hover {
+ color: var(--color-p);
+}
+details summary:hover:after {
+ position: absolute;
+ content: '+';
+ text-align: center;
+ top: 50%;
+ transform: translateY(-50%);
+ right: 16px;
+}
+details >summary {
+ background: var(--color-block);
+}
+details[blue] {
+ border-color: #e8f4fd;
+}
+details[blue] >summary {
+ background: #e8f4fd;
+}
+details[cyan] {
+ border-color: #e8fafe;
+}
+details[cyan] >summary {
+ background: #e8fafe;
+}
+details[green] {
+ border-color: #ebf9ed;
+}
+details[green] >summary {
+ background: #ebf9ed;
+}
+details[yellow] {
+ border-color: #fff8e9;
+}
+details[yellow] >summary {
+ background: #fff8e9;
+}
+details[red] {
+ border-color: #feefee;
+}
+details[red] >summary {
+ background: #feefee;
+}
+details[open] {
+ border-color: rgba(68,68,68,0.2);
+}
+details[open] >summary {
+ border-bottom: 1px solid rgba(68,68,68,0.2);
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+details[open][blue] {
+ border-color: rgba(33,150,243,0.3);
+}
+details[open][blue] >summary {
+ border-bottom-color: rgba(33,150,243,0.3);
+}
+details[open][cyan] {
+ border-color: rgba(27,205,252,0.3);
+}
+details[open][cyan] >summary {
+ border-bottom-color: rgba(27,205,252,0.3);
+}
+details[open][green] {
+ border-color: rgba(61,197,80,0.3);
+}
+details[open][green] >summary {
+ border-bottom-color: rgba(61,197,80,0.3);
+}
+details[open][yellow] {
+ border-color: rgba(255,189,43,0.3);
+}
+details[open][yellow] >summary {
+ border-bottom-color: rgba(255,189,43,0.3);
+}
+details[open][red] {
+ border-color: rgba(254,95,88,0.3);
+}
+details[open][red] >summary {
+ border-bottom-color: rgba(254,95,88,0.3);
+}
+details[open] >summary {
+ color: #444;
+ margin-bottom: 0;
+}
+details[open] >summary:hover:after {
+ content: '-';
+}
+details[open] >div.content {
+ padding: 16px;
+ margin: -16px;
+ margin-top: 0;
+}
+details[open] >div.content p>a:hover {
+ text-decoration: underline;
+}
+details[open] >div.content > p:first-child,
+details[open] >div.content > .tabs:first-child,
+details[open] >div.content > ul:first-child,
+details[open] >div.content > ol:first-child,
+details[open] >div.content > .highlight:first-child,
+details[open] >div.content > .note:first-child,
+details[open] >div.content > details:first-child {
+ margin-top: 0;
+}
+details[open] >div.content > p:last-child,
+details[open] >div.content > .tabs:last-child,
+details[open] >div.content > ul:last-child,
+details[open] >div.content > ol:last-child,
+details[open] >div.content > .highlight:last-child,
+details[open] >div.content > .note:last-child,
+details[open] >div.content > details:last-child {
+ margin-bottom: 0;
+}
+.md .frame-wrap {
+ position: relative;
+ overflow: hidden;
+ margin: 0 auto;
+ max-width: 100%;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.md .frame-wrap img,
+.md .frame-wrap video {
+ border-radius: 0;
+}
+.md .frame-wrap .frame {
+ z-index: 1;
+ display: block;
+ position: absolute;
+ background-size: 100%;
+ background-repeat: no-repeat;
+ overflow: hidden;
+}
+.md .img-wrap .frame-wrap[part] {
+ height: auto;
+}
+.md .frame-wrap#iphone11 img,
+.md .frame-wrap#iphone11 video {
+ width: 287px;
+ margin-top: 19px;
+ margin-bottom: 20px;
+}
+.md .frame-wrap#iphone11 .frame {
+ background-image: url("https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@3/img/frame/iphone11.svg");
+ width: 329px;
+ height: 658px;
+}
+.md .frame-wrap[part='top'] img,
+.md .frame-wrap[part='top'] video {
+ margin-bottom: 0 !important;
+}
+.md .frame-wrap:not([part='bottom']) .frame {
+ top: 0;
+}
+.md .frame-wrap[part='bottom'] img,
+.md .frame-wrap[part='bottom'] video {
+ bottom: 0;
+ margin-top: 0 !important;
+}
+.md .frame-wrap[part='bottom'] .frame {
+ bottom: 0;
+}
+@media screen and (max-width: 500px) {
+ .md .frame-wrap#iphone11 img,
+ .md .frame-wrap#iphone11 video {
+ width: 208px;
+ margin-top: 13px;
+ margin-bottom: 14px;
+ }
+ .md .frame-wrap#iphone11 .frame {
+ width: 238px;
+ height: 476px;
+ }
+}
+a.ghcard {
+ display: inline-block;
+ line-height: 0;
+}
+.md .ghcard-group {
+ -moz-column-count: 2;
+ column-count: 2;
+ -moz-column-gap: 0;
+ column-gap: 0;
+ margin: 0 -8px;
+}
+.md .ghcard-group .ghcard {
+ margin: 8px;
+}
+.md .img {
+ -o-object-fit: contain;
+ object-fit: contain;
+}
+img.inline {
+ display: inline !important;
+ vertical-align: middle;
+ transform: translateY(-4px);
+}
+.md .tag.link {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.md .link-card {
+ margin-right: 1em;
+ background: var(--color-block);
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -ms-flex-align: center;
+ align-items: center;
+ cursor: pointer;
+ text-align: center;
+ width: 361px;
+ max-width: 100%;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ color: var(--color-p);
+ border-radius: 8px;
+}
+@media screen and (max-width: 425px) {
+ .md .link-card {
+ max-width: 100%;
+ width: 100%;
+ }
+}
+.md .link-card:hover {
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+}
+.md .link-card div.left,
+.md .link-card div.right {
+ pointer-events: none;
+}
+.md .link-card div.left {
+ width: 54px;
+ height: 54px;
+ margin: 12px;
+ overflow: hidden;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ position: relative;
+}
+.md .link-card div.left i {
+ font-size: 32px;
+ line-height: 48px;
+ margin-left: 4px;
+}
+.md .link-card div.left img {
+ display: block;
+ position: absolute;
+ border-radius: 8px/4;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.md .link-card div.right {
+ overflow: hidden;
+ margin-right: 16px;
+}
+.md .link-card p {
+ margin: 0;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.md .link-card p.text {
+ font-weight: bold;
+}
+.md .link-card p.url {
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ color: var(--color-meta);
+ font-size: 0.8125rem;
+}
+audio,
+video {
+ border-radius: 4px;
+ max-width: 100%;
+}
+video {
+ z-index: 1;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+video:hover {
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24);
+}
+div.video {
+ line-height: 0;
+ text-align: center;
+}
+div.videos {
+ max-width: calc(100% + 2 * 4px);
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -ms-flex-align: end;
+ align-items: flex-end;
+ margin: 1em -4px;
+}
+div.videos .video,
+div.videos iframe {
+ width: 100%;
+ margin: 4px;
+}
+div.videos iframe {
+ border-radius: 4px;
+ width: 100%;
+ min-height: 300px;
+}
+div.videos.left {
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+}
+div.videos.center {
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+div.videos.right {
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+div.videos.stretch {
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+div.videos[col='1'] .video,
+div.videos[col='1'] iframe {
+ width: 100%;
+}
+div.videos[col='2'] .video,
+div.videos[col='2'] iframe {
+ width: calc(50% - 2 * 4px);
+}
+div.videos[col='3'] .video,
+div.videos[col='3'] iframe {
+ width: calc(33.33% - 2 * 4px);
+}
+div.videos[col='4'] .video,
+div.videos[col='4'] iframe {
+ width: calc(25% - 2 * 4px);
+}
+div.note {
+ position: relative;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ padding: 16px;
+ padding-left: calc(16px + 16px);
+ border-radius: 4px;
+ font-size: 0.9375rem;
+ background: var(--color-block);
+ border-left: 4px solid #44d7b6;
+}
+div.note h2,
+div.note h3,
+div.note h4,
+div.note h5,
+div.note h6 {
+ margin-top: 3px;
+ margin-bottom: 0;
+ padding-top: 0 !important;
+ border-bottom: initial;
+}
+div.note p,
+div.note ul,
+div.note ol,
+div.note blockquote,
+div.note img {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+div.note .link-card {
+ background: var(--color-card);
+}
+div.note::before {
+ position: absolute;
+ top: calc(50% - 24px * 0.5);
+ left: 4px;
+ width: 24px;
+ height: 24px;
+ text-align: center;
+ font-weight: 600;
+ line-height: 24px;
+ vertical-align: middle;
+ font-family: 'Font Awesome 5 Pro';
+}
+div.note::before {
+ color: #44d7b6;
+ content: '\f054';
+}
+div.note::before {
+ content: '\f054';
+}
+div.note.quote {
+ background: #e8f4fd;
+ border-color: #2196f3;
+}
+div.note.quote::before {
+ color: #2196f3;
+ content: '\f10d';
+}
+div.note.info {
+ background: #ecfbf7;
+ border-color: #44d7b6;
+}
+div.note.info::before {
+ color: #44d7b6;
+ content: '\f129';
+}
+div.note.success,
+div.note.done {
+ background: #ebf9ed;
+ border-color: #3dc550;
+}
+div.note.success::before,
+div.note.done::before {
+ color: #3dc550;
+ content: '\f00c';
+}
+div.note.warning {
+ background: #fff8e9;
+ border-color: #ffbd2b;
+}
+div.note.warning::before {
+ color: #ffbd2b;
+ content: '\f12a';
+}
+div.note.danger,
+div.note.error {
+ background: #feefee;
+ border-color: #fe5f58;
+}
+div.note.danger::before,
+div.note.error::before {
+ color: #fe5f58;
+ content: '\f00d';
+}
+div.note.radiation::before {
+ content: '\f7b9';
+}
+div.note.bug::before {
+ content: '\f188';
+}
+div.note.idea::before {
+ content: '\f0eb';
+}
+div.note.link::before {
+ content: '\f0c1';
+}
+div.note.paperclip::before {
+ content: '\f0c6';
+}
+div.note.todo::before {
+ content: '\f0ae';
+}
+div.note.message::before {
+ content: '\f4ad';
+}
+div.note.guide::before {
+ content: '\f277';
+}
+div.note.download::before {
+ content: '\f019';
+}
+div.note.up::before {
+ content: '\f102';
+}
+div.note.undo::before {
+ content: '\f2ea';
+}
+div.note.play::before {
+ content: '\f144';
+}
+div.note.clear {
+ background: none;
+ border-color: none;
+}
+div.note.light {
+ background: #f5f5f5;
+ border-color: #a1a1a1;
+}
+div.note.light::before {
+ color: #a1a1a1;
+}
+div.note.gray {
+ background: #f5f5f5;
+ border-color: #696969;
+}
+div.note.gray::before {
+ color: #696969;
+}
+div.note.theme {
+ background: #ecfbf7;
+ border-color: #44d7b6;
+}
+div.note.theme::before {
+ color: #44d7b6;
+}
+div.note.red {
+ background: #feefee;
+ border-color: #fe5f58;
+}
+div.note.red::before {
+ color: #fe5f58;
+}
+div.note.yellow {
+ background: #fff8e9;
+ border-color: #ffbd2b;
+}
+div.note.yellow::before {
+ color: #ffbd2b;
+}
+div.note.green {
+ background: #ebf9ed;
+ border-color: #3dc550;
+}
+div.note.green::before {
+ color: #3dc550;
+}
+div.note.cyan {
+ background: #e8fafe;
+ border-color: #1bcdfc;
+}
+div.note.cyan::before {
+ color: #1bcdfc;
+}
+div.note.blue {
+ background: #e8f4fd;
+ border-color: #2196f3;
+}
+div.note.blue::before {
+ color: #2196f3;
+}
+.md .simpleuser-group {
+ margin: 0;
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 112px);
+}
+.md .simpleuser {
+ text-align: center;
+ padding: 1em 0.5em;
+ border-radius: 4px;
+}
+.md .simpleuser img {
+ display: block;
+ width: 50px;
+ height: 50px;
+ border-radius: 50px;
+ -o-object-fit: cover;
+ object-fit: cover;
+}
+.md .simpleuser img+span {
+ display: block;
+ font-size: 0.875rem;
+ line-height: 1.2;
+ color: var(--color-text);
+}
+.md .simpleuser:hover {
+ background: var(--color-site-bg);
+}
+.site-card-group {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ margin: -8px;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+.site-card {
+ margin: 8px;
+ width: calc(100% / 4 - 16px);
+ display: block;
+ line-height: 1.4;
+ height: 100%;
+}
+@media screen and (min-width: 2048px) {
+ .site-card {
+ width: calc(100% / 5 - 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .site-card {
+ width: calc(100% / 3 - 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .site-card {
+ width: calc(100% / 2 - 16px);
+ }
+}
+.site-card .img {
+ width: 100%;
+ height: 120px;
+ overflow: hidden;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2);
+ background: var(--color-block);
+}
+@media screen and (max-width: 500px) {
+ .site-card .img {
+ height: 100px;
+ }
+}
+.site-card .img img {
+ width: 100%;
+ height: 100%;
+ transition: transform 2s ease;
+ -o-object-fit: cover;
+ object-fit: cover;
+}
+.site-card .info {
+ margin-top: 8px;
+}
+.site-card .info img {
+ width: 32px;
+ height: 32px;
+ border-radius: 16px;
+ float: left;
+ margin-right: 8px;
+ margin-top: 2px;
+}
+.site-card .info span {
+ display: block;
+}
+.site-card .info .title {
+ font-weight: 600;
+ font-size: 0.9375rem;
+ color: var(--color-p);
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ -webkit-line-clamp: 1;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.site-card .info .desc {
+ font-size: 0.78125rem;
+ word-wrap: break-word;
+ line-height: 1.2;
+ color: var(--color-meta);
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ -webkit-line-clamp: 2;
+}
+.site-card .img {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.site-card:hover .img {
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1), 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+}
+.site-card:hover .info .title {
+ color: #ff5722;
+}
+p.p.subtitle {
+ font-weight: bold;
+ color: #44b299;
+ font-size: 1.25rem !important;
+ padding-top: 1.5rem;
+}
+p.p.subtitle:first-child {
+ padding-top: 1rem;
+}
+span.p.logo,
+p.p.logo {
+ font-family: "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Helvetica, monospace;
+}
+span.p.code,
+p.p.code {
+ font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif;
+}
+span.p.left,
+p.p.left {
+ display: block;
+ text-align: left;
+}
+span.p.center,
+p.p.center {
+ display: block;
+ text-align: center;
+}
+span.p.right,
+p.p.right {
+ display: block;
+ text-align: right;
+}
+span.p.small,
+p.p.small {
+ font-size: 0.875rem;
+}
+span.p.large,
+p.p.large {
+ font-size: 2.5rem;
+ line-height: 1.4;
+}
+span.p.huge,
+p.p.huge {
+ font-size: 4rem;
+ line-height: 1.4;
+}
+span.p.ultra,
+p.p.ultra {
+ font-size: 6rem;
+ line-height: 1.4;
+}
+span.p.small,
+p.p.small,
+span.p.large,
+p.p.large,
+span.p.huge,
+p.p.huge,
+span.p.ultra,
+p.p.ultra {
+ margin: 0;
+ padding: 0;
+}
+span.p.bold,
+p.p.bold {
+ font-weight: bold;
+}
+span.p.h1,
+p.p.h1,
+span.p.h2,
+p.p.h2 {
+ padding-bottom: 0.2rem;
+ font-weight: 500;
+}
+span.p.h1,
+p.p.h1 {
+ font-size: 1.5rem;
+ color: var(--color-h1);
+ padding-top: 2em;
+}
+span.p.h2,
+p.p.h2 {
+ font-size: 1.5rem;
+ color: var(--color-h2);
+ padding-top: 2em;
+ border-bottom: 1px solid rgba(68,68,68,0.1);
+}
+span.p.h3,
+p.p.h3 {
+ font-size: 1.25rem;
+ color: var(--color-h3);
+ padding-top: 2em;
+}
+span.p.h4,
+p.p.h4 {
+ font-size: 1.125rem;
+ color: var(--color-h4);
+ padding-top: 2em;
+}
+span.p.h5,
+p.p.h5 {
+ font-size: 1rem;
+ color: var(--color-h5);
+ padding-top: 1.5em;
+}
+span.p.red,
+p.p.red {
+ color: #fe5f58;
+}
+span.p.yellow,
+p.p.yellow {
+ color: #ffbd2b;
+}
+span.p.green,
+p.p.green {
+ color: #3dc550;
+}
+span.p.cyan,
+p.p.cyan {
+ color: #1bcdfc;
+}
+span.p.blue,
+p.p.blue {
+ color: #2196f3;
+}
+span.p.purple,
+p.p.purple {
+ color: #9c27b0;
+}
+span.p.gray,
+p.p.gray {
+ color: #999;
+}
+.md .table {
+ overflow: auto;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.md .table table {
+ display: table;
+ width: 100%;
+}
+div.tabs {
+ display: block;
+ position: relative;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ border-radius: 4px;
+ background: var(--color-card);
+ border: 1px solid rgba(68,68,68,0.2);
+ font-size: 0.9375rem;
+}
+div.tabs .highlight,
+div.tabs p,
+div.tabs ul,
+div.tabs ol,
+div.tabs div.note,
+div.tabs details {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+div.tabs ul.nav-tabs {
+ display: -ms-flexbox;
+ display: flex;
+ overflow-x: auto;
+ white-space: nowrap;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ margin: 0 !important;
+ padding: 8px 8px 0 8px;
+ background: var(--color-block);
+ border-radius: 4px 4px 0 0;
+ line-height: 1.5;
+}
+div.tabs ul.nav-tabs li.tab {
+ list-style-type: none;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+div.tabs ul.nav-tabs li.tab:last-child {
+ padding-right: 16px;
+}
+div.tabs ul.nav-tabs li.tab a {
+ display: block;
+ cursor: pointer;
+ border-radius: 4px 4px 0 0;
+ padding: 8px;
+ text-align: center;
+ font-size: 0.875rem;
+ line-height: inherit;
+ font-weight: bold;
+ color: var(--color-meta);
+ border: 1px solid transparent;
+}
+div.tabs ul.nav-tabs li.tab a:hover {
+ color: var(--color-p);
+}
+div.tabs ul.nav-tabs li.tab a i {
+ pointer-events: none;
+}
+div.tabs ul.nav-tabs li.tab.active a {
+ cursor: default;
+ color: var(--color-p);
+ background: #fff;
+ border: 1px solid rgba(68,68,68,0.2);
+ border-bottom: 1px solid var(--color-card);
+}
+div.tabs .tab-content {
+ border-top: 1px solid rgba(68,68,68,0.2);
+ margin-top: -1px;
+}
+div.tabs .tab-content .tab-pane {
+ padding: 16px;
+}
+div.tabs .tab-content .tab-pane:not(.active) {
+ display: none;
+}
+div.tabs .tab-content .tab-pane.active {
+ display: block;
+}
+div.tabs .tab-content .tab-pane > p:first-child,
+div.tabs .tab-content .tab-pane > .tabs:first-child,
+div.tabs .tab-content .tab-pane > ul:first-child,
+div.tabs .tab-content .tab-pane > ol:first-child,
+div.tabs .tab-content .tab-pane > .highlight:first-child,
+div.tabs .tab-content .tab-pane > .note:first-child {
+ margin-top: 0;
+}
+div.tabs .tab-content .tab-pane > p:last-child,
+div.tabs .tab-content .tab-pane > .tabs:last-child,
+div.tabs .tab-content .tab-pane > ul:last-child,
+div.tabs .tab-content .tab-pane > ol:last-child,
+div.tabs .tab-content .tab-pane > .highlight:last-child,
+div.tabs .tab-content .tab-pane > .note:last-child {
+ margin-bottom: 0;
+}
+div.timenode {
+ position: relative;
+}
+div.timenode:before,
+div.timenode:after {
+ content: '';
+ z-index: 1;
+ position: absolute;
+ background: rgba(68,215,182,0.5);
+ width: 2px;
+ left: 7px;
+}
+div.timenode:before {
+ top: 0px;
+ height: 6px;
+}
+div.timenode:after {
+ top: 26px;
+ height: calc(100% - 26px);
+}
+div.timenode:last-child:after {
+ height: calc(100% - 26px - 16px);
+ border-bottom-left-radius: 2px;
+ border-bottom-right-radius: 2px;
+}
+div.timenode .meta,
+div.timenode .body {
+ max-width: calc(100% - 24px);
+}
+div.timenode .meta {
+ position: relative;
+ color: var(--color-meta);
+ font-size: 0.875rem;
+ line-height: 32px;
+ height: 32px;
+}
+div.timenode .meta:before,
+div.timenode .meta:after {
+ content: '';
+ position: absolute;
+ top: 8px;
+ z-index: 2;
+}
+div.timenode .meta:before {
+ background: rgba(68,215,182,0.5);
+ width: 16px;
+ height: 16px;
+ border-radius: 8px;
+}
+div.timenode .meta:after {
+ background: #44d7b6;
+ margin-left: 2px;
+ margin-top: 2px;
+ width: 12px;
+ height: 12px;
+ border-radius: 6px;
+ transform: scale(0.5);
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+div.timenode .meta p {
+ font-weight: bold;
+ margin: 0 0 0 24px;
+}
+div.timenode .body {
+ margin: 4px 0 16px 24px;
+ padding: 16px;
+ border-radius: 8px;
+ background: var(--color-block);
+ display: inline-block;
+}
+div.timenode .body:empty {
+ display: none;
+}
+div.timenode .body >*:first-child {
+ margin-top: 0.25em;
+}
+div.timenode .body >*:last-child {
+ margin-bottom: 0.25em;
+}
+div.timenode .body .highlight {
+ border: 1px solid #e4e4e4;
+}
+div.timenode:hover .meta {
+ color: var(--color-text);
+}
+div.timenode:hover .meta:before {
+ background: rgba(255,87,34,0.5);
+}
+div.timenode:hover .meta:after {
+ background: #ff5722;
+ transform: scale(1);
+}
+pre {
+ position: relative;
+}
+.hljs {
+ margin: -16px !important;
+ padding: 16px !important;
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+}
+.hljs::-webkit-scrollbar {
+ height: 4px;
+ width: 4px;
+}
+.hljs::-webkit-scrollbar-track-piece {
+ background: transparent;
+}
+.hljs::-webkit-scrollbar-thumb {
+ background: #44d7b6;
+ cursor: pointer;
+ border-radius: 2px;
+}
+.hljs::-webkit-scrollbar-thumb:hover {
+ background: #ff5722;
+}
+.hljs:before {
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: var(--color-meta);
+ font-size: 13px;
+ padding: 4px 8px;
+}
+.hljs.md:before,
+.hljs.markdown:before {
+ content: "md";
+}
+.hljs.yaml:before {
+ content: "YAML";
+}
+.hljs.json:before {
+ content: "JSON";
+}
+.hljs.html:before {
+ content: "HTML";
+}
+.hljs.js:before,
+.hljs.javascript:before {
+ content: "JS";
+}
+.hljs.css:before {
+ content: "CSS";
+}
+.hljs.less:before {
+ content: "Less";
+}
+.hljs.stylus:before {
+ content: "Stylus";
+}
+.hljs.bash:before {
+ content: "bash";
+}
+.hljs.shell:before {
+ content: "shell";
+}
+.hljs.sh:before {
+ content: "sh";
+}
+.hljs.ini:before {
+ content: "ini";
+}
+.hljs.c:before {
+ content: "C";
+}
+.hljs.cpp:before {
+ content: "C++";
+}
+.hljs.objc:before,
+.hljs.objectivec:before {
+ content: "Objective-C";
+}
+.hljs.swift:before {
+ content: "Swift";
+}
+.hljs.java:before {
+ content: "Java";
+}
+.hljs.python:before {
+ content: "Python";
+}
+.hljs.php:before {
+ content: "PHP";
+}
+.hljs.rust:before {
+ content: "Rust";
+}
+.hljs.sql:before {
+ content: "SQL";
+}
+.hljs.ruby:before {
+ content: "Ruby";
+}
+.hljs.makefile:before {
+ content: "Makefile";
+}
+.hljs.go:before {
+ content: "Go";
+}
+.hljs.typescript:before {
+ content: "TypeScript";
+}
+.highlight {
+ position: relative;
+ width: 100%;
+ margin: 1em 0;
+ display: block;
+ background: var(--color-block);
+ font-size: 0.8125rem;
+ font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif;
+ border-radius: 4px;
+ line-height: 1.5;
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+ overflow: hidden;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.highlight:hover {
+ background: var(--color-codeblock);
+}
+.highlight:hover figcaption {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ background: #ffeed2;
+}
+.highlight:hover .gutter {
+ background: #ffedd0;
+}
+.highlight figcaption {
+ font-size: 13px;
+ position: -webkit-sticky;
+ position: sticky;
+ left: 0;
+ padding: 4px 8px 4px 8px;
+ background: #eaeaea;
+ border-top-left-radius: calc(4px - 1px);
+ border-top-right-radius: calc(4px - 1px);
+}
+.highlight >table {
+ overflow: auto;
+ display: block;
+ margin: 0;
+ background-color: transparent;
+ border: none;
+}
+.highlight >table::-webkit-scrollbar {
+ height: 4px;
+ width: 4px;
+}
+.highlight >table::-webkit-scrollbar-track-piece {
+ background: transparent;
+}
+.highlight >table::-webkit-scrollbar-thumb {
+ background: transparent;
+ cursor: pointer;
+ border-radius: 4px;
+}
+.highlight >table:hover::-webkit-scrollbar-thumb {
+ background: rgba(68,68,68,0.5);
+}
+.highlight >table:hover::-webkit-scrollbar-thumb:hover {
+ background: #ff5722;
+}
+.highlight >table td,
+.highlight >table th {
+ padding: 0;
+ border: none;
+ line-height: 1.5;
+}
+.highlight >table tr {
+ background-color: transparent;
+}
+.highlight >table tr:hover {
+ background-color: transparent;
+}
+.highlight >table .gutter {
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ padding: 0 12px;
+ text-align: right;
+ border-width: 0;
+ margin-left: 0;
+ position: -webkit-sticky;
+ position: sticky;
+ left: 0;
+ z-index: 1;
+ background: #e9e9e9;
+}
+.highlight >table .gutter pre {
+ color: var(--color-meta);
+}
+.highlight >table pre {
+ background: transparent;
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+.highlight >table pre .code:before {
+ display: none;
+}
+.highlight >table .code {
+ padding: 20px 16px;
+ vertical-align: top;
+ background-color: transparent;
+}
+.highlight >table .code:before {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: var(--color-meta);
+ font-size: 13px;
+ padding: 4px 8px;
+}
+.highlight.md .code:before,
+.highlight.markdown .code:before {
+ content: "md";
+}
+.highlight.yaml .code:before {
+ content: "YAML";
+}
+.highlight.json .code:before {
+ content: "JSON";
+}
+.highlight.diff .code:before {
+ content: "diff";
+}
+.highlight.html .code:before {
+ content: "HTML";
+}
+.highlight.js .code:before,
+.highlight.javascript .code:before {
+ content: "JS";
+}
+.highlight.css .code:before {
+ content: "CSS";
+}
+.highlight.less .code:before {
+ content: "Less";
+}
+.highlight.stylus .code:before {
+ content: "Stylus";
+}
+.highlight.bash .code:before {
+ content: "bash";
+}
+.highlight.shell .code:before {
+ content: "shell";
+}
+.highlight.sh .code:before {
+ content: "sh";
+}
+.highlight.ini .code:before {
+ content: "ini";
+}
+.highlight.c .code:before {
+ content: "C";
+}
+.highlight.cpp .code:before {
+ content: "C++";
+}
+.highlight.objc .code:before,
+.highlight.objectivec .code:before {
+ content: "Objective-C";
+}
+.highlight.swift .code:before {
+ content: "Swift";
+}
+.highlight.java .code:before {
+ content: "Java";
+}
+.highlight.python .code:before {
+ content: "Python";
+}
+.highlight.php .code:before {
+ content: "PHP";
+}
+.highlight.rust .code:before {
+ content: "Rust";
+}
+.highlight.sql .code:before {
+ content: "SQL";
+}
+.highlight.ruby .code:before {
+ content: "Ruby";
+}
+.highlight.makefile .code:before {
+ content: "Makefile";
+}
+.highlight.go .code:before {
+ content: "Go";
+}
+.highlight.typescript .code:before {
+ content: "TypeScript";
+}
+.highlight pre .line,
+.highlight pre .params {
+ color: rgba(68,68,68,0.9);
+}
+.highlight pre .line .addition {
+ color: #3fa33f;
+}
+.highlight pre .line .deletion {
+ color: #ee2b29;
+}
+.highlight pre .marked {
+ background-color: rgba(254,213,66,0.4);
+ padding: 2px 8px 2px 0;
+ border-radius: 2px;
+ width: 100%;
+}
+.highlight pre .title,
+.highlight pre .attr,
+.highlight pre .attribute {
+ color: #3f51b5;
+}
+.highlight pre .comment {
+ color: rgba(68,68,68,0.5);
+}
+.highlight pre .keyword,
+.highlight pre .meta-keyword,
+.highlight pre .javascript .function {
+ color: #9c27b0;
+}
+.highlight pre .type,
+.highlight pre .built_in,
+.highlight pre .tag .name {
+ color: #4ba7ee;
+}
+.highlight pre .variable,
+.highlight pre .regexp,
+.highlight pre .ruby .constant,
+.highlight pre .xml .tag .title,
+.highlight pre .xml .pi,
+.highlight pre .xml .doctype,
+.highlight pre .html .doctype,
+.highlight pre .css .id,
+.highlight pre .css .class,
+.highlight pre .css .pseudo {
+ color: #fd8607;
+}
+.highlight pre .number,
+.highlight pre .preprocessor,
+.highlight pre .literal,
+.highlight pre .constant {
+ color: #fd8607;
+}
+.highlight pre .class,
+.highlight pre .ruby .class .title,
+.highlight pre .css .rules .attribute {
+ color: #ff9800;
+}
+.highlight pre .string,
+.highlight pre .meta-string {
+ color: #449e48;
+}
+.highlight pre .value,
+.highlight pre .inheritance,
+.highlight pre .header,
+.highlight pre .ruby .symbol,
+.highlight pre .xml .cdata {
+ color: #4caf50;
+}
+.highlight pre .css .hexcolor {
+ color: #6cc;
+}
+.highlight pre .function,
+.highlight pre .python .decorator,
+.highlight pre .python .title,
+.highlight pre .ruby .function .title,
+.highlight pre .ruby .title .keyword,
+.highlight pre .perl .sub,
+.highlight pre .javascript .title,
+.highlight pre .coffeescript .title {
+ color: #69c;
+}
+.highlight.html .line .tag .name,
+.highlight.css .line .tag .name,
+.highlight.less .line .tag .name,
+.highlight.stylus .line .tag .name,
+.highlight.html .line .selector-tag,
+.highlight.css .line .selector-tag,
+.highlight.less .line .selector-tag,
+.highlight.stylus .line .selector-tag {
+ color: #ee2b29;
+}
+.highlight.html .line .selector-class,
+.highlight.css .line .selector-class,
+.highlight.less .line .selector-class,
+.highlight.stylus .line .selector-class,
+.highlight.html .line .selector-attr,
+.highlight.css .line .selector-attr,
+.highlight.less .line .selector-attr,
+.highlight.stylus .line .selector-attr {
+ color: #fd8607;
+}
+.highlight.html .line .attribute,
+.highlight.css .line .attribute,
+.highlight.less .line .attribute,
+.highlight.stylus .line .attribute {
+ color: #3f51b5;
+}
+.highlight.html .line .number,
+.highlight.css .line .number,
+.highlight.less .line .number,
+.highlight.stylus .line .number {
+ color: #17afca;
+}
+.highlight.objc .line .meta,
+.highlight.objectivec .line .meta,
+.highlight.swift .line .meta,
+.highlight.c .line .meta {
+ color: #9c27b0;
+}
+.highlight.objc .line .meta-string,
+.highlight.objectivec .line .meta-string,
+.highlight.swift .line .meta-string,
+.highlight.c .line .meta-string,
+.highlight.objc .line .string,
+.highlight.objectivec .line .string,
+.highlight.swift .line .string,
+.highlight.c .line .string {
+ color: #fb3f1b;
+}
+.highlight.objc .line .class,
+.highlight.objectivec .line .class,
+.highlight.swift .line .class,
+.highlight.c .line .class {
+ color: rgba(68,68,68,0.9);
+}
+.highlight.objc .line .class .title,
+.highlight.objectivec .line .class .title,
+.highlight.swift .line .class .title,
+.highlight.c .line .class .title {
+ color: #1e80f0;
+}
+.highlight.objc .line .comment,
+.highlight.objectivec .line .comment,
+.highlight.swift .line .comment,
+.highlight.c .line .comment {
+ color: #3fa33f;
+}
+.highlight.json .line .attr {
+ color: #e24f5a;
+}
+.highlight.json .line .literal {
+ color: #3f51b5;
+}
+.highlight.yaml .line .attr {
+ color: #e24f5a;
+}
+.article mjx-container {
+ font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif;
+ padding: 16px 8px;
+ border-radius: 4px;
+ min-width: 0 !important;
+}
+.article mjx-container[jax="CHTML"][display="true"],
+.article .has-jax {
+ overflow: auto hidden;
+}
+.article mjx-container + br {
+ display: none;
+}
+div.gallery {
+ margin: 1em 0;
+ overflow: hidden;
+}
+div.gallery+.gallery {
+ margin-top: -1em;
+}
+div.gallery >.fancybox,
+div.gallery >p>.fancybox {
+ margin: 1px;
+ padding: 0;
+ position: relative;
+}
+div.gallery >.fancybox a,
+div.gallery >p>.fancybox a {
+ height: 100%;
+ width: 100%;
+}
+div.gallery >.fancybox img,
+div.gallery >p>.fancybox img {
+ -o-object-fit: cover;
+ object-fit: cover;
+ height: 100%;
+ width: 100%;
+}
+div.gallery >.fancybox .image-caption,
+div.gallery >p>.fancybox .image-caption {
+ opacity: 0;
+ transform: translateY(100%);
+ transition: all 0.3s ease;
+ pointer-events: none;
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ text-align: center;
+ background: rgba(0,0,0,0.3);
+ color: #fff;
+}
+div.gallery >.fancybox .image-caption:empty,
+div.gallery >p>.fancybox .image-caption:empty {
+ display: none;
+}
+div.gallery >.fancybox:hover .image-caption,
+div.gallery >p>.fancybox:hover .image-caption {
+ opacity: 1;
+ transform: translateY(0);
+}
+div.gallery,
+div.gallery >p {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ padding: 0 !important;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+div.gallery[col]>p {
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+}
+div.gallery[col='2']>p>.fancybox {
+ width: calc(50% - 2 * 1px);
+}
+div.gallery[col='3']>p>.fancybox {
+ width: calc(33.33% - 2 * 1px);
+}
+div.gallery[col='4']>p>.fancybox {
+ width: calc(25% - 2 * 1px);
+}
+div.gallery[col='5']>p>.fancybox {
+ width: calc(20% - 2 * 1px);
+}
+div.gallery[col='6']>p>.fancybox {
+ width: calc(16.66% - 2 * 1px);
+}
+div.gallery[col='7']>p>.fancybox {
+ width: calc(14.2857% - 2 * 1px);
+}
+div.gallery[col='8']>p>.fancybox {
+ width: calc(12.5% - 2 * 1px);
+}
+div.gallery >p {
+ margin: 0;
+}
+div.gallery.left,
+div.gallery.left>p {
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+}
+div.gallery.center,
+div.gallery.center>p {
+ -ms-flex-pack: center;
+ justify-content: center;
+}
+div.gallery.right,
+div.gallery.right>p {
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+}
+div.gallery.stretch,
+div.gallery.stretch>p {
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+.fancybox-container .fancybox-stage {
+ cursor: zoom-out;
+}
+div.fancybox {
+ margin-top: 1em;
+ margin-bottom: 1em;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ padding: 0 !important;
+ overflow: hidden;
+ border-radius: 2px;
+}
+@media screen and (max-width: 500px) {
+ div.fancybox {
+ border-radius: 1px;
+ }
+}
+div.fancybox a {
+ line-height: 0;
+ margin: 0 auto;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ cursor: zoom-in;
+}
+div.fancybox .gallery {
+ overflow: hidden;
+}
+div.fancybox .image-caption {
+ font-size: 0.8125rem;
+ padding-top: 0.5em;
+ padding-bottom: 1em;
+ color: var(--color-meta);
+}
+div.fancybox .image-caption:empty {
+ display: none;
+}
+@media screen and (max-width: 500px) {
+ .l_header .list-v .aplayer,
+ .l_header .list-v .aplayer-pic {
+ border-radius: 4px;
+ width: 64px;
+ height: 64px;
+ }
+}
+.aplayer-container {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ min-height: 100px;
+}
+.aplayer-container meting-js {
+ max-width: 100%;
+}
+.aplayer {
+ max-width: 500px;
+ border-radius: 4px;
+ color: var(--color-text);
+ font-family: UbuntuMono, "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif;
+}
+.aplayer .aplayer-list {
+ text-align: left;
+}
+@media screen and (max-width: 500px) {
+ .aplayer {
+ border-radius: 8px;
+ }
+}
+.highlight {
+ position: relative;
+}
+.btn-copy {
+ z-index: 1;
+ display: inline-block;
+ cursor: pointer;
+ border: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ -webkit-appearance: none;
+ font-family: Menlo, Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif;
+ font-size: 11px;
+ font-weight: bold;
+ padding: 4px 8px;
+ color: var(--color-meta);
+ background: var(--color-card);
+ border-radius: 3px;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ opacity: 0;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.btn-copy >i {
+ margin-right: 4px;
+}
+.btn-copy:hover {
+ color: #ff5722;
+ background: #ffeee8;
+}
+.highlight:hover .btn-copy {
+ opacity: 1;
+}
+.article pre:hover .btn-copy {
+ opacity: 1;
+}
+@media (prefers-color-scheme: dark) {
+ :root {
+ --color-mode: 'dark';
+ }
+ :root:not([data-user-color-scheme]) {
+ --color-site-bg: #222;
+ --color-site-inner: #eee;
+ --color-site-footer: #aaa;
+ --color-card: #333;
+ --color-text: #eee;
+ --color-block: #3a3a3a;
+ --color-codeblock: #343a3c;
+ --color-inlinecode: #d56d28;
+ --color-h1: #eee;
+ --color-h2: #eee;
+ --color-h3: #ddd;
+ --color-h4: #ddd;
+ --color-h5: #ddd;
+ --color-h6: #ddd;
+ --color-p: #bbb;
+ --color-list: #aaa;
+ --color-list-hl: #69dfc4;
+ --color-meta: #888;
+ --color-link: #888;
+ }
+ :root:not([data-user-color-scheme]) #l_body {
+ background-color: #000 !important;
+ }
+ :root:not([data-user-color-scheme]) img {
+ filter: brightness(70%) !important;
+ }
+ :root:not([data-user-color-scheme]) .lazyload {
+ filter: brightness(70%) !important;
+ }
+ :root:not([data-user-color-scheme]) .pdf {
+ filter: brightness(70%) !important;
+ }
+ :root:not([data-user-color-scheme]) #wrapper .title {
+ color: var(--color-meta);
+ }
+ :root:not([data-user-color-scheme]) .l_header ul.nav-list-h>li>a,
+ :root:not([data-user-color-scheme]) ul.list-v >li>a {
+ color: var(--color-list);
+ }
+ :root:not([data-user-color-scheme]) .blur {
+ background: var(--color-site-bg) !important;
+ }
+ :root:not([data-user-color-scheme]) .nav-main .u-search-input {
+ background: var(--color-card) !important;
+ }
+ :root:not([data-user-color-scheme]) .l_main .article .prev-next>a {
+ background: var(--color-block);
+ }
+ :root:not([data-user-color-scheme]) .l_main .article .prev-next>a:hover {
+ background: var(--color-card);
+ }
+ :root:not([data-user-color-scheme]) .article blockquote {
+ background: var(--color-block);
+ }
+ :root:not([data-user-color-scheme]) .article-title a {
+ color: var(--color-h1);
+ }
+ :root:not([data-user-color-scheme]) details>summary {
+ color: var(--color-p);
+ background: var(--color-site-bg);
+ }
+ :root:not([data-user-color-scheme]) details {
+ border: 1px solid var(--color-site-bg);
+ background: var(--color-site-bg);
+ }
+ :root:not([data-user-color-scheme]) #u-search .modal {
+ background: var(--color-card) !important;
+ }
+ :root:not([data-user-color-scheme]) #u-search .modal-header {
+ background: var(--color-card) !important;
+ }
+ :root:not([data-user-color-scheme]) #u-search .modal-body {
+ background: var(--color-card) !important;
+ }
+ :root:not([data-user-color-scheme]) #u-search .modal-body .modal-results .result:hover {
+ background: var(--color-block) !important;
+ }
+ :root:not([data-user-color-scheme]) .widget.blogger .content .social-wrapper a.social:hover {
+ background: var(--color-card);
+ }
+ :root:not([data-user-color-scheme]) .content {
+ color: var(--color-p);
+ }
+ :root:not([data-user-color-scheme]) .note {
+ background: var(--color-block) !important;
+ }
+ :root:not([data-user-color-scheme]) div.tabs ul.nav-tabs li.tab.active a {
+ color: var(--color-p);
+ background: var(--color-card);
+ }
+ :root:not([data-user-color-scheme]) kbd {
+ background: var(--color-block) !important;
+ }
+ :root:not([data-user-color-scheme]) .cover-wrapper.dock .menu .list-h a:hover,
+ :root:not([data-user-color-scheme]) .cover-wrapper.featured .menu .list-h a:hover,
+ :root:not([data-user-color-scheme]) .cover-wrapper.focus .menu .list-h a:hover {
+ color: var(--color-text) !important;
+ }
+ :root:not([data-user-color-scheme]) .gutter {
+ background: var(--color-card) !important;
+ background-color: var(--color-card) !important;
+ }
+ :root:not([data-user-color-scheme]) .highlight figcaption {
+ background-color: #21252b;
+ }
+ :root:not([data-user-color-scheme]) .highlight pre .line,
+ :root:not([data-user-color-scheme]) .highlight pre .params {
+ color: rgba(158,142,142,0.9);
+ }
+ :root:not([data-user-color-scheme]) *:not(.highlight) >table tr {
+ background-color: var(--color-card);
+ }
+ :root:not([data-user-color-scheme]) *:not(.highlight) >table th {
+ background: var(--color-site-bg);
+ }
+ :root:not([data-user-color-scheme]) *:not(.highlight) table td,
+ :root:not([data-user-color-scheme]) *:not(.highlight) table th {
+ border-color: var(--color-site-bg);
+ }
+ :root:not([data-user-color-scheme]) *:not(.highlight) >table tr:hover {
+ background: var(--color-codeblock);
+ }
+ :root:not([data-user-color-scheme]) .timenode .highlight {
+ border-color: var(--color-site-bg) !important;
+ }
+ :root:not([data-user-color-scheme]) blockquote p {
+ color: var(--color-p);
+ }
+ :root:not([data-user-color-scheme]) #archive-page .archive .all-tags ul li span {
+ color: var(--color-text);
+ background: #6f6f72;
+ }
+ :root:not([data-user-color-scheme]) .aplayer {
+ background: var(--color-site-bg);
+ }
+ :root:not([data-user-color-scheme]) .aplayer .aplayer-list ol li:hover {
+ background: rgba(68,215,182,0.2);
+ }
+ :root:not([data-user-color-scheme]) .aplayer .aplayer-list ol li.aplayer-list-light {
+ background: var(--color-block);
+ }
+ :root:not([data-user-color-scheme]) .aplayer-info {
+ background: var(--color-site-bg) !important;
+ }
+ :root:not([data-user-color-scheme]) .aplayer .aplayer-lrc:before {
+ background: linear-gradient(180deg, #282c34 0, rgba(255,255,255,0));
+ }
+ :root:not([data-user-color-scheme]) .aplayer .aplayer-lrc:after {
+ background: linear-gradient(180deg, rgba(0,0,0,0) 0, rgba(33,33,33,0.8));
+ }
+ :root:not([data-user-color-scheme]) .aplayer-pic {
+ filter: brightness(70%);
+ }
+ :root:not([data-user-color-scheme]) .aplayer .aplayer-list ol li {
+ border-top: 1px solid var(--color-card);
+ }
+ :root:not([data-user-color-scheme]) .aplayer.aplayer-withlist .aplayer-info {
+ border-bottom: 1px solid var(--color-block);
+ }
+}
+[data-user-color-scheme='dark'] {
+ --color-site-bg: #222;
+ --color-site-inner: #eee;
+ --color-site-footer: #aaa;
+ --color-card: #333;
+ --color-text: #eee;
+ --color-block: #3a3a3a;
+ --color-codeblock: #343a3c;
+ --color-inlinecode: #d56d28;
+ --color-h1: #eee;
+ --color-h2: #eee;
+ --color-h3: #ddd;
+ --color-h4: #ddd;
+ --color-h5: #ddd;
+ --color-h6: #ddd;
+ --color-p: #bbb;
+ --color-list: #aaa;
+ --color-list-hl: #69dfc4;
+ --color-meta: #888;
+ --color-link: #888;
+}
+[data-user-color-scheme='dark'] #l_body {
+ background-color: #000 !important;
+}
+[data-user-color-scheme='dark'] img {
+ filter: brightness(70%) !important;
+}
+[data-user-color-scheme='dark'] .lazyload {
+ filter: brightness(70%) !important;
+}
+[data-user-color-scheme='dark'] .pdf {
+ filter: brightness(70%) !important;
+}
+[data-user-color-scheme='dark'] #wrapper .title {
+ color: var(--color-meta);
+}
+[data-user-color-scheme='dark'] .l_header ul.nav-list-h>li>a,
+[data-user-color-scheme='dark'] ul.list-v >li>a {
+ color: var(--color-list);
+}
+[data-user-color-scheme='dark'] .blur {
+ background: var(--color-site-bg) !important;
+}
+[data-user-color-scheme='dark'] .nav-main .u-search-input {
+ background: var(--color-card) !important;
+}
+[data-user-color-scheme='dark'] .l_main .article .prev-next>a {
+ background: var(--color-block);
+}
+[data-user-color-scheme='dark'] .l_main .article .prev-next>a:hover {
+ background: var(--color-card);
+}
+[data-user-color-scheme='dark'] .article blockquote {
+ background: var(--color-block);
+}
+[data-user-color-scheme='dark'] .article-title a {
+ color: var(--color-h1);
+}
+[data-user-color-scheme='dark'] details>summary {
+ color: var(--color-p);
+ background: var(--color-site-bg);
+}
+[data-user-color-scheme='dark'] details {
+ border: 1px solid var(--color-site-bg);
+ background: var(--color-site-bg);
+}
+[data-user-color-scheme='dark'] #u-search .modal {
+ background: var(--color-card) !important;
+}
+[data-user-color-scheme='dark'] #u-search .modal-header {
+ background: var(--color-card) !important;
+}
+[data-user-color-scheme='dark'] #u-search .modal-body {
+ background: var(--color-card) !important;
+}
+[data-user-color-scheme='dark'] #u-search .modal-body .modal-results .result:hover {
+ background: var(--color-block) !important;
+}
+@media screen and (max-width: 500px) {
+ [data-user-color-scheme='dark'] .l_header .m_search {
+ background: var(--color-site-bg) !important;
+ }
+}
+[data-user-color-scheme='dark'] .widget.blogger .content .social-wrapper a.social:hover {
+ background: var(--color-card);
+}
+[data-user-color-scheme='dark'] .content {
+ color: var(--color-p);
+}
+[data-user-color-scheme='dark'] .note {
+ background: var(--color-block) !important;
+}
+[data-user-color-scheme='dark'] div.tabs ul.nav-tabs li.tab.active a {
+ color: var(--color-p);
+ background: var(--color-card);
+}
+[data-user-color-scheme='dark'] kbd {
+ background: var(--color-block) !important;
+}
+[data-user-color-scheme='dark'] .cover-wrapper.dock .menu .list-h a:hover,
+[data-user-color-scheme='dark'] .cover-wrapper.featured .menu .list-h a:hover,
+[data-user-color-scheme='dark'] .cover-wrapper.focus .menu .list-h a:hover {
+ color: var(--color-text) !important;
+}
+[data-user-color-scheme='dark'] .gutter {
+ background: var(--color-card) !important;
+ background-color: var(--color-card) !important;
+}
+[data-user-color-scheme='dark'] .highlight figcaption {
+ background-color: #21252b;
+}
+[data-user-color-scheme='dark'] .highlight pre .line,
+[data-user-color-scheme='dark'] .highlight pre .params {
+ color: rgba(158,142,142,0.9);
+}
+[data-user-color-scheme='dark'] *:not(.highlight) >table tr {
+ background-color: var(--color-card);
+}
+[data-user-color-scheme='dark'] *:not(.highlight) >table th {
+ background: var(--color-site-bg);
+}
+[data-user-color-scheme='dark'] *:not(.highlight) table td,
+[data-user-color-scheme='dark'] *:not(.highlight) table th {
+ border-color: var(--color-site-bg);
+}
+[data-user-color-scheme='dark'] *:not(.highlight) >table tr:hover {
+ background: var(--color-codeblock);
+}
+[data-user-color-scheme='dark'] .timenode .highlight {
+ border-color: var(--color-site-bg) !important;
+}
+[data-user-color-scheme='dark'] blockquote p {
+ color: var(--color-p);
+}
+[data-user-color-scheme='dark'] #archive-page .archive .all-tags ul li span {
+ color: var(--color-text);
+ background: #6f6f72;
+}
+[data-user-color-scheme='dark'] .aplayer {
+ background: var(--color-site-bg);
+}
+[data-user-color-scheme='dark'] .aplayer .aplayer-list ol li:hover {
+ background: rgba(68,215,182,0.2);
+}
+[data-user-color-scheme='dark'] .aplayer .aplayer-list ol li.aplayer-list-light {
+ background: var(--color-block);
+}
+[data-user-color-scheme='dark'] .aplayer-info {
+ background: var(--color-site-bg) !important;
+}
+[data-user-color-scheme='dark'] .aplayer .aplayer-lrc:before {
+ background: linear-gradient(180deg, #282c34 0, rgba(255,255,255,0));
+}
+[data-user-color-scheme='dark'] .aplayer .aplayer-lrc:after {
+ background: linear-gradient(180deg, rgba(0,0,0,0) 0, rgba(33,33,33,0.8));
+}
+[data-user-color-scheme='dark'] .aplayer-pic {
+ filter: brightness(70%);
+}
+[data-user-color-scheme='dark'] .aplayer .aplayer-list ol li {
+ border-top: 1px solid var(--color-card);
+}
+[data-user-color-scheme='dark'] .aplayer.aplayer-withlist .aplayer-info {
+ border-bottom: 1px solid var(--color-block);
+}
+#nprogress {
+ pointer-events: none;
+}
+#nprogress .bar {
+ background: #44d7b6;
+ position: fixed;
+ z-index: 3000;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+#nprogress .peg {
+ display: block;
+ position: absolute;
+ right: 0px;
+ width: 100px;
+ height: 100%;
+ opacity: 1;
+ transform: rotate(3deg) translate(0px, -4px);
+}
+#nprogress .spinner {
+ display: block;
+ position: fixed;
+ z-index: 3000;
+ top: 15px;
+ right: 15px;
+}
+#nprogress .spinner-icon {
+ width: 18px;
+ height: 18px;
+ box-sizing: border-box;
+ border: solid 2px transparent;
+ border-top-color: #29d;
+ border-left-color: #29d;
+ border-radius: 50%;
+ animation: nprogress-spinner 400ms linear infinite;
+}
+.nprogress-custom-parent {
+ overflow: hidden;
+ position: relative;
+}
+.nprogress-custom-parent #nprogress .spinner,
+.nprogress-custom-parent #nprogress .bar {
+ position: absolute;
+}
+#loading-bar-wrapper {
+ position: fixed;
+ width: 100px;
+ top: 8px;
+ left: 50%;
+ transform: translateX(-50%);
+ height: 8px;
+ border-radius: 8px;
+ z-index: 2000;
+ background: transparent;
+}
+#loading-bar-wrapper.nprogress-custom-parent {
+ background: var(--color-card);
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+}
+.loading-circle {
+ display: none;
+ height: 100%;
+ width: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 999999;
+ background-color: rgba(250,250,250,0.9);
+}
+.loading-circle img {
+ width: 280px;
+ height: 210px;
+ position: relative;
+ top: 45%;
+ left: 50%;
+ margin-left: -140px;
+ margin-top: -105px;
+}
+#loader-circle {
+ display: block;
+ position: relative;
+ left: 50%;
+ top: 50%;
+ width: 150px;
+ height: 150px;
+ margin: -75px 0 0 -75px;
+ border-radius: 50%;
+ border: 3px solid transparent;
+ border-top-color: #ff5a5a;
+ animation: spin 1s linear infinite;
+}
+#loader-circle:before {
+ content: "";
+ position: absolute;
+ top: 5px;
+ left: 5px;
+ right: 5px;
+ bottom: 5px;
+ border-radius: 50%;
+ border: 3px solid transparent;
+ border-top-color: #5af33f;
+ animation: spin 3s linear infinite;
+}
+#loader-circle:after {
+ content: "";
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ right: 15px;
+ bottom: 15px;
+ border-radius: 50%;
+ border: 3px solid transparent;
+ border-top-color: #6dc9ff;
+ animation: spin 2s linear infinite;
+}
+@keyframes nprogress-spinner {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@keyframes spin {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+div#rightmenu-wrapper {
+ display: none;
+ position: fixed;
+ z-index: 9000;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+ul.list-v.rightmenu {
+ display: block;
+ max-width: 240px;
+ overflow: hidden;
+}
+ul.list-v.rightmenu.left {
+ right: 0;
+}
+ul.list-v.rightmenu.top {
+ bottom: 0;
+}
+ul.list-v.rightmenu a {
+ cursor: default;
+}
+ul.list-v.rightmenu a.vlts-menu {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ line-height: 32px;
+}
+ul.list-v.rightmenu li.navigation,
+ul.list-v.rightmenu li.music {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+}
+ul.list-v.rightmenu li.navigation a.icon-only,
+ul.list-v.rightmenu li.music a.icon-only {
+ line-height: 0;
+ margin: 0;
+ padding: 0;
+ border-radius: 32px;
+ overflow: hidden;
+ width: 32px;
+ height: 32px;
+}
+ul.list-v.rightmenu li.navigation a.nav i,
+ul.list-v.rightmenu li.music a.nav i {
+ margin: 0;
+ width: 32px;
+ line-height: 32px;
+}
+ul.list-v.rightmenu li.navigation a.nav:first-child,
+ul.list-v.rightmenu li.music a.nav:first-child {
+ margin-left: 10px;
+}
+ul.list-v.rightmenu li.navigation a.nav:last-child,
+ul.list-v.rightmenu li.music a.nav:last-child {
+ margin-right: 10px;
+}
+ul.list-v.rightmenu li.music.name {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: center;
+ align-items: center;
+}
+ul.list-v.rightmenu li.music.name p.nav.music-title {
+ color: #696969;
+ font-size: 0.875rem;
+ max-width: 128px;
+ margin: 0 20px;
+ overflow: hidden;
+}
+ul.list-v.rightmenu li.music.name p.nav.music-title:hover {
+ background: none;
+}
+ul.list-v.rightmenu li.music a.nav.volume {
+ width: 100%;
+ padding: 0 8px;
+}
+ul.list-v.rightmenu li.music a.nav.volume:hover {
+ background: transparent;
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar {
+ margin: 4px 0 8px;
+ position: relative;
+ height: 8px;
+ width: 100%;
+ background: #ededed;
+ border-radius: 32px;
+ overflow: hidden;
+ cursor: pointer;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar i.left,
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar i.right {
+ color: #696969;
+ position: absolute;
+ top: 0;
+ width: 28px;
+ line-height: 28px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ opacity: 0;
+ transform: scale(0.5) translateY(-18px);
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar i.left {
+ left: 0;
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar i.right {
+ right: 0;
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar:hover {
+ height: 28px;
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar:hover i {
+ opacity: 1;
+ transform: scale(1) translateY(0);
+}
+ul.list-v.rightmenu li.music a.nav.volume .aplayer-volume-bar .aplayer-volume {
+ background: #44d7b6;
+ height: 100%;
+ width: 100%;
+}
+@media screen and (prefers-color-scheme: dark) and (max-width: 500px) {
+ .l_header .m_search {
+ background: var(--color-site-bg) !important;
+ }
+}
+article#arc,
+article#cat,
+article#tag {
+ padding-top: 48px;
+ padding-bottom: 48px;
+}
+article#arc h2,
+article#cat h2,
+article#tag h2 {
+ font-weight: 600;
+}
+article#arc h2:first-child,
+article#cat h2:first-child,
+article#tag h2:first-child {
+ margin-top: 0;
+}
+article#arc {
+ margin-bottom: 32px;
+ padding-bottom: 64px;
+}
+article#arc .timenode:before,
+article#arc .timenode:after {
+ margin-left: 12px;
+}
+article#arc .timenode .meta {
+ padding: 6px 0;
+ line-height: 1.5;
+ height: auto;
+ max-width: 100%;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 0.9375rem;
+ font-weight: 500;
+ border-radius: 2px;
+ color: var(--color-list);
+}
+article#arc .timenode .meta:before {
+ display: none;
+}
+article#arc .timenode .meta:after {
+ margin-left: 14px;
+}
+article#arc .timenode .meta:hover {
+ color: var(--color-p);
+ background: var(--color-site-bg);
+}
+article#arc .timenode .meta time {
+ color: var(--color-meta);
+ margin-left: 34px;
+ margin-right: 4px;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ width: 60px;
+}
+article#arc .timenode .meta i {
+ line-height: 1.5;
+ color: #ff5722;
+}
+article#arc .timenode .meta i.red {
+ color: #fe5f58;
+}
+article#arc .timenode .meta i.green {
+ color: #3dc550;
+}
+article#arc .timenode .meta i.yellow {
+ color: #ffbd2b;
+}
+article#arc .timenode .meta i.blue {
+ color: #1bcdfc;
+}
+article#arc .timenode .meta i.theme {
+ color: #44d7b6;
+}
+article#arc .timenode .meta i.accent {
+ color: #ff5722;
+}
+article#arc .timenode .meta i.orange {
+ color: #ff5722;
+}
+article#cat .all-cats a {
+ display: block;
+ padding: 8px 16px;
+ border-radius: 4px;
+ color: var(--color-list);
+ font-size: 0.9375rem;
+ font-weight: 500;
+}
+article#cat .all-cats a:hover {
+ color: var(--color-list-hl);
+ background: var(--color-site-bg);
+}
+article#cat .all-cats a.child {
+ padding-left: 48px;
+}
+article#tag .all-tags {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -ms-flex-align: baseline;
+ align-items: baseline;
+ text-align: center;
+}
+article#tag .all-tags ul {
+ margin: 0 -8px;
+ padding: 0;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+}
+article#tag .all-tags ul li {
+ list-style: none;
+ margin: 8px;
+ border-radius: 4px;
+ overflow: hidden;
+ display: -ms-flexbox;
+ display: flex;
+ position: relative;
+ font-size: 0.9375rem;
+}
+article#tag .all-tags ul li a {
+ display: inline-block;
+ color: var(--color-list);
+ padding: 4px 52px 4px 16px;
+ background: var(--color-block);
+ font-weight: 500;
+}
+article#tag .all-tags ul li a:hover {
+ background: #ff5722;
+ color: #fff;
+}
+article#tag .all-tags ul li span {
+ color: var(--color-meta);
+ background: var(--color-card);
+ padding: 2px 8px;
+ border-radius: 2px;
+ pointer-events: none;
+ position: absolute;
+ right: 2px;
+ top: 2px;
+ height: calc(100% - 4px);
+}
+article#tag .all-tags ul li span:before {
+ content: 'x';
+}
+.article {
+ color: var(--color-p);
+ word-wrap: break-word;
+}
+.article a {
+ word-break: break-word;
+}
+.article h1.title,
+.article h2.title {
+ left: 0;
+}
+.article h1.title:before,
+.article h2.title:before {
+ content: none;
+}
+.article h1,
+.article h2 {
+ padding-bottom: 0.2rem;
+ margin-bottom: 1rem;
+ border-bottom: 1px solid rgba(68,68,68,0.1);
+}
+.article h1 {
+ text-align: left;
+ color: var(--color-h1);
+ margin-top: 48px;
+}
+.article h2 {
+ text-align: left;
+ color: var(--color-h2);
+ margin-top: 48px;
+}
+.article h3 {
+ text-align: left;
+ color: var(--color-h3);
+ margin-top: 24px;
+}
+.article h4 {
+ text-align: left;
+ color: var(--color-h4);
+ margin-top: 16px;
+}
+.article h5 {
+ font-weight: bold;
+ color: var(--color-h5);
+ margin-top: 1em;
+}
+.article h6 {
+ color: var(--color-h6);
+ margin-top: 1em;
+}
+.article center,
+.article center p {
+ text-align: center;
+}
+.article .aplayer {
+ margin: 1em 0;
+ display: inline-block;
+ width: 400px;
+ max-width: 100%;
+ border-radius: 4px;
+ color: #666;
+}
+.article p.small-img img,
+.article div.small-img img {
+ width: auto;
+ max-width: 100%;
+ margin: 0;
+ box-shadow: none;
+}
+.article s,
+.article del {
+ color: #8e8e8e;
+ -webkit-text-decoration-color: #8e8e8e;
+ text-decoration-color: #8e8e8e;
+}
+.article u {
+ color: var(--color-text);
+ text-decoration: none;
+ border-bottom: 1px solid #fe5f58;
+}
+.article emp {
+ color: var(--color-text);
+ border-bottom: 4px dotted #fe5f58;
+}
+.article wavy {
+ color: var(--color-text);
+ -webkit-text-decoration-style: wavy;
+ text-decoration-style: wavy;
+ -webkit-text-decoration-line: underline;
+ text-decoration-line: underline;
+ -webkit-text-decoration-color: #fe5f58;
+ text-decoration-color: #fe5f58;
+}
+.article psw {
+ color: transparent;
+ background: #a1a1a1;
+ border-radius: 2px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.article psw:hover {
+ color: var(--color-p);
+ background: none;
+}
+.article kbd {
+ border-radius: 4px;
+ border: 1px solid #d2d2d2;
+ border-bottom-width: 2px;
+ background: #fafafa;
+ padding-left: 4px;
+ padding-right: 4px;
+}
+.article p {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ text-align: justify;
+ max-width: 100%;
+ line-height: inherit;
+}
+.article .subtitle h6 {
+ color: rgba(68,68,68,0.9);
+}
+.article figure figcaption span {
+ display: inline-block;
+ margin-right: 5px;
+}
+.article blockquote {
+ background: var(--color-block);
+ border-left: 4px solid #44d7b6;
+ border-radius: 4px;
+}
+.article blockquote {
+ position: relative;
+ width: 100%;
+ padding: 16px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.article blockquote,
+.article blockquote p,
+.article blockquote ul,
+.article blockquote ol {
+ text-align: left;
+ word-wrap: normal;
+ font-size: 0.9375rem;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+.article blockquote footer {
+ padding: 0;
+ text-align: justify;
+ color: inherit;
+ font-style: italic;
+ margin: 1em 0;
+}
+.article blockquote footer cite {
+ color: var(--color-meta);
+ margin-left: 1em;
+}
+.article blockquote footer cite::before {
+ content: '----';
+ padding: 0 0.3em;
+}
+.article blockquote.pullquote.right {
+ border-left: none;
+ border-right: 4px solid #44d7b6;
+}
+.article blockquote.pullquote.right p {
+ text-align: right;
+}
+.article pre {
+ display: block;
+ box-sizing: border-box;
+ margin-top: 1em;
+ margin-bottom: 1em;
+ overflow: auto;
+ background: var(--color-codeblock);
+ font-size: 0.8125rem;
+ font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif;
+ border: 1px solid #ffebcb;
+ padding: 16px;
+ border-radius: 4px;
+}
+.article pre >code:not([class]) {
+ background: transparent;
+}
+.article div>pre {
+ border-radius: 4px;
+}
+.article div>pre>code:not([class]) {
+ padding: 0;
+ margin: 0;
+ background: transparent;
+ color: rgba(68,68,68,0.9);
+}
+.article code {
+ font-family: Menlo, UbuntuMono, Monaco, monospace, courier, sans-serif;
+}
+.article code:not([class]) {
+ word-break: break-all;
+ color: var(--color-inlinecode);
+ border-radius: 2px;
+}
+@media screen and (max-width: 500px) {
+ .article ul,
+ .article ol {
+ font-size: 0.875rem;
+ }
+ .article figure {
+ font-size: 13px;
+ line-height: 1.5;
+ }
+}
+.article .widget {
+ background: transparent;
+ margin: 1em 0;
+ box-shadow: none;
+ border-radius: 4px;
+ cursor: auto;
+ background: var(--color-block);
+ padding: 8px 0;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ width: 100%;
+}
+.article .widget:hover {
+ box-shadow: none;
+}
+.article .widget:active {
+ box-shadow: none;
+}
+.article .widget header {
+ padding: 4px 0.6em;
+ padding-bottom: 0;
+}
+.article .widget header,
+.article .widget header a {
+ color: rgba(68,68,68,0.85);
+}
+.article .widget.copyright,
+.article .widget.qrcode {
+ background: none;
+ padding: 0;
+}
+.article .widget.copyright header,
+.article .widget.qrcode header {
+ display: none;
+}
+.article .widget.copyright .content,
+.article .widget.qrcode .content {
+ padding: 0;
+}
+.article .widget.list .content,
+.article .widget.related_posts .content {
+ padding: 0 0.6em !important;
+}
+.article .widget.list .content a,
+.article .widget.related_posts .content a {
+ color: #2196f3;
+}
+.article .widget.list .content a:hover,
+.article .widget.related_posts .content a:hover {
+ color: #ff5722;
+}
+.article .widget .content {
+ padding: 0 0.6em;
+ margin: 0;
+}
+.article .widget .content ul {
+ padding-left: 4px;
+ margin-left: 16px;
+}
+.article .widget .content ul a {
+ transition: all 0.1s ease;
+ -moz-transition: all 0.1s ease;
+ -webkit-transition: all 0.1s ease;
+ -o-transition: all 0.1s ease;
+ display: inline;
+ border-left: none;
+ padding: 0;
+ padding-left: 4px;
+ color: #2196f3;
+ font-weight: normal;
+ text-decoration: none;
+}
+.article .widget .content ul a:hover,
+.article .widget .content ul a.active,
+.article .widget .content ul a:active {
+ border-left: none !important;
+ background: none !important;
+}
+.article .widget .content ul a:hover {
+ color: #ff5722;
+}
+.article .widget .content .list a .name {
+ display: inline;
+ color: #2196f3;
+}
+.article .widget .content .list a:hover .name {
+ color: #ff5722;
+}
+.article .widget.qrcode > .content {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ padding-left: 16px;
+ padding-right: 16px;
+ margin-bottom: 4px;
+}
+.article .widget.qrcode > .content>.fancybox,
+.article .widget.qrcode > .content>img {
+ margin: 0 8px;
+}
+.article .widget.qrcode > .content img {
+ margin-bottom: 4px;
+}
+.article .article_footer {
+ margin-top: 64px;
+}
+.article .widget-blur {
+ -webkit-backdrop-filter: none;
+ backdrop-filter: none;
+}
+.md .footer {
+ margin-top: 64px;
+}
+.md .footer >div {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.md .footer .header {
+ line-height: 1.75;
+ padding-bottom: 8px;
+ font-weight: 500;
+ font-size: 0.875rem;
+ color: var(--color-list);
+}
+.md .footer .header i {
+ margin-right: 2px;
+}
+.md .footer .body ul,
+.md .footer .body ol {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.md .footer .references,
+.md .footer .related_posts {
+ background: var(--color-block);
+ border-radius: 4px;
+ padding: 16px;
+}
+.md .footer .references .body a {
+ font-size: 0.9375rem;
+ font-weight: 500;
+}
+.md .footer .related_posts .body {
+ margin: 4px;
+ overflow: hidden;
+ border-radius: 2px;
+}
+.md .footer .related_posts .body .vlts-rps {
+ display: -ms-flexbox;
+ display: flex;
+ overflow: scroll;
+}
+.md .footer .related_posts .body .vlts-rps .item {
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ width: 240px;
+}
+.md .footer .related_posts .body .vlts-rps .item+.item {
+ margin-left: 16px;
+}
+.md .footer .related_posts .body .vlts-rps .item:hover img {
+ filter: opacity(1);
+}
+.md .footer .related_posts .body .vlts-rps img {
+ border-radius: 2px;
+ width: 100%;
+ height: 120px;
+ -o-object-fit: cover;
+ object-fit: cover;
+ filter: opacity(0.75);
+}
+.md .footer .related_posts .body .vlts-rps span {
+ display: block;
+ text-align: justify;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+}
+.md .footer .related_posts .body .vlts-rps .title {
+ font-weight: 600;
+ -webkit-line-clamp: 1;
+}
+.md .footer .related_posts .body .vlts-rps .excerpt {
+ font-size: 0.875rem;
+ color: var(--color-meta);
+ -webkit-line-clamp: 3;
+}
+.md .footer .copyright blockquote p {
+ font-size: 0.875rem;
+ margin: 0.25em 0;
+}
+.md .footer .copyright blockquote p a {
+ font-weight: 500;
+}
+.md .footer .donate {
+ display: -ms-flexbox;
+ display: flex;
+ margin: 0 auto;
+}
+.md .footer .donate .imgs {
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ margin: 0 auto;
+}
+.md .footer .donate .imgs .fancybox {
+ margin: 8px;
+}
+.md .footer .donate .imgs img {
+ width: 80px;
+}
+article .readmore {
+ display: block;
+ margin-top: 24px;
+ font-size: 0.875rem;
+}
+#l_cover {
+ min-height: 64px;
+}
+.cover-wrapper {
+ top: 0;
+ left: 0;
+ max-width: 100%;
+ height: 100vh;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-item-align: center;
+ align-self: center;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ color: var(--color-site-inner);
+ padding: 0 16px;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ position: relative;
+ overflow: hidden;
+ margin-bottom: -100px;
+}
+.cover-wrapper .cover-bg,
+.cover-wrapper #cover-backstretch {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-position: center;
+ background-size: cover;
+}
+.cover-wrapper .cover-bg.lazyload:not(.loaded),
+.cover-wrapper #cover-backstretch.lazyload:not(.loaded) {
+ opacity: 0;
+}
+.cover-wrapper .cover-bg.lazyload.loaded,
+.cover-wrapper #cover-backstretch.lazyload.loaded {
+ animation-delay: 0s;
+ animation-duration: 0.5s;
+ animation-fill-mode: forwards;
+ animation-timing-function: ease-out;
+ animation-name: fadeIn;
+}
+@keyframes fadeIn {
+ 0% {
+ opacity: 0;
+ filter: blur(12px);
+ transform: scale(1.02);
+ }
+ 100% {
+ opacity: 1;
+ }
+}
+.cover-wrapper .cover-body {
+ z-index: 1;
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
+.cover-wrapper#full {
+ height: calc(100vh + 100px);
+ padding-bottom: 100px;
+}
+.cover-wrapper#half {
+ max-height: 640px;
+ min-height: 400px;
+ height: calc(36vh - 64px + 200px);
+}
+.cover-wrapper #scroll-down {
+ width: 100%;
+ height: 64px;
+ position: absolute;
+ bottom: 100px;
+ text-align: center;
+ cursor: pointer;
+}
+.cover-wrapper #scroll-down .scroll-down-effects {
+ color: #fff;
+ font-size: 24px;
+ line-height: 64px;
+ position: absolute;
+ width: 24px;
+ left: calc(50% - 12px);
+ text-shadow: 0 1px 2px rgba(0,0,0,0.1);
+ animation: scroll-down-effect 1.5s infinite;
+}
+@keyframes scroll-down-effect {
+ 0% {
+ top: 0;
+ opacity: 1;
+ }
+ 50% {
+ top: -16px;
+ opacity: 0.4;
+ }
+ 100% {
+ top: 0;
+ opacity: 1;
+ }
+}
+.cover-wrapper .cover-body {
+ margin-top: 64px;
+ margin-bottom: 100px;
+}
+.cover-wrapper .cover-body,
+.cover-wrapper .cover-body .top,
+.cover-wrapper .cover-body .bottom {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ max-width: 100%;
+}
+.cover-wrapper .cover-body .bottom {
+ margin-top: 32px;
+}
+.cover-wrapper .cover-body .title {
+ font-family: "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Helvetica, monospace;
+ font-size: 3.125rem;
+ line-height: 1.2;
+ text-shadow: 0 1px 2px rgba(0,0,0,0.1);
+}
+.cover-wrapper .cover-body .subtitle {
+ font-size: 20px;
+}
+.cover-wrapper .cover-body .logo {
+ max-height: 120px;
+ max-width: calc(100% - 4 * 16px);
+}
+@media screen and (min-height: 1024px) {
+ .cover-wrapper .cover-body .title {
+ font-size: 3rem;
+ }
+ .cover-wrapper .cover-body .subtitle {
+ font-size: 1.05rem;
+ }
+ .cover-wrapper .cover-body .logo {
+ max-height: 150px;
+ }
+}
+.cover-wrapper .cover-body .m_search {
+ position: relative;
+ max-width: calc(100% - 16px);
+ width: 320px;
+ vertical-align: middle;
+}
+.cover-wrapper .cover-body .m_search .form {
+ position: relative;
+ display: block;
+ width: 100%;
+}
+.cover-wrapper .cover-body .m_search .icon,
+.cover-wrapper .cover-body .m_search .input {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.cover-wrapper .cover-body .m_search .icon {
+ position: absolute;
+ display: block;
+ line-height: 2.5rem;
+ width: 32px;
+ top: 0;
+ left: 5px;
+ color: rgba(68,68,68,0.75);
+}
+.cover-wrapper .cover-body .m_search .input {
+ display: block;
+ height: 2.5rem;
+ width: 100%;
+ box-shadow: none;
+ box-sizing: border-box;
+ font-size: 0.875rem;
+ -webkit-appearance: none;
+ padding-left: 36px;
+ border-radius: 1.4rem;
+ background: rgba(255,255,255,0.6);
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ border: none;
+ color: var(--color-text);
+}
+@media screen and (max-width: 500px) {
+ .cover-wrapper .cover-body .m_search .input {
+ padding-left: 36px;
+ }
+}
+.cover-wrapper .cover-body .m_search .input:hover {
+ background: rgba(255,255,255,0.8);
+}
+.cover-wrapper .cover-body .m_search .input:focus {
+ background: #fff;
+}
+.cover-wrapper .list-h {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+ border-radius: 4px;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+.cover-wrapper .list-h a {
+ -ms-flex: 1;
+ flex: 1;
+ display: -ms-flexbox;
+ display: flex;
+ font-weight: 600;
+}
+.cover-wrapper .list-h a img {
+ display: block;
+ border-radius: 2px;
+ margin: 4px;
+ min-width: 40px;
+ max-width: 44px;
+}
+@media screen and (max-width: 768px) {
+ .cover-wrapper .list-h a img {
+ min-width: 36px;
+ max-width: 40px;
+ }
+}
+@media screen and (max-width: 500px) {
+ .cover-wrapper .list-h a img {
+ margin: 2px 4px;
+ min-width: 32px;
+ max-width: 36px;
+ }
+}
+@media screen and (max-width: 375px) {
+ .cover-wrapper .list-h a img {
+ min-width: 28px;
+ max-width: 32px;
+ }
+}
+.cover-wrapper {
+ max-width: 100%;
+}
+.cover-wrapper.search .bottom .menu {
+ margin-top: 16px;
+}
+.cover-wrapper.search .bottom .menu .list-h a {
+ white-space: nowrap;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -ms-flex-align: baseline;
+ align-items: baseline;
+ padding: 2px;
+ margin: 4px;
+ color: var(--color-site-inner);
+ opacity: 0.75;
+ text-shadow: 0 1px 2px rgba(0,0,0,0.05);
+ border-bottom: 2px solid transparent;
+}
+.cover-wrapper.search .bottom .menu .list-h a i {
+ margin-right: 4px;
+}
+.cover-wrapper.search .bottom .menu .list-h a p {
+ font-size: 0.9375rem;
+}
+.cover-wrapper.search .bottom .menu .list-h a:hover,
+.cover-wrapper.search .bottom .menu .list-h a.active,
+.cover-wrapper.search .bottom .menu .list-h a:active {
+ opacity: 1;
+ border-bottom: 2px solid var(--color-site-inner);
+}
+.cover-wrapper.dock .menu,
+.cover-wrapper.featured .menu,
+.cover-wrapper.focus .menu {
+ border-radius: 6px;
+}
+.cover-wrapper.dock .menu .list-h a,
+.cover-wrapper.featured .menu .list-h a,
+.cover-wrapper.focus .menu .list-h a {
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: center;
+ align-items: center;
+ padding: 12px;
+ line-height: 24px;
+ border-radius: 4px;
+ border-bottom: none;
+ text-align: center;
+ -ms-flex-line-pack: end;
+ align-content: flex-end;
+ color: rgba(68,68,68,0.7);
+ font-size: 1.5rem;
+}
+@media screen and (max-width: 500px) {
+ .cover-wrapper.dock .menu .list-h a,
+ .cover-wrapper.featured .menu .list-h a,
+ .cover-wrapper.focus .menu .list-h a {
+ padding: 12px 8px;
+ }
+}
+.cover-wrapper.dock .menu .list-h a i,
+.cover-wrapper.featured .menu .list-h a i,
+.cover-wrapper.focus .menu .list-h a i {
+ margin: 8px;
+}
+.cover-wrapper.dock .menu .list-h a p,
+.cover-wrapper.featured .menu .list-h a p,
+.cover-wrapper.focus .menu .list-h a p {
+ font-size: 0.875rem;
+}
+.cover-wrapper.dock .menu .list-h a.active,
+.cover-wrapper.featured .menu .list-h a.active,
+.cover-wrapper.focus .menu .list-h a.active {
+ background: var(--color-card);
+ -webkit-backdrop-filter: none;
+ backdrop-filter: none;
+}
+.cover-wrapper.dock .menu .list-h a.active i,
+.cover-wrapper.featured .menu .list-h a.active i,
+.cover-wrapper.focus .menu .list-h a.active i,
+.cover-wrapper.dock .menu .list-h a.active i+p,
+.cover-wrapper.featured .menu .list-h a.active i+p,
+.cover-wrapper.focus .menu .list-h a.active i+p {
+ color: #44d7b6;
+}
+.cover-wrapper.dock .menu .list-h a.active img+p,
+.cover-wrapper.featured .menu .list-h a.active img+p,
+.cover-wrapper.focus .menu .list-h a.active img+p {
+ color: var(--color-text);
+}
+.cover-wrapper.dock .menu .list-h a:hover,
+.cover-wrapper.featured .menu .list-h a:hover,
+.cover-wrapper.focus .menu .list-h a:hover {
+ background: var(--color-card);
+}
+.cover-wrapper.dock .top {
+ margin-bottom: 48px;
+}
+.cover-wrapper.dock .menu {
+ background: rgba(255,255,255,0.5);
+ position: absolute;
+ bottom: 0;
+ max-width: 100%;
+}
+.cover-wrapper.dock .menu .list-h {
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ margin: 4px;
+}
+.cover-wrapper.dock .menu .list-h a+a {
+ margin-left: 4px;
+}
+@media screen and (max-width: 500px) {
+ .cover-wrapper.dock .menu .list-h {
+ overflow-x: scroll;
+ }
+ .cover-wrapper.dock .menu .list-h::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+ }
+ .cover-wrapper.dock .menu .list-h::-webkit-scrollbar-track-piece {
+ background: transparent;
+ }
+ .cover-wrapper.dock .menu .list-h::-webkit-scrollbar-thumb {
+ background: #44d7b6;
+ cursor: pointer;
+ border-radius: 0;
+ }
+ .cover-wrapper.dock .menu .list-h::-webkit-scrollbar-thumb:hover {
+ background: #ff5722;
+ }
+}
+@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {
+ .cover-wrapper.dock .menu {
+ background: rgba(255,255,255,0.5);
+ -webkit-backdrop-filter: saturate(200%) blur(20px);
+ backdrop-filter: saturate(200%) blur(20px);
+ }
+}
+.cover-wrapper.featured .menu .list-h {
+ margin: -2px;
+}
+.cover-wrapper.featured .menu .list-h a {
+ margin: 2px;
+ background: rgba(255,255,255,0.5);
+}
+@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {
+ .cover-wrapper.featured .menu .list-h a {
+ background: rgba(255,255,255,0.5);
+ -webkit-backdrop-filter: saturate(200%) blur(20px);
+ backdrop-filter: saturate(200%) blur(20px);
+ }
+}
+.cover-wrapper.focus .menu {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.cover-wrapper.focus .menu .list-h {
+ margin: 2px;
+}
+.cover-wrapper.focus .menu:hover {
+ background: rgba(255,255,255,0.5);
+}
+@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {
+ .cover-wrapper.focus .menu:hover {
+ background: rgba(255,255,255,0.5);
+ -webkit-backdrop-filter: saturate(200%) blur(20px);
+ backdrop-filter: saturate(200%) blur(20px);
+ }
+}
+.cover-wrapper.focus .menu .list-h a {
+ margin: 2px;
+}
+.cover-wrapper.focus .menu .list-h a:hover {
+ opacity: 1;
+ background: var(--color-card);
+}
+footer.footer {
+ position: relative;
+ padding: 40px 10px 120px 10px;
+ width: 100%;
+ color: var(--color-site-footer);
+ margin: 0px auto;
+ overflow: hidden;
+ text-align: center;
+}
+footer.footer,
+footer.footer p {
+ font-size: 0.8125rem;
+}
+footer.footer .licenses {
+ color: fade(, 50%);
+}
+footer.footer .social-wrapper {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin: 4px 8px;
+}
+footer.footer a {
+ color: var(--color-site-footer);
+ padding: 0;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+footer.footer a:hover {
+ color: #ff5722;
+}
+footer.footer a:not(.social):hover {
+ text-decoration: underline;
+}
+footer.footer a.social {
+ position: relative;
+ display: inline-block;
+ text-align: center;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+ min-width: 36px;
+ min-height: 36px;
+ margin: 4px;
+ opacity: 0.75;
+ border-radius: 4px;
+ font-size: 1rem;
+}
+footer.footer a.social img {
+ margin: 8px;
+ height: 24px;
+}
+footer.footer a.social:hover {
+ color: #ff5722;
+ background: rgba(255,87,34,0.1);
+}
+footer.footer .copyright {
+ margin-top: 16px;
+}
+footer.footer .copyright p {
+ font-size: 0.78125rem;
+}
+@media screen and (max-width: 768px) {
+ footer.footer {
+ -ms-flex-pack: center;
+ justify-content: center;
+ }
+}
+.article.l_friends .friends-group .friend-content {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin: -8px;
+ border-radius: 8px;
+ -ms-flex-align: start;
+ align-items: flex-start;
+ line-height: 1.3;
+}
+.article.l_friends .friends-group .friend-content .friend-card {
+ display: -ms-flexbox;
+ display: flex;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ padding: 8px 0;
+ margin: 8px;
+ margin-top: calc(2.25 * 16px + 32px);
+ color: var(--color-meta);
+ background: var(--color-block);
+ -ms-flex-pack: start;
+ justify-content: flex-start;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ width: calc(100%/4 - 16px);
+}
+@media screen and (max-width: 1024px) {
+ .article.l_friends .friends-group .friend-content .friend-card {
+ width: calc(100%/4 - 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .article.l_friends .friends-group .friend-content .friend-card {
+ width: calc(100%/3 - 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .article.l_friends .friends-group .friend-content .friend-card {
+ width: calc(100%/2 - 16px);
+ }
+}
+.article.l_friends .friends-group .friend-content .friend-card:hover .friend-left .avatar {
+ transform: scale(1.2) rotate(12deg);
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-left {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-item-align: center;
+ align-self: center;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-left .avatar {
+ width: 64px;
+ height: 64px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ margin: 16px 8px 4px 8px;
+ margin-top: calc(-1.25 * 16px - 32px);
+ border-radius: 100%;
+ border: 2px solid #fff;
+ background: #fff;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-right {
+ margin: 4px 8px;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ text-align: center;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-right p {
+ text-align: center;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-right .friend-tags-wrapper {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ margin-left: -2px;
+ word-break: break-all;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-right p {
+ margin: 0;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-right p.friend-name {
+ font-size: 0.8125rem;
+ padding-top: 4px;
+ font-weight: bold;
+}
+.article.l_friends .friends-group .friend-content .friend-card .friend-right p.tags {
+ font-size: 0.78125rem;
+ display: inline;
+ background: none;
+ word-wrap: break-word;
+ padding-right: 4px;
+}
+.md img {
+ position: relative;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+@media screen and (max-width: 500px) {
+ .md img {
+ box-shadow: none;
+ }
+}
+.md div>img,
+.md p>img {
+ display: block;
+ margin: auto;
+ border-radius: 4px;
+}
+@media screen and (max-width: 500px) {
+ .md div>img,
+ .md p>img {
+ border-radius: 2px;
+ }
+}
+.md span img {
+ display: inline;
+ margin: auto;
+}
+.md .img-wrap {
+ margin: 1.5rem auto;
+ text-align: center;
+ border-radius: 2px;
+ overflow: hidden;
+}
+.md .img-wrap .img-bg {
+ width: 100%;
+}
+.md .img-wrap .image-caption {
+ display: block;
+ margin: 0.75rem auto;
+ font-size: 0.8125rem;
+ color: var(--color-meta);
+}
+.md .img-wrap .image-caption:empty {
+ display: none;
+}
+#safearea {
+ margin: 16px 16px 0;
+}
+#l_body {
+ position: relative;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+#l_body div.loading {
+ margin: 16px 0;
+ width: 100%;
+ display: block;
+}
+#l_body div.loading,
+#l_body div.loading p {
+ text-align: center;
+}
+#l_body #s-top {
+ transition: all 0.6s ease;
+ -moz-transition: all 0.6s ease;
+ -webkit-transition: all 0.6s ease;
+ -o-transition: all 0.6s ease;
+ z-index: 9;
+ position: fixed;
+ width: 48px;
+ height: 48px;
+ line-height: 48px;
+ border-radius: 100%;
+ bottom: 32px;
+ right: 32px;
+ transform: translateY(100px) scale(0);
+ transform-origin: bottom;
+ color: var(--color-text);
+}
+@media screen and (max-width: 768px) {
+ #l_body #s-top {
+ right: 16px;
+ }
+}
+#l_body #s-top.show {
+ transform: translateY(0) scale(1);
+}
+#l_body #s-top.show.hl {
+ background: #44d7b6;
+ color: #fff;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+}
+@media screen and (min-width: 768px) {
+ #l_body #s-top:hover {
+ transform: scale(1.2);
+ border-radius: 25%;
+ background: #44d7b6;
+ color: #fff;
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+ }
+ #l_body #s-top:hover.hl {
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+ }
+}
+.l_main {
+ width: calc(100% - 1 * 240px);
+ padding-right: 16px;
+ float: left;
+}
+@media screen and (max-width: 768px) {
+ .l_main {
+ width: 100%;
+ }
+}
+.l_main.no_sidebar {
+ width: 100%;
+ padding-right: 0;
+ max-width: 840px;
+ margin: auto;
+}
+@media screen and (min-width: 2048px) {
+ .l_main.no_sidebar {
+ max-width: calc(55vw - 240px);
+ }
+}
+.l_main.no_sidebar ~.l_side {
+ display: none;
+}
+.l_main .post-list {
+ position: relative;
+ margin-bottom: 16px;
+ -moz-column-gap: 16px;
+ column-gap: 16px;
+}
+.l_main .post-list.multiple-columns {
+ -moz-columns: 320px;
+ columns: 320px;
+}
+.l_main .post-wrapper {
+ column-break-inside: avoid;
+ page-break-inside: avoid;
+ break-inside: avoid-column;
+}
+.l_main .widget .content p,
+.l_main .widget .content ul,
+.l_main .widget .content ol,
+.l_main .widget .content table,
+.l_main .widget .content .tabs,
+.l_main .widget .content details {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.l_main .widget .content .post {
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.l_main .widget.grid .content .grid.fixed a {
+ width: calc(100%/8 - 0 * 16px);
+}
+@media screen and (max-width: 1024px) {
+ .l_main .widget.grid .content .grid.fixed a {
+ width: calc(100%/7 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 768px) {
+ .l_main .widget.grid .content .grid.fixed a {
+ width: calc(100%/6 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .l_main .widget.grid .content .grid.fixed a {
+ width: calc(100%/5 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 425px) {
+ .l_main .widget.grid .content .grid.fixed a {
+ width: calc(100%/4 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 375px) {
+ .l_main .widget.grid .content .grid.fixed a {
+ width: calc(100%/3 - 0 * 16px);
+ }
+}
+.l_main .post {
+ position: relative;
+ margin-bottom: 16px;
+ padding: 24px;
+ border-radius: 8px;
+}
+.l_main .post h1.title {
+ font-size: 1.5rem;
+ margin: 0;
+ border-bottom: none;
+ padding-bottom: 4px;
+ border-bottom: none;
+}
+.l_main .post .article-meta {
+ color: var(--color-meta);
+ margin-bottom: 16px;
+ line-height: normal;
+}
+.l_main .post .article-meta#top {
+ margin-top: 16px;
+ margin-bottom: 32px;
+}
+.l_main .post .article-meta#bottom {
+ margin-top: 32px;
+ margin-bottom: 8px;
+}
+.l_main .post .article-meta .aplayer,
+.l_main .post .article-meta .aplayer-pic,
+.l_main .post .article-meta .thumbnail {
+ width: 48px;
+ height: 48px;
+}
+.l_main .post .article-meta .aplayer,
+.l_main .post .article-meta .thumbnail {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ border-radius: 100%;
+ float: right;
+ margin: 2px;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+}
+.l_main .post .article-meta .aplayer:hover,
+.l_main .post .article-meta .thumbnail:hover {
+ border-radius: 25%;
+ transform: scale(1.1);
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+}
+@media screen and (max-width: 500px) {
+ .l_main .post .article-meta .aplayer:hover,
+ .l_main .post .article-meta .thumbnail:hover {
+ border-radius: 100%;
+ transform: scale(1);
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ }
+}
+.l_main .post .article-meta .thumbnail {
+ width: auto;
+ border-radius: 4px;
+ box-shadow: none;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.l_main .post .article-meta .thumbnail:hover {
+ border-radius: 4px;
+ transform: scale(1.1) rotate(4deg);
+ box-shadow: none;
+}
+.l_main .post .article-meta .new-meta-box {
+ transition: all 0.1s ease;
+ -moz-transition: all 0.1s ease;
+ -webkit-transition: all 0.1s ease;
+ -o-transition: all 0.1s ease;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+}
+.l_main .post .article-meta .new-meta-box,
+.l_main .post .article-meta .new-meta-box p,
+.l_main .post .article-meta .new-meta-box i {
+ font-size: 0.8125rem;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item {
+ color: var(--color-meta);
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: baseline;
+ align-items: baseline;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0 16px 0 0;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item .notlink {
+ cursor: default;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item .notlink:hover {
+ color: var(--color-meta);
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item .notlink:hover p {
+ color: var(--color-meta);
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item:last-child {
+ margin-right: 0;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item img,
+.l_main .post .article-meta .new-meta-box .new-meta-item i {
+ display: inline;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item i {
+ margin-right: 4px;
+ border-radius: 0;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item i.fa-hashtag {
+ margin-right: 2px;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item p,
+.l_main .post .article-meta .new-meta-box .new-meta-item a {
+ color: var(--color-meta);
+ padding: 3px 0;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item a {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item a img {
+ height: 16px;
+ width: 16px;
+ margin-right: 5px;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item a p {
+ margin: 0;
+ font-weight: normal;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item a:hover {
+ color: #ff5722;
+}
+.l_main .post .article-meta .new-meta-box .new-meta-item a:hover p {
+ color: #ff5722;
+}
+.l_main .post .article-meta .new-meta-box .author img,
+.l_main .post .article-meta .new-meta-box .author i {
+ border-radius: 100%;
+}
+.l_main .post .article-meta .new-meta-box .author img {
+ transform: translateY(-0.5px);
+}
+@media screen and (max-width: 500px) {
+ .l_main .post .article-meta .new-meta-box .share {
+ width: 100%;
+ margin-top: 16px;
+ background: var(--color-block);
+ border-radius: 4px;
+ }
+}
+.l_main .post .article-meta .new-meta-box .share-body {
+ position: relative;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin: 0;
+ padding: 0 2px;
+}
+.l_main .post .article-meta .new-meta-box .share-body a {
+ padding: 0;
+ margin: 0 1px;
+}
+.l_main .post .article-meta .new-meta-box .share-body a img {
+ margin: 2px;
+ height: 24px;
+ width: auto;
+ background: transparent;
+}
+@media screen and (max-width: 500px) {
+ .l_main .post .article-meta .new-meta-box .share-body a img {
+ height: 32px;
+ margin: 8px;
+ }
+}
+.l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target {
+ display: none;
+ position: absolute;
+ background: var(--color-card);
+ border-radius: 8px;
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.1), 0 4px 8px 0px rgba(0,0,0,0.1), 0 8px 16px 0px rgba(0,0,0,0.1);
+ padding: 8px;
+ left: 50%;
+ top: -20px;
+ transform: translate(-50%, -100%);
+}
+.l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target img {
+ display: block;
+ margin: 0;
+ padding: 0;
+ height: 128px;
+ width: 128px;
+ min-width: 128px;
+}
+.l_main .post .article-meta .new-meta-box .share-body div.hoverbox:hover div.target {
+ display: -ms-flexbox;
+ display: flex;
+}
+@media screen and (max-width: 500px) {
+ .l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target {
+ position: absolute;
+ }
+}
+.l_main .post span>img {
+ display: inline-block;
+}
+.l_main .post a img {
+ display: inline;
+}
+@media screen and (max-width: 768px) {
+ .l_main {
+ padding-right: 0;
+ }
+}
+@media screen and (max-width: 768px) and (max-width: 500px) {
+ .l_main {
+ width: 100%;
+ }
+}
+.body-wrapper {
+ position: relative;
+ display: -ms-flexbox;
+ display: flex;
+ width: 100%;
+ max-width: 1080px;
+ margin: 0 auto;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+@media screen and (min-width: 2048px) {
+ .body-wrapper {
+ max-width: 55vw;
+ }
+}
+article#comments .article p[ct] {
+ margin-top: 0;
+ margin-bottom: 1em;
+ font-size: 1.125rem;
+ color: var(--color-text);
+}
+article#comments .article p[cst] {
+ margin-top: 1em;
+ margin-bottom: 1em;
+ font-size: 0.875rem;
+}
+article#comments #load-btns,
+article#comments #loading-comments {
+ text-align: center;
+ margin: 16px 0;
+}
+article#comments #load-btns,
+article#comments #loading-comments,
+article#comments #load-btns a,
+article#comments #loading-comments a,
+article#comments #load-btns i,
+article#comments #loading-comments i {
+ line-height: 3em;
+}
+article#comments #load-btns a.load-comments,
+article#comments #loading-comments a.load-comments {
+ display: inline-block;
+ border-radius: 2px;
+ cursor: pointer;
+ background: #44d7b6;
+ color: #fff;
+ padding-left: 48px;
+ padding-right: 48px;
+}
+article#comments #load-btns a.load-comments:hover,
+article#comments #loading-comments a.load-comments:hover {
+ background: #ff5722;
+}
+.white-box {
+ background: var(--color-card);
+}
+img {
+ max-width: 100%;
+}
+img.lazyload:not(.placeholder) {
+ transition: opacity 0.5s ease-out 0s;
+ transition: filter 0.25s ease-out 0s;
+}
+img.lazyload:not(.placeholder):not(.loaded) {
+ opacity: 0;
+}
+img.lazyload:not(.placeholder).loaded {
+ opacity: 1;
+}
+img.lazyload:not(.placeholder):not(.loaded) {
+ filter: blur(8px);
+}
+img.lazyload:not(.placeholder).loaded {
+ filter: none;
+}
+.md >p {
+ padding-top: 4px;
+}
+.md h1,
+.md h2,
+.md h3,
+.md h4,
+.md h5,
+.md h6 {
+ position: relative;
+ pointer-events: none;
+ margin-top: 0;
+ font-weight: 500;
+}
+.md h1 >a,
+.md h2 >a,
+.md h3 >a,
+.md h4 >a,
+.md h5 >a,
+.md h6 >a {
+ color: inherit;
+ pointer-events: auto;
+}
+.md h1 >a:hover,
+.md h2 >a:hover,
+.md h3 >a:hover,
+.md h4 >a:hover,
+.md h5 >a:hover,
+.md h6 >a:hover {
+ color: #ff5722;
+}
+.md h1:before,
+.md h2:before,
+.md h3:before,
+.md h4:before,
+.md h5:before,
+.md h6:before {
+ content: '';
+ display: block;
+ margin-top: -48px;
+ height: 96px;
+ visibility: hidden;
+ pointer-events: none;
+}
+.md h1:before,
+.md h2:before {
+ margin-top: -32px;
+}
+.md .article-meta+h1,
+.md .article-meta+h2 {
+ margin-top: -80px;
+}
+.md h3,
+.md h4,
+.md h5,
+.md h6 {
+ margin-bottom: 1em;
+}
+.md h3:before {
+ margin-top: -56px;
+}
+.md h4:before {
+ margin-top: -64px;
+}
+.md h5 {
+ font-weight: bold;
+}
+.md h2+h3:before {
+ margin-top: -80px;
+}
+.md ul,
+.md ol {
+ font-size: 0.9375rem;
+ list-style: initial;
+ padding-left: 8px;
+ margin-left: 16px;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.md ul ul,
+.md ol ul,
+.md ul ol,
+.md ol ol {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.md ul li,
+.md ol li {
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+.md ul li li,
+.md ol li li {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.md ul li p,
+.md ol li p {
+ margin-top: 4px;
+ margin-bottom: 0;
+}
+.md ul.task-list,
+.md ol.task-list {
+ padding-left: 0;
+ margin-left: 4px;
+}
+.md ul.task-list li,
+.md ol.task-list li {
+ list-style: none;
+}
+.md ul.task-list li input,
+.md ol.task-list li input {
+ margin-right: 4px;
+}
+.md ul>li {
+ list-style: initial;
+}
+.md ol>li {
+ list-style: decimal;
+}
+.md .div-ori-link {
+ display: block;
+ text-align: center;
+ margin: 4rem 0;
+}
+.md .ori-link {
+ margin: auto;
+ padding: 1em 3em;
+ border: 1px solid #44d7b6;
+ border-radius: 4px;
+ color: #44d7b6;
+ font-weight: 500;
+}
+.md .ori-link:hover {
+ color: #ff5722;
+ border-color: #ff5722;
+}
+.l_header {
+ position: fixed;
+ z-index: 1000;
+ top: 0;
+ width: 100%;
+ height: 64px;
+ background: var(--color-card);
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+}
+.l_header.auto {
+ transition: opacity 0.4s ease;
+ visibility: hidden;
+}
+.l_header.auto.show {
+ opacity: 1 !important;
+ visibility: visible;
+}
+.l_header .container {
+ margin-left: 16px;
+ margin-right: 16px;
+}
+.l_header #wrapper {
+ height: 100%;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+.l_header #wrapper .nav-main,
+.l_header #wrapper .nav-sub {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.l_header #wrapper .nav-main {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.l_header #wrapper.sub .nav-main {
+ transform: translateY(-64px);
+}
+.l_header #wrapper .nav-sub {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ opacity: 0;
+ height: 64px;
+ width: calc(100% - 2 * 16px);
+ position: absolute;
+}
+@media screen and (min-width: 2048px) {
+ .l_header #wrapper .nav-sub {
+ max-width: 55vw;
+ margin: auto;
+ }
+}
+.l_header #wrapper.sub .nav-sub {
+ opacity: 1;
+}
+.l_header #wrapper .title {
+ position: relative;
+ color: var(--color-text);
+ padding-left: 24px;
+ max-height: 64px;
+}
+.l_header #wrapper .nav-main .title {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
+ line-height: 64px;
+ padding: 0 24px;
+ font-size: 1.25rem;
+ font-family: "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Helvetica, monospace;
+}
+.l_header #wrapper .nav-main .title img {
+ height: 64px;
+}
+.l_header .nav-sub {
+ max-width: 1080px;
+ margin: auto;
+}
+.l_header .nav-sub .title {
+ font-weight: bold;
+ font-family: UbuntuMono, "Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial, Menlo, Monaco, monospace, sans-serif;
+ line-height: 1.2;
+ max-height: 64px;
+ white-space: normal;
+ -ms-flex-negative: 1;
+ flex-shrink: 1;
+}
+.l_header .switcher {
+ display: none;
+ line-height: 64px;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.l_header .switcher .s-toc {
+ display: none;
+}
+@media screen and (max-width: 768px) {
+ .l_header .switcher .s-toc {
+ display: -ms-flexbox;
+ display: flex;
+ }
+}
+.l_header .switcher >li {
+ height: 48px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ margin: 2px;
+}
+@media screen and (max-width: 500px) {
+ .l_header .switcher >li {
+ margin: 0 1px;
+ height: 48px;
+ }
+}
+.l_header .switcher >li >a {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+ width: 48px;
+ height: 48px;
+ padding: 0.85em 1.1em;
+ border-radius: 100px;
+ border: none;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ color: #44d7b6;
+}
+.l_header .switcher >li >a:hover {
+ border: none;
+}
+.l_header .switcher >li >a.active,
+.l_header .switcher >li >a:active {
+ border: none;
+ background: var(--color-site-bg);
+}
+@media screen and (max-width: 500px) {
+ .l_header .switcher >li >a {
+ width: 36px;
+ height: 48px;
+ }
+}
+.l_header .nav-sub .switcher {
+ display: -ms-flexbox;
+ display: flex;
+}
+.l_header .m_search {
+ display: -ms-flexbox;
+ display: flex;
+ height: 64px;
+ width: 240px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+@media screen and (max-width: 1024px) {
+ .l_header .m_search {
+ width: 44px;
+ min-width: 44px;
+ }
+ .l_header .m_search input::-moz-placeholder {
+ opacity: 0;
+ }
+ .l_header .m_search input:-ms-input-placeholder {
+ opacity: 0;
+ }
+ .l_header .m_search input::placeholder {
+ opacity: 0;
+ }
+ .l_header .m_search:hover {
+ width: 240px;
+ }
+ .l_header .m_search:hover input::-moz-placeholder {
+ opacity: 1;
+ }
+ .l_header .m_search:hover input:-ms-input-placeholder {
+ opacity: 1;
+ }
+ .l_header .m_search:hover input::placeholder {
+ opacity: 1;
+ }
+}
+@media screen and (min-width: 500px) {
+ .l_header .m_search:hover .input {
+ width: 100%;
+ }
+ .l_header .m_search:hover .input::-moz-placeholder {
+ opacity: 1;
+ }
+ .l_header .m_search:hover .input:-ms-input-placeholder {
+ opacity: 1;
+ }
+ .l_header .m_search:hover .input::placeholder {
+ opacity: 1;
+ }
+}
+@media screen and (max-width: 500px) {
+ .l_header .m_search {
+ min-width: 0;
+ }
+ .l_header .m_search input::-moz-placeholder {
+ opacity: 1;
+ }
+ .l_header .m_search input:-ms-input-placeholder {
+ opacity: 1;
+ }
+ .l_header .m_search input::placeholder {
+ opacity: 1;
+ }
+}
+.l_header .m_search .form {
+ position: relative;
+ display: -ms-flexbox;
+ display: flex;
+ width: 100%;
+ -ms-flex-align: center;
+ align-items: center;
+}
+.l_header .m_search .icon {
+ position: absolute;
+ width: 36px;
+ left: 5px;
+ color: var(--color-meta);
+}
+@media screen and (max-width: 500px) {
+ .l_header .m_search .icon {
+ display: none;
+ }
+}
+.l_header .m_search .input {
+ display: block;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ line-height: 1.3;
+ width: 100%;
+ color: var(--color-text);
+ background: #fafafa;
+ box-shadow: none;
+ box-sizing: border-box;
+ padding-left: 40px;
+ font-size: 0.875rem;
+ border-radius: 8px;
+ border: none;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+@media screen and (min-width: 500px) {
+ .l_header .m_search .input:focus {
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);
+ }
+}
+@media screen and (max-width: 500px) {
+ .l_header .m_search .input {
+ background: var(--color-block);
+ padding-left: 8px;
+ border: none;
+ }
+ .l_header .m_search .input:hover,
+ .l_header .m_search .input:focus {
+ border: none;
+ }
+}
+@media (max-width: 500px) {
+ .l_header .m_search {
+ left: 0;
+ width: 0;
+ overflow: hidden;
+ position: absolute;
+ background: #fff;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ }
+ .l_header .m_search .input {
+ border-radius: 32px;
+ margin-left: 16px;
+ padding-left: 16px;
+ }
+ .l_header.z_search-open .m_search {
+ width: 100%;
+ }
+ .l_header.z_search-open .m_search .input {
+ width: calc(100% - 120px);
+ }
+}
+ul.m-pc >li>a {
+ color: inherit;
+ border-bottom: 2px solid transparent;
+}
+ul.m-pc >li>a:active,
+ul.m-pc >li>a.active {
+ border-bottom: 2px solid #44d7b6;
+}
+ul.m-pc li:hover >ul.list-v,
+ul.list-v li:hover >ul.list-v {
+ display: block;
+}
+ul.nav-list-h {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+ul.nav-list-h>li {
+ position: relative;
+ -ms-flex-pack: center;
+ justify-content: center;
+ height: 100%;
+ line-height: 2.4;
+ border-radius: 4px;
+}
+ul.nav-list-h>li >a {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-weight: 600;
+}
+ul.list-v {
+ z-index: 1;
+ display: none;
+ position: absolute;
+ background: var(--color-card);
+ box-shadow: 0 2px 4px 0px rgba(0,0,0,0.08), 0 4px 8px 0px rgba(0,0,0,0.08), 0 8px 16px 0px rgba(0,0,0,0.08);
+ margin-top: -6px;
+ border-radius: 4px;
+ padding: 8px 0;
+}
+ul.list-v.show {
+ display: block;
+}
+ul.list-v hr {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+ul.list-v >li {
+ white-space: nowrap;
+ word-break: keep-all;
+}
+ul.list-v >li.header {
+ font-size: 0.78125rem;
+ font-weight: bold;
+ line-height: 2em;
+ color: var(--color-meta);
+ margin: 8px 16px 4px;
+}
+ul.list-v >li.header i {
+ margin-right: 8px;
+}
+ul.list-v >li ul {
+ margin-left: 0;
+ display: none;
+ margin-top: -40px;
+}
+ul.list-v .aplayer-container {
+ min-height: 64px;
+ padding: 6px 16px;
+}
+ul.list-v >li>a {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ display: block;
+ color: var(--color-list);
+ font-size: 0.875rem;
+ font-weight: bold;
+ line-height: 36px;
+ padding: 0 20px 0 16px;
+ text-overflow: ellipsis;
+ margin: 0 4px;
+ border-radius: 4px;
+}
+@media screen and (max-width: 1024px) {
+ ul.list-v >li>a {
+ line-height: 40px;
+ }
+}
+ul.list-v >li>a >i {
+ margin-right: 8px;
+}
+ul.list-v >li>a:active,
+ul.list-v >li>a.active {
+ color: var(--color-list-hl);
+}
+ul.list-v >li>a:hover {
+ color: var(--color-list-hl);
+ background: var(--color-site-bg);
+}
+.l_header .menu >ul>li>a {
+ display: block;
+ padding: 0 8px;
+}
+.l_header .menu >ul>li>a >i {
+ margin-right: 4px;
+}
+.l_header ul.nav-list-h>li {
+ color: var(--color-list);
+ line-height: 62px;
+}
+.l_header ul.nav-list-h>li >a {
+ max-height: 62px;
+ overflow: hidden;
+ color: inherit;
+}
+.l_header ul.nav-list-h>li >a:active,
+.l_header ul.nav-list-h>li >a.active {
+ color: #44d7b6;
+}
+.l_header ul.nav-list-h>li:hover>a {
+ color: var(--color-list-hl);
+}
+.l_header ul.nav-list-h>li i.music {
+ animation: rotate-effect 1.5s linear infinite;
+}
+@keyframes rotate-effect {
+ 0% {
+ transform: rotate(0);
+ }
+ 25% {
+ transform: rotate(90deg);
+ }
+ 50% {
+ transform: rotate(180deg);
+ }
+ 75% {
+ transform: rotate(270deg);
+ }
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+.menu-phone li ul.list-v {
+ right: calc(100% - 0.5 * 16px);
+}
+.menu-phone li ul.list-v ul {
+ right: calc(100% - 0.5 * 16px);
+}
+#wrapper {
+ max-width: 1080px;
+ margin: auto;
+}
+@media screen and (min-width: 2048px) {
+ #wrapper {
+ max-width: 55vw;
+ }
+}
+#wrapper .menu {
+ -ms-flex: 1 1 auto;
+ flex: 1 1 auto;
+ margin: 0 16px 0 0;
+}
+#wrapper .menu .list-v ul {
+ left: calc(100% - 0.5 * 16px);
+}
+.menu-phone {
+ display: none;
+ margin-top: 16px;
+ right: 8px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.menu-phone ul {
+ right: calc(100% - 0.5 * 16px);
+}
+@media screen and (max-width: 500px) {
+ .menu-phone {
+ display: block;
+ }
+}
+.cover-wrapper .l_header {
+ transition: all 0.5s ease;
+ -moz-transition: all 0.5s ease;
+ -webkit-transition: all 0.5s ease;
+ -o-transition: all 0.5s ease;
+ transform: translateY(-128px);
+}
+.cover-wrapper .l_header.show {
+ transform: translateY(0);
+}
+.l_header {
+ max-width: 65vw;
+ left: calc((100% - 65vw) * 0.5);
+ border-bottom-left-radius: 8px;
+ border-bottom-right-radius: 8px;
+}
+@media screen and (max-width: 2048px) {
+ .l_header {
+ max-width: 1112px;
+ left: calc((100% - 1112px) * 0.5);
+ }
+}
+@media screen and (max-width: 1112px) {
+ .l_header {
+ left: 0;
+ border-radius: 0;
+ max-width: 100%;
+ }
+}
+@media screen and (max-width: 500px) {
+ .l_header .container {
+ margin-left: 0;
+ margin-right: 0;
+ }
+ .l_header #wrapper .nav-main .title {
+ padding-left: 16px;
+ padding-right: 16px;
+ }
+ .l_header #wrapper .nav-sub {
+ width: 100%;
+ }
+ .l_header #wrapper .nav-sub .title {
+ overflow-y: scroll;
+ margin-top: 2px;
+ padding: 8px 16px;
+ }
+ .l_header #wrapper .switcher {
+ display: -ms-flexbox;
+ display: flex;
+ margin-right: 8px;
+ }
+ .l_header .menu {
+ display: none;
+ }
+}
+@media screen and (max-width: 500px) {
+ .list-v li {
+ max-width: 270px;
+ }
+}
+.l_main .prev-next {
+ width: 100%;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -ms-flex-align: baseline;
+ align-items: baseline;
+ color: var(--color-meta);
+ margin: 0;
+ font-weight: 600;
+}
+.l_main .prev-next .prev {
+ text-align: left;
+ border-top-right-radius: 32px;
+ border-bottom-right-radius: 32px;
+}
+.l_main .prev-next .next {
+ text-align: right;
+ border-top-left-radius: 32px;
+ border-bottom-left-radius: 32px;
+}
+.l_main .prev-next p {
+ margin: 16px;
+}
+.l_main .prev-next section {
+ color: var(--color-meta);
+ padding: 16px;
+ border-radius: 8px;
+}
+.l_main .prev-next section:hover {
+ color: #ff5722;
+}
+.l_main .article .prev-next {
+ width: 100%;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -ms-flex-line-pack: start;
+ align-content: flex-start;
+ margin-top: 8px;
+}
+.l_main .article .prev-next >a {
+ width: 100%;
+ padding: 8px;
+ color: var(--color-meta);
+ background: var(--color-block);
+ border-radius: 4px;
+}
+.l_main .article .prev-next >a:hover {
+ background: #ffeee8;
+}
+.l_main .article .prev-next >a:hover p.title {
+ color: #ff5722;
+}
+.l_main .article .prev-next >a p {
+ margin: 8px 0.5rem;
+}
+.l_main .article .prev-next >a p.title {
+ font-weight: 600;
+ font-size: 1rem;
+}
+.l_main .article .prev-next >a p.title >i {
+ width: 1rem;
+}
+.l_main .article .prev-next >a p.content {
+ font-size: 0.875rem;
+ font-weight: 400;
+ text-align: justify;
+ word-break: break-all;
+}
+.l_main .article .prev-next >a:only-child {
+ margin-left: 0;
+ margin-right: 0;
+}
+.l_main .article .prev-next .prev {
+ margin-left: 0;
+ margin-right: 8px;
+}
+.l_main .article .prev-next .prev p.title {
+ text-align: left;
+}
+.l_main .article .prev-next .next {
+ margin-left: 8px;
+ margin-right: 0;
+}
+.l_main .article .prev-next .next p.title {
+ text-align: right;
+}
+.article-title {
+ font-weight: 500;
+ margin-bottom: 12px;
+ line-height: 1.4;
+}
+.article-title a {
+ color: var(--color-h1);
+}
+.article-title a:hover {
+ color: #ff5722;
+}
+.article-title[pin] {
+ margin-right: 36px;
+}
+.post-v3 {
+ overflow: hidden;
+ text-align: justify;
+}
+.post-v3 .md {
+ color: var(--color-p);
+}
+.post-v3 .pin {
+ position: absolute;
+ width: 20px;
+ height: 20px;
+ border-radius: 20px;
+ right: 24px;
+ top: 24px;
+ z-index: 1;
+ pointer-events: none;
+}
+.meta-v3[line_style='solid'] {
+ border-top: 1px solid rgba(68,68,68,0.1);
+}
+.meta-v3[line_style='dashed'] {
+ border-top: 2px dashed rgba(68,68,68,0.1);
+}
+.meta-v3[line_style='dotted'] {
+ border-top: 4px dotted rgba(68,68,68,0.1);
+}
+.meta-v3 {
+ margin-top: 16px;
+ padding-top: 12px;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ color: var(--color-meta);
+}
+.meta-v3 >div {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.meta-v3 time {
+ font-size: 0.875rem;
+}
+.meta-v3 .category-link {
+ font-size: 0.875rem;
+ color: var(--color-meta);
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+}
+.meta-v3 .category-link:hover {
+ color: #ff5722;
+}
+.meta-v3 .readmore {
+ font-weight: bold;
+}
+.meta-v3 .avatar {
+ line-height: 0;
+ margin-right: 0.75em;
+}
+.meta-v3 .avatar img {
+ width: 24px;
+ height: 24px;
+ display: block;
+ border-radius: 12px;
+ -o-object-fit: cover;
+ object-fit: cover;
+}
+.headimg-div {
+ display: block;
+ margin-left: -24px;
+ margin-top: -24px;
+ margin-bottom: 20px;
+ width: calc(100% + 3 * 16px);
+}
+.headimg-div .headimg-a {
+ display: block;
+ overflow: hidden;
+ height: 280px;
+}
+@media screen and (max-width: 768px) {
+ .headimg-div .headimg-a {
+ height: 250px;
+ }
+}
+@media screen and (max-width: 500px) {
+ .headimg-div .headimg-a {
+ height: 220px;
+ }
+}
+@media screen and (max-width: 425px) {
+ .headimg-div .headimg-a {
+ height: 190px;
+ }
+}
+.headimg-div .headimg {
+ -o-object-fit: cover;
+ object-fit: cover;
+ width: 100%;
+ height: 100%;
+ transition: transform 3s ease-out;
+}
+.headimg-div .headimg:hover {
+ transform: scale(1.1);
+}
+.headimg-div .headimg.lazyload:not(.placeholder) {
+ transition: transform 3s ease-out, opacity 0.5s ease-out;
+}
+.headimg-div .headimg.lazyload:not(.placeholder):not(.loaded) {
+ opacity: 0;
+}
+.headimg-div .headimg.lazyload:not(.placeholder).loaded {
+ opacity: 1;
+}
+#u-search {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ padding: 60px 20px;
+ z-index: 1001;
+}
+@media screen and (max-width: 680px) {
+ #u-search {
+ padding: 0px;
+ }
+}
+#u-search .modal {
+ position: fixed;
+ height: 80%;
+ width: 100%;
+ max-width: 640px;
+ left: 50%;
+ top: 0;
+ margin: 64px 0px 0px -320px;
+ background: var(--color-card);
+ z-index: 3;
+ border-radius: 4px;
+ overflow: hidden;
+}
+@media screen and (max-width: 680px) {
+ #u-search .modal {
+ box-shadow: none;
+ max-width: none;
+ top: 0;
+ left: 0;
+ margin: 0;
+ height: 100%;
+ border-radius: 0;
+ }
+}
+#u-search .modal-ajax-content {
+ opacity: 0;
+ visibility: hidden;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+#u-search .modal-ajax-content.loaded {
+ opacity: 1;
+ visibility: visible;
+}
+#u-search .modal-header {
+ position: relative;
+ width: 100%;
+ height: 64px;
+ z-index: 3;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ font-size: $fontsize;
+ box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);
+ background: #fff;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+@media screen and (max-width: 680px) {
+ #u-search .modal-header {
+ border-radius: 0;
+ padding: 0px;
+ }
+}
+#u-search .modal-header .btn-close {
+ display: block;
+ position: absolute;
+ width: 55px;
+ height: 64px;
+ top: 0;
+ right: 0;
+ color: #44d7b6;
+ cursor: pointer;
+ text-align: center;
+ line-height: 64px;
+ vertical-align: middle;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ z-index: 2;
+}
+#u-search .modal-header .btn-close:hover {
+ transform: rotate(90deg);
+}
+#u-search .modal-header .modal-loading {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 2px;
+ background: transparent;
+ z-index: 1;
+}
+#u-search .modal-header .modal-loading .modal-loading-bar {
+ display: block;
+ position: relative;
+ width: 0%;
+ height: 100%;
+ background: #44d7b6;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+#u-search .modal-header #u-search-modal-form {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+}
+#u-search .modal-header #u-search-modal-form input {
+ color: var(--color-text);
+}
+#u-search .modal-header #u-search-modal-form #u-search-modal-input {
+ margin: 16px 50px;
+ padding: 0 8px;
+ width: calc(100% - 100px - 16px);
+ line-height: 2rem;
+ border-radius: 4px;
+ vertical-align: middle;
+ border: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ box-shadow: none;
+ background: transparent;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+@media screen and (max-width: 680px) {
+ #u-search .modal-header #u-search-modal-form #u-search-modal-input {
+ padding: 0;
+ }
+}
+#u-search .modal-header #u-search-modal-form #u-search-modal-input:focus {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+#u-search .modal-header #u-search-modal-btn-submit {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding-left: 5px;
+ padding-top: 2px;
+ background: transparent;
+ border: none;
+ width: 50px;
+ height: 64px;
+ vertical-align: middle;
+ color: #44d7b6;
+ z-index: 2;
+}
+#u-search .modal-footer {
+ position: absolute;
+ display: none;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 50px;
+ padding: 0px 15px;
+ background: var(--color-card);
+}
+#u-search .modal-footer .logo {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ text-align: center;
+ z-index: 0;
+}
+#u-search .modal-footer .logo a {
+ display: inline-block;
+ height: 50px;
+}
+#u-search .modal-footer .logo.google img {
+ height: 24px;
+ margin-top: 13px;
+}
+#u-search .modal-footer .logo.baidu img {
+ height: 22px;
+ margin-top: 14px;
+}
+#u-search .modal-footer .logo img {
+ position: relative;
+ display: inline-block;
+ width: auto;
+ height: 18px;
+ margin-top: 16px;
+}
+#u-search .modal-footer .modal-error {
+ position: relative;
+ float: left;
+ vertical-align: middle;
+ line-height: 50px;
+ font-size: 13px;
+ z-index: 1;
+}
+#u-search .modal-footer .modal-metadata {
+ position: relative;
+ float: left;
+ vertical-align: middle;
+ line-height: 50px;
+ font-size: 13px;
+ z-index: 1;
+}
+#u-search .modal-footer .nav {
+ position: relative;
+ display: block;
+ float: right;
+ vertical-align: middle;
+ font-size: 0.875rem;
+ font-weight: bold;
+ line-height: 50px;
+ color: var(--color-meta);
+ cursor: pointer;
+ z-index: 1;
+}
+#u-search .modal-footer .nav:hover {
+ color: #ff5722;
+}
+#u-search .modal-footer .nav.btn-next {
+ margin-left: 16px;
+}
+#u-search .modal-footer .nav .icon {
+ font-size: 0.875rem;
+}
+#u-search .modal-body {
+ position: absolute;
+ padding: 16px;
+ width: 100%;
+ height: calc(100% - 64px);
+ top: 64px;
+ left: 0;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ background: var(--color-card);
+ border-radius: 4px;
+}
+#u-search .modal-body::-webkit-scrollbar {
+ height: 4px;
+ width: 4px;
+}
+#u-search .modal-body::-webkit-scrollbar-track-piece {
+ background: transparent;
+}
+#u-search .modal-body::-webkit-scrollbar-thumb {
+ background: #44d7b6;
+ cursor: pointer;
+ border-radius: 2px;
+}
+#u-search .modal-body::-webkit-scrollbar-thumb:hover {
+ background: #ff5722;
+}
+#u-search .modal-body .modal-results {
+ list-style: none;
+}
+#u-search .modal-body .modal-results .result {
+ position: relative;
+ display: block;
+ padding: 16px;
+ border-radius: 4px;
+}
+#u-search .modal-body .modal-results .result b[mark] {
+ color: #29bf9d;
+ text-decoration: underline;
+}
+#u-search .modal-body .modal-results .result:hover {
+ background: var(--color-site-bg);
+}
+#u-search .modal-body .modal-results .result:hover .title {
+ color: var(--color-list-hl);
+}
+#u-search .modal-body .modal-results .result .title {
+ display: inline-block;
+ max-width: 100%;
+ color: var(--color-list);
+ font-weight: bold;
+ padding: 1px;
+ margin-bottom: 2px;
+ white-space: normal;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 1.125rem;
+}
+#u-search .modal-body .modal-results .result .digest {
+ display: block;
+ white-space: inherit;
+ overflow: hidden;
+ word-break: break-all;
+ text-overflow: ellipsis;
+ font-size: 0.8125rem;
+ color: var(--color-meta);
+}
+#u-search .modal-body .modal-results .result .icon {
+ position: absolute;
+ top: 50%;
+ right: 0;
+ margin-top: -4px;
+ font-size: 11px;
+ color: var(--color-meta);
+}
+#u-search .modal-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0,0,0,0.7);
+ z-index: 1;
+}
+.l_side {
+ width: 240px;
+ float: right;
+ position: relative;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+}
+@media screen and (max-width: 768px) {
+ .l_side {
+ width: 100%;
+ }
+}
+.l_side .widget {
+ overflow: hidden;
+}
+.l_side .widget.sticky {
+ position: -webkit-sticky;
+ position: sticky;
+ top: 80px;
+ z-index: 1;
+}
+.l_side .widget >.content {
+ max-height: 200vh;
+ overflow: auto;
+ text-align: justify;
+ font-size: 0.875rem;
+ max-width: 100%;
+}
+@media screen and (max-width: 768px) {
+ .l_side .widget >.content {
+ max-height: none;
+ }
+}
+.l_side .widget >.content::-webkit-scrollbar {
+ height: 4px;
+ width: 4px;
+}
+.l_side .widget >.content::-webkit-scrollbar-track-piece {
+ background: transparent;
+}
+.l_side .widget >.content::-webkit-scrollbar-thumb {
+ background: #44d7b6;
+ cursor: pointer;
+ border-radius: 2px;
+}
+.l_side .widget >.content::-webkit-scrollbar-thumb:hover {
+ background: #ff5722;
+}
+.widget {
+ z-index: 0;
+ background: var(--color-card);
+ margin-bottom: 16px;
+ border-radius: 8px;
+ width: 100%;
+ display: none;
+}
+.widget ul li,
+.widget ol li {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.widget.desktop {
+ display: block;
+}
+@media screen and (max-width: 768px) {
+ .widget {
+ display: none !important;
+ }
+ .widget.mobile {
+ display: block !important;
+ }
+}
+.widget header {
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ padding: calc(16px - 2px);
+ font-weight: bold;
+ font-size: 0.875rem;
+ padding-bottom: 0;
+}
+.widget header,
+.widget header a {
+ color: var(--color-meta);
+}
+.widget header >a:hover {
+ color: #ff5722;
+}
+.widget header span.name {
+ margin-left: 8px;
+}
+.widget >.content {
+ padding: 8px 0;
+}
+.widget >.content p {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.widget >.content p:first-child {
+ margin-top: 0.5em;
+}
+.widget >.content ul>li a {
+ color: var(--color-meta);
+ padding: 0 16px;
+ padding-left: 12px;
+ line-height: 2;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -ms-flex-line-pack: center;
+ align-content: center;
+ border-left: 2px solid transparent;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.widget >.content ul.entry,
+.widget >.content ul.popular-posts {
+ list-style: none;
+}
+.widget >.content ul.entry a,
+.widget >.content ul.popular-posts a {
+ color: var(--color-list);
+}
+.widget >.content ul.entry a .name,
+.widget >.content ul.popular-posts a .name {
+ -ms-flex: auto;
+ flex: auto;
+}
+.widget >.content ul.entry a .badge,
+.widget >.content ul.popular-posts a .badge {
+ -ms-flex: none;
+ flex: none;
+ font-weight: normal;
+ font-size: 0.875rem;
+ color: rgba(68,68,68,0.7);
+}
+.widget >.content ul.entry a.active,
+.widget >.content ul.popular-posts a.active {
+ border-left: 2px solid #44d7b6;
+ color: var(--color-list-hl);
+}
+.widget >.content ul.entry a.active .badge,
+.widget >.content ul.popular-posts a.active .badge {
+ color: rgba(68,215,182,0.9);
+}
+.widget >.content ul.entry a.child,
+.widget >.content ul.popular-posts a.child {
+ padding-left: 32px;
+}
+.widget >.content ul.entry a:hover,
+.widget >.content ul.popular-posts a:hover {
+ border-left: 2px solid #44d7b6;
+ color: var(--color-list-hl);
+ background: var(--color-site-bg);
+}
+.widget.blogger {
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.widget.blogger .content {
+ padding: 0;
+ text-align: center;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: stretch;
+ align-items: stretch;
+}
+.widget.blogger .content >.avatar {
+ -ms-flex-item-align: center;
+ align-self: center;
+ overflow: hidden;
+ position: relative;
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ line-height: 0;
+}
+.widget.blogger .content >.avatar.circle {
+ border-radius: 100%;
+ width: 128px;
+ height: 128px;
+ margin-top: 32px;
+ margin-bottom: 1em;
+}
+.widget.blogger .content >.avatar.circle img {
+ display: block;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+@media screen and (max-width: 768px) {
+ .widget.blogger .content >.avatar {
+ width: 80px;
+ height: 80px;
+ border-radius: 100%;
+ border: 2px solid #fff;
+ }
+ .widget.blogger .content >.avatar img {
+ display: block;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ position: absolute;
+ }
+}
+.widget.blogger .content .text :first-child {
+ margin-top: 16px;
+}
+.widget.blogger .content h2 {
+ font-weight: bold;
+ margin: 8px;
+}
+@media screen and (max-width: 768px) {
+ .widget.blogger .content h2 {
+ margin: 8px;
+ }
+}
+.widget.blogger .content p {
+ font-weight: bold;
+ margin: 8px 8px 0 8px;
+ empty-cells: hide;
+}
+.widget.blogger .content .social-wrapper {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin: 4px 4px;
+}
+.widget.blogger .content .social-wrapper a {
+ color: var(--color-meta);
+ padding: 0;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.widget.blogger .content .social-wrapper a:hover {
+ color: #ff5722;
+}
+.widget.blogger .content .social-wrapper a.social {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -ms-flex-align: center;
+ align-items: center;
+ width: 32px;
+ height: 32px;
+ margin: 4px;
+ border-radius: 100px;
+}
+.widget.blogger .content .social-wrapper a.social:hover {
+ background: #ecfbf7;
+ color: #44d7b6;
+}
+@media screen and (max-width: 768px) {
+ .widget.blogger .content .social-wrapper {
+ -ms-flex-pack: center;
+ justify-content: center;
+ display: none;
+ }
+}
+@media screen and (max-width: 768px) {
+ .widget.blogger {
+ box-shadow: none;
+ background: transparent !important;
+ margin-top: 32px;
+ -webkit-backdrop-filter: none;
+ backdrop-filter: none;
+ color: var(--color-site-inner);
+ }
+}
+.widget.text .content {
+ padding: 4px 16px;
+}
+.widget.text .content,
+.widget.text .content p {
+ font-size: 0.875rem;
+ word-break: break-all;
+}
+.widget.text .content a {
+ color: #2196f3;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.widget.text .content a:hover {
+ color: #ff5722;
+}
+.widget.text .content a:active {
+ color: #d93400;
+}
+.widget.list .content {
+ padding: 8px 0;
+}
+.widget.list .content a {
+ font-size: 0.875rem;
+ font-weight: bold;
+ line-height: 1.5;
+ padding-top: 6px;
+ padding-bottom: 6px;
+}
+.widget.list .content a img,
+.widget.list .content a i {
+ margin-right: 4px;
+}
+.widget.list .content a i {
+ margin-left: 1px;
+}
+.widget.list .content a img {
+ vertical-align: middle;
+ height: 20px;
+ width: 20px;
+ margin-bottom: 4px;
+}
+.widget.list .content a img#round {
+ border-radius: 100%;
+}
+.widget.grid .content .grid {
+ border: none;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ padding: 4px 16px;
+}
+.widget.grid .content .grid a {
+ text-align: center;
+ border-radius: 2px;
+ margin: 0;
+ padding: 4px 8px;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-align: center;
+ align-items: center;
+ font-size: 0.78125rem;
+ font-weight: bold;
+ color: rgba(68,68,68,0.7);
+ line-height: 1.5;
+ word-wrap: break-word;
+}
+.widget.grid .content .grid a i {
+ margin-top: 0.3em;
+ margin-bottom: 0.3em;
+ font-size: 1.8em;
+}
+.widget.grid .content .grid a img {
+ display: inline;
+ vertical-align: middle;
+ margin-bottom: 4px;
+}
+.widget.grid .content .grid a img#round {
+ border-radius: 100%;
+}
+.widget.grid .content .grid a.active {
+ color: var(--color-list-hl);
+ background: var(--color-site-bg);
+}
+.widget.grid .content .grid a:hover {
+ color: var(--color-list-hl);
+ background: var(--color-site-bg);
+ border-radius: 2px;
+}
+.widget.grid .content .grid.fixed a {
+ width: calc(100%/3 - 0 * 16px);
+}
+@media screen and (max-width: 768px) {
+ .widget.grid .content .grid.fixed a {
+ width: calc(100%/6 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 500px) {
+ .widget.grid .content .grid.fixed a {
+ width: calc(100%/5 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 425px) {
+ .widget.grid .content .grid.fixed a {
+ width: calc(100%/4 - 0 * 16px);
+ }
+}
+@media screen and (max-width: 375px) {
+ .widget.grid .content .grid.fixed a {
+ width: calc(100%/3 - 0 * 16px);
+ }
+}
+.widget.tagcloud .content {
+ text-align: justify;
+ padding: 8px 16px;
+}
+.widget.tagcloud .content a {
+ display: inline-block;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ line-height: 1.2em;
+ margin: 4px 0;
+ border-bottom: 1px solid transparent;
+}
+.widget.tagcloud .content a:hover {
+ color: #ff5722 !important;
+ border-bottom: 1px solid #ff5722;
+}
+.widget.related_posts .content {
+ font-weight: bold;
+}
+.widget.related_posts .content ul {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.widget.related_posts .content h3 {
+ font-size: 0.875rem;
+ font-weight: bold;
+ margin: 0;
+}
+.widget.related_posts .content h3 a {
+ line-height: inherit;
+ padding-top: 4px;
+ padding-bottom: 4px;
+}
+.widget.qrcode .content {
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-align: center;
+ align-items: center;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
+ padding-left: 16px;
+ padding-right: 16px;
+}
+.widget.qrcode .content,
+.widget.qrcode .content img {
+ margin-bottom: 4px;
+}
+.l_side>.widget.page >.content {
+ padding-top: 0;
+ padding-left: 12px;
+ padding-right: 12px;
+}
+.webinfo {
+ padding: 0.2rem 1rem;
+}
+.webinfo .webinfo-item {
+ display: block;
+ padding: 4px 0 0;
+}
+.webinfo .webinfo-item div:first-child {
+ display: inline-block;
+}
+.webinfo .webinfo-item div:last-child {
+ display: inline-block;
+ float: right;
+}
+.snackbar-wrap {
+ position: fixed;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ background: #44d7b6;
+ padding: 16px;
+ z-index: 2;
+}
+.snackbar-content {
+ max-width: 1080px;
+ margin: 16px auto;
+}
+@media screen and (max-width: 1080px) {
+ .snackbar-content {
+ max-width: 100%;
+ }
+}
+.snackbar-content p {
+ margin-top: 0.5rem;
+ margin-bottom: 0.5rem;
+ color: #fff;
+}
+.snackbar-content .title {
+ font-size: 1.5rem;
+ font-weight: 600;
+}
+.snackbar-content .action {
+ display: block;
+ margin: 1.5rem -4px;
+}
+.snackbar-content .action a {
+ margin: 4px;
+ color: #fff;
+ display: inline-block;
+ padding: 0.8em 2em;
+ font-weight: 600;
+ border-radius: 2px;
+ border: 1px solid #fff;
+}
+.snackbar-content .action a:hover {
+ color: #44d7b6;
+ background: #fff;
+}
+.snackbar-wrap[theme='warning'] {
+ background: #f7e751;
+}
+.snackbar-wrap[theme='warning'] .snackbar-content p {
+ color: #000;
+}
+.snackbar-wrap[theme='warning'] .snackbar-content a {
+ color: #000;
+ border-color: #000;
+}
+.snackbar-wrap[theme='warning'] .snackbar-content a:hover {
+ color: #f7e751;
+ background: #000;
+}
+.l_side .toc-wrapper {
+ z-index: 1;
+ overflow: hidden;
+ border-radius: 8px;
+ position: -webkit-sticky;
+ position: sticky;
+ top: 80px;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+ line-height: 1.6;
+ transition: all 0.28s ease;
+ -moz-transition: all 0.28s ease;
+ -webkit-transition: all 0.28s ease;
+ -o-transition: all 0.28s ease;
+}
+.l_side .toc-wrapper header {
+ position: -webkit-sticky;
+ position: sticky;
+ width: 100%;
+ top: 0;
+ padding-bottom: 4px;
+}
+.l_side .toc-wrapper .content {
+ max-height: calc(100vh - 144px);
+}
+.l_side .toc-wrapper .content a {
+ border-left: 2px solid transparent;
+}
+.l_side .toc-wrapper .content a.active {
+ color: var(--color-list-hl);
+ border-left: 2px solid #44d7b6;
+}
+.l_side .toc-wrapper .content a:hover {
+ color: var(--color-list-hl);
+ background: var(--color-site-bg);
+ border-left: 2px solid #44d7b6;
+}
+@media screen and (max-width: 768px) {
+ .l_side .toc-wrapper {
+ z-index: 1001;
+ position: fixed;
+ max-height: 1000px;
+ width: auto;
+ max-width: calc(100% - 2 * 16px);
+ top: 48px;
+ right: 16px;
+ border-radius: 4px;
+ box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);
+ border: 1px solid #e7e7e7;
+ visibility: hidden;
+ transform: scale(0, 0);
+ transform-origin: right top;
+ }
+ .l_side .toc-wrapper.active {
+ visibility: visible;
+ transform: scale(1, 1);
+ }
+}
+@media screen and (max-width: 375px) {
+ .l_side .toc-wrapper {
+ right: 0;
+ }
+}
+.l_side .toc-wrapper a {
+ padding-left: 8px;
+ color: var(--color-meta);
+ font-size: 0.875rem;
+ display: inline-block;
+}
+.l_side .toc-wrapper ul .toc-child a,
+.l_side .toc-wrapper ol .toc-child a {
+ font-weight: normal;
+}
+.l_side .toc-wrapper ul .toc-item.toc-level-1 .toc-child a,
+.l_side .toc-wrapper ol .toc-item.toc-level-1 .toc-child a {
+ padding-left: 12.8px;
+}
+.l_side .toc-wrapper ul .toc-item.toc-level-2 .toc-child a,
+.l_side .toc-wrapper ol .toc-item.toc-level-2 .toc-child a {
+ padding-left: 25.6px;
+}
+.l_side .toc-wrapper ul .toc-item.toc-level-3 .toc-child a,
+.l_side .toc-wrapper ol .toc-item.toc-level-3 .toc-child a {
+ padding-left: 38.4px;
+}
+.l_side .toc-wrapper ul .toc-item.toc-level-4 .toc-child a,
+.l_side .toc-wrapper ol .toc-item.toc-level-4 .toc-child a {
+ padding-left: 51.2px;
+}
+.l_side .toc-wrapper ul .toc-item.toc-level-5 .toc-child a,
+.l_side .toc-wrapper ol .toc-item.toc-level-5 .toc-child a {
+ padding-left: 64px;
+}
+.l_side .toc-wrapper ul .toc-item.toc-level-6 .toc-child a,
+.l_side .toc-wrapper ol .toc-item.toc-level-6 .toc-child a {
+ padding-left: 76.8px;
+}
+.l_side .toc-wrapper ul li,
+.l_side .toc-wrapper ol li {
+ width: auto;
+ text-align: left;
+}
+.l_side .toc-wrapper ul li a,
+.l_side .toc-wrapper ol li a {
+ padding: 0 8px 0 11px;
+ font-weight: bold;
+ width: 100%;
+}
+.l_side .toc-wrapper:empty {
+ display: none;
+}
+.l_side .toc-wrapper .toc-child {
+ font-size: 1rem;
+ overflow: hidden;
+ transition: max-height 0.6s ease-in;
+ max-height: 0;
+}
+.l_side .toc-wrapper .toc-item.active>.toc-link {
+ color: var(--color-list-hl);
+ border-left: 2px solid #44d7b6;
+}
+.l_side .toc-wrapper .toc-item.active>.toc-child {
+ max-height: 1000px;
+}
+.md .video-wrap {
+ margin: 1.5rem auto;
+}
diff --git a/examples/index.html b/examples/index.html
new file mode 100644
index 000000000..78a2be443
--- /dev/null
+++ b/examples/index.html
@@ -0,0 +1,2052 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 示例博客 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+示
+例
+博
+客
+
+
+
+团队成员的博客
+
+
+
+
+
+
+
+
+
+
+
+
+如何添加自己的博客链接
+
{ "title" : "" , "description" : "" , "screenshot" : "" , "url" : "" , "avatar" : "" , "version" : "版本:^4.0" }
为了提高图片加载速度,建议优化图片尺寸:
打开 压缩图 上传自己的截图,将图片的高度调整到 360px
后下载。 将压缩后的图片上传到 去不图床 并使用此图片链接作为截图链接。
+
+
+
+
+如何更新自己的博客链接
+
+
+如果是自己创建的 issue ,可以自己修改。
+如果是管理员创建的,请自己重新创建一份,然后让管理员删掉旧的。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/faqs/index.html b/faqs/index.html
new file mode 100644
index 000000000..193237674
--- /dev/null
+++ b/faqs/index.html
@@ -0,0 +1,2032 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 常见问题 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 通常来说,一个全新的工程全部使用默认配置是正常 没有故障的。如果无法使用或者效果与示例有较大区别,可以使用 Hexo 官方提供的用于单元测试的博客应用本主题查看样式是否正常,对比 _config.yml
文件排查问题。
+
+
+ 向开发者反馈问题
+
+
+如何更新主题 使用主题的时候,尽量 fork 主题到自己的 GitHub,然后进行修改并使用。这样做的好处是:当主题进行重要更新的时候可以根据需要拉取合并代码,使自己 DIY 的主题能够通过更新获取 BUG 修复或者新特性。
+如果不懂请自行搜索关键词:fork 更新
+实用小技巧
所有需要写在主题配置文件中的配置都可以写在站点配置文件的 theme_config:
中,在 Hexo 5.0 后,还可以写在 _config.volantis.yml
文件中,详见 Hexo 官方文档:
也可以直接查看本站源码中站点配置文件的写法:_config.volantis.yml
+
+无法成功运行本地预览
+可能是没有安装依赖,请按照「开始」页面中的步骤进行安装,并安装所需依赖。
+如果开启了某些第三方服务,请查看文档中是否要求安装插件。
+如果报错信息有 lastIndex
,你可以尝试把博客根目录配置文件中找到 highlight
,并将 auto_detect
设置为 false
。
+
+主题配置修改没有生效 请确认文档中要求修改的是博客主目录的配置文件 blog/_config.yml
还是主题的配置文件 blog/_config.volantis.yml
。
+主题样式修改没有生效 如果主题配置文件中开启了 cdn 服务,那么修改本地的样式是不会生效的,需要关闭 cdn 服务。
+修改什么都没有生效 需要 hexo clean
然后重新 hexo s
+如果安装了「相关文章推荐」插件后,每次修改 md 文件后都需要重新 hexo s
+关掉 CDN 之后样式错乱
+请前往文档「开始」页面,检查是否安装了必要的依赖包。
+
+搜索无法使用
+请前往文档「开始」页面,检查是否安装了必要的依赖包。
+检查根目录配置文件是否有 search
字段冲突。
+如果以上两步都无法找到问题,请下载示例源码进行对比。
+
+搜索结果链接不正确 请检查根目录配置文件中的链接是否正确,如:
+blog/_config.yml url: https://xaoxuu.com root: /
+
+
+ 教程与指南
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/getting-started/index.html b/getting-started/index.html
new file mode 100644
index 000000000..e033302a5
--- /dev/null
+++ b/getting-started/index.html
@@ -0,0 +1,2240 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 一个功能丰富、高度模块化的 Hexo 博客主题。支持多人协作、wiki文档等复杂系统,支持大量的标签插件。 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Volantis
+A Wonderful Theme for Hexo
+
+
+
+Volantis 是一个功能丰富、高度模块化的 Hexo 博客主题。得益于其强大的模块化特性,您可以轻松搭建一个极简风格的博客,也可以仿照官网搭建一个多人协作的、包含文档模块的大体量综合型博客。
+
+
+所有的 Volantis 用户都可以按照格式自行创建 Issue 来将自己的博客添加到官网的示例博客页面中。
+准备工作 自建博客需要一定的相关知识,在开始前,请务必 确保您会使用 markdown 语法,掌握简单的 git 知识,最最重要的是,遇到困难知道该怎么寻求解决:
+
+翻阅和搜索文档
+搜索 issues 中是否有解决办法
+新建 issue 并按照要求进行操作,详尽地描述您遇到的问题
+
+
如果您没有使用过 Hexo 也不要着急,可以先通读一遍 Hexo 中文文档,要想使用地得心应手,最好参照团队提供的开源项目的源码进行搭建:
+
Demo 源码 | 官网源码
如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。
+
Hexo: 4.2 ~ 5. x hexo-cli: 3.1 ~ 4. x node.js: 12.16 ~ latest npm: 6.13 ~ latest
+
+
+快速体验 如果您已经具备环境配置条件,可以在终端中输入下面这行代码,稍等片刻即可尝鲜体验:
+git clone https://github.com/volantis-x/demo.git && cd demo && npm i && hexo s
+
+
+下载与安装 在 blog/_config.yml
文件中找到并修改:
+
+
在终端中输入:
npm i hexo-theme-volantis
+
+
如果您是 Mac 用户,可以使用脚本完成全部流程
+
+
在博客路径打开终端,下载安装并应用主题:
curl -s https://volantis.js.org/start | bash
这行命令将会自动检测并安装所需环境,初始化博客,然后下载安装并应用主题。 脚本详细使用方法:#hexo.sh
+
+ 在 blog/_config.yml
文件中找到并修改:
+
+
如果您已经升级到 Hexo 5.0.2
及以上,可以直接使用 npm
命令安装:
npm i hexo-theme-volantis
对于旧版本,需要下载主题源码到 themes/
文件夹:
git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis
如果您无法访问 GitHub 可以使用国内镜像源:
git clone https://e.coding.net/volantis/volantis/volantis.git themes/volantis
+
+
安装 Hexo 搜索的依赖包:
npm i hexo-generator-search hexo-generator-json-content
安装 Stylus 渲染器:
npm i hexo-renderer-stylus
+
+
+
+版本更新 请对照 更新日志 进行更新,下面是更新之后需要注意的事项:
+
+
4.0.0 的配置文件改动非常大,强烈建议不要在旧的配置文件上改。
原数据文件中的配置项不再支持,请在配置文件中进行设置。 主题配置文件进行了重新设计,需要「完全」重新配置一遍。 友链使用数据文件,并支持 issues 标签实现动态自助友链。 原 meta 自定义布局现在只支持文章内部的 top_meta 和 bottom_meta 。 文章列表页面布局现在只能在有限范围内进行自定义。 侧边栏组件现在只支持侧边栏位置;文章末尾有专用的组件。 如果安装了懒加载插件,需要卸载掉,使用主题内置的懒加载(和插件冲突)。 如果想要关闭评论,需要改为 comments: false
。 如果要隐藏文章顶部或者底部的 meta 标签,需设置 top_meta: false
或者 bottom_meta: false
。 如果需要同时隐藏标题和顶部的 meta 标签也可以把 title: xxx
改为 seo_title: xxx
。 多作者的信息使用数据文件进行定义,文章中只需要写 author: xxx
而不需要重复写作者的信息了。 现在只有 gallery 标签的图片支持放大。
+
+
+许可协议 本主题采用 MIT开源许可协议 ,永久无限制免费使用。
+MIT开源许可协议
被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。 被授权人可根据程式的需要修改授权条款为适当的内容。 在软件和软件的所有副本中都必须包含版权声明和许可声明。
+
+
+配置与使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 000000000..b1b18e9ca
--- /dev/null
+++ b/index.html
@@ -0,0 +1,2675 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
对官方文档标签文档的一个补充,以volantis主题标签调用为例,展示不同用法下的标签示例。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于发布 issue 的成本远远低于发布一次博客更新(即便是使用了持续集成),可以用 issue 来简化每个独立博客都必备的友链系统,也可以通过 issue 来快速发布动态资讯,弥补静态博客必须更新静态文件才能更新内容的缺点。此功能已经集成到了主题中,使用非常方便。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
给博客加上最新评论栏目。以 Volantis 主题为例,给侧边栏加上最新评论功能,实现整站调用。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
很多网站首页都会有图片轮播效果,给网站的首页加上图片轮播的效果,可以很好的起到广告的作用也可以起到推荐优秀内容的作用。来吧,下面是给 Volantis 主题加上首页图片轮播的效果。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本篇文章记录了我对 Volantis 主题做 Pjax 兼容的种种,大抵算是种记录吧~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。
+
+计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。
+当主题稳定后会提供英文文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:
+
+卸载 less
+npm uninstall hexo-renderer-less --save
+
+安装 stylus
+npm install hexo-renderer-stylus --save
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 / 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/js/aplayer.js b/js/aplayer.js
new file mode 100644
index 000000000..aa63bae86
--- /dev/null
+++ b/js/aplayer.js
@@ -0,0 +1,168 @@
+// 检查 Aplayer 对象状态
+function checkAPlayer() {
+ if (APlayerController.player == undefined) {
+ setAPlayerObject();
+ } else {
+ if (APlayerController.observer == undefined) {
+ setAPlayerObserver();
+ }
+ }
+}
+
+// 设置全局播放器所对应的 aplyer 对象
+function setAPlayerObject() {
+ if (APlayerController.id == undefined) return;
+ document.querySelectorAll('meting-js').forEach((item, index)=>{
+ if (item.meta.id == APlayerController.id) {
+ if (document.querySelectorAll('meting-js')[index].aplayer != undefined) {
+ APlayerController.player = document.querySelectorAll('meting-js')[index].aplayer;
+ setAPlayerObserver();
+ }
+ }
+ })
+}
+
+// 事件监听
+function setAPlayerObserver() {
+ try {
+ APlayerController.player.on('play', function (e) {
+ updateAPlayerControllerStatus();
+ });
+ APlayerController.player.on('pause', function (e) {
+ updateAPlayerControllerStatus();
+ });
+ APlayerController.player.on('volumechange', function (e) {
+ onUpdateAPlayerVolume();
+ });
+ APlayerController.player.on('loadstart', function (e) {
+ // 跳到下一曲时更新标题
+ updateTitle();
+ });
+
+ // 监听音量手势
+ APlayerController.volumeBarWrap = document.getElementsByClassName('nav volume')[0].children[0];
+ APlayerController.volumeBar = APlayerController.volumeBarWrap.children[0]
+ function updateAPlayerVolume(e) {
+ let percentage = ((e.clientX || e.changedTouches[0].clientX) - APlayerController.volumeBar.getBoundingClientRect().left) / APlayerController.volumeBar.clientWidth;
+ percentage = Math.max(percentage, 0);
+ percentage = Math.min(percentage, 1);
+ APlayerController.player.volume(percentage);
+ }
+ const thumbMove = (e) => {
+ updateAPlayerVolume(e);
+ };
+ const thumbUp = (e) => {
+ APlayerController.volumeBarWrap.classList.remove('aplayer-volume-bar-wrap-active');
+ document.removeEventListener('mouseup', thumbUp);
+ document.removeEventListener('mousemove', thumbMove);
+ updateAPlayerVolume(e);
+ };
+
+ APlayerController.volumeBarWrap.addEventListener('mousedown', () => {
+ APlayerController.volumeBarWrap.classList.add('aplayer-volume-bar-wrap-active');
+ document.addEventListener('mousemove', thumbMove);
+ document.addEventListener('mouseup', thumbUp);
+ });
+
+
+ // 设置完监听就立即更新一次
+ updateAPlayerControllerStatus();
+ onUpdateAPlayerVolume();
+ APlayerController.observer = true;
+ console.log('APlayerController ready!');
+
+ } catch (error) {
+ delete APlayerController.observer;
+ }
+}
+
+// 更新控制器状态
+function updateAPlayerControllerStatus() {
+ try {
+ if (APlayerController.player.audio.paused) {
+ document.getElementsByClassName('nav toggle')[0].children[0].classList.add("fa-play");
+ document.getElementsByClassName('nav toggle')[0].children[0].classList.remove("fa-pause");
+ } else {
+ document.getElementsByClassName('nav toggle')[0].children[0].classList.remove("fa-play");
+ document.getElementsByClassName('nav toggle')[0].children[0].classList.add("fa-pause");
+ }
+ } catch (error) {
+ console.log(error);
+ }
+}
+function onUpdateAPlayerVolume() {
+ try {
+ APlayerController.volumeBar.children[0].style.width = APlayerController.player.audio.volume * 100 + '%'
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+// 播放/暂停
+function aplayerToggle() {
+ checkAPlayer();
+ try {
+ APlayerController.player.toggle();
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+// 上一曲
+function aplayerBackward() {
+ checkAPlayer();
+ try {
+ APlayerController.player.skipBack();
+ APlayerController.player.play();
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+// 下一曲
+function aplayerForward() {
+ checkAPlayer();
+ try {
+ APlayerController.player.skipForward();
+ APlayerController.player.play();
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+// 调节音量
+function aplayerVolume(percent) {
+ checkAPlayer();
+ try {
+ APlayerController.player.volume(percent);
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+// 更新音乐标题
+function updateTitle() {
+ checkAPlayer();
+ try {
+ let index = APlayerController.player.list.index;
+ let obj = APlayerController.player.list.audios[index];
+ document.getElementsByClassName('nav music-title')[0].innerHTML = obj.title;
+ } catch (error) {
+ console.log(error);
+ }
+}
+
+(function ($) {
+ // 网速快
+ checkAPlayer();
+ // 网速一般
+ setTimeout(function(){
+ checkAPlayer();
+ }, 3000);
+ // 网速较慢
+ setTimeout(function(){
+ checkAPlayer();
+ }, 10000);
+
+
+})(jQuery);
diff --git a/js/app.js b/js/app.js
new file mode 100644
index 000000000..08c096103
--- /dev/null
+++ b/js/app.js
@@ -0,0 +1,364 @@
+/* eslint-disable */
+var customSearch;
+
+// 函数防抖 (只执行最后一次点击)
+var Debounce = (fn, t) =>{
+ let delay = t || 200;
+ let timer;
+ return function() {
+ let args = arguments;
+ if (timer) {
+ clearTimeout(timer);
+ }
+ timer = setTimeout(() =>{
+ timer = null;
+ fn.apply(this, args);
+ },
+ delay);
+ }
+};
+
+(function($) {
+
+ "use strict";
+ // 将jQuery对象缓存起来 永远不要让相同的选择器在你的代码里出现多次
+ // 在jQuery中最快的选择器是ID选择器,尽量使用ID代替Class 时间上大约相差100倍
+ // 在class前使用tag(标签名)
+ // 给选择器一个上下文
+ volantis.$bodyAnchor = $('#safearea'); // 页面主体
+ volantis.$topBtn = $('#s-top'); // 向上
+ volantis.$wrapper = $('#wrapper'); // 整个导航栏
+ volantis.$postsBtn = $('.menu .active'); // 一级导航上的当前激活的按钮
+ volantis.$titleBtn = $('h1.title', '#header-meta'); // 文章内标题
+ volantis.$coverAnchor = $('#l_cover .cover-wrapper');
+ volantis.$switcher = $('#l_header .switcher .s-search'); // 搜索按钮 移动端
+ volantis.$header = $('#l_header'); // 移动端导航栏
+ volantis.$tabs = $('.tabs');
+ volantis.$headerMenu = $('body .navigation');
+ volantis.$search = $('#l_header .m_search'); // 搜索框 桌面端
+ volantis.$mPhoneList = $('#l_header .m-phone .list-v'); // 手机端 子菜单
+ const isMobile = /mobile/i.test(window.navigator.userAgent);
+
+ // 校正页面定位(被导航栏挡住的区域)
+ var scrollCorrection = 80; // (header height = 64px) + (gap = 16px)
+ if (volantis.$header[0]) {
+ scrollCorrection = volantis.$header[0].clientHeight + 16;
+ }
+
+ // 尝试: 重设数据值
+ function restData() {
+ scrollCorrection = 80;
+ if (volantis.$header[0]) {
+ scrollCorrection = volantis.$header[0].clientHeight + 16;
+ }
+ }
+
+ // 校正页面定位(被导航栏挡住的区域)
+ function scrolltoElement(elem, correction = scrollCorrection) {
+ const $elem = elem.href ? $(decodeURI(elem.getAttribute('href'))) : $(elem);
+ window.scrollTo({
+ top: $elem.offset().top - correction,
+ behavior: "smooth"
+ });
+ }
+
+ // 设置滚动锚点
+ function setScrollAnchor() {
+ if (volantis.$postsBtn.length && volantis.$bodyAnchor) {
+ volantis.$postsBtn.click(e =>{
+ e.preventDefault();
+ e.stopPropagation();
+ if (volantis.$postsBtn.attr("href") != "/") // TODO: fix it
+ scrolltoElement(volantis.$bodyAnchor);
+ e.stopImmediatePropagation();
+ volantis.$postsBtn.unbind('click');
+ });
+ }
+ if (volantis.$titleBtn.length && volantis.$bodyAnchor) {
+ volantis.$titleBtn.click(e =>{
+ e.preventDefault();
+ e.stopPropagation();
+ scrolltoElement(volantis.$bodyAnchor);
+ e.stopImmediatePropagation();
+ volantis.$titleBtn.unbind('click');
+ });
+ }
+ if (volantis.$topBtn.length && volantis.$bodyAnchor) {
+ volantis.$topBtn.click(e =>{
+ e.preventDefault();
+ e.stopPropagation();
+ scrolltoElement(volantis.$bodyAnchor);
+ e.stopImmediatePropagation();
+ });
+ }
+
+ //==========================================
+ var showHeaderPoint = volantis.$bodyAnchor.offset().top-scrollCorrection;
+ var pos = document.body.scrollTop;
+ $(document, window).scroll(Debounce(() =>{
+ let scrollTop = $(window).scrollTop(); // 滚动条距离顶部的距离
+ const del = scrollTop - pos;
+ pos = scrollTop;
+ if (scrollTop > volantis.$bodyAnchor.offset().top) {
+ volantis.$topBtn.addClass('show');
+ if (del > 0) {
+ volantis.$topBtn.removeClass('hl');
+ } else {
+ volantis.$topBtn.addClass('hl');
+ }
+ } else {
+ volantis.$topBtn.removeClass('show').removeClass('hl');
+ }
+ console.log(scrollTop - showHeaderPoint)
+ if (scrollTop - showHeaderPoint > -1) {
+ volantis.$header.addClass('show');
+ } else {
+ volantis.$header.removeClass('show');
+ }
+ }));
+ //==========================================
+ }
+
+ // 设置导航栏
+ function setHeader() {
+ if (pdata.ispage) window.subData = {
+ title: pdata.postTitle,
+ tools: true
+ }
+ if (!window.subData) return;
+ volantis.$comment = $('#s-comment'); // 评论按钮 桌面端 移动端
+ volantis.$toc = $('#s-toc'); // 目录按钮 仅移动端
+ volantis.$commentTarget = $('#l_body article#comments'); // 评论区域
+ volantis.$wrapper.find('.nav-sub .title').text(window.subData.title); // 二级导航文章标题
+ // 决定一二级导航栏的切换
+ let pos = document.body.scrollTop;
+ $(document, window).scroll(Debounce(() =>{
+ const scrollTop = $(window).scrollTop();
+ const del = scrollTop - pos;
+ if (del >= 50 && scrollTop > 100) {
+ pos = scrollTop;
+ volantis.$wrapper.addClass('sub');
+ } else if (del <= -50) {
+ pos = scrollTop;
+ volantis.$wrapper.removeClass('sub'); // <---- 取消二级导航显示
+ }
+ }));
+
+ // bind events to every btn
+ if (volantis.$commentTarget.length) {
+ volantis.$comment.click(e =>{ // 评论按钮点击后 跳转到评论区域
+ e.preventDefault();
+ e.stopPropagation();
+ scrolltoElement(volantis.$commentTarget);
+ e.stopImmediatePropagation();
+ });
+ } else volantis.$comment.remove(); // 关闭了评论,则隐藏
+ volantis.$tocTarget = $('#l_body .toc-wrapper'); // 侧边栏的目录列表 PC
+ if (volantis.$tocTarget.length && volantis.$tocTarget.children().length) {
+ volantis.$toc.click((e) =>{
+ e.stopPropagation();
+ volantis.$tocTarget.toggleClass('active');
+ volantis.$toc.toggleClass('active');
+ });
+ $(document).click(function(e) {
+ e.stopPropagation();
+ volantis.$tocTarget.removeClass('active');
+ volantis.$toc.removeClass('active');
+ });
+ $(document, window).scroll(Debounce(() =>{
+ volantis.$tocTarget.removeClass('active');
+ volantis.$toc.removeClass('active');
+ },
+ 100));
+ } else volantis.$toc.remove();
+ }
+
+ // 设置导航栏菜单选中状态
+ function setHeaderMenuSelection() {
+ // 先把已经激活的取消激活
+ volantis.$headerMenu.find('li a.active').removeClass('active');
+ volantis.$headerMenu.find('div a.active').removeClass('active');
+ function setUnderline($item) {
+ if ($item && $item.length) {
+ $item.addClass('active').siblings().removeClass('active');
+ }
+ }
+ //set current active nav
+ var $active_link = null;
+ // replace '%' '/' '.'
+ var idname = location.pathname.replace(/\/|%|\./g, "");
+ if (idname.length == 0) {
+ idname = "home";
+ }
+ var page = idname.match(/page\d{0,}$/g);
+ if (page) {
+ page = page[0];
+ idname = idname.split(page)[0];
+ }
+ var index = idname.match(/index.html/);
+ if (index) {
+ index = index[0];
+ idname = idname.split(index)[0];
+ }
+ // 转义字符如 [, ], ~, #, @
+ idname = idname.replace(/(\[|\]|~|#|@)/g, "\\$1");
+ if (idname && volantis.$headerMenu) {
+ $active_link = $('#' + idname, volantis.$headerMenu);
+ setUnderline($active_link);
+ }
+ }
+
+ // 设置全局事件
+ function setGlobalHeaderMenuEvent() {
+ if (isMobile) {
+ // 手机端 点击展开子菜单
+ $('#l_header .m-phone li').click(function(e) {
+ e.stopPropagation();
+ $($(e.currentTarget).children('ul')).show();
+ });
+ } else {
+ // PC端 hover时展开子菜单,点击时隐藏子菜单
+ $('#wrapper .m-pc li > a[href]').parent().click(function(e) {
+ e.stopPropagation();
+ if (e.target.origin == e.target.baseURI) {
+ $('#wrapper .m-pc .list-v').hide();
+ }
+ });
+ }
+ setPageHeaderMenuEvent();
+ }
+
+ function setPageHeaderMenuEvent() {
+ if (!isMobile) return;
+ // 手机端 点击空白处隐藏子菜单
+ $(document).click(function(e) {
+ volantis.$mPhoneList.hide();
+ });
+ // 手机端 滚动时隐藏子菜单
+ $(window).scroll(Debounce(() =>{
+ volantis.$mPhoneList.hide();
+ }));
+ }
+ // 设置导航栏搜索框 fix √
+ function setHeaderSearch() {
+ if (volantis.$switcher.length === 0) return;
+ volantis.$switcher.click(function(e) {
+ e.stopPropagation();
+ volantis.$header.toggleClass('z_search-open'); // 激活移动端搜索框
+ volantis.$switcher.toggleClass('active'); // 搜索按钮
+ volantis.$search.find('input').focus();
+ });
+ $(document).click(function(e) {
+ volantis.$header.removeClass('z_search-open');
+ volantis.$switcher.removeClass('active');
+ });
+
+ volantis.$search.click(function(e) {
+ e.stopPropagation();
+ });
+ volantis.$header.ready(function() {
+ volantis.$header.bind('keydown',
+ function(event) {
+ if (event.keyCode == 9) {
+ return false;
+ } else {
+ var isie = (document.all) ? true: false;
+ var key;
+ var ev;
+ if (isie) { //IE浏览器
+ key = window.event.keyCode;
+ ev = window.event;
+ } else { //火狐浏览器
+ key = event.which;
+ ev = event;
+ }
+ if (key == 9) { //IE浏览器
+ if (isie) {
+ ev.keyCode = 0;
+ ev.returnValue = false;
+ } else { //火狐浏览器
+ ev.which = 0;
+ ev.preventDefault();
+ }
+ }
+ }
+ });
+ });
+ }
+
+ // 设置 tabs 标签
+ function setTabs() {
+ if (volantis.$tabs.length === 0) return;
+ let $navs = volantis.$tabs.find('.nav-tabs .tab');
+ for (var i = 0; i < $navs.length; i++) {
+ let $a = volantis.$tabs.find($navs[i].children[0]);
+ $a.addClass($a.attr("href"));
+ $a.removeAttr('href');
+ }
+ $('.tabs .nav-tabs').on('click', 'a', (e) =>{
+ e.preventDefault();
+ e.stopPropagation();
+ let $tab = $(e.target.parentElement.parentElement.parentElement);
+ $tab.find('.nav-tabs .active').removeClass('active');
+ $tab.find(e.target.parentElement).addClass('active');
+ $tab.find('.tab-content .active').removeClass('active');
+ $tab.find($(e.target).attr("class")).addClass('active');
+ return false;
+ });
+ }
+
+ $(function() {
+ setHeader();
+ setHeaderMenuSelection();
+ setGlobalHeaderMenuEvent();
+ setHeaderSearch();
+ setScrollAnchor();
+ setTabs();
+
+ // 全屏封面底部箭头
+ $('#scroll-down').on('click',function() {
+ scrolltoElement(volantis.$bodyAnchor);
+ });
+
+ try {
+ // addEventListener是先绑定先执行,此处的绑定后执行
+ document.addEventListener('pjax:complete',
+ function() {
+ $(function() {
+ restData();
+ setHeader();
+ setHeaderMenuSelection();
+ setPageHeaderMenuEvent();
+ setScrollAnchor();
+ setTabs();
+
+ // 处理点击事件 setHeaderSearch 没有重载,需要重新绑定单个事件
+ if (volantis.$switcher.length !== 0) {
+ $(document).click(function(e) {
+ volantis.$header.removeClass('z_search-open');
+ volantis.$switcher.removeClass('active');
+ });
+ }
+ });
+
+ },{passive: true});
+ } catch (error) {
+ // console.log(error);
+ }
+
+ });
+
+ /*锚点定位*/
+ if (window.location.hash) {
+ var checkExist = setInterval(function() {
+ if ($("#" + decodeURI(window.location.hash.split("#")[1]).replace(/\ /g, "-")).length) {
+ $('html, body').animate({
+ scrollTop: $("#" + decodeURI(window.location.hash.split("#")[1]).replace(/\ /g, "-")).offset().top - 40
+ },
+ 500);
+ clearInterval(checkExist);
+ }
+ },
+ 100);
+ }
+})(jQuery);
diff --git a/js/issues.js b/js/issues.js
new file mode 100644
index 000000000..121fc016f
--- /dev/null
+++ b/js/issues.js
@@ -0,0 +1,186 @@
+const IssuesAPI = {
+ requestIssuesAPI(url, callback, timeout) {
+ let retryTimes = 10;
+ function request() {
+ return new Promise((resolve, reject) => {
+ let status = 0; // 0 等待 1 完成 2 超时
+ let timer = setTimeout(() => {
+ if (status === 0) {
+ status = 2;
+ timer = null;
+ reject("请求超时");
+ if (retryTimes == 0) {
+ timeout();
+ }
+ }
+ }, 5000);
+ fetch(url).then(function(response) {
+ if (status !== 2) {
+ clearTimeout(timer);
+ resolve(response);
+ timer = null;
+ status = 1;
+ }
+ if(response.ok) {
+ return response.json();
+ }
+ throw new Error('Network response was not ok.');
+ }).then(function(data) {
+ retryTimes = 0;
+ callback(data);
+ }).catch(function(error) {
+ if (retryTimes > 0) {
+ retryTimes -= 1;
+ setTimeout(() => {
+ request();
+ }, 5000);
+ } else {
+ timeout();
+ }
+ });
+ });
+ }
+ request();
+ },
+ parseIssueStrToJson(str) {
+ let jsonStr = str.match(/```json[\s|\S]*```/);
+ if (jsonStr && jsonStr.length > 0) {
+ jsonStr = jsonStr[0];
+ }
+ if (jsonStr) {
+ jsonStr = jsonStr.split('```json')[1].split('```')[0];
+ if (jsonStr) {
+ return JSON.parse(jsonStr);
+ }
+ }
+ return undefined;
+ },
+ groupIssuesData(cfg, data) {
+ var groups = new Object();
+ if (data.length > 0) {
+ if (cfg.group != undefined) {
+ let arr = cfg.group.split(':');
+ if (arr.length > 1) {
+ let groupKey = arr[0];
+ let groupList = arr[1];
+ if (groupKey && groupList) {
+ groupList = groupList.split(',');
+ }
+ cfg.group = groupList;
+ for (i = 0; i < data.length; i++) {
+ let obj = this.parseIssueStrToJson(data[i].body);
+ if (obj && (groupKey in obj)) {
+ let tmp = obj[groupKey];
+ tmp = tmp.replace(', ', ',').split(',');
+ for (var j = 0; j < tmp.length; j++) {
+ if (groupList.includes(tmp[j])) {
+ let arr = groups[tmp[j]];
+ if (arr == undefined) {
+ arr = new Array();
+ }
+ arr.push(obj);
+ groups[tmp[j]] = arr;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ cfg.group = [''];
+ for (i = 0; i < data.length; i++) {
+ let obj = this.parseIssueStrToJson(data[i].body);
+ if (obj) {
+ let arr = groups[''];
+ if (arr == undefined) {
+ arr = new Array();
+ }
+ arr.push(obj);
+ groups[''] = arr;
+ }
+ }
+ }
+ }
+ return groups;
+ },
+ getIssuesAPIForSites(cfg) {
+ let el = $(cfg.el)[0];
+ $(el).append('');
+ this.requestIssuesAPI(cfg.api, function(data){
+ $(el).find('.loading').remove();
+ let dt = IssuesAPI.groupIssuesData(cfg, data);
+ let groupTitles = Object.keys(dt);
+ cfg.group.forEach((groupTitle, i) => {
+ let issues = dt[groupTitle];
+ if (issues && issues.length > 0) {
+ if (groupTitle.length > 0) {
+ $(el).append('' + groupTitle + ' ');
+ } else if (name == '' && groupTitles.length > 1) {
+ $(el).append('' + '未分组' + ' ');
+ }
+ $(el).append('
');
+ // layout items
+ for (j = 0; j < issues.length; j++) {
+ let issue = issues[j];
+ let imgTag = '';
+ if (issue.screenshot && issue.screenshot.length > 0) {
+ imgTag = '';
+ } else {
+ imgTag = '
';
+ }
+ let infoTag = '';
+ if (issue.avatar && issue.avatar.length > 0) {
+ infoTag += '
';
+ }
+ infoTag += '
' + issue.title + ' ' + issue.description + ' ';
+ let cardTag = "" + imgTag + infoTag + " ";
+ $(el).find('.site-card-group.' + i).append(cardTag);
+ }
+ }
+ });
+ }, function() {
+ $(el).find('.loading i').remove();
+ $(el).find('.loading p').text('加载失败,请稍后重试。');
+ });
+ },
+ getIssuesAPIForTimeline(cfg) {
+ let el = $(cfg.el)[0];
+ $(el).append('');
+ this.requestIssuesAPI(cfg.api, function(data){
+ $(el).find('.loading').remove();
+ if (data.length > 0) {
+ for (i = 0; i < data.length; i++) {
+ let a = ' ';
+ let meta = '';
+ let body = '';
+ let tag = '' + meta + body + '
';
+ $(el).append(tag);
+ }
+ }
+ }, function() {
+ $(el).find('.loading i').remove();
+ $(el).find('.loading p').text('加载失败,请稍后重试。');
+ });
+ },
+ request() {
+ let els = document.getElementsByClassName('issues-api');
+ for (var i = 0; i < els.length; i++) {
+ let el = els[i];
+ let api = el.getAttribute('api');
+ let group = el.getAttribute('group');
+ var cfg = new Object();
+ cfg.class = el.getAttribute('class');
+ cfg.el = el;
+ cfg.api = api;
+ cfg.group = group;
+ if (cfg.class.split(' ').includes('sites')) {
+ this.getIssuesAPIForSites(cfg);
+ } else if (cfg.class.split(' ').includes('timeline')) {
+ this.getIssuesAPIForTimeline(cfg);
+ }
+ }
+ }
+};
+IssuesAPI.request();
+document.addEventListener('pjax:complete', function () {
+ IssuesAPI.request();
+});
diff --git a/js/search.js b/js/search.js
new file mode 100644
index 000000000..68028e05e
--- /dev/null
+++ b/js/search.js
@@ -0,0 +1,795 @@
+/* eslint-disable */
+var SearchService = "";
+
+(function($) {
+ /**
+ * A super class of common logics for all search services
+ * @param options : (object)
+ */
+ SearchService = function(options) {
+ var self = this;
+
+ self.config = $.extend({
+ per_page: 10,
+ selectors: {
+ body: "body",
+ form: ".u-search-form",
+ input: ".u-search-input",
+ container: "#u-search",
+ modal: "#u-search .modal",
+ modal_body: "#u-search .modal-body",
+ modal_footer: "#u-search .modal-footer",
+ modal_overlay: "#u-search .modal-overlay",
+ modal_results: "#u-search .modal-results",
+ modal_metadata: "#u-search .modal-metadata",
+ modal_error: "#u-search .modal-error",
+ modal_loading_bar: "#u-search .modal-loading-bar",
+ modal_ajax_content: "#u-search .modal-ajax-content",
+ modal_logo: '#u-search .modal-footer .logo',
+ btn_close: "#u-search .btn-close",
+ btn_next: "#u-search .btn-next",
+ btn_prev: "#u-search .btn-prev"
+ },
+ brands: {
+ 'hexo': {logo: '', url: ''},
+ 'google': {logo: 'google.svg', url: 'https://cse.google.com'},
+ 'algolia': {logo: 'algolia.svg', url: 'https://www.algolia.com'},
+ 'baidu': {logo: 'baidu.svg', url: 'http://zn.baidu.com/cse/home/index'},
+ 'azure': {logo: 'azure.svg', url: 'https://azure.microsoft.com/en-us/services/search/'}
+ },
+ imagePath: "https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@master/img/"
+ }, options);
+
+ self.dom = {};
+ self.percentLoaded = 0;
+ self.open = false;
+ self.queryText = "";
+ self.nav = {
+ next: -1,
+ prev: -1,
+ total: 0,
+ current: 1
+ };
+
+ self.parseSelectors = function() {
+ for (var key in self.config.selectors) {
+ self.dom[key] = $(self.config.selectors[key]);
+ }
+ };
+
+ self.beforeQuery = function() {
+ if (!self.open) {
+ self.dom.container.fadeIn();
+ // self.dom.body.addClass('modal-active');
+ // 上面的是去除了文章的滚动条,我觉得没必要
+ }
+ self.dom.input.each(function(index,elem) {
+ $(elem).val(self.queryText);
+ });
+ document.activeElement.blur();
+ self.dom.modal_error.hide();
+ self.dom.modal_ajax_content.removeClass('loaded');
+ self.startLoading();
+ };
+
+ self.afterQuery = function() {
+ self.dom.modal_body.scrollTop(0);
+ self.dom.modal_ajax_content.addClass('loaded');
+ self.stopLoading();
+ };
+
+ /**
+ * Perform a complete serach operation including UI updates and query
+ * @param startIndex {int} start index or page number
+ */
+ self.search = function(startIndex, callback) {
+ self.beforeQuery();
+ if (self.search instanceof Function) {
+ self.query(self.queryText, startIndex, function() {
+ self.afterQuery();
+ });
+ }
+ else {
+ console.log("query() does not exist.");
+ self.onQueryError(self.queryText, '');
+ self.afterQuery();
+ }
+ };
+
+ /**
+ * Query error handler
+ * @param queryText: (string)
+ * @param status: (string)
+ */
+ self.onQueryError = function(queryText, status) {
+ var errMsg = "";
+ if (status === "success") errMsg = "No result found for \"" +queryText+ "\".";
+ else if (status === "timeout") errMsg = "Unfortunate timeout.";
+ else errMsg = "Mysterious failure.";
+ self.dom.modal_results.html("");
+ self.dom.modal_error.html(errMsg);
+ self.dom.modal_error.show();
+ };
+
+ self.nextPage = function() {
+ if (self.nav.next !== -1) {
+ self.search(self.nav.next);
+ }
+ };
+
+ self.prevPage = function() {
+ if (self.nav.prev !== -1) {
+ self.search(self.nav.prev);
+ }
+ };
+
+ self.getUrlRelativePath = function (url) {
+ var arrUrl = url.split("//");
+ var start = arrUrl[1].indexOf("/");
+ var relUrl = arrUrl[1].substring(start);
+ if (relUrl.indexOf("?") != -1) {
+ relUrl = relUrl.split("?")[0];
+ }
+ return relUrl;
+ }
+
+ /**
+ * Generate html for one result
+ * @param url : (string) url
+ * @param title : (string) title
+ * @param digest : (string) digest
+ */
+ self.buildResult = function (url, title, digest) {
+ var result = self.getUrlRelativePath(url);
+ var html = "";
+ html = "";
+ html += "";
+ html += "" + title + " ";
+ if (digest !== "") html += "" + digest + " ";
+ html += " ";
+ html += " ";
+ return html;
+ };
+
+ /**
+ * Close the modal, resume body scrolling
+ * no param
+ */
+ self.close = function() {
+ self.open = false;
+ self.dom.container.fadeOut();
+ self.dom.body.removeClass('modal-active');
+ };
+
+ /**
+ * Searchform submit event handler
+ * @param queryText : (string) the query text
+ */
+ self.onSubmit = function(event) {
+ event.preventDefault();
+ self.queryText = $(this).find('.u-search-input').val();
+ if (self.queryText) {
+ self.search(1);
+ }
+ };
+
+ /**
+ * Start loading bar animation
+ * no param
+ */
+ self.startLoading = function() {
+ self.dom.modal_loading_bar.show();
+ self.loadingTimer = setInterval(function() {
+ self.percentLoaded = Math.min(self.percentLoaded+5,95);
+ self.dom.modal_loading_bar.css('width', self.percentLoaded+'%');
+ }, 100);
+ };
+
+ /**
+ * Stop loading bar animation
+ * no param
+ */
+ self.stopLoading = function() {
+ clearInterval(self.loadingTimer);
+ self.dom.modal_loading_bar.css('width', '100%');
+ self.dom.modal_loading_bar.fadeOut();
+ setTimeout(function() {
+ self.percentLoaded = 0;
+ self.dom.modal_loading_bar.css('width', '0%');
+ }, 300);
+ };
+
+ /**
+ * Add service branding
+ * @param service {String} service name
+ */
+ self.addLogo = function(service) {
+ var html = "";
+ if (self.config.brands[service] && self.config.brands[service].logo) {
+ html += "";
+ html += ' ';
+ html += " ";
+ self.dom.modal_logo.html(html);
+ }
+ };
+
+ self.destroy = function() {
+ self.dom.form.each(function(index,elem) {
+ $(elem).off('submit');
+ });
+ self.dom.modal_overlay.off('click');
+ self.dom.btn_close.off('click');
+ self.dom.btn_next.off('click');
+ self.dom.btn_prev.off('click');
+ self.dom.container.remove();
+ };
+
+ /**
+ * Load template and register event handlers
+ * no param
+ */
+ self.init = function() {
+ $('body').append(template);
+ self.parseSelectors();
+ self.dom.modal_footer.show();
+ self.dom.form.each(function(index,elem) {
+ $(elem).on('submit', self.onSubmit);
+ });
+ self.dom.modal_overlay.on('click', self.close);
+ self.dom.btn_close.on('click', self.close);
+ self.dom.btn_next.on('click', self.nextPage);
+ self.dom.btn_prev.on('click', self.prevPage);
+ };
+
+ self.init();
+ };
+
+ var template = '';
+})(jQuery);
+
+var AlgoliaSearch;
+(function($) {
+ 'use strict';
+
+ /**
+ * Search by Algolia Search
+ * @param options : (object)
+ */
+ AlgoliaSearch = function(options) {
+ SearchService.apply(this, arguments);
+ var self = this;
+ var endpoint = "https://" +self.config.appId+ "-dsn.algolia.net/1/indexes/" + self.config.indexName;
+ self.addLogo('algolia');
+
+ /**
+ * Generate result list html
+ * @param data : (array) result items
+ */
+ self.buildResultList = function(data) {
+ var html = "";
+ $.each(data, function(index, row) {
+ var url = row.permalink || row.path || "";
+ if (!row.permalink && row.path) {
+ url = ROOT + url;
+ }
+ var title = row.title;
+ var digest = "";
+ html += self.buildResult(url, title, digest, index+1);
+ });
+ html += "";
+ return html;
+ };
+
+ /**
+ * Generate metadata after a successful query
+ * @param data : (object) the raw search response data
+ */
+ self.buildMetadata = function(data) {
+ self.nav.current = data.page * data.hitsPerPage + 1;
+ self.nav.currentCount = data.hits.length;
+ self.nav.total = parseInt(data.nbHits);
+ self.dom.modal_metadata.children('.total').html(self.nav.total);
+ self.dom.modal_metadata.children('.range').html(self.nav.current + "-" + (self.nav.current+self.nav.currentCount-1));
+ if (self.nav.total > 0) {
+ self.dom.modal_metadata.show();
+ }
+ else {
+ self.dom.modal_metadata.hide();
+ }
+
+ if (data.page < data.nbPages-1) {
+ self.nav.next = (data.page+1)+1;
+ self.dom.btn_next.show();
+ }
+ else {
+ self.nav.next = -1;
+ self.dom.btn_next.hide();
+ }
+ if (data.page > 0) {
+ self.nav.prev = (data.page+1)-1;
+ self.dom.btn_prev.show();
+ }
+ else {
+ self.nav.prev = -1;
+ self.dom.btn_prev.hide();
+ }
+ };
+
+ /**
+ * Send a GET request
+ * @param queryText : (string) the query text
+ * @param page : (int) the current page (start from 1)
+ * @param callback : (function)
+ */
+ self.query = function(queryText, page, callback) {
+ $.get(endpoint, {
+ query: queryText,
+ page: page-1,
+ hitsPerPage: self.config.per_page,
+ "x-algolia-application-id": self.config.appId,
+ "x-algolia-api-key": self.config.apiKey
+ }, function(data, status) {
+ if (status === 'success' && data.hits && data.hits.length > 0) {
+ var results = self.buildResultList(data.hits);
+ self.dom.modal_results.html(results);
+ }
+ else {
+ self.onQueryError(queryText, status);
+ }
+ self.buildMetadata(data);
+ if (callback) {
+ callback(data);
+ }
+ });
+ };
+
+ return self;
+ };
+
+})(jQuery);
+
+var AzureSearch;
+(function($) {
+ 'use strict';
+
+ /**
+ * Search by Azure Search API
+ * @param options : (object)
+ */
+ AzureSearch = function(options) {
+ SearchService.apply(this, arguments);
+ var self = this;
+ var endpoint = "https://" +self.config.serviceName+ ".search.windows.net/indexes/" +self.config.indexName+ "/docs?api-version=2015-02-28";
+ self.nav.current = 1;
+ self.addLogo('azure');
+
+ /**
+ * Generate result list html
+ * @param data : (array) result items
+ */
+ self.buildResultList = function(data) {
+ var html = "";
+ $.each(data, function(index, row) {
+ var url = row.permalink || row.path || "";
+ if (!row.permalink && row.path) {
+ url = "/" + url;
+ }
+ var title = row.title;
+ var digest = row.excerpt || "";
+ html += self.buildResult(url, title, digest);
+ });
+ html += "";
+ return html;
+ };
+
+ /**
+ * Generate metadata after a successful query
+ * @param data : (object) the raw response data
+ * @param startIndex : (int) requested start index of current query
+ */
+ self.buildMetadata = function(data, startIndex) {
+ self.nav.current = startIndex;
+ self.nav.currentCount = data.value.length;
+ self.nav.total = parseInt(data['@odata.count']);
+ self.dom.modal_metadata.children('.total').html(self.nav.total);
+ self.dom.modal_metadata.children('.range').html(self.nav.current + "-" + (self.nav.current+self.nav.currentCount-1));
+ if (self.nav.total > 0) {
+ self.dom.modal_metadata.show();
+ }
+ else {
+ self.dom.modal_metadata.hide();
+ }
+
+ if (self.nav.current+self.nav.currentCount <= self.nav.total) {
+ self.nav.next = self.nav.current+self.nav.currentCount;
+ self.dom.btn_next.show();
+ }
+ else {
+ self.nav.next = -1;
+ self.dom.btn_next.hide();
+ }
+ if (self.nav.current > 1) {
+ self.nav.prev = self.nav.current-self.config.per_page;
+ self.dom.btn_prev.show();
+ }
+ else {
+ self.nav.prev = -1;
+ self.dom.btn_prev.hide();
+ }
+ };
+
+ /**
+ * Send a GET request
+ * @param queryText : (string) the query text
+ * @param page : (int) the current page (start from 1)
+ * @param callback : (function)
+ */
+ self.query = function(queryText, startIndex, callback) {
+ $.ajax({
+ url: endpoint,
+ headers: {
+ "Accept": "application/json",
+ "api-key": self.config.queryKey
+ },
+ data: {
+ search: queryText,
+ $orderby: "date desc",
+ $skip: startIndex-1,
+ $top: self.config.per_page,
+ $count: true
+ },
+ type: "GET",
+ success: function(data, status) {
+ if (status === 'success' && data.value && data.value.length > 0) {
+ var results = self.buildResultList(data.value);
+ self.dom.modal_results.html(results);
+ }
+ else {
+ self.onQueryError(queryText, status);
+ }
+ self.buildMetadata(data, startIndex);
+ if (callback) {
+ callback(data);
+ }
+ }
+ });
+ };
+
+ return self;
+ };
+
+})(jQuery);
+
+var BaiduSearch;
+(function($) {
+ 'use strict';
+
+ /**
+ * TODO
+ * Search by Baidu Search API
+ * @param options : (object)
+ */
+ BaiduSearch = function(options) {
+ SearchService.apply(this, arguments);
+ var self = this;
+ var endpoint = "";
+ self.addLogo('baidu');
+
+ /**
+ * Generate result list html
+ * @param data : (array) result items
+ */
+ self.buildResultList = function(data, queryText) {
+ var results = [],
+ html = "";
+ $.each(data, function(index, post) {
+ if (self.contentSearch(post, queryText))
+ html += self.buildResult(post.linkUrl, post.title, post.abstract);
+ });
+ html += "";
+ return html;
+ };
+
+ /**
+ * Generate metadata after a successful query
+ * @param data : (object) the raw google custom search response data
+ */
+ self.buildMetadata = function(data) {
+
+ };
+
+ self.loadScript = function() {
+ self.dom.input.each(function(index,elem) {
+ $(elem).attr('disabled', true);
+ });
+ var script = "";
+ self.dom.body.append(script);
+ };
+
+ self.initBaidu = function() {
+ self.cse = new BCse.Search(self.config.apiId);
+ //self.cse.setPageNum(self.config.per_page);
+ self.dom.input.each(function(index,elem) {
+ $(elem).attr('disabled', false);
+ });
+ };
+
+ /**
+ * Get search results
+ * @param queryText {String}
+ * @param page {Integer}
+ * @param callback {Function}
+ */
+ self.query = function(queryText, page, callback) {
+ self.cse.getResult(queryText, function(data) {
+ console.log("Searching: " + queryText);
+ self.cse.getError(function(data) {
+ console.log(data);
+ });
+ if (data.length > 0) {
+ self.buildResultList(data, queryText);
+ self.cse.getSearchInfo(queryText, function(data) {
+ console.log(data);
+ self.buildMetadata(data);
+ });
+ }
+ else {
+ self.nav.total = 0;
+ self.nav.next = -1;
+ self.nav.prev = -1;
+ self.dom.modal_metadata.hide();
+ self.dom.btn_next.hide();
+ self.dom.btn_prev.hide();
+ self.onQueryError(queryText, "success");
+ }
+ if (callback instanceof Function) {
+ callback();
+ }
+ });
+ };
+
+ self.loadScript();
+
+ return self;
+ };
+
+})(jQuery);
+
+var GoogleCustomSearch = "";
+(function($) {
+ 'use strict';
+
+ /**
+ * Search by Google Custom Search Engine JSON API
+ * @param options : (object)
+ */
+ GoogleCustomSearch = function(options) {
+ SearchService.apply(this, arguments);
+ var self = this;
+ var endpoint = "https://www.googleapis.com/customsearch/v1";
+ self.addLogo('google');
+
+ /**
+ * Generate result list html
+ * @param data : (array) result items
+ */
+ self.buildResultList = function(data) {
+ var html = "";
+ $.each(data, function(index, row) {
+ var url = row.link;
+ var title = row.title;
+ var digest = (row.htmlSnippet || "").replace(' ','');
+ html += self.buildResult(url, title, digest);
+ });
+ html += "";
+ return html;
+ };
+
+ /**
+ * Generate metadata after a successful query
+ * @param data : (object) the raw google custom search response data
+ */
+ self.buildMetadata = function(data) {
+ if (data.queries && data.queries.request && data.queries.request[0].totalResults !== '0') {
+ self.nav.current = data.queries.request[0].startIndex;
+ self.nav.currentCount = data.queries.request[0].count;
+ self.nav.total = parseInt(data.queries.request[0].totalResults);
+ self.dom.modal_metadata.children('.total').html(self.nav.total);
+ self.dom.modal_metadata.children('.range').html(self.nav.current + "-" + (self.nav.current+self.nav.currentCount-1));
+ self.dom.modal_metadata.show();
+ }
+ else {
+ self.dom.modal_metadata.hide();
+ }
+ if (data.queries && data.queries.nextPage) {
+ self.nav.next = data.queries.nextPage[0].startIndex;
+ self.dom.btn_next.show();
+ }
+ else {
+ self.nav.next = -1;
+ self.dom.btn_next.hide();
+ }
+ if (data.queries && data.queries.previousPage) {
+ self.nav.prev = data.queries.previousPage[0].startIndex;
+ self.dom.btn_prev.show();
+ }
+ else {
+ self.nav.prev = -1;
+ self.dom.btn_prev.hide();
+ }
+ };
+
+ /**
+ * Send a GET request
+ * @param queryText : (string) the query text
+ * @param startIndex : (int) the index of first item (start from 1)
+ * @param callback : (function)
+ */
+ self.query = function(queryText, startIndex, callback) {
+ $.get(endpoint, {
+ key: self.config.apiKey,
+ cx: self.config.engineId,
+ q: queryText,
+ start: startIndex,
+ num: self.config.per_page
+ }, function(data, status) {
+ if (status === 'success' && data.items && data.items.length > 0) {
+ var results = self.buildResultList(data.items);
+ self.dom.modal_results.html(results);
+ }
+ else {
+ self.onQueryError(queryText, status);
+ }
+ self.buildMetadata(data);
+ if (callback) {
+ callback();
+ }
+ });
+ };
+
+ return self;
+ };
+})(jQuery);
+
+var HexoSearch;
+(function($) {
+ 'use strict';
+
+ /**
+ * Search by Hexo generator json content
+ * @param options : (object)
+ */
+ HexoSearch = function(options) {
+ SearchService.apply(this, arguments);
+ var self = this;
+ self.config.endpoint = ROOT + ((options||{}).endpoint || "content.json");
+ self.config.endpoint = self.config.endpoint.replace("//","/"); //make sure the url is correct
+ self.cache = "";
+
+ /**
+ * Search queryText in title and content of a post
+ * Credit to: http://hahack.com/codes/local-search-engine-for-hexo/
+ * @param post : the post object
+ * @param queryText : the search query
+ */
+ self.contentSearch = function(post, queryText) {
+ var post_title = post.title.trim().toLowerCase(),
+ post_content = post.text.trim().toLowerCase(),
+ keywords = queryText.trim().toLowerCase().split(" "),
+ foundMatch = false,
+ index_title = -1,
+ index_content = -1,
+ first_occur = -1;
+ if (post_title !== '' && post_content !== '') {
+ $.each(keywords, function(index, word) {
+ index_title = post_title.indexOf(word);
+ index_content = post_content.indexOf(word);
+ if (index_title < 0 && index_content < 0) {
+ foundMatch = false;
+ }
+ else {
+ foundMatch = true;
+ if (index_content < 0) {
+ index_content = 0;
+ }
+ if (index === 0) {
+ first_occur = index_content;
+ }
+ }
+ if (foundMatch) {
+ post_content = post.text.trim();
+ var start = 0, end = 0;
+ if (first_occur >= 0) {
+ start = Math.max(first_occur-40, 0);
+ end = (start === 0) ? Math.min(200, post_content.length) : Math.min(first_occur + 120, post_content.length);
+ var match_content = post_content.substring(start, end);
+ keywords.forEach(function(keyword) {
+ var regS = new RegExp(keyword, "gi");
+ match_content = match_content.replace(regS, ""+keyword+" ");
+ });
+ post.digest = match_content + "......";
+ }
+ else {
+ end = Math.min(200, post_content.length);
+ post.digest = post_content.trim().substring(0, end);
+ }
+ }
+ });
+ }
+ return foundMatch;
+ };
+
+ /**
+ * Generate result list html
+ * @param data : (array) result items
+ */
+ self.buildResultList = function(data, queryText) {
+ var results = [],
+ html = "";
+ $.each(data, function (index, post) {
+ if (self.contentSearch(post, queryText))
+ html += self.buildResult(post.permalink, post.title, post.digest);
+ });
+ html += "";
+ return html;
+ };
+
+ /**
+ * Generate metadata after a successful query
+ * @param data : (object) the raw google custom search response data
+ */
+ self.buildMetadata = function(data) {
+ self.dom.modal_footer.hide();
+ };
+
+ /**
+ * Send a GET request
+ * @param queryText : (string) the query text
+ * @param startIndex : (int) the index of first item (start from 1)
+ * @param callback : (function)
+ */
+ self.query = function(queryText, startIndex, callback) {
+ if (!self.cache) {
+ $.get(self.config.endpoint, {
+ key: self.config.apiKey,
+ cx: self.config.engineId,
+ q: queryText,
+ start: startIndex,
+ num: self.config.per_page
+ }, function(data, status) {
+ if (status !== 'success' ||
+ !data ||
+ (!data.posts && !data.pages) ||
+ (data.posts.length < 1 && data.pages.length < 1)
+ ) {
+ self.onQueryError(queryText, status);
+ }
+ else {
+ self.cache = data;
+ var results = "";
+ results += self.buildResultList(data.pages, queryText);
+ results += self.buildResultList(data.posts, queryText);
+ self.dom.modal_results.html(results);
+ }
+ self.buildMetadata(data);
+ if (callback) {
+ callback(data);
+ }
+ });
+ }
+ else {
+ var results = "";
+ results += self.buildResultList(self.cache.pages, queryText);
+ results += self.buildResultList(self.cache.posts, queryText);
+ self.dom.modal_results.html(results);
+ self.buildMetadata(self.cache);
+ if (callback) {
+ callback(self.cache);
+ }
+ }
+ };
+
+ return self;
+ };
+
+})(jQuery);
\ No newline at end of file
diff --git a/js/valine.js b/js/valine.js
new file mode 100644
index 000000000..f757b66a2
--- /dev/null
+++ b/js/valine.js
@@ -0,0 +1,5265 @@
+/*!
+ * Valine v1.4.14
+ * (c) 2017-2020 xCss
+ * Released under the GPL-2.0 License.
+ * Last Update: 2020/4/26 下午8:39:08
+ */
+!function(e, t) {
+ "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.Valine = t() : e.Valine = t()
+}(this, function() {
+ return function(e) {
+ function t(r) {
+ if (n[r])
+ return n[r].exports;
+ var o = n[r] = {
+ i: r,
+ l: !1,
+ exports: {}
+ };
+ return e[r].call(o.exports, o, o.exports, t),
+ o.l = !0,
+ o.exports
+ }
+ var n = {};
+ return t.m = e,
+ t.c = n,
+ t.i = function(e) {
+ return e
+ }
+ ,
+ t.d = function(e, n, r) {
+ t.o(e, n) || Object.defineProperty(e, n, {
+ configurable: !1,
+ enumerable: !0,
+ get: r
+ })
+ }
+ ,
+ t.n = function(e) {
+ var n = e && e.__esModule ? function() {
+ return e.default
+ }
+ : function() {
+ return e
+ }
+ ;
+ return t.d(n, "a", n),
+ n
+ }
+ ,
+ t.o = function(e, t) {
+ return Object.prototype.hasOwnProperty.call(e, t)
+ }
+ ,
+ t.p = "",
+ t(t.s = 63)
+ }([function(e, t, n) {
+ "use strict";
+ function r(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }
+ t.__esModule = !0;
+ var o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
+ return typeof e
+ }
+ : function(e) {
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
+ }
+ , i = n(38)
+ , a = r(i)
+ , s = n(28)
+ , l = r(s)
+ , c = n(27)
+ , u = r(c)
+ , d = n(42)
+ , p = r(d)
+ , f = document
+ , h = navigator
+ , v = /[&<>"'`\\]/g
+ , g = RegExp(v.source)
+ , m = /&(?:amp|lt|gt|quot|#39|#x60|#x5c);/g
+ , y = RegExp(m.source)
+ , b = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ "`": "`",
+ "\\": "\"
+ }
+ , w = {};
+ for (var x in b)
+ w[b[x]] = x;
+ var k = null;
+ Array.prototype.forEach || (Array.prototype.forEach = function(e, t) {
+ var n, r;
+ if (null == this)
+ throw new TypeError(" this is null or not defined");
+ var o = Object(this)
+ , i = o.length >>> 0;
+ if ("function" != typeof e)
+ throw new TypeError(e + " is not a function");
+ for (arguments.length > 1 && (n = t),
+ r = 0; r < i; ) {
+ var a;
+ r in o && (a = o[r],
+ e.call(n, a, r, o)),
+ r++
+ }
+ }
+ ),
+ window.NodeList && !NodeList.prototype.forEach && (NodeList.prototype.forEach = Array.prototype.forEach),
+ String.prototype.trim || (String.prototype.trim = function() {
+ return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
+ }
+ ),
+ (0,
+ a.default)(l.default.fn, {
+ prepend: function(e) {
+ return e instanceof HTMLElement || (e = e[0]),
+ this.forEach(function(t) {
+ t.insertAdjacentElement("afterBegin", e)
+ }),
+ this
+ },
+ append: function(e) {
+ return e instanceof HTMLElement || (e = e[0]),
+ this.forEach(function(t) {
+ t.insertAdjacentElement("beforeEnd", e)
+ }),
+ this
+ },
+ remove: function() {
+ return this.forEach(function(e) {
+ try {
+ e.parentNode.removeChild(e)
+ } catch (e) {}
+ }),
+ this
+ },
+ find: function(e) {
+ return (0,
+ l.default)(e, this)
+ },
+ show: function() {
+ return this.forEach(function(e) {
+ e.style.display = "block"
+ }),
+ this
+ },
+ hide: function() {
+ return this.forEach(function(e) {
+ e.style.display = "none"
+ }),
+ this
+ },
+ on: function(e, t, n) {
+ return l.default.fn.off(e, t, n),
+ this.forEach(function(r) {
+ e.split(" ").forEach(function(e) {
+ r.addEventListener ? r.addEventListener(e, t, n || !1) : r.attachEvent ? r.attachEvent("on" + e, t) : r["on" + e] = t
+ })
+ }),
+ this
+ },
+ off: function(e, t, n) {
+ return this.forEach(function(r) {
+ e.split(" ").forEach(function(e) {
+ r.removeEventListener ? r.removeEventListener(e, t, n || !1) : r.detachEvent ? r.detachEvent("on" + e, t) : r["on" + e] = null
+ })
+ }),
+ this
+ },
+ html: function(e) {
+ return void 0 !== e ? (this.forEach(function(t) {
+ t.innerHTML = e
+ }),
+ this) : this[0].innerHTML
+ },
+ text: function(e) {
+ return void 0 !== e ? (this.forEach(function(t) {
+ t.innerText = e
+ }),
+ this) : this[0].innerText
+ },
+ empty: function(e) {
+ return e = e || 0,
+ this.forEach(function(t) {
+ setTimeout(function(e) {
+ t.innerText = ""
+ }, e)
+ }),
+ this
+ },
+ val: function(e) {
+ return void 0 !== e ? (this.forEach(function(t) {
+ t.value = e
+ }),
+ this) : this[0].value || ""
+ },
+ attr: function() {
+ var e = arguments;
+ if ("object" == o(arguments[0])) {
+ var t = arguments[0]
+ , n = this;
+ return Object.keys(t).forEach(function(e) {
+ n.forEach(function(n) {
+ n.setAttribute(e, t[e])
+ })
+ }),
+ this
+ }
+ return "string" == typeof arguments[0] && arguments.length < 2 ? this[0].getAttribute(arguments[0]) || "" : (this.forEach(function(t) {
+ t.setAttribute(e[0], e[1])
+ }),
+ this)
+ },
+ removeAttr: function(e) {
+ return this.forEach(function(t) {
+ var n, r = 0, o = e && e.match(/[^\x20\t\r\n\f\*\/\\]+/g);
+ if (o && 1 === t.nodeType)
+ for (; n = o[r++]; )
+ t.removeAttribute(n)
+ }),
+ this
+ },
+ hasClass: function(e) {
+ return !!this[0] && new RegExp("(\\s|^)" + e + "(\\s|$)").test(this[0].getAttribute("class"))
+ },
+ addClass: function(e) {
+ return this.forEach(function(t) {
+ var n = (0,
+ l.default)(t)
+ , r = n.attr("class");
+ n.hasClass(e) || n.attr("class", r += " " + e)
+ }),
+ this
+ },
+ removeClass: function(e) {
+ return this.forEach(function(t) {
+ var n = (0,
+ l.default)(t)
+ , r = n.attr("class");
+ if (n.hasClass(e)) {
+ var o = new RegExp("(\\s|^)" + e + "(\\s|$)");
+ n.attr("class", r.replace(o, ""))
+ }
+ }),
+ this
+ }
+ }),
+ (0,
+ a.default)(l.default, {
+ extend: a.default,
+ noop: function() {},
+ navi: h,
+ ua: h.userAgent,
+ lang: h.language || h.languages[0],
+ detect: u.default,
+ store: p.default,
+ escape: function(e) {
+ return e && g.test(e) ? e.replace(v, function(e) {
+ return b[e]
+ }) : e
+ },
+ unescape: function(e) {
+ return e && y.test(e) ? e.replace(m, function(e) {
+ return w[e]
+ }) : e
+ },
+ dynamicLoadSource: function(e, t) {
+ if ((0,
+ l.default)('script[src="' + e + '"]').length)
+ t && t();
+ else {
+ var n = f.createElement("script");
+ n.onload = n.onreadystatechange = function() {
+ var e = this;
+ e.onload = e.onreadystatechange = null,
+ t && t(),
+ (0,
+ l.default)(n).remove()
+ }
+ ,
+ n.async = !0,
+ n.setAttribute("referrerPolicy", "no-referrer");
+ (0,
+ l.default)("head")[0].appendChild(n),
+ n.src = e
+ }
+ },
+ sdkLoader: function(e, t, n) {
+ t in window && window[t] ? (k && clearTimeout(k),
+ n && n()) : l.default.dynamicLoadSource(e, function() {
+ k = setTimeout(l.default.sdkLoader(e, t, n), 100)
+ })
+ },
+ deleteInWin: function(e, t) {
+ var n = function(t) {
+ if (e in window)
+ try {
+ delete window[e]
+ } catch (t) {
+ window[e] = null
+ }
+ };
+ 0 === t ? n() : setTimeout(n, t || 500)
+ },
+ ajax: function(e) {
+ e = e || {},
+ e.type = (e.type || "GET").toUpperCase(),
+ e.dataType = e.dataType || "json",
+ e.async = e.async || !0,
+ e.timeout = e.timeout || 8e3;
+ var t = "[object FormData]" == {}.toString.call(e.data) ? e.data : function(e) {
+ var t = [];
+ for (var n in e)
+ t.push(encodeURIComponent(n) + "=" + encodeURIComponent(e[n]));
+ return t.push("t=" + Date.now()),
+ t.join("&")
+ }(e.data)
+ , n = null
+ , r = "XMLHttpRequest"in window ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP");
+ r.onreadystatechange = function(t) {
+ if (4 == r.readyState) {
+ clearTimeout(n);
+ var o = r.status;
+ o >= 200 && o < 300 ? e.success && e.success(JSON.parse(r.responseText)) : e.fail && e.fail(o)
+ }
+ }
+ ,
+ "GET" == e.type ? (r.open("GET", e.url + "?" + t, e.async),
+ r.send(null)) : "POST" == e.type && (r.open("POST", e.url, e.async),
+ void 0 == e.contentType || null == e.contentType ? r.send(t) : (r.setRequestHeader("Content-Type", e.contentType),
+ r.send(JSON.stringify(e.data)))),
+ n = setTimeout(function(e) {
+ clearTimeout(n),
+ r.abort()
+ }, e.timeout)
+ }
+ }),
+ t.default = l.default
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = TypeError
+ , o = Object.getOwnPropertyDescriptor;
+ if (o)
+ try {
+ o({}, "")
+ } catch (e) {
+ o = null
+ }
+ var i, a, s = function() {
+ throw new r
+ }, l = o ? function() {
+ try {
+ return arguments.callee,
+ s
+ } catch (e) {
+ try {
+ return o(arguments, "callee").get
+ } catch (e) {
+ return s
+ }
+ }
+ }() : s, c = n(47)(), u = Object.getPrototypeOf || function(e) {
+ return e.__proto__
+ }
+ , d = i ? u(i) : void 0, p = a ? u(a) : void 0, f = a ? a() : void 0, h = "undefined" == typeof Uint8Array ? void 0 : u(Uint8Array), v = {
+ "%Array%": Array,
+ "%ArrayBuffer%": "undefined" == typeof ArrayBuffer ? void 0 : ArrayBuffer,
+ "%ArrayBufferPrototype%": "undefined" == typeof ArrayBuffer ? void 0 : ArrayBuffer.prototype,
+ "%ArrayIteratorPrototype%": c ? u([][Symbol.iterator]()) : void 0,
+ "%ArrayPrototype%": Array.prototype,
+ "%ArrayProto_entries%": Array.prototype.entries,
+ "%ArrayProto_forEach%": Array.prototype.forEach,
+ "%ArrayProto_keys%": Array.prototype.keys,
+ "%ArrayProto_values%": Array.prototype.values,
+ "%AsyncFromSyncIteratorPrototype%": void 0,
+ "%AsyncFunction%": void 0,
+ "%AsyncFunctionPrototype%": void 0,
+ "%AsyncGenerator%": a ? u(f) : void 0,
+ "%AsyncGeneratorFunction%": p,
+ "%AsyncGeneratorPrototype%": p ? p.prototype : void 0,
+ "%AsyncIteratorPrototype%": f && c && Symbol.asyncIterator ? f[Symbol.asyncIterator]() : void 0,
+ "%Atomics%": "undefined" == typeof Atomics ? void 0 : Atomics,
+ "%Boolean%": Boolean,
+ "%BooleanPrototype%": Boolean.prototype,
+ "%DataView%": "undefined" == typeof DataView ? void 0 : DataView,
+ "%DataViewPrototype%": "undefined" == typeof DataView ? void 0 : DataView.prototype,
+ "%Date%": Date,
+ "%DatePrototype%": Date.prototype,
+ "%decodeURI%": decodeURI,
+ "%decodeURIComponent%": decodeURIComponent,
+ "%encodeURI%": encodeURI,
+ "%encodeURIComponent%": encodeURIComponent,
+ "%Error%": Error,
+ "%ErrorPrototype%": Error.prototype,
+ "%eval%": eval,
+ "%EvalError%": EvalError,
+ "%EvalErrorPrototype%": EvalError.prototype,
+ "%Float32Array%": "undefined" == typeof Float32Array ? void 0 : Float32Array,
+ "%Float32ArrayPrototype%": "undefined" == typeof Float32Array ? void 0 : Float32Array.prototype,
+ "%Float64Array%": "undefined" == typeof Float64Array ? void 0 : Float64Array,
+ "%Float64ArrayPrototype%": "undefined" == typeof Float64Array ? void 0 : Float64Array.prototype,
+ "%Function%": Function,
+ "%FunctionPrototype%": Function.prototype,
+ "%Generator%": i ? u(i()) : void 0,
+ "%GeneratorFunction%": d,
+ "%GeneratorPrototype%": d ? d.prototype : void 0,
+ "%Int8Array%": "undefined" == typeof Int8Array ? void 0 : Int8Array,
+ "%Int8ArrayPrototype%": "undefined" == typeof Int8Array ? void 0 : Int8Array.prototype,
+ "%Int16Array%": "undefined" == typeof Int16Array ? void 0 : Int16Array,
+ "%Int16ArrayPrototype%": "undefined" == typeof Int16Array ? void 0 : Int8Array.prototype,
+ "%Int32Array%": "undefined" == typeof Int32Array ? void 0 : Int32Array,
+ "%Int32ArrayPrototype%": "undefined" == typeof Int32Array ? void 0 : Int32Array.prototype,
+ "%isFinite%": isFinite,
+ "%isNaN%": isNaN,
+ "%IteratorPrototype%": c ? u(u([][Symbol.iterator]())) : void 0,
+ "%JSON%": "object" == typeof JSON ? JSON : void 0,
+ "%JSONParse%": "object" == typeof JSON ? JSON.parse : void 0,
+ "%Map%": "undefined" == typeof Map ? void 0 : Map,
+ "%MapIteratorPrototype%": "undefined" != typeof Map && c ? u((new Map)[Symbol.iterator]()) : void 0,
+ "%MapPrototype%": "undefined" == typeof Map ? void 0 : Map.prototype,
+ "%Math%": Math,
+ "%Number%": Number,
+ "%NumberPrototype%": Number.prototype,
+ "%Object%": Object,
+ "%ObjectPrototype%": Object.prototype,
+ "%ObjProto_toString%": Object.prototype.toString,
+ "%ObjProto_valueOf%": Object.prototype.valueOf,
+ "%parseFloat%": parseFloat,
+ "%parseInt%": parseInt,
+ "%Promise%": "undefined" == typeof Promise ? void 0 : Promise,
+ "%PromisePrototype%": "undefined" == typeof Promise ? void 0 : Promise.prototype,
+ "%PromiseProto_then%": "undefined" == typeof Promise ? void 0 : Promise.prototype.then,
+ "%Promise_all%": "undefined" == typeof Promise ? void 0 : Promise.all,
+ "%Promise_reject%": "undefined" == typeof Promise ? void 0 : Promise.reject,
+ "%Promise_resolve%": "undefined" == typeof Promise ? void 0 : Promise.resolve,
+ "%Proxy%": "undefined" == typeof Proxy ? void 0 : Proxy,
+ "%RangeError%": RangeError,
+ "%RangeErrorPrototype%": RangeError.prototype,
+ "%ReferenceError%": ReferenceError,
+ "%ReferenceErrorPrototype%": ReferenceError.prototype,
+ "%Reflect%": "undefined" == typeof Reflect ? void 0 : Reflect,
+ "%RegExp%": RegExp,
+ "%RegExpPrototype%": RegExp.prototype,
+ "%Set%": "undefined" == typeof Set ? void 0 : Set,
+ "%SetIteratorPrototype%": "undefined" != typeof Set && c ? u((new Set)[Symbol.iterator]()) : void 0,
+ "%SetPrototype%": "undefined" == typeof Set ? void 0 : Set.prototype,
+ "%SharedArrayBuffer%": "undefined" == typeof SharedArrayBuffer ? void 0 : SharedArrayBuffer,
+ "%SharedArrayBufferPrototype%": "undefined" == typeof SharedArrayBuffer ? void 0 : SharedArrayBuffer.prototype,
+ "%String%": String,
+ "%StringIteratorPrototype%": c ? u(""[Symbol.iterator]()) : void 0,
+ "%StringPrototype%": String.prototype,
+ "%Symbol%": c ? Symbol : void 0,
+ "%SymbolPrototype%": c ? Symbol.prototype : void 0,
+ "%SyntaxError%": SyntaxError,
+ "%SyntaxErrorPrototype%": SyntaxError.prototype,
+ "%ThrowTypeError%": l,
+ "%TypedArray%": h,
+ "%TypedArrayPrototype%": h ? h.prototype : void 0,
+ "%TypeError%": r,
+ "%TypeErrorPrototype%": r.prototype,
+ "%Uint8Array%": "undefined" == typeof Uint8Array ? void 0 : Uint8Array,
+ "%Uint8ArrayPrototype%": "undefined" == typeof Uint8Array ? void 0 : Uint8Array.prototype,
+ "%Uint8ClampedArray%": "undefined" == typeof Uint8ClampedArray ? void 0 : Uint8ClampedArray,
+ "%Uint8ClampedArrayPrototype%": "undefined" == typeof Uint8ClampedArray ? void 0 : Uint8ClampedArray.prototype,
+ "%Uint16Array%": "undefined" == typeof Uint16Array ? void 0 : Uint16Array,
+ "%Uint16ArrayPrototype%": "undefined" == typeof Uint16Array ? void 0 : Uint16Array.prototype,
+ "%Uint32Array%": "undefined" == typeof Uint32Array ? void 0 : Uint32Array,
+ "%Uint32ArrayPrototype%": "undefined" == typeof Uint32Array ? void 0 : Uint32Array.prototype,
+ "%URIError%": URIError,
+ "%URIErrorPrototype%": URIError.prototype,
+ "%WeakMap%": "undefined" == typeof WeakMap ? void 0 : WeakMap,
+ "%WeakMapPrototype%": "undefined" == typeof WeakMap ? void 0 : WeakMap.prototype,
+ "%WeakSet%": "undefined" == typeof WeakSet ? void 0 : WeakSet,
+ "%WeakSetPrototype%": "undefined" == typeof WeakSet ? void 0 : WeakSet.prototype
+ }, g = n(4), m = g.call(Function.call, String.prototype.replace), y = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g, b = /\\(\\)?/g, w = function(e) {
+ var t = [];
+ return m(e, y, function(e, n, r, o) {
+ t[t.length] = r ? m(o, b, "$1") : n || e
+ }),
+ t
+ }, x = function(e, t) {
+ if (!(e in v))
+ throw new SyntaxError("intrinsic " + e + " does not exist!");
+ if (void 0 === v[e] && !t)
+ throw new r("intrinsic " + e + " exists, but is not available. Please file an issue!");
+ return v[e]
+ };
+ e.exports = function(e, t) {
+ if ("string" != typeof e || 0 === e.length)
+ throw new TypeError("intrinsic name must be a non-empty string");
+ if (arguments.length > 1 && "boolean" != typeof t)
+ throw new TypeError('"allowMissing" argument must be a boolean');
+ for (var n = w(e), i = x("%" + (n.length > 0 ? n[0] : "") + "%", t), a = 1; a < n.length; a += 1)
+ if (null != i)
+ if (o && a + 1 >= n.length) {
+ var s = o(i, n[a]);
+ if (!(t || n[a]in i))
+ throw new r("base intrinsic for " + e + " exists, but the property is not available.");
+ i = s ? s.get || s.value : i[n[a]]
+ } else
+ i = i[n[a]];
+ return i
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0;
+ t.DEFAULT_EMOJI_CDN = "//img.t.sinajs.cn/t4/appstyle/expression/ext/normal/",
+ t.DB_NAME = "Comment",
+ t.defaultConfig = {
+ lang: "zh-CN",
+ langMode: null,
+ appId: "",
+ appKey: "",
+ clazzName: "Comment",
+ meta: ["nick", "mail", "link"],
+ path: location.pathname,
+ placeholder: "Just Go Go",
+ pageSize: 10,
+ recordIP: !0,
+ serverURLs: "",
+ visitor: !1,
+ emojiCDN: "",
+ emojiMaps: void 0,
+ enableQQ: !1,
+ requiredFields: []
+ },
+ t.defaultMeta = ["nick", "mail", "link"],
+ t.QQCacheKey = "_v_Cache_Q",
+ t.MetaCacheKey = "_v_Cache_Meta",
+ t.RandomStr = (Date.now() + Math.round(1e3 * Math.random())).toString(32),
+ t.VERSION = "1.4.14"
+ }
+ , function(e, t, n) {
+ function r(e, t) {
+ return new i(t).process(e)
+ }
+ var o = n(7)
+ , i = n(29);
+ t = e.exports = r,
+ t.FilterCSS = i;
+ for (var a in o)
+ t[a] = o[a];
+ "undefined" != typeof window && (window.filterCSS = e.exports)
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(32);
+ e.exports = Function.prototype.bind || r
+ }
+ , function(e, t) {
+ e.exports = {
+ indexOf: function(e, t) {
+ var n, r;
+ if (Array.prototype.indexOf)
+ return e.indexOf(t);
+ for (n = 0,
+ r = e.length; n < r; n++)
+ if (e[n] === t)
+ return n;
+ return -1
+ },
+ forEach: function(e, t, n) {
+ var r, o;
+ if (Array.prototype.forEach)
+ return e.forEach(t, n);
+ for (r = 0,
+ o = e.length; r < o; r++)
+ t.call(n, e[r], r, e)
+ },
+ trim: function(e) {
+ return String.prototype.trim ? e.trim() : e.replace(/(^\s*)|(\s*$)/g, "")
+ },
+ spaceIndex: function(e) {
+ var t = /\s|\n|\t/
+ , n = t.exec(e);
+ return n ? n.index : -1
+ }
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0;
+ var r = n(2)
+ , o = {
+ cdn: r.DEFAULT_EMOJI_CDN,
+ maps: n(53),
+ parse: function(e) {
+ return String(e).replace(new RegExp(":(" + Object.keys(o.maps).join("|") + "):","ig"), function(e, t) {
+ return o.maps[t] ? o.build(t) : e
+ })
+ },
+ build: function(e) {
+ var t = /^(https?:)?\/\//i
+ , n = o.maps[e]
+ , r = t.test(n) ? n : o.cdn + n;
+ return t.test(r) ? ' ' : ""
+ }
+ };
+ t.default = o
+ }
+ , function(e, t) {
+ function n() {
+ var e = {};
+ return e["align-content"] = !1,
+ e["align-items"] = !1,
+ e["align-self"] = !1,
+ e["alignment-adjust"] = !1,
+ e["alignment-baseline"] = !1,
+ e.all = !1,
+ e["anchor-point"] = !1,
+ e.animation = !1,
+ e["animation-delay"] = !1,
+ e["animation-direction"] = !1,
+ e["animation-duration"] = !1,
+ e["animation-fill-mode"] = !1,
+ e["animation-iteration-count"] = !1,
+ e["animation-name"] = !1,
+ e["animation-play-state"] = !1,
+ e["animation-timing-function"] = !1,
+ e.azimuth = !1,
+ e["backface-visibility"] = !1,
+ e.background = !0,
+ e["background-attachment"] = !0,
+ e["background-clip"] = !0,
+ e["background-color"] = !0,
+ e["background-image"] = !0,
+ e["background-origin"] = !0,
+ e["background-position"] = !0,
+ e["background-repeat"] = !0,
+ e["background-size"] = !0,
+ e["baseline-shift"] = !1,
+ e.binding = !1,
+ e.bleed = !1,
+ e["bookmark-label"] = !1,
+ e["bookmark-level"] = !1,
+ e["bookmark-state"] = !1,
+ e.border = !0,
+ e["border-bottom"] = !0,
+ e["border-bottom-color"] = !0,
+ e["border-bottom-left-radius"] = !0,
+ e["border-bottom-right-radius"] = !0,
+ e["border-bottom-style"] = !0,
+ e["border-bottom-width"] = !0,
+ e["border-collapse"] = !0,
+ e["border-color"] = !0,
+ e["border-image"] = !0,
+ e["border-image-outset"] = !0,
+ e["border-image-repeat"] = !0,
+ e["border-image-slice"] = !0,
+ e["border-image-source"] = !0,
+ e["border-image-width"] = !0,
+ e["border-left"] = !0,
+ e["border-left-color"] = !0,
+ e["border-left-style"] = !0,
+ e["border-left-width"] = !0,
+ e["border-radius"] = !0,
+ e["border-right"] = !0,
+ e["border-right-color"] = !0,
+ e["border-right-style"] = !0,
+ e["border-right-width"] = !0,
+ e["border-spacing"] = !0,
+ e["border-style"] = !0,
+ e["border-top"] = !0,
+ e["border-top-color"] = !0,
+ e["border-top-left-radius"] = !0,
+ e["border-top-right-radius"] = !0,
+ e["border-top-style"] = !0,
+ e["border-top-width"] = !0,
+ e["border-width"] = !0,
+ e.bottom = !1,
+ e["box-decoration-break"] = !0,
+ e["box-shadow"] = !0,
+ e["box-sizing"] = !0,
+ e["box-snap"] = !0,
+ e["box-suppress"] = !0,
+ e["break-after"] = !0,
+ e["break-before"] = !0,
+ e["break-inside"] = !0,
+ e["caption-side"] = !1,
+ e.chains = !1,
+ e.clear = !0,
+ e.clip = !1,
+ e["clip-path"] = !1,
+ e["clip-rule"] = !1,
+ e.color = !0,
+ e["color-interpolation-filters"] = !0,
+ e["column-count"] = !1,
+ e["column-fill"] = !1,
+ e["column-gap"] = !1,
+ e["column-rule"] = !1,
+ e["column-rule-color"] = !1,
+ e["column-rule-style"] = !1,
+ e["column-rule-width"] = !1,
+ e["column-span"] = !1,
+ e["column-width"] = !1,
+ e.columns = !1,
+ e.contain = !1,
+ e.content = !1,
+ e["counter-increment"] = !1,
+ e["counter-reset"] = !1,
+ e["counter-set"] = !1,
+ e.crop = !1,
+ e.cue = !1,
+ e["cue-after"] = !1,
+ e["cue-before"] = !1,
+ e.cursor = !1,
+ e.direction = !1,
+ e.display = !0,
+ e["display-inside"] = !0,
+ e["display-list"] = !0,
+ e["display-outside"] = !0,
+ e["dominant-baseline"] = !1,
+ e.elevation = !1,
+ e["empty-cells"] = !1,
+ e.filter = !1,
+ e.flex = !1,
+ e["flex-basis"] = !1,
+ e["flex-direction"] = !1,
+ e["flex-flow"] = !1,
+ e["flex-grow"] = !1,
+ e["flex-shrink"] = !1,
+ e["flex-wrap"] = !1,
+ e.float = !1,
+ e["float-offset"] = !1,
+ e["flood-color"] = !1,
+ e["flood-opacity"] = !1,
+ e["flow-from"] = !1,
+ e["flow-into"] = !1,
+ e.font = !0,
+ e["font-family"] = !0,
+ e["font-feature-settings"] = !0,
+ e["font-kerning"] = !0,
+ e["font-language-override"] = !0,
+ e["font-size"] = !0,
+ e["font-size-adjust"] = !0,
+ e["font-stretch"] = !0,
+ e["font-style"] = !0,
+ e["font-synthesis"] = !0,
+ e["font-variant"] = !0,
+ e["font-variant-alternates"] = !0,
+ e["font-variant-caps"] = !0,
+ e["font-variant-east-asian"] = !0,
+ e["font-variant-ligatures"] = !0,
+ e["font-variant-numeric"] = !0,
+ e["font-variant-position"] = !0,
+ e["font-weight"] = !0,
+ e.grid = !1,
+ e["grid-area"] = !1,
+ e["grid-auto-columns"] = !1,
+ e["grid-auto-flow"] = !1,
+ e["grid-auto-rows"] = !1,
+ e["grid-column"] = !1,
+ e["grid-column-end"] = !1,
+ e["grid-column-start"] = !1,
+ e["grid-row"] = !1,
+ e["grid-row-end"] = !1,
+ e["grid-row-start"] = !1,
+ e["grid-template"] = !1,
+ e["grid-template-areas"] = !1,
+ e["grid-template-columns"] = !1,
+ e["grid-template-rows"] = !1,
+ e["hanging-punctuation"] = !1,
+ e.height = !0,
+ e.hyphens = !1,
+ e.icon = !1,
+ e["image-orientation"] = !1,
+ e["image-resolution"] = !1,
+ e["ime-mode"] = !1,
+ e["initial-letters"] = !1,
+ e["inline-box-align"] = !1,
+ e["justify-content"] = !1,
+ e["justify-items"] = !1,
+ e["justify-self"] = !1,
+ e.left = !1,
+ e["letter-spacing"] = !0,
+ e["lighting-color"] = !0,
+ e["line-box-contain"] = !1,
+ e["line-break"] = !1,
+ e["line-grid"] = !1,
+ e["line-height"] = !1,
+ e["line-snap"] = !1,
+ e["line-stacking"] = !1,
+ e["line-stacking-ruby"] = !1,
+ e["line-stacking-shift"] = !1,
+ e["line-stacking-strategy"] = !1,
+ e["list-style"] = !0,
+ e["list-style-image"] = !0,
+ e["list-style-position"] = !0,
+ e["list-style-type"] = !0,
+ e.margin = !0,
+ e["margin-bottom"] = !0,
+ e["margin-left"] = !0,
+ e["margin-right"] = !0,
+ e["margin-top"] = !0,
+ e["marker-offset"] = !1,
+ e["marker-side"] = !1,
+ e.marks = !1,
+ e.mask = !1,
+ e["mask-box"] = !1,
+ e["mask-box-outset"] = !1,
+ e["mask-box-repeat"] = !1,
+ e["mask-box-slice"] = !1,
+ e["mask-box-source"] = !1,
+ e["mask-box-width"] = !1,
+ e["mask-clip"] = !1,
+ e["mask-image"] = !1,
+ e["mask-origin"] = !1,
+ e["mask-position"] = !1,
+ e["mask-repeat"] = !1,
+ e["mask-size"] = !1,
+ e["mask-source-type"] = !1,
+ e["mask-type"] = !1,
+ e["max-height"] = !0,
+ e["max-lines"] = !1,
+ e["max-width"] = !0,
+ e["min-height"] = !0,
+ e["min-width"] = !0,
+ e["move-to"] = !1,
+ e["nav-down"] = !1,
+ e["nav-index"] = !1,
+ e["nav-left"] = !1,
+ e["nav-right"] = !1,
+ e["nav-up"] = !1,
+ e["object-fit"] = !1,
+ e["object-position"] = !1,
+ e.opacity = !1,
+ e.order = !1,
+ e.orphans = !1,
+ e.outline = !1,
+ e["outline-color"] = !1,
+ e["outline-offset"] = !1,
+ e["outline-style"] = !1,
+ e["outline-width"] = !1,
+ e.overflow = !1,
+ e["overflow-wrap"] = !1,
+ e["overflow-x"] = !1,
+ e["overflow-y"] = !1,
+ e.padding = !0,
+ e["padding-bottom"] = !0,
+ e["padding-left"] = !0,
+ e["padding-right"] = !0,
+ e["padding-top"] = !0,
+ e.page = !1,
+ e["page-break-after"] = !1,
+ e["page-break-before"] = !1,
+ e["page-break-inside"] = !1,
+ e["page-policy"] = !1,
+ e.pause = !1,
+ e["pause-after"] = !1,
+ e["pause-before"] = !1,
+ e.perspective = !1,
+ e["perspective-origin"] = !1,
+ e.pitch = !1,
+ e["pitch-range"] = !1,
+ e["play-during"] = !1,
+ e.position = !1,
+ e["presentation-level"] = !1,
+ e.quotes = !1,
+ e["region-fragment"] = !1,
+ e.resize = !1,
+ e.rest = !1,
+ e["rest-after"] = !1,
+ e["rest-before"] = !1,
+ e.richness = !1,
+ e.right = !1,
+ e.rotation = !1,
+ e["rotation-point"] = !1,
+ e["ruby-align"] = !1,
+ e["ruby-merge"] = !1,
+ e["ruby-position"] = !1,
+ e["shape-image-threshold"] = !1,
+ e["shape-outside"] = !1,
+ e["shape-margin"] = !1,
+ e.size = !1,
+ e.speak = !1,
+ e["speak-as"] = !1,
+ e["speak-header"] = !1,
+ e["speak-numeral"] = !1,
+ e["speak-punctuation"] = !1,
+ e["speech-rate"] = !1,
+ e.stress = !1,
+ e["string-set"] = !1,
+ e["tab-size"] = !1,
+ e["table-layout"] = !1,
+ e["text-align"] = !0,
+ e["text-align-last"] = !0,
+ e["text-combine-upright"] = !0,
+ e["text-decoration"] = !0,
+ e["text-decoration-color"] = !0,
+ e["text-decoration-line"] = !0,
+ e["text-decoration-skip"] = !0,
+ e["text-decoration-style"] = !0,
+ e["text-emphasis"] = !0,
+ e["text-emphasis-color"] = !0,
+ e["text-emphasis-position"] = !0,
+ e["text-emphasis-style"] = !0,
+ e["text-height"] = !0,
+ e["text-indent"] = !0,
+ e["text-justify"] = !0,
+ e["text-orientation"] = !0,
+ e["text-overflow"] = !0,
+ e["text-shadow"] = !0,
+ e["text-space-collapse"] = !0,
+ e["text-transform"] = !0,
+ e["text-underline-position"] = !0,
+ e["text-wrap"] = !0,
+ e.top = !1,
+ e.transform = !1,
+ e["transform-origin"] = !1,
+ e["transform-style"] = !1,
+ e.transition = !1,
+ e["transition-delay"] = !1,
+ e["transition-duration"] = !1,
+ e["transition-property"] = !1,
+ e["transition-timing-function"] = !1,
+ e["unicode-bidi"] = !1,
+ e["vertical-align"] = !1,
+ e.visibility = !1,
+ e["voice-balance"] = !1,
+ e["voice-duration"] = !1,
+ e["voice-family"] = !1,
+ e["voice-pitch"] = !1,
+ e["voice-range"] = !1,
+ e["voice-rate"] = !1,
+ e["voice-stress"] = !1,
+ e["voice-volume"] = !1,
+ e.volume = !1,
+ e["white-space"] = !1,
+ e.widows = !1,
+ e.width = !0,
+ e["will-change"] = !1,
+ e["word-break"] = !0,
+ e["word-spacing"] = !0,
+ e["word-wrap"] = !0,
+ e["wrap-flow"] = !1,
+ e["wrap-through"] = !1,
+ e["writing-mode"] = !1,
+ e["z-index"] = !1,
+ e
+ }
+ function r(e, t, n) {}
+ function o(e, t, n) {}
+ function i(e, t) {
+ return a.test(t) ? "" : t
+ }
+ var a = /javascript\s*\:/gim;
+ t.whiteList = n(),
+ t.getDefaultWhiteList = n,
+ t.onAttr = r,
+ t.onIgnoreAttr = o,
+ t.safeAttrValue = i
+ }
+ , function(e, t) {
+ e.exports = {
+ indexOf: function(e, t) {
+ var n, r;
+ if (Array.prototype.indexOf)
+ return e.indexOf(t);
+ for (n = 0,
+ r = e.length; n < r; n++)
+ if (e[n] === t)
+ return n;
+ return -1
+ },
+ forEach: function(e, t, n) {
+ var r, o;
+ if (Array.prototype.forEach)
+ return e.forEach(t, n);
+ for (r = 0,
+ o = e.length; r < o; r++)
+ t.call(n, e[r], r, e)
+ },
+ trim: function(e) {
+ return String.prototype.trim ? e.trim() : e.replace(/(^\s*)|(\s*$)/g, "")
+ },
+ trimRight: function(e) {
+ return String.prototype.trimRight ? e.trimRight() : e.replace(/(\s*$)/g, "")
+ }
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(40)
+ , o = "function" == typeof Symbol && "symbol" == typeof Symbol("foo")
+ , i = Object.prototype.toString
+ , a = Array.prototype.concat
+ , s = Object.defineProperty
+ , l = function(e) {
+ return "function" == typeof e && "[object Function]" === i.call(e)
+ }
+ , c = s && function() {
+ var e = {};
+ try {
+ s(e, "x", {
+ enumerable: !1,
+ value: e
+ });
+ for (var t in e)
+ return !1;
+ return e.x === e
+ } catch (e) {
+ return !1
+ }
+ }()
+ , u = function(e, t, n, r) {
+ (!(t in e) || l(r) && r()) && (c ? s(e, t, {
+ configurable: !0,
+ enumerable: !1,
+ value: n,
+ writable: !0
+ }) : e[t] = n)
+ }
+ , d = function(e, t) {
+ var n = arguments.length > 2 ? arguments[2] : {}
+ , i = r(t);
+ o && (i = a.call(i, Object.getOwnPropertySymbols(t)));
+ for (var s = 0; s < i.length; s += 1)
+ u(e, i[s], t[i[s]], n[i[s]])
+ };
+ d.supportsDescriptors = !!c,
+ e.exports = d
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = Object.prototype.toString;
+ e.exports = function(e) {
+ var t = r.call(e)
+ , n = "[object Arguments]" === t;
+ return n || (n = "[object Array]" !== t && null !== e && "object" == typeof e && "number" == typeof e.length && e.length >= 0 && "[object Function]" === r.call(e.callee)),
+ n
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(45)
+ , o = n(44)
+ , i = n(46)
+ , a = i("String.prototype.replace")
+ , s = /^[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+/
+ , l = /[\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF]+$/;
+ e.exports = function() {
+ var e = o(r(this));
+ return a(a(e, s, ""), l, "")
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(4)
+ , o = n(1)
+ , i = o("%Function%")
+ , a = i.apply
+ , s = i.call;
+ e.exports = function() {
+ return r.apply(s, arguments)
+ }
+ ,
+ e.exports.apply = function() {
+ return r.apply(a, arguments)
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(11)
+ , o = "";
+ e.exports = function() {
+ return String.prototype.trim && o.trim() === o ? String.prototype.trim : r
+ }
+ }
+ , function(e, t) {
+ var n;
+ n = function() {
+ return this
+ }();
+ try {
+ n = n || Function("return this")() || (0,
+ eval)("this")
+ } catch (e) {
+ "object" == typeof window && (n = window)
+ }
+ e.exports = n
+ }
+ , function(e, t, n) {
+ function r() {
+ return {
+ a: ["target", "href", "title"],
+ abbr: ["title"],
+ address: [],
+ area: ["shape", "coords", "href", "alt"],
+ article: [],
+ aside: [],
+ audio: ["autoplay", "controls", "loop", "preload", "src"],
+ b: [],
+ bdi: ["dir"],
+ bdo: ["dir"],
+ big: [],
+ blockquote: ["cite"],
+ br: [],
+ caption: [],
+ center: [],
+ cite: [],
+ code: [],
+ col: ["align", "valign", "span", "width"],
+ colgroup: ["align", "valign", "span", "width"],
+ dd: [],
+ del: ["datetime"],
+ details: ["open"],
+ div: [],
+ dl: [],
+ dt: [],
+ em: [],
+ font: ["color", "size", "face"],
+ footer: [],
+ h1: [],
+ h2: [],
+ h3: [],
+ h4: [],
+ h5: [],
+ h6: [],
+ header: [],
+ hr: [],
+ i: [],
+ img: ["src", "alt", "title", "width", "height"],
+ ins: ["datetime"],
+ li: [],
+ mark: [],
+ nav: [],
+ ol: [],
+ p: [],
+ pre: [],
+ s: [],
+ section: [],
+ small: [],
+ span: [],
+ sub: [],
+ sup: [],
+ strong: [],
+ table: ["width", "border", "align", "valign"],
+ tbody: ["align", "valign"],
+ td: ["width", "rowspan", "colspan", "align", "valign"],
+ tfoot: ["align", "valign"],
+ th: ["width", "rowspan", "colspan", "align", "valign"],
+ thead: ["align", "valign"],
+ tr: ["rowspan", "align", "valign"],
+ tt: [],
+ u: [],
+ ul: [],
+ video: ["autoplay", "controls", "loop", "preload", "src", "height", "width"]
+ }
+ }
+ function o(e, t, n) {}
+ function i(e, t, n) {}
+ function a(e, t, n) {}
+ function s(e, t, n) {}
+ function l(e) {
+ return e.replace(S, "<").replace(O, ">")
+ }
+ function c(e, t, n, r) {
+ if (n = v(n),
+ "href" === t || "src" === t) {
+ if ("#" === (n = _.trim(n)))
+ return "#";
+ if ("http://" !== n.substr(0, 7) && "https://" !== n.substr(0, 8) && "mailto:" !== n.substr(0, 7) && "tel:" !== n.substr(0, 4) && "#" !== n[0] && "/" !== n[0])
+ return ""
+ } else if ("background" === t) {
+ if (I.lastIndex = 0,
+ I.test(n))
+ return ""
+ } else if ("style" === t) {
+ if (P.lastIndex = 0,
+ P.test(n))
+ return "";
+ if (M.lastIndex = 0,
+ M.test(n) && (I.lastIndex = 0,
+ I.test(n)))
+ return "";
+ !1 !== r && (r = r || A,
+ n = r.process(n))
+ }
+ return n = g(n)
+ }
+ function u(e) {
+ return e.replace($, """)
+ }
+ function d(e) {
+ return e.replace(E, '"')
+ }
+ function p(e) {
+ return e.replace(j, function(e, t) {
+ return "x" === t[0] || "X" === t[0] ? String.fromCharCode(parseInt(t.substr(1), 16)) : String.fromCharCode(parseInt(t, 10))
+ })
+ }
+ function f(e) {
+ return e.replace(T, ":").replace(C, " ")
+ }
+ function h(e) {
+ for (var t = "", n = 0, r = e.length; n < r; n++)
+ t += e.charCodeAt(n) < 32 ? " " : e.charAt(n);
+ return _.trim(t)
+ }
+ function v(e) {
+ return e = d(e),
+ e = p(e),
+ e = f(e),
+ e = h(e)
+ }
+ function g(e) {
+ return e = u(e),
+ e = l(e)
+ }
+ function m() {
+ return ""
+ }
+ function y(e, t) {
+ function n(t) {
+ return !!r || -1 !== _.indexOf(e, t)
+ }
+ "function" != typeof t && (t = function() {}
+ );
+ var r = !Array.isArray(e)
+ , o = []
+ , i = !1;
+ return {
+ onIgnoreTag: function(e, r, a) {
+ if (n(e)) {
+ if (a.isClosing) {
+ var s = "[/removed]"
+ , l = a.position + s.length;
+ return o.push([!1 !== i ? i : a.position, l]),
+ i = !1,
+ s
+ }
+ return i || (i = a.position),
+ "[removed]"
+ }
+ return t(e, r, a)
+ },
+ remove: function(e) {
+ var t = ""
+ , n = 0;
+ return _.forEach(o, function(r) {
+ t += e.slice(n, r[0]),
+ n = r[1]
+ }),
+ t += e.slice(n)
+ }
+ }
+ }
+ function b(e) {
+ return e.replace(R, "")
+ }
+ function w(e) {
+ var t = e.split("");
+ return t = t.filter(function(e) {
+ var t = e.charCodeAt(0);
+ return 127 !== t && (!(t <= 31) || (10 === t || 13 === t))
+ }),
+ t.join("")
+ }
+ var x = n(3).FilterCSS
+ , k = n(3).getDefaultWhiteList
+ , _ = n(5)
+ , A = new x
+ , S = //g
+ , $ = /"/g
+ , E = /"/g
+ , j = /([a-zA-Z0-9]*);?/gim
+ , T = /:?/gim
+ , C = /&newline;?/gim
+ , I = /((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a)\:/gi
+ , P = /e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi
+ , M = /u\s*r\s*l\s*\(.*/gi
+ , R = //g;
+ t.whiteList = r(),
+ t.getDefaultWhiteList = r,
+ t.onTag = o,
+ t.onIgnoreTag = i,
+ t.onTagAttr = a,
+ t.onIgnoreTagAttr = s,
+ t.safeAttrValue = c,
+ t.escapeHtml = l,
+ t.escapeQuote = u,
+ t.unescapeQuote = d,
+ t.escapeHtmlEntities = p,
+ t.escapeDangerHtml5Entities = f,
+ t.clearNonPrintableCharacter = h,
+ t.friendlyAttrValue = v,
+ t.escapeAttrValue = g,
+ t.onIgnoreTagStripAll = m,
+ t.StripTagBody = y,
+ t.stripCommentTag = b,
+ t.stripBlankChar = w,
+ t.cssFilter = A,
+ t.getDefaultCSSWhiteList = k
+ }
+ , function(e, t, n) {
+ function r(e) {
+ var t = d.spaceIndex(e);
+ if (-1 === t)
+ var n = e.slice(1, -1);
+ else
+ var n = e.slice(1, t + 1);
+ return n = d.trim(n).toLowerCase(),
+ "/" === n.slice(0, 1) && (n = n.slice(1)),
+ "/" === n.slice(-1) && (n = n.slice(0, -1)),
+ n
+ }
+ function o(e) {
+ return "" === e.slice(0, 2)
+ }
+ function i(e, t, n) {
+ "user strict";
+ var i = ""
+ , a = 0
+ , s = !1
+ , l = !1
+ , c = 0
+ , u = e.length
+ , d = ""
+ , p = "";
+ for (c = 0; c < u; c++) {
+ var f = e.charAt(c);
+ if (!1 === s) {
+ if ("<" === f) {
+ s = c;
+ continue
+ }
+ } else if (!1 === l) {
+ if ("<" === f) {
+ i += n(e.slice(a, c)),
+ s = c,
+ a = c;
+ continue
+ }
+ if (">" === f) {
+ i += n(e.slice(a, s)),
+ p = e.slice(s, c + 1),
+ d = r(p),
+ i += t(s, i.length, d, p, o(p)),
+ a = c + 1,
+ s = !1;
+ continue
+ }
+ if (('"' === f || "'" === f) && "=" === e.charAt(c - 1)) {
+ l = f;
+ continue
+ }
+ } else if (f === l) {
+ l = !1;
+ continue
+ }
+ }
+ return a < e.length && (i += n(e.substr(a))),
+ i
+ }
+ function a(e, t) {
+ "user strict";
+ function n(e, n) {
+ if (e = d.trim(e),
+ e = e.replace(p, "").toLowerCase(),
+ !(e.length < 1)) {
+ var r = t(e, n || "");
+ r && o.push(r)
+ }
+ }
+ for (var r = 0, o = [], i = !1, a = e.length, c = 0; c < a; c++) {
+ var f, h, v = e.charAt(c);
+ if (!1 !== i || "=" !== v)
+ if (!1 === i || c !== r || '"' !== v && "'" !== v || "=" !== e.charAt(c - 1))
+ if (/\s|\n|\t/.test(v)) {
+ if (e = e.replace(/\s|\n|\t/g, " "),
+ !1 === i) {
+ if (-1 === (h = s(e, c))) {
+ f = d.trim(e.slice(r, c)),
+ n(f),
+ i = !1,
+ r = c + 1;
+ continue
+ }
+ c = h - 1;
+ continue
+ }
+ if (-1 === (h = l(e, c - 1))) {
+ f = d.trim(e.slice(r, c)),
+ f = u(f),
+ n(i, f),
+ i = !1,
+ r = c + 1;
+ continue
+ }
+ } else
+ ;
+ else {
+ if (-1 === (h = e.indexOf(v, c + 1)))
+ break;
+ f = d.trim(e.slice(r + 1, h)),
+ n(i, f),
+ i = !1,
+ c = h,
+ r = c + 1
+ }
+ else
+ i = e.slice(r, c),
+ r = c + 1
+ }
+ return r < e.length && (!1 === i ? n(e.slice(r)) : n(i, u(d.trim(e.slice(r))))),
+ d.trim(o.join(" "))
+ }
+ function s(e, t) {
+ for (; t < e.length; t++) {
+ var n = e[t];
+ if (" " !== n)
+ return "=" === n ? t : -1
+ }
+ }
+ function l(e, t) {
+ for (; t > 0; t--) {
+ var n = e[t];
+ if (" " !== n)
+ return "=" === n ? t : -1
+ }
+ }
+ function c(e) {
+ return '"' === e[0] && '"' === e[e.length - 1] || "'" === e[0] && "'" === e[e.length - 1]
+ }
+ function u(e) {
+ return c(e) ? e.substr(1, e.length - 2) : e
+ }
+ var d = n(5)
+ , p = /[^a-zA-Z0-9_:\.\-]/gim;
+ t.parseTag = i,
+ t.parseAttr = a
+ }
+ , function(e, t, n) {
+ var r, o, i;
+ /*!
+ autosize 4.0.2
+ license: MIT
+ http://www.jacklmoore.com/autosize
+*/
+ !function(n, a) {
+ o = [e, t],
+ r = a,
+ void 0 !== (i = "function" == typeof r ? r.apply(t, o) : r) && (e.exports = i)
+ }(0, function(e, t) {
+ "use strict";
+ function n(e) {
+ function t(t) {
+ var n = e.style.width;
+ e.style.width = "0px",
+ e.offsetWidth,
+ e.style.width = n,
+ e.style.overflowY = t
+ }
+ function n(e) {
+ for (var t = []; e && e.parentNode && e.parentNode instanceof Element; )
+ e.parentNode.scrollTop && t.push({
+ node: e.parentNode,
+ scrollTop: e.parentNode.scrollTop
+ }),
+ e = e.parentNode;
+ return t
+ }
+ function r() {
+ if (0 !== e.scrollHeight) {
+ var t = n(e)
+ , r = document.documentElement && document.documentElement.scrollTop;
+ e.style.height = "",
+ e.style.height = e.scrollHeight + s + "px",
+ l = e.clientWidth,
+ t.forEach(function(e) {
+ e.node.scrollTop = e.scrollTop
+ }),
+ r && (document.documentElement.scrollTop = r)
+ }
+ }
+ function o() {
+ r();
+ var n = Math.round(parseFloat(e.style.height))
+ , o = window.getComputedStyle(e, null)
+ , i = "content-box" === o.boxSizing ? Math.round(parseFloat(o.height)) : e.offsetHeight;
+ if (i < n ? "hidden" === o.overflowY && (t("scroll"),
+ r(),
+ i = "content-box" === o.boxSizing ? Math.round(parseFloat(window.getComputedStyle(e, null).height)) : e.offsetHeight) : "hidden" !== o.overflowY && (t("hidden"),
+ r(),
+ i = "content-box" === o.boxSizing ? Math.round(parseFloat(window.getComputedStyle(e, null).height)) : e.offsetHeight),
+ c !== i) {
+ c = i;
+ var s = a("autosize:resized");
+ try {
+ e.dispatchEvent(s)
+ } catch (e) {}
+ }
+ }
+ if (e && e.nodeName && "TEXTAREA" === e.nodeName && !i.has(e)) {
+ var s = null
+ , l = null
+ , c = null
+ , u = function() {
+ e.clientWidth !== l && o()
+ }
+ , d = function(t) {
+ window.removeEventListener("resize", u, !1),
+ e.removeEventListener("input", o, !1),
+ e.removeEventListener("keyup", o, !1),
+ e.removeEventListener("autosize:destroy", d, !1),
+ e.removeEventListener("autosize:update", o, !1),
+ Object.keys(t).forEach(function(n) {
+ e.style[n] = t[n]
+ }),
+ i.delete(e)
+ }
+ .bind(e, {
+ height: e.style.height,
+ resize: e.style.resize,
+ overflowY: e.style.overflowY,
+ overflowX: e.style.overflowX,
+ wordWrap: e.style.wordWrap
+ });
+ e.addEventListener("autosize:destroy", d, !1),
+ "onpropertychange"in e && "oninput"in e && e.addEventListener("keyup", o, !1),
+ window.addEventListener("resize", u, !1),
+ e.addEventListener("input", o, !1),
+ e.addEventListener("autosize:update", o, !1),
+ e.style.overflowX = "hidden",
+ e.style.wordWrap = "break-word",
+ i.set(e, {
+ destroy: d,
+ update: o
+ }),
+ function() {
+ var t = window.getComputedStyle(e, null);
+ "vertical" === t.resize ? e.style.resize = "none" : "both" === t.resize && (e.style.resize = "horizontal"),
+ s = "content-box" === t.boxSizing ? -(parseFloat(t.paddingTop) + parseFloat(t.paddingBottom)) : parseFloat(t.borderTopWidth) + parseFloat(t.borderBottomWidth),
+ isNaN(s) && (s = 0),
+ o()
+ }()
+ }
+ }
+ function r(e) {
+ var t = i.get(e);
+ t && t.destroy()
+ }
+ function o(e) {
+ var t = i.get(e);
+ t && t.update()
+ }
+ var i = "function" == typeof Map ? new Map : function() {
+ var e = []
+ , t = [];
+ return {
+ has: function(t) {
+ return e.indexOf(t) > -1
+ },
+ get: function(n) {
+ return t[e.indexOf(n)]
+ },
+ set: function(n, r) {
+ -1 === e.indexOf(n) && (e.push(n),
+ t.push(r))
+ },
+ delete: function(n) {
+ var r = e.indexOf(n);
+ r > -1 && (e.splice(r, 1),
+ t.splice(r, 1))
+ }
+ }
+ }()
+ , a = function(e) {
+ return new Event(e,{
+ bubbles: !0
+ })
+ };
+ try {
+ new Event("test")
+ } catch (e) {
+ a = function(e) {
+ var t = document.createEvent("Event");
+ return t.initEvent(e, !0, !1),
+ t
+ }
+ }
+ var s = null;
+ "undefined" == typeof window || "function" != typeof window.getComputedStyle ? (s = function(e) {
+ return e
+ }
+ ,
+ s.destroy = function(e) {
+ return e
+ }
+ ,
+ s.update = function(e) {
+ return e
+ }
+ ) : (s = function(e, t) {
+ return e && Array.prototype.forEach.call(e.length ? e : [e], function(e) {
+ return n(e)
+ }),
+ e
+ }
+ ,
+ s.destroy = function(e) {
+ return e && Array.prototype.forEach.call(e.length ? e : [e], r),
+ e
+ }
+ ,
+ s.update = function(e) {
+ return e && Array.prototype.forEach.call(e.length ? e : [e], o),
+ e
+ }
+ ),
+ t.default = s,
+ e.exports = t.default
+ })
+ }
+ , function(e, t, n) {
+ "use strict";
+ function r(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }
+ function o(e) {
+ return !!e && this.init(e),
+ this
+ }
+ function i(e) {
+ return new o(e)
+ }
+ var a = n(26)
+ , s = r(a)
+ , l = n(17)
+ , c = r(l)
+ , u = n(20)
+ , d = r(u)
+ , p = n(6)
+ , f = r(p)
+ , h = n(2)
+ , v = n(24)
+ , g = r(v)
+ , m = n(0)
+ , y = r(m)
+ , b = n(22)
+ , w = r(b)
+ , x = n(19)
+ , k = r(x)
+ , _ = n(23)
+ , A = n(25)
+ , S = r(A)
+ , O = n(21)
+ , $ = r(O)
+ , E = {
+ comment: "",
+ nick: "",
+ mail: "",
+ link: "",
+ ua: y.default.ua,
+ url: "",
+ QQAvatar: ""
+ }
+ , j = ""
+ , T = {
+ cdn: "https://gravatar.loli.net/avatar/",
+ ds: ["mp", "identicon", "monsterid", "wavatar", "robohash", "retro", ""],
+ params: "",
+ hide: !1
+ };
+ o.prototype.init = function(e) {
+ if ("undefined" == typeof document)
+ throw new Error("Sorry, Valine does not support Server-side rendering.");
+ var t = this;
+ return e && (e = y.default.extend(h.defaultConfig, e),
+ t.i18n = (0,
+ d.default)(e.lang || y.default.lang, e.langMode),
+ t.config = e,
+ f.default.maps = !!e.emojiMaps && e.emojiMaps || f.default.maps,
+ f.default.cdn = !!e.emojiCDN && e.emojiCDN || f.default.cdn,
+ t._init()),
+ t
+ }
+ ,
+ o.prototype._init = function() {
+ var e = this;
+ try {
+ var t = e.config
+ , n = t.avatar
+ , r = t.avatarForce
+ , o = t.avatar_cdn
+ , i = t.visitor
+ , a = t.path
+ , s = void 0 === a ? location.pathname : a
+ , l = t.pageSize
+ , c = t.recordIP;
+ e.config.path = s.replace(/index\.html?$/, "");
+ var u = T.ds
+ , d = r ? "&q=" + h.RandomStr : "";
+ T.params = "?d=" + (u.indexOf(n) > -1 ? n : "mp") + "&v=" + h.VERSION + d,
+ T.hide = "hide" === n,
+ T.cdn = /^https?\:\/\//.test(o) ? o : T.cdn,
+ e.config.pageSize = isNaN(l) ? 10 : l < 1 ? 10 : l,
+ c && (0,
+ _.recordIPFn)(function(e) {
+ return E.ip = e
+ });
+ var p = e.config.el || null
+ , f = (0,
+ y.default)(p);
+ if (p = p instanceof HTMLElement ? p : f[f.length - 1] || null) {
+ e.$el = (0,
+ y.default)(p),
+ e.$el.addClass("v").attr("data-class", "v"),
+ T.hide && e.$el.addClass("hide-avatar"),
+ e.config.meta = (e.config.guest_info || e.config.meta || h.defaultMeta).filter(function(e) {
+ return h.defaultMeta.indexOf(e) > -1
+ }),
+ e.config.requiredFields = e.config.requiredFields.filter(function(e) {
+ return h.defaultMeta.indexOf(e) > -1
+ });
+ var v = (0 == e.config.meta.length ? h.defaultMeta : e.config.meta).map(function(t) {
+ var n = "mail" == t ? "email" : "text";
+ return h.defaultMeta.indexOf(t) > -1 ? ' ' : ""
+ })
+ , g = '
' + e.i18n.t("submit") + '
0 ' + e.i18n.t("comments") + '
' + e.i18n.t("more") + '
Powered By
Valine v' + h.VERSION + "
";
+ e.$el.html(g),
+ e.$el.find(".cancel-reply").on("click", function(t) {
+ e.reset()
+ });
+ var m = e.$el.find(".vempty");
+ e.$nodata = {
+ show: function(t) {
+ return m.html(t || e.i18n.t("sofa")).show(),
+ e
+ },
+ hide: function() {
+ return m.hide(),
+ e
+ }
+ };
+ var b = e.$el.find(".vload-bottom")
+ , w = e.$el.find(".vload-top");
+ e.$loading = {
+ show: function(t) {
+ return t && w.show() || b.show(),
+ e.$nodata.hide(),
+ e
+ },
+ hide: function() {
+ return w.hide(),
+ b.hide(),
+ 0 === e.$el.find(".vcard").length && e.$nodata.show(),
+ e
+ }
+ }
+ }
+ (0,
+ k.default)(e.config, function(t) {
+ var n = (0,
+ y.default)(".valine-comment-count")
+ , r = 0;
+ !function t(n) {
+ var o = n[r++];
+ if (o) {
+ var i = (0,
+ y.default)(o).attr("data-xid");
+ !!i && e.Q(i).count().then(function(e) {
+ o.innerText = e,
+ t(n)
+ }).catch(function(e) {
+ o.innerText = 0
+ })
+ }
+ }(n),
+ i && I.add(AV.Object.extend("Counter"), e.config.path),
+ e.$el && e.bind()
+ })
+ } catch (t) {
+ (0,
+ $.default)(e, t, "init")
+ }
+ }
+ ;
+ var C = function(e, t) {
+ var n = new e
+ , r = new AV.ACL;
+ r.setPublicReadAccess(!0),
+ r.setPublicWriteAccess(!0),
+ n.setACL(r),
+ n.set("url", t.url),
+ n.set("xid", t.xid),
+ n.set("title", t.title),
+ n.set("time", 1),
+ n.save().then(function(e) {
+ (0,
+ y.default)(t.el).find(".leancloud-visitors-count").text(1)
+ }).catch(function(e) {})
+ }
+ , I = {
+ add: function(e, t) {
+ var n = this
+ , r = (0,
+ y.default)(".leancloud_visitors,.leancloud-visitors");
+ if (1 === r.length) {
+ var o = r[0]
+ , i = decodeURI((0,
+ y.default)(o).attr("id"))
+ , a = (0,
+ y.default)(o).attr("data-flag-title")
+ , s = encodeURI(i)
+ , l = {
+ el: o,
+ url: i,
+ xid: s,
+ title: a
+ };
+ if (decodeURI(i) === decodeURI(t)) {
+ var c = new AV.Query(e);
+ c.equalTo("url", i),
+ c.find().then(function(t) {
+ if (t.length > 0) {
+ var n = t[0];
+ n.increment("time"),
+ n.save().then(function(e) {
+ (0,
+ y.default)(o).find(".leancloud-visitors-count").text(e.get("time"))
+ }).catch(function(e) {})
+ } else
+ C(e, l)
+ }).catch(function(t) {
+ 101 == t.code ? C(e, l) : (0,
+ $.default)(n, t)
+ })
+ } else
+ I.show(e, r)
+ } else
+ I.show(e, r)
+ },
+ show: function(e, t) {
+ var n = [];
+ if (t.forEach(function(e) {
+ var t = (0,
+ y.default)(e).find(".leancloud-visitors-count");
+ t && t.text("0"),
+ n.push(/\%/.test((0,
+ y.default)(e).attr("id")) ? decodeURI((0,
+ y.default)(e).attr("id")) : (0,
+ y.default)(e).attr("id"))
+ }),
+ n.length) {
+ var r = new AV.Query(e);
+ r.containedIn("url", n),
+ r.find().then(function(e) {
+ e.length > 0 && t.forEach(function(t) {
+ e.forEach(function(e) {
+ var n = e.get("xid") || encodeURI(e.get("url"))
+ , r = e.get("time")
+ , o = (0,
+ y.default)(t)
+ , i = o.attr("id");
+ if ((/\%/.test(i) ? i : encodeURI(i)) == n) {
+ var a = o.find(".leancloud-visitors-count");
+ a && a.text(r)
+ }
+ })
+ })
+ }).catch(function(e) {})
+ }
+ }
+ };
+ o.prototype.Q = function(e) {
+ var t = this
+ , n = arguments.length
+ , r = t.config.clazzName;
+ if (1 == n) {
+ var o = new AV.Query(r);
+ o.doesNotExist("rid");
+ var i = new AV.Query(r);
+ i.equalTo("rid", "");
+ var a = AV.Query.or(o, i);
+ return "*" === e ? a.exists("url") : a.equalTo("url", decodeURI(e)),
+ a.addDescending("createdAt"),
+ a.addDescending("insertedAt"),
+ a
+ }
+ var s = JSON.stringify(arguments[1]).replace(/(\[|\])/g, "")
+ , l = "select * from " + r + " where rid in (" + s + ") order by -createdAt,-createdAt";
+ return AV.Query.doCloudQuery(l)
+ }
+ ,
+ o.prototype.installLocale = function(e, t) {
+ var n = this;
+ return n.i18n(e, t),
+ n
+ }
+ ,
+ o.prototype.setPath = function(e) {
+ return this.config.path = e,
+ this
+ }
+ ,
+ o.prototype.bind = function() {
+ var e = this
+ , t = e.$el.find(".vemojis")
+ , n = e.$el.find(".vpreview")
+ , r = e.$el.find(".vemoji-btn")
+ , o = e.$el.find(".vpreview-btn")
+ , i = e.$el.find(".veditor")
+ , a = f.default.maps
+ , l = !1
+ , u = function(e) {
+ var n = [];
+ for (var r in a)
+ a.hasOwnProperty(r) && !!f.default.build(r) && n.push('' + f.default.build(r) + " ");
+ t.html(n.join("")),
+ l = !0,
+ t.find("i").on("click", function(e) {
+ e.preventDefault(),
+ x(i[0], " :" + (0,
+ y.default)(this).attr("title") + ":")
+ })
+ };
+ e.$emoji = {
+ show: function() {
+ return !l && u(),
+ e.$preview.hide(),
+ t.show(),
+ r.addClass("actived"),
+ e.$emoji
+ },
+ hide: function() {
+ return r.removeClass("actived"),
+ t.hide(),
+ e.$emoji
+ }
+ },
+ e.$preview = {
+ show: function() {
+ return j ? (e.$emoji.hide(),
+ o.addClass("actived"),
+ n.html(j).show(),
+ M()) : e.$preview.hide(),
+ e.$preview
+ },
+ hide: function() {
+ return o.removeClass("actived"),
+ n.hide().html(""),
+ e.$preview
+ }
+ };
+ var d = function(t) {
+ var r = (0,
+ w.default)(t.val() || "");
+ r || e.$preview.hide(),
+ j != r && (j = r,
+ o.hasClass("actived") > -1 && j != n.html() && n.html(j),
+ (0,
+ c.default)(t[0]),
+ M())
+ };
+ r.on("click", function(t) {
+ r.hasClass("actived") ? e.$emoji.hide() : e.$emoji.show()
+ }),
+ o.on("click", function(t) {
+ o.hasClass("actived") ? e.$preview.hide() : e.$preview.show()
+ });
+ var p = e.config.meta
+ , v = {}
+ , m = {
+ veditor: "comment"
+ };
+ p.forEach(function(e) {
+ m["v" + e] = e
+ });
+ for (var b in m)
+ m.hasOwnProperty(b) && function() {
+ var t = m[b]
+ , n = e.$el.find("." + b);
+ v[t] = n,
+ n.on("input change blur propertychange", function(r) {
+ e.config.enableQQ && "blur" === r.type && "nick" === t && (isNaN(n.val()) ? y.default.store.get(h.QQCacheKey) && y.default.store.get(h.QQCacheKey).nick != n.val() && (y.default.store.remove(h.QQCacheKey),
+ E.nick = n.val(),
+ E.mail = "",
+ E.QQAvatar = "") : (0,
+ _.fetchQQFn)(n.val(), function(e) {
+ var t = e.nick || n.val()
+ , r = e.qq + "@qq.com";
+ (0,
+ y.default)(".vnick").val(t),
+ (0,
+ y.default)(".vmail").val(r),
+ E.nick = t,
+ E.mail = r,
+ E.QQAvatar = e.pic
+ })),
+ "comment" === t ? d(n) : E[t] = y.default.escape(n.val().replace(/(^\s*)|(\s*$)/g, "")).substring(0, 40)
+ })
+ }();
+ var x = function(e, t) {
+ if (document.selection) {
+ e.focus();
+ document.selection.createRange().text = t,
+ e.focus()
+ } else if (e.selectionStart || "0" == e.selectionStart) {
+ var n = e.selectionStart
+ , r = e.selectionEnd
+ , o = e.scrollTop;
+ e.value = e.value.substring(0, n) + t + e.value.substring(r, e.value.length),
+ e.focus(),
+ e.selectionStart = n + t.length,
+ e.selectionEnd = n + t.length,
+ e.scrollTop = o
+ } else
+ e.focus(),
+ e.value += t;
+ setTimeout(function(t) {
+ d((0,
+ y.default)(e))
+ }, 100)
+ }
+ , k = {
+ no: 1,
+ size: e.config.pageSize,
+ skip: e.config.pageSize
+ }
+ , A = e.$el.find(".vpage");
+ A.on("click", function(e) {
+ A.hide(),
+ k.no++,
+ O()
+ });
+ var O = function() {
+ var t = k.size
+ , n = k.no
+ , r = Number(e.$el.find(".vnum").text());
+ e.$loading.show();
+ var o = e.Q(e.config.path);
+ o.limit(t),
+ o.skip((n - 1) * t),
+ o.find().then(function(o) {
+ if (k.skip = k.size,
+ o && o.length) {
+ var i = [];
+ o.forEach(function(t) {
+ i.push(t.id),
+ C(t, e.$el.find(".vcards"), !0)
+ }),
+ e.Q(e.config.path, i).then(function(e) {
+ (e && e.results || []).forEach(function(e) {
+ C(e, (0,
+ y.default)('.vquote[data-self-id="' + e.get("rid") + '"]'))
+ }).catch(function(e) {})
+ }),
+ t * n < r ? A.show() : A.hide()
+ } else
+ e.$nodata.show();
+ e.$loading.hide()
+ }).catch(function(t) {
+ e.$loading.hide(),
+ (0,
+ $.default)(e, t, "query")
+ })
+ };
+ e.Q(e.config.path).count().then(function(t) {
+ t > 0 ? (e.$el.find(".vcount").show().find(".vnum").text(t),
+ O()) : e.$loading.hide()
+ }).catch(function(t) {
+ (0,
+ $.default)(e, t, "count")
+ });
+ var C = function(t, n, r) {
+ var o = (0,
+ y.default)('
')
+ , i = t.get("ua")
+ , a = "";
+ i && !/ja/.test(e.config.lang) && (i = y.default.detect(i),
+ a = '' + i.browser + " " + i.version + ' ' + i.os + " " + i.osVersion + " "),
+ "*" === e.config.path && (a = '' + t.get("url") + " ");
+ var l = t.get("link") ? /^https?\:\/\//.test(t.get("link")) ? t.get("link") : "http://" + t.get("link") : ""
+ , c = l ? '' + t.get("nick") + " " : '' + t.get("nick") + " "
+ , u = T.hide ? "" : e.config.enableQQ && t.get("QQAvatar") ? ' ' : ' '
+ , d = u + '' + c + " " + a + '
' + (0,
+ g.default)(t.get("insertedAt"), e.i18n) + ' ' + e.i18n.t("reply") + '
' + (0,
+ S.default)(t.get("comment")) + '
';
+ o.html(d);
+ var p = o.find(".vat");
+ o.find("a").forEach(function(e) {
+ e && !(0,
+ y.default)(e).hasClass("at") && (0,
+ y.default)(e).attr({
+ target: "_blank",
+ rel: "nofollow"
+ })
+ }),
+ r ? n.append(o) : n.prepend(o);
+ var f = o.find(".vcontent");
+ f && R(f),
+ p && P(p, t),
+ M()
+ }
+ , I = {}
+ , P = function(t, n) {
+ t.on("click", function(r) {
+ var o = t.attr("data-vm-id")
+ , i = t.attr("data-self-id")
+ , a = e.$el.find(".vwrap")
+ , s = "@" + y.default.escape(n.get("nick"));
+ (0,
+ y.default)('.vreply-wrapper[data-self-id="' + i + '"]').append(a).find(".cancel-reply").show(),
+ I = {
+ at: y.default.escape(s) + " ",
+ rid: o,
+ pid: i,
+ rmail: n.get("mail")
+ },
+ v.comment.attr({
+ placeholder: s
+ })[0].focus()
+ })
+ }
+ , M = function() {
+ setTimeout(function() {
+ try {
+ "MathJax"in window && "version"in window.MathJax && (/^3.*/.test(window.MathJax.version) && MathJax.typeset() || MathJax.Hub.Queue(["Typeset", MathJax.Hub, document.querySelector(".v")])),
+ "renderMathInElement"in window && renderMathInElement((0,
+ y.default)(".v")[0], {
+ delimiters: [{
+ left: "$$",
+ right: "$$",
+ display: !0
+ }, {
+ left: "$",
+ right: "$",
+ display: !1
+ }]
+ })
+ } catch (e) {}
+ }, 100)
+ }
+ , R = function(e) {
+ setTimeout(function() {
+ e[0].offsetHeight > 200 && (e.addClass("expand"),
+ e.on("click", function(t) {
+ e.removeClass("expand")
+ }))
+ })
+ };
+ !function(t) {
+ if (t = y.default.store.get(h.MetaCacheKey) || t)
+ for (var n in p) {
+ var r = p[n];
+ e.$el.find(".v" + r).val(y.default.unescape(t[r])),
+ E[r] = t[r]
+ }
+ var o = y.default.store.get(h.QQCacheKey);
+ E.QQAvatar = e.config.enableQQ && !!o && o.pic || ""
+ }(),
+ e.reset = function() {
+ E.comment = "",
+ v.comment.val(""),
+ d(v.comment),
+ v.comment.attr("placeholder", e.config.placeholder),
+ I = {},
+ e.$preview.hide(),
+ e.$el.find(".vpanel").append(e.$el.find(".vwrap")),
+ e.$el.find(".cancel-reply").hide(),
+ j = ""
+ }
+ ;
+ var z = e.$el.find(".vsubmit")
+ , L = function(t) {
+ if (e.config.requiredFields.indexOf("nick") > -1 && E.nick.length < 3)
+ return v.nick[0].focus(),
+ void e.$el.find(".status-bar").text("" + e.i18n.t("nickFail")).empty(3e3);
+ if (e.config.requiredFields.indexOf("mail") > -1 && !/[\w-\.]+@([\w-]+\.)+[a-z]{2,3}/.test(E.mail))
+ return v.mail[0].focus(),
+ void e.$el.find(".status-bar").text("" + e.i18n.t("mailFail")).empty(3e3);
+ if ("" == j)
+ return void v.comment[0].focus();
+ E.comment = j,
+ E.nick = E.nick || "Anonymous";
+ var n = y.default.store.get("vlx");
+ if (n) {
+ if (Date.now() / 1e3 - n / 1e3 < 20)
+ return void e.$el.find(".status-bar").text(e.i18n.t("busy")).empty(3e3)
+ }
+ U()
+ }
+ , F = function() {
+ var e = new AV.ACL;
+ e.setWriteAccess("role:admin",true);
+ return e.setPublicReadAccess(!0),
+ e.setPublicWriteAccess(!1),
+ e
+ }
+ , U = function() {
+ y.default.store.set("vlx", Date.now()),
+ z.attr({
+ disabled: !0
+ }),
+ e.$loading.show(!0);
+ var t = AV.Object.extend(e.config.clazzName || "Comment")
+ , n = new t;
+ if (E.url = decodeURI(e.config.path),
+ E.insertedAt = new Date,
+ I.rid) {
+ var r = I.pid || I.rid;
+ n.set("rid", I.rid),
+ n.set("pid", r),
+ E.comment = j.replace("", '
' + I.at + " , ")
+ }
+ for (var o in E)
+ if (E.hasOwnProperty(o)) {
+ var i = E[o];
+ n.set(o, i)
+ }
+ n.setACL(F()),
+ n.save().then(function(t) {
+ "Anonymous" != E.nick && y.default.store.set(h.MetaCacheKey, {
+ nick: E.nick,
+ link: E.link,
+ mail: E.mail
+ });
+ var n = e.$el.find(".vnum");
+ try {
+ I.rid ? C(t, (0,
+ y.default)('.vquote[data-self-id="' + I.rid + '"]'), !0) : (Number(n.text()) ? n.text(Number(n.text()) + 1) : e.$el.find(".vcount").show().find(".vnum").text(Number(n.text()) + 1),
+ C(t, e.$el.find(".vcards")),
+ k.skip++),
+ z.removeAttr("disabled"),
+ e.$loading.hide(),
+ e.reset()
+ } catch (t) {
+ (0,
+ $.default)(e, t, "save")
+ }
+ }).catch(function(t) {
+ (0,
+ $.default)(e, t, "commitEvt")
+ })
+ };
+ z.on("click", L),
+ (0,
+ y.default)(document).on("keydown", function(e) {
+ e = event || e;
+ var t = e.keyCode || e.which || e.charCode;
+ ((e.ctrlKey || e.metaKey) && 13 === t && L(),
+ 9 === t) && ("veditor" == (document.activeElement.id || "") && (e.preventDefault(),
+ x(i[0], " ")))
+ }).on("paste", function(e) {
+ var t = "clipboardData"in e ? e.clipboardData : e.originalEvent && e.originalEvent.clipboardData || window.clipboardData;
+ t && B(t.items, !0)
+ }),
+ i.on("dragenter dragleave dragover drop", function(e) {
+ e.stopPropagation(),
+ e.preventDefault(),
+ "drop" === e.type && B(e.dataTransfer.items)
+ });
+ var B = function(e, t) {
+ for (var n = [], r = 0, o = e.length; r < o; r++) {
+ var a = e[r];
+ if ("string" === a.kind && a.type.match("^text/html"))
+ !t && a.getAsString(function(e) {
+ e && x(i[0], e.replace(/<[^>]+>/g, ""))
+ });
+ else if (-1 !== a.type.indexOf("image")) {
+ n.push(a.getAsFile());
+ continue
+ }
+ }
+ N(n)
+ }
+ , N = function t(n, r) {
+ r = r || 0;
+ var o = n.length;
+ if (o > 0) {
+ var a = n[r];
+ z.attr({
+ disabled: !0
+ });
+ var s = "![Uploading " + a.name + "...]()";
+ x(i[0], s),
+ Q(a, function(l) {
+ 500 != l.code ? (i.val(i.val().replace(s, "![" + a.name + "](" + l.data.url + ")\r\n")),
+ (0,
+ c.default)(i[0]),
+ ++r < o ? t(n, r) : z.removeAttr("disabled")) : (i.val(i.val().replace(s, "")),
+ (0,
+ c.default)(i[0]),
+ e.$el.find(".status-bar").text(l.msg).empty(3e3),
+ z.removeAttr("disabled"))
+ })
+ }
+ }
+ , Q = function(e, t) {
+ var n = new FormData;
+ n.append("image", e),
+ y.default.ajax({
+ type: "post",
+ url: "https://pic.alexhchu.com/api/upload",
+ data: n,
+ success: function(e) {
+ t && t(e)
+ }
+ })
+ }
+ }
+ ,
+ e.exports = i,
+ e.exports.default = i
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0;
+ var r = n(0)
+ , o = function(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }(r)
+ , i = !1;
+ t.default = function(e, t) {
+ if ("AV"in window) {
+ var n = window.AV.version || window.AV.VERSION;
+ parseInt(n.split(".")[0]) > 2 ? i = !!AV.applicationId && !!AV.applicationKey : o.default.deleteInWin("AV", 0)
+ }
+ i ? t && t() : o.default.sdkLoader("//cdn.jsdelivr.net/npm/leancloud-storage@3/dist/av-min.js", "AV", function(n) {
+ var r = "https://"
+ , o = ""
+ , a = e.app_id || e.appId
+ , s = e.app_key || e.appKey;
+ if (!e.serverURLs)
+ switch (a.slice(-9)) {
+ case "-9Nh9j0Va":
+ r += "tab.";
+ break;
+ case "-MdYXbMMI":
+ r += "us."
+ }
+ o = e.serverURLs || r + "avoscloud.com",
+ AV.init({
+ appId: a,
+ appKey: s,
+ serverURLs: o
+ }),
+ i = !0,
+ t && t()
+ })
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ function r(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }
+ t.__esModule = !0;
+ var o = n(37)
+ , i = r(o)
+ , a = n(56)
+ , s = r(a)
+ , l = n(57)
+ , c = r(l)
+ , u = n(54)
+ , d = r(u)
+ , p = n(55)
+ , f = r(p)
+ , h = {
+ zh: s.default,
+ "zh-cn": s.default,
+ "zh-CN": s.default,
+ "zh-TW": c.default,
+ en: d.default,
+ "en-US": d.default,
+ ja: f.default,
+ "ja-JP": f.default
+ };
+ t.default = function(e, t) {
+ return !h[e] && e && t && (h[e] = t),
+ new i.default({
+ phrases: h[e || "zh"],
+ locale: e
+ })
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0,
+ t.default = function(e, t) {
+ if (e.$el && e.$loading.hide().$nodata.hide(),
+ "[object Error]" === {}.toString.call(t)) {
+ var n = t.code || t.message || t.error || "";
+ if (isNaN(n))
+ e.$el && e.$nodata.show('
' + JSON.stringify(t) + " ");
+ else {
+ var r = e.i18n.t("code-" + n)
+ , o = (r == "code-" + n ? void 0 : r) || t.message || t.error || "";
+ 101 == n || -1 == n ? e.$nodata.show() : e.$el && e.$nodata.show('Code ' + n + ": " + o + " ")
+ }
+ } else
+ e.$el && e.$nodata.show('' + JSON.stringify(t) + " ")
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ function r(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }
+ t.__esModule = !0;
+ var o = n(36)
+ , i = r(o)
+ , a = n(0)
+ , s = r(a)
+ , l = n(6)
+ , c = r(l)
+ , u = n(33)
+ , d = new o.Renderer;
+ d.code = function(e, t) {
+ return '' + (!t || !hljs.getLanguage(t) ? s.default.escape(e) : hljs.highlight(t, e).value) + "
"
+ }
+ ,
+ i.default.setOptions({
+ renderer: "hljs"in window ? d : new o.Renderer,
+ highlight: function(e, t) {
+ return "hljs"in window ? t && hljs.getLanguage(t) && hljs.highlight(t, e, !0).value || hljs.highlightAuto(e).value : u(e)
+ },
+ gfm: !0,
+ tables: !0,
+ breaks: !0,
+ pedantic: !1,
+ sanitize: !0,
+ smartLists: !0,
+ smartypants: !0,
+ headerPrefi: "v-"
+ }),
+ t.default = function(e) {
+ return c.default.parse((0,
+ i.default)(e))
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0,
+ t.recordIPFn = t.fetchQQFn = void 0;
+ var r = n(0)
+ , o = function(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }(r)
+ , i = n(2)
+ , a = function(e, t) {
+ var n = o.default.store.get(i.QQCacheKey);
+ n && n.qq == e ? t && t(n) : o.default.ajax({
+ type: "POST",
+ url: "//valine.api.ioliu.cn/getqqinfo",
+ data: {
+ qq: e
+ },
+ success: function(e) {
+ e.errmsg || (o.default.store.set(i.QQCacheKey, e),
+ t && t(e))
+ }
+ })
+ }
+ , s = function(e) {
+ o.default.sdkLoader("//api.ip.sb/jsonip?callback=getIP", "getIP"),
+ window.getIP = function(t) {
+ e && e(t.ip),
+ o.default.deleteInWin("getIP")
+ }
+ };
+ t.fetchQQFn = a,
+ t.recordIPFn = s
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = function(e, t) {
+ if (!e)
+ return "";
+ try {
+ var n = i(e).getTime()
+ , r = (new Date).getTime()
+ , a = r - n
+ , s = Math.floor(a / 864e5);
+ if (0 === s) {
+ var l = a % 864e5
+ , c = Math.floor(l / 36e5);
+ if (0 === c) {
+ var u = l % 36e5
+ , d = Math.floor(u / 6e4);
+ if (0 === d) {
+ var p = u % 6e4;
+ return Math.round(p / 1e3) + " " + t.t("seconds")
+ }
+ return d + " " + t.t("minutes")
+ }
+ return c + " " + t.t("hours")
+ }
+ return s < 0 ? t.t("now") : s < 8 ? s + " " + t.t("days") : o(e)
+ } catch (e) {}
+ }
+ , o = function(e) {
+ var t = a(e.getDate(), 2)
+ , n = a(e.getMonth() + 1, 2);
+ return a(e.getFullYear(), 2) + "-" + n + "-" + t
+ }
+ , i = function e(t) {
+ return t instanceof Date ? t : !isNaN(t) || /^\d+$/.test(t) ? new Date(parseInt(t)) : /GMT/.test(t || "") ? e(new Date(t).getTime()) : (t = (t || "").replace(/(^\s*)|(\s*$)/g, "").replace(/\.\d+/, "").replace(/-/, "/").replace(/-/, "/").replace(/(\d)T(\d)/, "$1 $2").replace(/Z/, " UTC").replace(/([+-]\d\d):?(\d\d)/, " $1$2"),
+ new Date(t))
+ }
+ , a = function(e, t) {
+ for (var n = e.toString(); n.length < t; )
+ n = "0" + n;
+ return n
+ };
+ e.exports = r
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0;
+ var r = n(51)
+ , o = function(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ }
+ }(r);
+ t.default = function(e) {
+ return (0,
+ o.default)(e, {
+ onTagAttr: function(e, t, n, r) {
+ return i(e, t, n, r)
+ },
+ onIgnoreTagAttr: function(e, t, n, r) {
+ return i(e, t, n, r)
+ }
+ }).replace(/\<\/?div\>/gi, "")
+ }
+ ;
+ var i = function(e, t, n, r) {
+ if (/code|pre|span/gi.test(e)) {
+ if ("style" == t)
+ return t + '="' + (/^color/gi.test(n) ? n : "").replace(/(color:[#0-9a-fA-F]{1,6};?).+/gi, "$1") + '"';
+ if ("class" == t)
+ return t + "='" + o.default.escapeAttrValue(n) + "'"
+ }
+ if ("img" === e && ["src", "class"].indexOf(t) > -1)
+ return t + '="' + o.default.escapeAttrValue(n) + '" referrerPolicy="no-referrer" '
+ }
+ }
+ , function(e, t, n) {
+ var r;
+ !function(o) {
+ "use strict";
+ function i(e, t) {
+ var n = (65535 & e) + (65535 & t);
+ return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
+ }
+ function a(e, t) {
+ return e << t | e >>> 32 - t
+ }
+ function s(e, t, n, r, o, s) {
+ return i(a(i(i(t, e), i(r, s)), o), n)
+ }
+ function l(e, t, n, r, o, i, a) {
+ return s(t & n | ~t & r, e, t, o, i, a)
+ }
+ function c(e, t, n, r, o, i, a) {
+ return s(t & r | n & ~r, e, t, o, i, a)
+ }
+ function u(e, t, n, r, o, i, a) {
+ return s(t ^ n ^ r, e, t, o, i, a)
+ }
+ function d(e, t, n, r, o, i, a) {
+ return s(n ^ (t | ~r), e, t, o, i, a)
+ }
+ function p(e, t) {
+ e[t >> 5] |= 128 << t % 32,
+ e[14 + (t + 64 >>> 9 << 4)] = t;
+ var n, r, o, a, s, p = 1732584193, f = -271733879, h = -1732584194, v = 271733878;
+ for (n = 0; n < e.length; n += 16)
+ r = p,
+ o = f,
+ a = h,
+ s = v,
+ p = l(p, f, h, v, e[n], 7, -680876936),
+ v = l(v, p, f, h, e[n + 1], 12, -389564586),
+ h = l(h, v, p, f, e[n + 2], 17, 606105819),
+ f = l(f, h, v, p, e[n + 3], 22, -1044525330),
+ p = l(p, f, h, v, e[n + 4], 7, -176418897),
+ v = l(v, p, f, h, e[n + 5], 12, 1200080426),
+ h = l(h, v, p, f, e[n + 6], 17, -1473231341),
+ f = l(f, h, v, p, e[n + 7], 22, -45705983),
+ p = l(p, f, h, v, e[n + 8], 7, 1770035416),
+ v = l(v, p, f, h, e[n + 9], 12, -1958414417),
+ h = l(h, v, p, f, e[n + 10], 17, -42063),
+ f = l(f, h, v, p, e[n + 11], 22, -1990404162),
+ p = l(p, f, h, v, e[n + 12], 7, 1804603682),
+ v = l(v, p, f, h, e[n + 13], 12, -40341101),
+ h = l(h, v, p, f, e[n + 14], 17, -1502002290),
+ f = l(f, h, v, p, e[n + 15], 22, 1236535329),
+ p = c(p, f, h, v, e[n + 1], 5, -165796510),
+ v = c(v, p, f, h, e[n + 6], 9, -1069501632),
+ h = c(h, v, p, f, e[n + 11], 14, 643717713),
+ f = c(f, h, v, p, e[n], 20, -373897302),
+ p = c(p, f, h, v, e[n + 5], 5, -701558691),
+ v = c(v, p, f, h, e[n + 10], 9, 38016083),
+ h = c(h, v, p, f, e[n + 15], 14, -660478335),
+ f = c(f, h, v, p, e[n + 4], 20, -405537848),
+ p = c(p, f, h, v, e[n + 9], 5, 568446438),
+ v = c(v, p, f, h, e[n + 14], 9, -1019803690),
+ h = c(h, v, p, f, e[n + 3], 14, -187363961),
+ f = c(f, h, v, p, e[n + 8], 20, 1163531501),
+ p = c(p, f, h, v, e[n + 13], 5, -1444681467),
+ v = c(v, p, f, h, e[n + 2], 9, -51403784),
+ h = c(h, v, p, f, e[n + 7], 14, 1735328473),
+ f = c(f, h, v, p, e[n + 12], 20, -1926607734),
+ p = u(p, f, h, v, e[n + 5], 4, -378558),
+ v = u(v, p, f, h, e[n + 8], 11, -2022574463),
+ h = u(h, v, p, f, e[n + 11], 16, 1839030562),
+ f = u(f, h, v, p, e[n + 14], 23, -35309556),
+ p = u(p, f, h, v, e[n + 1], 4, -1530992060),
+ v = u(v, p, f, h, e[n + 4], 11, 1272893353),
+ h = u(h, v, p, f, e[n + 7], 16, -155497632),
+ f = u(f, h, v, p, e[n + 10], 23, -1094730640),
+ p = u(p, f, h, v, e[n + 13], 4, 681279174),
+ v = u(v, p, f, h, e[n], 11, -358537222),
+ h = u(h, v, p, f, e[n + 3], 16, -722521979),
+ f = u(f, h, v, p, e[n + 6], 23, 76029189),
+ p = u(p, f, h, v, e[n + 9], 4, -640364487),
+ v = u(v, p, f, h, e[n + 12], 11, -421815835),
+ h = u(h, v, p, f, e[n + 15], 16, 530742520),
+ f = u(f, h, v, p, e[n + 2], 23, -995338651),
+ p = d(p, f, h, v, e[n], 6, -198630844),
+ v = d(v, p, f, h, e[n + 7], 10, 1126891415),
+ h = d(h, v, p, f, e[n + 14], 15, -1416354905),
+ f = d(f, h, v, p, e[n + 5], 21, -57434055),
+ p = d(p, f, h, v, e[n + 12], 6, 1700485571),
+ v = d(v, p, f, h, e[n + 3], 10, -1894986606),
+ h = d(h, v, p, f, e[n + 10], 15, -1051523),
+ f = d(f, h, v, p, e[n + 1], 21, -2054922799),
+ p = d(p, f, h, v, e[n + 8], 6, 1873313359),
+ v = d(v, p, f, h, e[n + 15], 10, -30611744),
+ h = d(h, v, p, f, e[n + 6], 15, -1560198380),
+ f = d(f, h, v, p, e[n + 13], 21, 1309151649),
+ p = d(p, f, h, v, e[n + 4], 6, -145523070),
+ v = d(v, p, f, h, e[n + 11], 10, -1120210379),
+ h = d(h, v, p, f, e[n + 2], 15, 718787259),
+ f = d(f, h, v, p, e[n + 9], 21, -343485551),
+ p = i(p, r),
+ f = i(f, o),
+ h = i(h, a),
+ v = i(v, s);
+ return [p, f, h, v]
+ }
+ function f(e) {
+ var t, n = "", r = 32 * e.length;
+ for (t = 0; t < r; t += 8)
+ n += String.fromCharCode(e[t >> 5] >>> t % 32 & 255);
+ return n
+ }
+ function h(e) {
+ var t, n = [];
+ for (n[(e.length >> 2) - 1] = void 0,
+ t = 0; t < n.length; t += 1)
+ n[t] = 0;
+ var r = 8 * e.length;
+ for (t = 0; t < r; t += 8)
+ n[t >> 5] |= (255 & e.charCodeAt(t / 8)) << t % 32;
+ return n
+ }
+ function v(e) {
+ return f(p(h(e), 8 * e.length))
+ }
+ function g(e, t) {
+ var n, r, o = h(e), i = [], a = [];
+ for (i[15] = a[15] = void 0,
+ o.length > 16 && (o = p(o, 8 * e.length)),
+ n = 0; n < 16; n += 1)
+ i[n] = 909522486 ^ o[n],
+ a[n] = 1549556828 ^ o[n];
+ return r = p(i.concat(h(t)), 512 + 8 * t.length),
+ f(p(a.concat(r), 640))
+ }
+ function m(e) {
+ var t, n, r = "0123456789abcdef", o = "";
+ for (n = 0; n < e.length; n += 1)
+ t = e.charCodeAt(n),
+ o += r.charAt(t >>> 4 & 15) + r.charAt(15 & t);
+ return o
+ }
+ function y(e) {
+ return unescape(encodeURIComponent(e))
+ }
+ function b(e) {
+ return v(y(e))
+ }
+ function w(e) {
+ return m(b(e))
+ }
+ function x(e, t) {
+ return g(y(e), y(t))
+ }
+ function k(e, t) {
+ return m(x(e, t))
+ }
+ function _(e, t, n) {
+ return t ? n ? x(t, e) : k(t, e) : n ? b(e) : w(e)
+ }
+ void 0 !== (r = function() {
+ return _
+ }
+ .call(t, n, t, e)) && (e.exports = r)
+ }()
+ }
+ , function(e, t, n) {
+ "use strict";
+ t.__esModule = !0;
+ var r = function(e) {
+ e = e || navigator.userAgent;
+ var t = {}
+ , n = {
+ Trident: e.indexOf("Trident") > -1 || e.indexOf("NET CLR") > -1,
+ Presto: e.indexOf("Presto") > -1,
+ WebKit: e.indexOf("AppleWebKit") > -1,
+ Gecko: e.indexOf("Gecko/") > -1,
+ Safari: e.indexOf("Safari") > -1,
+ Edge: e.indexOf("Edge") > -1 || e.indexOf("Edg") > -1,
+ Chrome: e.indexOf("Chrome") > -1 || e.indexOf("CriOS") > -1,
+ IE: e.indexOf("MSIE") > -1 || e.indexOf("Trident") > -1,
+ Firefox: e.indexOf("Firefox") > -1 || e.indexOf("FxiOS") > -1,
+ "Firefox Focus": e.indexOf("Focus") > -1,
+ Chromium: e.indexOf("Chromium") > -1,
+ Opera: e.indexOf("Opera") > -1 || e.indexOf("OPR") > -1,
+ Vivaldi: e.indexOf("Vivaldi") > -1,
+ Yandex: e.indexOf("YaBrowser") > -1,
+ Kindle: e.indexOf("Kindle") > -1 || e.indexOf("Silk/") > -1,
+ 360: e.indexOf("360EE") > -1 || e.indexOf("360SE") > -1,
+ UC: e.indexOf("UC") > -1 || e.indexOf(" UBrowser") > -1,
+ QQBrowser: e.indexOf("QQBrowser") > -1,
+ QQ: e.indexOf("QQ/") > -1,
+ Baidu: e.indexOf("Baidu") > -1 || e.indexOf("BIDUBrowser") > -1,
+ Maxthon: e.indexOf("Maxthon") > -1,
+ Sogou: e.indexOf("MetaSr") > -1 || e.indexOf("Sogou") > -1,
+ LBBROWSER: e.indexOf("LBBROWSER") > -1,
+ "2345Explorer": e.indexOf("2345Explorer") > -1,
+ TheWorld: e.indexOf("TheWorld") > -1,
+ XiaoMi: e.indexOf("MiuiBrowser") > -1,
+ Quark: e.indexOf("Quark") > -1,
+ Qiyu: e.indexOf("Qiyu") > -1,
+ Wechat: e.indexOf("MicroMessenger") > -1,
+ Taobao: e.indexOf("AliApp(TB") > -1,
+ Alipay: e.indexOf("AliApp(AP") > -1,
+ Weibo: e.indexOf("Weibo") > -1,
+ Douban: e.indexOf("com.douban.frodo") > -1,
+ Suning: e.indexOf("SNEBUY-APP") > -1,
+ iQiYi: e.indexOf("IqiyiApp") > -1,
+ Windows: e.indexOf("Windows") > -1,
+ Linux: e.indexOf("Linux") > -1 || e.indexOf("X11") > -1,
+ macOS: e.indexOf("Macintosh") > -1,
+ Android: e.indexOf("Android") > -1 || e.indexOf("Adr") > -1,
+ Ubuntu: e.indexOf("Ubuntu") > -1,
+ FreeBSD: e.indexOf("FreeBSD") > -1,
+ Debian: e.indexOf("Debian") > -1,
+ "Windows Phone": e.indexOf("IEMobile") > -1 || e.indexOf("Windows Phone") > -1,
+ BlackBerry: e.indexOf("BlackBerry") > -1 || e.indexOf("RIM") > -1 || e.indexOf("BB10") > -1,
+ MeeGo: e.indexOf("MeeGo") > -1,
+ Symbian: e.indexOf("Symbian") > -1,
+ iOS: e.indexOf("like Mac OS X") > -1,
+ "Chrome OS": e.indexOf("CrOS") > -1,
+ WebOS: e.indexOf("hpwOS") > -1,
+ Mobile: e.indexOf("Mobi") > -1 || e.indexOf("iPh") > -1 || e.indexOf("480") > -1,
+ Tablet: e.indexOf("Tablet") > -1 || e.indexOf("Pad") > -1 || e.indexOf("Nexus 7") > -1
+ };
+ n.Mobile && (n.Mobile = !(e.indexOf("iPad") > -1));
+ var r = {
+ browser: ["Safari", "Chrome", "Edge", "IE", "Firefox", "Firefox Focus", "Chromium", "Opera", "Vivaldi", "Yandex", "Kindle", "360", "UC", "QQBrowser", "QQ", "Baidu", "Maxthon", "Sogou", "LBBROWSER", "2345Explorer", "TheWorld", "XiaoMi", "Quark", "Qiyu", "Wechat", "Taobao", "Alipay", "Weibo", "Douban", "Suning", "iQiYi"],
+ os: ["Windows", "Linux", "Mac OS", "macOS", "Android", "Ubuntu", "FreeBSD", "Debian", "iOS", "Windows Phone", "BlackBerry", "MeeGo", "Symbian", "Chrome OS", "WebOS"]
+ };
+ for (var o in r)
+ if (r.hasOwnProperty(o))
+ for (var i = 0, a = r[o].length; i < a; i++) {
+ var s = r[o][i];
+ n[s] && (t[o] = s)
+ }
+ var l = {
+ Windows: function() {
+ var t = e.replace(/^.*Windows NT ([\d.]+).*$/, "$1");
+ return {
+ 6.4: "10",
+ 6.3: "8.1",
+ 6.2: "8",
+ 6.1: "7",
+ "6.0": "Vista",
+ 5.2: "XP",
+ 5.1: "XP",
+ "5.0": "2000"
+ }[t] || t
+ },
+ Android: e.replace(/^.*Android ([\d.]+);.*$/, "$1"),
+ iOS: e.replace(/^.*OS ([\d_]+) like.*$/, "$1").replace(/_/g, "."),
+ Debian: e.replace(/^.*Debian\/([\d.]+).*$/, "$1"),
+ "Windows Phone": e.replace(/^.*Windows Phone( OS)? ([\d.]+);.*$/, "$2"),
+ macOS: e.replace(/^.*Mac OS X ([\d_]+).*$/, "$1").replace(/_/g, "."),
+ WebOS: e.replace(/^.*hpwOS\/([\d.]+);.*$/, "$1"),
+ BlackBerry: e.replace(/^.*BB([\d.]+);*$/, "$1")
+ };
+ t.osVersion = "";
+ var c = l[t.os];
+ c && (t.osVersion = "function" == typeof c ? c() : c == e ? "" : c);
+ var u = {
+ Safari: e.replace(/^.*Version\/([\d.]+).*$/, "$1"),
+ Chrome: e.replace(/^.*Chrome\/([\d.]+).*$/, "$1").replace(/^.*CriOS\/([\d.]+).*$/, "$1"),
+ IE: e.replace(/^.*MSIE ([\d.]+).*$/, "$1").replace(/^.*rv:([\d.]+).*$/, "$1"),
+ Edge: e.replace(/^.*Edge?\/([\d.]+).*$/, "$1"),
+ Firefox: e.replace(/^.*Firefox\/([\d.]+).*$/, "$1").replace(/^.*FxiOS\/([\d.]+).*$/, "$1"),
+ "Firefox Focus": e.replace(/^.*Focus\/([\d.]+).*$/, "$1"),
+ Chromium: e.replace(/^.*Chromium\/([\d.]+).*$/, "$1"),
+ Opera: e.replace(/^.*Opera\/([\d.]+).*$/, "$1").replace(/^.*OPR\/([\d.]+).*$/, "$1"),
+ Vivaldi: e.replace(/^.*Vivaldi\/([\d.]+).*$/, "$1"),
+ Yandex: e.replace(/^.*YaBrowser\/([\d.]+).*$/, "$1"),
+ Kindle: e.replace(/^.*Version\/([\d.]+).*$/, "$1"),
+ Maxthon: e.replace(/^.*Maxthon\/([\d.]+).*$/, "$1"),
+ QQBrowser: e.replace(/^.*QQBrowser\/([\d.]+).*$/, "$1"),
+ QQ: e.replace(/^.*QQ\/([\d.]+).*$/, "$1"),
+ Baidu: e.replace(/^.*BIDUBrowser[\s\/]([\d.]+).*$/, "$1"),
+ UC: e.replace(/^.*UC?Browser\/([\d.]+).*$/, "$1"),
+ Sogou: e.replace(/^.*SE ([\d.X]+).*$/, "$1").replace(/^.*SogouMobileBrowser\/([\d.]+).*$/, "$1"),
+ "2345Explorer": e.replace(/^.*2345Explorer\/([\d.]+).*$/, "$1"),
+ TheWorld: e.replace(/^.*TheWorld ([\d.]+).*$/, "$1"),
+ XiaoMi: e.replace(/^.*MiuiBrowser\/([\d.]+).*$/, "$1"),
+ Quark: e.replace(/^.*Quark\/([\d.]+).*$/, "$1"),
+ Qiyu: e.replace(/^.*Qiyu\/([\d.]+).*$/, "$1"),
+ Wechat: e.replace(/^.*MicroMessenger\/([\d.]+).*$/, "$1"),
+ Taobao: e.replace(/^.*AliApp\(TB\/([\d.]+).*$/, "$1"),
+ Alipay: e.replace(/^.*AliApp\(AP\/([\d.]+).*$/, "$1"),
+ Weibo: e.replace(/^.*weibo__([\d.]+).*$/, "$1"),
+ Douban: e.replace(/^.*com.douban.frodo\/([\d.]+).*$/, "$1"),
+ Suning: e.replace(/^.*SNEBUY-APP([\d.]+).*$/, "$1"),
+ iQiYi: e.replace(/^.*IqiyiVersion\/([\d.]+).*$/, "$1")
+ };
+ t.version = "";
+ var d = u[t.browser];
+ return d && (t.version = "function" == typeof d ? d() : d == e ? "" : d),
+ void 0 == t.browser && (t.browser = "Unknow App"),
+ t
+ };
+ t.default = r
+ }
+ , function(e, t, n) {
+ var r, o;
+ !function(n, i) {
+ var i = function(e, t, n) {
+ function r(o, i, a) {
+ return a = Object.create(r.fn),
+ o && a.push.apply(a, o[t] ? [o] : "" + o === o ? /= 3 && (i = n),
+ "[object Array]" === o.call(e) ? a(e, t, i) : "string" == typeof e ? s(e, t, i) : l(e, t, i)
+ };
+ e.exports = c
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = Array.prototype.slice
+ , o = Object.prototype.toString;
+ e.exports = function(e) {
+ var t = this;
+ if ("function" != typeof t || "[object Function]" !== o.call(t))
+ throw new TypeError("Function.prototype.bind called on incompatible " + t);
+ for (var n, i = r.call(arguments, 1), a = function() {
+ if (this instanceof n) {
+ var o = t.apply(this, i.concat(r.call(arguments)));
+ return Object(o) === o ? o : this
+ }
+ return t.apply(e, i.concat(r.call(arguments)))
+ }, s = Math.max(0, t.length - i.length), l = [], c = 0; c < s; c++)
+ l.push("$" + c);
+ if (n = Function("binder", "return function (" + l.join(",") + "){ return binder.apply(this,arguments); }")(a),
+ t.prototype) {
+ var u = function() {};
+ u.prototype = t.prototype,
+ n.prototype = new u,
+ u.prototype = null
+ }
+ return n
+ }
+ }
+ , function(e, t, n) {
+ !function(t, n) {
+ e.exports = n()
+ }(0, function() {
+ "use strict";
+ function e(e) {
+ return '' + e + " "
+ }
+ var t = function(e, t) {
+ return t = {
+ exports: {}
+ },
+ e(t, t.exports),
+ t.exports
+ }(function(e) {
+ var t = e.exports = function() {
+ return new RegExp("(?:" + t.line().source + ")|(?:" + t.block().source + ")","gm")
+ }
+ ;
+ t.line = function() {
+ return /(?:^|\s)\/\/(.+?)$/gm
+ }
+ ,
+ t.block = function() {
+ return /\/\*([\S\s]*?)\*\//gm
+ }
+ })
+ , n = ["23AC69", "91C132", "F19726", "E8552D", "1AAB8E", "E1147F", "2980C1", "1BA1E6", "9FA0A0", "F19726", "E30B20", "E30B20", "A3338B"];
+ return function(r, o) {
+ void 0 === o && (o = {});
+ var i = o.colors;
+ void 0 === i && (i = n);
+ var a = 0
+ , s = {}
+ , l = /[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|\w+/
+ , c = /
+ , u = new RegExp("(" + l.source + "|" + c.source + ")|(" + t().source + ")","gmi");
+ return r.replace(u, function(t, n, r) {
+ if (r)
+ return e(r);
+ if ("<" === n)
+ return "<";
+ var o;
+ s[n] ? o = s[n] : (o = i[a],
+ s[n] = o);
+ var l = '' + n + " ";
+ return a = ++a % i.length,
+ l
+ })
+ }
+ })
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(4);
+ e.exports = r.call(Function.call, Object.prototype.hasOwnProperty)
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = Function.prototype.toString
+ , o = /^\s*class\b/
+ , i = function(e) {
+ try {
+ var t = r.call(e);
+ return o.test(t)
+ } catch (e) {
+ return !1
+ }
+ }
+ , a = function(e) {
+ try {
+ return !i(e) && (r.call(e),
+ !0)
+ } catch (e) {
+ return !1
+ }
+ }
+ , s = Object.prototype.toString
+ , l = "function" == typeof Symbol && "symbol" == typeof Symbol.toStringTag;
+ e.exports = function(e) {
+ if (!e)
+ return !1;
+ if ("function" != typeof e && "object" != typeof e)
+ return !1;
+ if ("function" == typeof e && !e.prototype)
+ return !0;
+ if (l)
+ return a(e);
+ if (i(e))
+ return !1;
+ var t = s.call(e);
+ return "[object Function]" === t || "[object GeneratorFunction]" === t
+ }
+ }
+ , function(e, t, n) {
+ (function(t) {
+ !function(t) {
+ "use strict";
+ function n(e) {
+ this.tokens = [],
+ this.tokens.links = {},
+ this.options = e || h.defaults,
+ this.rules = v.normal,
+ this.options.pedantic ? this.rules = v.pedantic : this.options.gfm && (this.options.tables ? this.rules = v.tables : this.rules = v.gfm)
+ }
+ function r(e, t) {
+ if (this.options = t || h.defaults,
+ this.links = e,
+ this.rules = g.normal,
+ this.renderer = this.options.renderer || new o,
+ this.renderer.options = this.options,
+ !this.links)
+ throw new Error("Tokens array requires a `links` property.");
+ this.options.pedantic ? this.rules = g.pedantic : this.options.gfm && (this.options.breaks ? this.rules = g.breaks : this.rules = g.gfm)
+ }
+ function o(e) {
+ this.options = e || h.defaults
+ }
+ function i() {}
+ function a(e) {
+ this.tokens = [],
+ this.token = null,
+ this.options = e || h.defaults,
+ this.options.renderer = this.options.renderer || new o,
+ this.renderer = this.options.renderer,
+ this.renderer.options = this.options
+ }
+ function s(e, t) {
+ return e.replace(t ? /&/g : /&(?!#?\w+;)/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'")
+ }
+ function l(e) {
+ return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi, function(e, t) {
+ return t = t.toLowerCase(),
+ "colon" === t ? ":" : "#" === t.charAt(0) ? "x" === t.charAt(1) ? String.fromCharCode(parseInt(t.substring(2), 16)) : String.fromCharCode(+t.substring(1)) : ""
+ })
+ }
+ function c(e, t) {
+ return e = e.source || e,
+ t = t || "",
+ {
+ replace: function(t, n) {
+ return n = n.source || n,
+ n = n.replace(/(^|[^\[])\^/g, "$1"),
+ e = e.replace(t, n),
+ this
+ },
+ getRegex: function() {
+ return new RegExp(e,t)
+ }
+ }
+ }
+ function u(e, t) {
+ return m[" " + e] || (/^[^:]+:\/*[^/]*$/.test(e) ? m[" " + e] = e + "/" : m[" " + e] = e.replace(/[^/]*$/, "")),
+ e = m[" " + e],
+ "//" === t.slice(0, 2) ? e.replace(/:[\s\S]*/, ":") + t : "/" === t.charAt(0) ? e.replace(/(:\/*[^/]*)[\s\S]*/, "$1") + t : e + t
+ }
+ function d() {}
+ function p(e) {
+ for (var t, n, r = 1; r < arguments.length; r++) {
+ t = arguments[r];
+ for (n in t)
+ Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n])
+ }
+ return e
+ }
+ function f(e, t) {
+ var n = e.replace(/([^\\])\|/g, "$1 |").split(/ +\| */)
+ , r = 0;
+ if (n.length > t)
+ n.splice(t);
+ else
+ for (; n.length < t; )
+ n.push("");
+ for (; r < n.length; r++)
+ n[r] = n[r].replace(/\\\|/g, "|");
+ return n
+ }
+ function h(e, t, r) {
+ if (void 0 === e || null === e)
+ throw new Error("marked(): input parameter is undefined or null");
+ if ("string" != typeof e)
+ throw new Error("marked(): input parameter is of type " + Object.prototype.toString.call(e) + ", string expected");
+ if (r || "function" == typeof t) {
+ r || (r = t,
+ t = null),
+ t = p({}, h.defaults, t || {});
+ var o, i, l = t.highlight, c = 0;
+ try {
+ o = n.lex(e, t)
+ } catch (e) {
+ return r(e)
+ }
+ i = o.length;
+ var u = function(e) {
+ if (e)
+ return t.highlight = l,
+ r(e);
+ var n;
+ try {
+ n = a.parse(o, t)
+ } catch (t) {
+ e = t
+ }
+ return t.highlight = l,
+ e ? r(e) : r(null, n)
+ };
+ if (!l || l.length < 3)
+ return u();
+ if (delete t.highlight,
+ !i)
+ return u();
+ for (; c < o.length; c++)
+ !function(e) {
+ "code" !== e.type ? --i || u() : l(e.text, e.lang, function(t, n) {
+ return t ? u(t) : null == n || n === e.text ? --i || u() : (e.text = n,
+ e.escaped = !0,
+ void (--i || u()))
+ })
+ }(o[c])
+ } else
+ try {
+ return t && (t = p({}, h.defaults, t)),
+ a.parse(n.lex(e, t), t)
+ } catch (e) {
+ if (e.message += "\nPlease report this to https://github.com/markedjs/marked.",
+ (t || h.defaults).silent)
+ return "An error occurred:
" + s(e.message + "", !0) + " ";
+ throw e
+ }
+ }
+ var v = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: d,
+ hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+ nptable: d,
+ blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+ list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: "^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",
+ def: /^ {0,3}\[(label)\]: *\n? *([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+ table: d,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+ text: /^[^\n]+/
+ };
+ v._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,
+ v._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,
+ v.def = c(v.def).replace("label", v._label).replace("title", v._title).getRegex(),
+ v.bullet = /(?:[*+-]|\d+\.)/,
+ v.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,
+ v.item = c(v.item, "gm").replace(/bull/g, v.bullet).getRegex(),
+ v.list = c(v.list).replace(/bull/g, v.bullet).replace("hr", "\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def", "\\n+(?=" + v.def.source + ")").getRegex(),
+ v._tag = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",
+ v._comment = //,
+ v.html = c(v.html, "i").replace("comment", v._comment).replace("tag", v._tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),
+ v.paragraph = c(v.paragraph).replace("hr", v.hr).replace("heading", v.heading).replace("lheading", v.lheading).replace("tag", v._tag).getRegex(),
+ v.blockquote = c(v.blockquote).replace("paragraph", v.paragraph).getRegex(),
+ v.normal = p({}, v),
+ v.gfm = p({}, v.normal, {
+ fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,
+ paragraph: /^/,
+ heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
+ }),
+ v.gfm.paragraph = c(v.paragraph).replace("(?!", "(?!" + v.gfm.fences.source.replace("\\1", "\\2") + "|" + v.list.source.replace("\\1", "\\3") + "|").getRegex(),
+ v.tables = p({}, v.gfm, {
+ nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+ table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
+ }),
+ v.pedantic = p({}, v.normal, {
+ html: c("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?\\1> *(?:\\n{2,}|\\s*$)| \\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", v._comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
+ def: /^ *\[([^\]]+)\]: *([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
+ }),
+ n.rules = v,
+ n.lex = function(e, t) {
+ return new n(t).lex(e)
+ }
+ ,
+ n.prototype.lex = function(e) {
+ return e = e.replace(/\r\n|\r/g, "\n").replace(/\t/g, " ").replace(/\u00a0/g, " ").replace(/\u2424/g, "\n"),
+ this.token(e, !0)
+ }
+ ,
+ n.prototype.token = function(e, t) {
+ e = e.replace(/^ +$/gm, "");
+ for (var n, r, o, i, a, s, l, c, u, d, p, h, g; e; )
+ if ((o = this.rules.newline.exec(e)) && (e = e.substring(o[0].length),
+ o[0].length > 1 && this.tokens.push({
+ type: "space"
+ })),
+ o = this.rules.code.exec(e))
+ e = e.substring(o[0].length),
+ o = o[0].replace(/^ {4}/gm, ""),
+ this.tokens.push({
+ type: "code",
+ text: this.options.pedantic ? o : o.replace(/\n+$/, "")
+ });
+ else if (o = this.rules.fences.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "code",
+ lang: o[2],
+ text: o[3] || ""
+ });
+ else if (o = this.rules.heading.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "heading",
+ depth: o[1].length,
+ text: o[2]
+ });
+ else if (t && (o = this.rules.nptable.exec(e)) && (s = {
+ type: "table",
+ header: f(o[1].replace(/^ *| *\| *$/g, "")),
+ align: o[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
+ cells: o[3] ? o[3].replace(/\n$/, "").split("\n") : []
+ },
+ s.header.length === s.align.length)) {
+ for (e = e.substring(o[0].length),
+ c = 0; c < s.align.length; c++)
+ /^ *-+: *$/.test(s.align[c]) ? s.align[c] = "right" : /^ *:-+: *$/.test(s.align[c]) ? s.align[c] = "center" : /^ *:-+ *$/.test(s.align[c]) ? s.align[c] = "left" : s.align[c] = null;
+ for (c = 0; c < s.cells.length; c++)
+ s.cells[c] = f(s.cells[c], s.header.length);
+ this.tokens.push(s)
+ } else if (o = this.rules.hr.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "hr"
+ });
+ else if (o = this.rules.blockquote.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "blockquote_start"
+ }),
+ o = o[0].replace(/^ *> ?/gm, ""),
+ this.token(o, t),
+ this.tokens.push({
+ type: "blockquote_end"
+ });
+ else if (o = this.rules.list.exec(e)) {
+ for (e = e.substring(o[0].length),
+ i = o[2],
+ p = i.length > 1,
+ this.tokens.push({
+ type: "list_start",
+ ordered: p,
+ start: p ? +i : ""
+ }),
+ o = o[0].match(this.rules.item),
+ n = !1,
+ d = o.length,
+ c = 0; c < d; c++)
+ s = o[c],
+ l = s.length,
+ s = s.replace(/^ *([*+-]|\d+\.) +/, ""),
+ ~s.indexOf("\n ") && (l -= s.length,
+ s = this.options.pedantic ? s.replace(/^ {1,4}/gm, "") : s.replace(new RegExp("^ {1," + l + "}","gm"), "")),
+ this.options.smartLists && c !== d - 1 && (a = v.bullet.exec(o[c + 1])[0],
+ i === a || i.length > 1 && a.length > 1 || (e = o.slice(c + 1).join("\n") + e,
+ c = d - 1)),
+ r = n || /\n\n(?!\s*$)/.test(s),
+ c !== d - 1 && (n = "\n" === s.charAt(s.length - 1),
+ r || (r = n)),
+ h = /^\[[ xX]\] /.test(s),
+ g = void 0,
+ h && (g = " " !== s[1],
+ s = s.replace(/^\[[ xX]\] +/, "")),
+ this.tokens.push({
+ type: r ? "loose_item_start" : "list_item_start",
+ task: h,
+ checked: g
+ }),
+ this.token(s, !1),
+ this.tokens.push({
+ type: "list_item_end"
+ });
+ this.tokens.push({
+ type: "list_end"
+ })
+ } else if (o = this.rules.html.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: this.options.sanitize ? "paragraph" : "html",
+ pre: !this.options.sanitizer && ("pre" === o[1] || "script" === o[1] || "style" === o[1]),
+ text: o[0]
+ });
+ else if (t && (o = this.rules.def.exec(e)))
+ e = e.substring(o[0].length),
+ o[3] && (o[3] = o[3].substring(1, o[3].length - 1)),
+ u = o[1].toLowerCase().replace(/\s+/g, " "),
+ this.tokens.links[u] || (this.tokens.links[u] = {
+ href: o[2],
+ title: o[3]
+ });
+ else if (t && (o = this.rules.table.exec(e)) && (s = {
+ type: "table",
+ header: f(o[1].replace(/^ *| *\| *$/g, "")),
+ align: o[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
+ cells: o[3] ? o[3].replace(/(?: *\| *)?\n$/, "").split("\n") : []
+ },
+ s.header.length === s.align.length)) {
+ for (e = e.substring(o[0].length),
+ c = 0; c < s.align.length; c++)
+ /^ *-+: *$/.test(s.align[c]) ? s.align[c] = "right" : /^ *:-+: *$/.test(s.align[c]) ? s.align[c] = "center" : /^ *:-+ *$/.test(s.align[c]) ? s.align[c] = "left" : s.align[c] = null;
+ for (c = 0; c < s.cells.length; c++)
+ s.cells[c] = f(s.cells[c].replace(/^ *\| *| *\| *$/g, ""), s.header.length);
+ this.tokens.push(s)
+ } else if (o = this.rules.lheading.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "heading",
+ depth: "=" === o[2] ? 1 : 2,
+ text: o[1]
+ });
+ else if (t && (o = this.rules.paragraph.exec(e)))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "paragraph",
+ text: "\n" === o[1].charAt(o[1].length - 1) ? o[1].slice(0, -1) : o[1]
+ });
+ else if (o = this.rules.text.exec(e))
+ e = e.substring(o[0].length),
+ this.tokens.push({
+ type: "text",
+ text: o[0]
+ });
+ else if (e)
+ throw new Error("Infinite loop on byte: " + e.charCodeAt(0));
+ return this.tokens
+ }
+ ;
+ var g = {
+ escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
+ autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+ url: d,
+ tag: "^comment|^[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",
+ link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+ reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+ nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+ strong: /^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)|^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)/,
+ em: /^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*][\s\S]*?[^\s])\*(?!\*)|^_([^\s_])_(?!_)|^\*([^\s*])\*(?!\*)/,
+ code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
+ br: /^ {2,}\n(?!\s*$)/,
+ del: d,
+ text: /^[\s\S]+?(?=[\\?@\[\]\\^_`{|}~])/g,
+ g._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,
+ g._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,
+ g.autolink = c(g.autolink).replace("scheme", g._scheme).replace("email", g._email).getRegex(),
+ g._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,
+ g.tag = c(g.tag).replace("comment", v._comment).replace("attribute", g._attribute).getRegex(),
+ g._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,
+ g._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f()\\]*\)|[^\s\x00-\x1f()\\])*?)/,
+ g._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,
+ g.link = c(g.link).replace("label", g._label).replace("href", g._href).replace("title", g._title).getRegex(),
+ g.reflink = c(g.reflink).replace("label", g._label).getRegex(),
+ g.normal = p({}, g),
+ g.pedantic = p({}, g.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+ link: c(/^!?\[(label)\]\((.*?)\)/).replace("label", g._label).getRegex(),
+ reflink: c(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", g._label).getRegex()
+ }),
+ g.gfm = p({}, g.normal, {
+ escape: c(g.escape).replace("])", "~|])").getRegex(),
+ url: c(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("email", g._email).getRegex(),
+ _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+ del: /^~~(?=\S)([\s\S]*?\S)~~/,
+ text: c(g.text).replace("]|", "~]|").replace("|", "|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|").getRegex()
+ }),
+ g.breaks = p({}, g.gfm, {
+ br: c(g.br).replace("{2,}", "*").getRegex(),
+ text: c(g.gfm.text).replace("{2,}", "*").getRegex()
+ }),
+ r.rules = g,
+ r.output = function(e, t, n) {
+ return new r(t,n).output(e)
+ }
+ ,
+ r.prototype.output = function(e) {
+ for (var t, n, o, i, a, l = ""; e; )
+ if (a = this.rules.escape.exec(e))
+ e = e.substring(a[0].length),
+ l += a[1];
+ else if (a = this.rules.autolink.exec(e))
+ e = e.substring(a[0].length),
+ "@" === a[2] ? (n = s(this.mangle(a[1])),
+ o = "mailto:" + n) : (n = s(a[1]),
+ o = n),
+ l += this.renderer.link(o, null, n);
+ else if (this.inLink || !(a = this.rules.url.exec(e))) {
+ if (a = this.rules.tag.exec(e))
+ !this.inLink && /^/i.test(a[0]) && (this.inLink = !1),
+ e = e.substring(a[0].length),
+ l += this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(a[0]) : s(a[0]) : a[0];
+ else if (a = this.rules.link.exec(e))
+ e = e.substring(a[0].length),
+ this.inLink = !0,
+ o = a[2],
+ this.options.pedantic ? (t = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(o),
+ t ? (o = t[1],
+ i = t[3]) : i = "") : i = a[3] ? a[3].slice(1, -1) : "",
+ o = o.trim().replace(/^<([\s\S]*)>$/, "$1"),
+ l += this.outputLink(a, {
+ href: r.escapes(o),
+ title: r.escapes(i)
+ }),
+ this.inLink = !1;
+ else if ((a = this.rules.reflink.exec(e)) || (a = this.rules.nolink.exec(e))) {
+ if (e = e.substring(a[0].length),
+ t = (a[2] || a[1]).replace(/\s+/g, " "),
+ !(t = this.links[t.toLowerCase()]) || !t.href) {
+ l += a[0].charAt(0),
+ e = a[0].substring(1) + e;
+ continue
+ }
+ this.inLink = !0,
+ l += this.outputLink(a, t),
+ this.inLink = !1
+ } else if (a = this.rules.strong.exec(e))
+ e = e.substring(a[0].length),
+ l += this.renderer.strong(this.output(a[4] || a[3] || a[2] || a[1]));
+ else if (a = this.rules.em.exec(e))
+ e = e.substring(a[0].length),
+ l += this.renderer.em(this.output(a[6] || a[5] || a[4] || a[3] || a[2] || a[1]));
+ else if (a = this.rules.code.exec(e))
+ e = e.substring(a[0].length),
+ l += this.renderer.codespan(s(a[2].trim(), !0));
+ else if (a = this.rules.br.exec(e))
+ e = e.substring(a[0].length),
+ l += this.renderer.br();
+ else if (a = this.rules.del.exec(e))
+ e = e.substring(a[0].length),
+ l += this.renderer.del(this.output(a[1]));
+ else if (a = this.rules.text.exec(e))
+ e = e.substring(a[0].length),
+ l += this.renderer.text(s(this.smartypants(a[0])));
+ else if (e)
+ throw new Error("Infinite loop on byte: " + e.charCodeAt(0))
+ } else
+ a[0] = this.rules._backpedal.exec(a[0])[0],
+ e = e.substring(a[0].length),
+ "@" === a[2] ? (n = s(a[0]),
+ o = "mailto:" + n) : (n = s(a[0]),
+ o = "www." === a[1] ? "http://" + n : n),
+ l += this.renderer.link(o, null, n);
+ return l
+ }
+ ,
+ r.escapes = function(e) {
+ return e ? e.replace(r.rules._escapes, "$1") : e
+ }
+ ,
+ r.prototype.outputLink = function(e, t) {
+ var n = t.href
+ , r = t.title ? s(t.title) : null;
+ return "!" !== e[0].charAt(0) ? this.renderer.link(n, r, this.output(e[1])) : this.renderer.image(n, r, s(e[1]))
+ }
+ ,
+ r.prototype.smartypants = function(e) {
+ return this.options.smartypants ? e.replace(/---/g, "—").replace(/--/g, "–").replace(/(^|[-\u2014/(\[{"\s])'/g, "$1‘").replace(/'/g, "’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1“").replace(/"/g, "”").replace(/\.{3}/g, "…") : e
+ }
+ ,
+ r.prototype.mangle = function(e) {
+ if (!this.options.mangle)
+ return e;
+ for (var t, n = "", r = e.length, o = 0; o < r; o++)
+ t = e.charCodeAt(o),
+ Math.random() > .5 && (t = "x" + t.toString(16)),
+ n += "" + t + ";";
+ return n
+ }
+ ,
+ o.prototype.code = function(e, t, n) {
+ if (this.options.highlight) {
+ var r = this.options.highlight(e, t);
+ null != r && r !== e && (n = !0,
+ e = r)
+ }
+ return t ? '' + (n ? e : s(e, !0)) + "
\n" : "" + (n ? e : s(e, !0)) + "
"
+ }
+ ,
+ o.prototype.blockquote = function(e) {
+ return "\n" + e + " \n"
+ }
+ ,
+ o.prototype.html = function(e) {
+ return e
+ }
+ ,
+ o.prototype.heading = function(e, t, n) {
+ return this.options.headerIds ? "\n" : "" + e + " \n"
+ }
+ ,
+ o.prototype.hr = function() {
+ return this.options.xhtml ? " \n" : " \n"
+ }
+ ,
+ o.prototype.list = function(e, t, n) {
+ var r = t ? "ol" : "ul";
+ return "<" + r + (t && 1 !== n ? ' start="' + n + '"' : "") + ">\n" + e + "" + r + ">\n"
+ }
+ ,
+ o.prototype.listitem = function(e) {
+ return "" + e + " \n"
+ }
+ ,
+ o.prototype.checkbox = function(e) {
+ return " "
+ }
+ ,
+ o.prototype.paragraph = function(e) {
+ return "" + e + "
\n"
+ }
+ ,
+ o.prototype.table = function(e, t) {
+ return t && (t = "" + t + " "),
+ " \n"
+ }
+ ,
+ o.prototype.tablerow = function(e) {
+ return "\n" + e + " \n"
+ }
+ ,
+ o.prototype.tablecell = function(e, t) {
+ var n = t.header ? "th" : "td";
+ return (t.align ? "<" + n + ' align="' + t.align + '">' : "<" + n + ">") + e + "" + n + ">\n"
+ }
+ ,
+ o.prototype.strong = function(e) {
+ return "" + e + " "
+ }
+ ,
+ o.prototype.em = function(e) {
+ return "" + e + " "
+ }
+ ,
+ o.prototype.codespan = function(e) {
+ return "" + e + "
"
+ }
+ ,
+ o.prototype.br = function() {
+ return this.options.xhtml ? " " : " "
+ }
+ ,
+ o.prototype.del = function(e) {
+ return "" + e + ""
+ }
+ ,
+ o.prototype.link = function(e, t, n) {
+ if (this.options.sanitize) {
+ try {
+ var r = decodeURIComponent(l(e)).replace(/[^\w:]/g, "").toLowerCase()
+ } catch (e) {
+ return n
+ }
+ if (0 === r.indexOf("javascript:") || 0 === r.indexOf("vbscript:") || 0 === r.indexOf("data:"))
+ return n
+ }
+ this.options.baseUrl && !y.test(e) && (e = u(this.options.baseUrl, e));
+ try {
+ e = encodeURI(e).replace(/%25/g, "%")
+ } catch (e) {
+ return n
+ }
+ var o = '" + n + " "
+ }
+ ,
+ o.prototype.image = function(e, t, n) {
+ this.options.baseUrl && !y.test(e) && (e = u(this.options.baseUrl, e));
+ var r = ' " : ">"
+ }
+ ,
+ o.prototype.text = function(e) {
+ return e
+ }
+ ,
+ i.prototype.strong = i.prototype.em = i.prototype.codespan = i.prototype.del = i.prototype.text = function(e) {
+ return e
+ }
+ ,
+ i.prototype.link = i.prototype.image = function(e, t, n) {
+ return "" + n
+ }
+ ,
+ i.prototype.br = function() {
+ return ""
+ }
+ ,
+ a.parse = function(e, t) {
+ return new a(t).parse(e)
+ }
+ ,
+ a.prototype.parse = function(e) {
+ this.inline = new r(e.links,this.options),
+ this.inlineText = new r(e.links,p({}, this.options, {
+ renderer: new i
+ })),
+ this.tokens = e.reverse();
+ for (var t = ""; this.next(); )
+ t += this.tok();
+ return t
+ }
+ ,
+ a.prototype.next = function() {
+ return this.token = this.tokens.pop()
+ }
+ ,
+ a.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0
+ }
+ ,
+ a.prototype.parseText = function() {
+ for (var e = this.token.text; "text" === this.peek().type; )
+ e += "\n" + this.next().text;
+ return this.inline.output(e)
+ }
+ ,
+ a.prototype.tok = function() {
+ switch (this.token.type) {
+ case "space":
+ return "";
+ case "hr":
+ return this.renderer.hr();
+ case "heading":
+ return this.renderer.heading(this.inline.output(this.token.text), this.token.depth, l(this.inlineText.output(this.token.text)));
+ case "code":
+ return this.renderer.code(this.token.text, this.token.lang, this.token.escaped);
+ case "table":
+ var e, t, n, r, o = "", i = "";
+ for (n = "",
+ e = 0; e < this.token.header.length; e++)
+ n += this.renderer.tablecell(this.inline.output(this.token.header[e]), {
+ header: !0,
+ align: this.token.align[e]
+ });
+ for (o += this.renderer.tablerow(n),
+ e = 0; e < this.token.cells.length; e++) {
+ for (t = this.token.cells[e],
+ n = "",
+ r = 0; r < t.length; r++)
+ n += this.renderer.tablecell(this.inline.output(t[r]), {
+ header: !1,
+ align: this.token.align[r]
+ });
+ i += this.renderer.tablerow(n)
+ }
+ return this.renderer.table(o, i);
+ case "blockquote_start":
+ for (i = ""; "blockquote_end" !== this.next().type; )
+ i += this.tok();
+ return this.renderer.blockquote(i);
+ case "list_start":
+ i = "";
+ for (var a = this.token.ordered, s = this.token.start; "list_end" !== this.next().type; )
+ i += this.tok();
+ return this.renderer.list(i, a, s);
+ case "list_item_start":
+ for (i = "",
+ this.token.task && (i += this.renderer.checkbox(this.token.checked)); "list_item_end" !== this.next().type; )
+ i += "text" === this.token.type ? this.parseText() : this.tok();
+ return this.renderer.listitem(i);
+ case "loose_item_start":
+ for (i = ""; "list_item_end" !== this.next().type; )
+ i += this.tok();
+ return this.renderer.listitem(i);
+ case "html":
+ return this.renderer.html(this.token.text);
+ case "paragraph":
+ return this.renderer.paragraph(this.inline.output(this.token.text));
+ case "text":
+ return this.renderer.paragraph(this.parseText())
+ }
+ }
+ ;
+ var m = {}
+ , y = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
+ d.exec = d,
+ h.options = h.setOptions = function(e) {
+ return p(h.defaults, e),
+ h
+ }
+ ,
+ h.getDefaults = function() {
+ return {
+ baseUrl: null,
+ breaks: !1,
+ gfm: !0,
+ headerIds: !0,
+ headerPrefix: "",
+ highlight: null,
+ langPrefix: "language-",
+ mangle: !0,
+ pedantic: !1,
+ renderer: new o,
+ sanitize: !1,
+ sanitizer: null,
+ silent: !1,
+ smartLists: !1,
+ smartypants: !1,
+ tables: !0,
+ xhtml: !1
+ }
+ }
+ ,
+ h.defaults = h.getDefaults(),
+ h.Parser = a,
+ h.parser = a.parse,
+ h.Renderer = o,
+ h.TextRenderer = i,
+ h.Lexer = n,
+ h.lexer = n.lex,
+ h.InlineLexer = r,
+ h.inlineLexer = r.output,
+ h.parse = h,
+ e.exports = h
+ }(this || "undefined" != typeof window && window)
+ }
+ ).call(t, n(14))
+ }
+ , function(e, t, n) {
+ "use strict";
+ function r(e) {
+ var t = {};
+ return u(e, function(e, n) {
+ u(e, function(e) {
+ t[e] = n
+ })
+ }),
+ t
+ }
+ function o(e, t) {
+ var n = r(e.pluralTypeToLanguages);
+ return n[t] || n[g.call(t, /-/, 1)[0]] || n.en
+ }
+ function i(e, t, n) {
+ return e.pluralTypes[o(e, t)](n)
+ }
+ function a(e) {
+ return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
+ }
+ function s(e) {
+ var t = e && e.prefix || "%{"
+ , n = e && e.suffix || "}";
+ if (t === m || n === m)
+ throw new RangeError('"' + m + '" token is reserved for pluralization');
+ return new RegExp(a(t) + "(.*?)" + a(n),"g")
+ }
+ function l(e, t, n, r, o) {
+ if ("string" != typeof e)
+ throw new TypeError("Polyglot.transformPhrase expects argument #1 to be string");
+ if (null == t)
+ return e;
+ var a = e
+ , s = r || w
+ , l = o || b
+ , c = "number" == typeof t ? {
+ smart_count: t
+ } : t;
+ if (null != c.smart_count && a) {
+ var u = g.call(a, m);
+ a = f(u[i(l, n || "en", c.smart_count)] || u[0])
+ }
+ return a = v.call(a, s, function(e, t) {
+ return p(c, t) && null != c[t] ? c[t] : e
+ })
+ }
+ function c(e) {
+ var t = e || {};
+ this.phrases = {},
+ this.extend(t.phrases || {}),
+ this.currentLocale = t.locale || "en";
+ var n = t.allowMissing ? l : null;
+ this.onMissingKey = "function" == typeof t.onMissingKey ? t.onMissingKey : n,
+ this.warn = t.warn || h,
+ this.tokenRegex = s(t.interpolation),
+ this.pluralRules = t.pluralRules || b
+ }
+ var u = n(31)
+ , d = n(50)
+ , p = n(34)
+ , f = n(43)
+ , h = function(e) {
+ d(!1, e)
+ }
+ , v = String.prototype.replace
+ , g = String.prototype.split
+ , m = "||||"
+ , y = function(e) {
+ var t = e % 100
+ , n = t % 10;
+ return 11 !== t && 1 === n ? 0 : 2 <= n && n <= 4 && !(t >= 12 && t <= 14) ? 1 : 2
+ }
+ , b = {
+ pluralTypes: {
+ arabic: function(e) {
+ if (e < 3)
+ return e;
+ var t = e % 100;
+ return t >= 3 && t <= 10 ? 3 : t >= 11 ? 4 : 5
+ },
+ bosnian_serbian: y,
+ chinese: function() {
+ return 0
+ },
+ croatian: y,
+ french: function(e) {
+ return e > 1 ? 1 : 0
+ },
+ german: function(e) {
+ return 1 !== e ? 1 : 0
+ },
+ russian: y,
+ lithuanian: function(e) {
+ return e % 10 == 1 && e % 100 != 11 ? 0 : e % 10 >= 2 && e % 10 <= 9 && (e % 100 < 11 || e % 100 > 19) ? 1 : 2
+ },
+ czech: function(e) {
+ return 1 === e ? 0 : e >= 2 && e <= 4 ? 1 : 2
+ },
+ polish: function(e) {
+ if (1 === e)
+ return 0;
+ var t = e % 10;
+ return 2 <= t && t <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2
+ },
+ icelandic: function(e) {
+ return e % 10 != 1 || e % 100 == 11 ? 1 : 0
+ },
+ slovenian: function(e) {
+ var t = e % 100;
+ return 1 === t ? 0 : 2 === t ? 1 : 3 === t || 4 === t ? 2 : 3
+ }
+ },
+ pluralTypeToLanguages: {
+ arabic: ["ar"],
+ bosnian_serbian: ["bs-Latn-BA", "bs-Cyrl-BA", "srl-RS", "sr-RS"],
+ chinese: ["id", "id-ID", "ja", "ko", "ko-KR", "lo", "ms", "th", "th-TH", "zh"],
+ croatian: ["hr", "hr-HR"],
+ german: ["fa", "da", "de", "en", "es", "fi", "el", "he", "hi-IN", "hu", "hu-HU", "it", "nl", "no", "pt", "sv", "tr"],
+ french: ["fr", "tl", "pt-br"],
+ russian: ["ru", "ru-RU"],
+ lithuanian: ["lt"],
+ czech: ["cs", "cs-CZ", "sk"],
+ polish: ["pl"],
+ icelandic: ["is"],
+ slovenian: ["sl-SL"]
+ }
+ }
+ , w = /%\{(.*?)\}/g;
+ c.prototype.locale = function(e) {
+ return e && (this.currentLocale = e),
+ this.currentLocale
+ }
+ ,
+ c.prototype.extend = function(e, t) {
+ u(e, function(e, n) {
+ var r = t ? t + "." + n : n;
+ "object" == typeof e ? this.extend(e, r) : this.phrases[r] = e
+ }, this)
+ }
+ ,
+ c.prototype.unset = function(e, t) {
+ "string" == typeof e ? delete this.phrases[e] : u(e, function(e, n) {
+ var r = t ? t + "." + n : n;
+ "object" == typeof e ? this.unset(e, r) : delete this.phrases[r]
+ }, this)
+ }
+ ,
+ c.prototype.clear = function() {
+ this.phrases = {}
+ }
+ ,
+ c.prototype.replace = function(e) {
+ this.clear(),
+ this.extend(e)
+ }
+ ,
+ c.prototype.t = function(e, t) {
+ var n, r, o = null == t ? {} : t;
+ if ("string" == typeof this.phrases[e])
+ n = this.phrases[e];
+ else if ("string" == typeof o._)
+ n = o._;
+ else if (this.onMissingKey) {
+ var i = this.onMissingKey;
+ r = i(e, o, this.currentLocale, this.tokenRegex, this.pluralRules)
+ } else
+ this.warn('Missing translation for key: "' + e + '"'),
+ r = e;
+ return "string" == typeof n && (r = l(n, o, this.currentLocale, this.tokenRegex, this.pluralRules)),
+ r
+ }
+ ,
+ c.prototype.has = function(e) {
+ return p(this.phrases, e)
+ }
+ ,
+ c.transformPhrase = function(e, t, n) {
+ return l(e, t, n)
+ }
+ ,
+ e.exports = c
+ }
+ , function(e, t, n) {
+ "use strict";
+ function r(e) {
+ if (null === e || void 0 === e)
+ throw new TypeError("Object.assign cannot be called with null or undefined");
+ return Object(e)
+ }
+ /*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+ var o = Object.getOwnPropertySymbols
+ , i = Object.prototype.hasOwnProperty
+ , a = Object.prototype.propertyIsEnumerable;
+ e.exports = function() {
+ try {
+ if (!Object.assign)
+ return !1;
+ var e = new String("abc");
+ if (e[5] = "de",
+ "5" === Object.getOwnPropertyNames(e)[0])
+ return !1;
+ for (var t = {}, n = 0; n < 10; n++)
+ t["_" + String.fromCharCode(n)] = n;
+ if ("0123456789" !== Object.getOwnPropertyNames(t).map(function(e) {
+ return t[e]
+ }).join(""))
+ return !1;
+ var r = {};
+ return "abcdefghijklmnopqrst".split("").forEach(function(e) {
+ r[e] = e
+ }),
+ "abcdefghijklmnopqrst" === Object.keys(Object.assign({}, r)).join("")
+ } catch (e) {
+ return !1
+ }
+ }() ? Object.assign : function(e, t) {
+ for (var n, s, l = r(e), c = 1; c < arguments.length; c++) {
+ n = Object(arguments[c]);
+ for (var u in n)
+ i.call(n, u) && (l[u] = n[u]);
+ if (o) {
+ s = o(n);
+ for (var d = 0; d < s.length; d++)
+ a.call(n, s[d]) && (l[s[d]] = n[s[d]])
+ }
+ }
+ return l
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r;
+ if (!Object.keys) {
+ var o = Object.prototype.hasOwnProperty
+ , i = Object.prototype.toString
+ , a = n(10)
+ , s = Object.prototype.propertyIsEnumerable
+ , l = !s.call({
+ toString: null
+ }, "toString")
+ , c = s.call(function() {}, "prototype")
+ , u = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"]
+ , d = function(e) {
+ var t = e.constructor;
+ return t && t.prototype === e
+ }
+ , p = {
+ $applicationCache: !0,
+ $console: !0,
+ $external: !0,
+ $frame: !0,
+ $frameElement: !0,
+ $frames: !0,
+ $innerHeight: !0,
+ $innerWidth: !0,
+ $outerHeight: !0,
+ $outerWidth: !0,
+ $pageXOffset: !0,
+ $pageYOffset: !0,
+ $parent: !0,
+ $scrollLeft: !0,
+ $scrollTop: !0,
+ $scrollX: !0,
+ $scrollY: !0,
+ $self: !0,
+ $webkitIndexedDB: !0,
+ $webkitStorageInfo: !0,
+ $window: !0
+ }
+ , f = function() {
+ if ("undefined" == typeof window)
+ return !1;
+ for (var e in window)
+ try {
+ if (!p["$" + e] && o.call(window, e) && null !== window[e] && "object" == typeof window[e])
+ try {
+ d(window[e])
+ } catch (e) {
+ return !0
+ }
+ } catch (e) {
+ return !0
+ }
+ return !1
+ }()
+ , h = function(e) {
+ if ("undefined" == typeof window || !f)
+ return d(e);
+ try {
+ return d(e)
+ } catch (e) {
+ return !1
+ }
+ };
+ r = function(e) {
+ var t = null !== e && "object" == typeof e
+ , n = "[object Function]" === i.call(e)
+ , r = a(e)
+ , s = t && "[object String]" === i.call(e)
+ , d = [];
+ if (!t && !n && !r)
+ throw new TypeError("Object.keys called on a non-object");
+ var p = c && n;
+ if (s && e.length > 0 && !o.call(e, 0))
+ for (var f = 0; f < e.length; ++f)
+ d.push(String(f));
+ if (r && e.length > 0)
+ for (var v = 0; v < e.length; ++v)
+ d.push(String(v));
+ else
+ for (var g in e)
+ p && "prototype" === g || !o.call(e, g) || d.push(String(g));
+ if (l)
+ for (var m = h(e), y = 0; y < u.length; ++y)
+ m && "constructor" === u[y] || !o.call(e, u[y]) || d.push(u[y]);
+ return d
+ }
+ }
+ e.exports = r
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = Array.prototype.slice
+ , o = n(10)
+ , i = Object.keys
+ , a = i ? function(e) {
+ return i(e)
+ }
+ : n(39)
+ , s = Object.keys;
+ a.shim = function() {
+ if (Object.keys) {
+ (function() {
+ var e = Object.keys(arguments);
+ return e && e.length === arguments.length
+ }
+ )(1, 2) || (Object.keys = function(e) {
+ return s(o(e) ? r.call(e) : e)
+ }
+ )
+ } else
+ Object.keys = a;
+ return Object.keys || a
+ }
+ ,
+ e.exports = a
+ }
+ , function(e, t) {
+ function n() {
+ throw new Error("setTimeout has not been defined")
+ }
+ function r() {
+ throw new Error("clearTimeout has not been defined")
+ }
+ function o(e) {
+ if (u === setTimeout)
+ return setTimeout(e, 0);
+ if ((u === n || !u) && setTimeout)
+ return u = setTimeout,
+ setTimeout(e, 0);
+ try {
+ return u(e, 0)
+ } catch (t) {
+ try {
+ return u.call(null, e, 0)
+ } catch (t) {
+ return u.call(this, e, 0)
+ }
+ }
+ }
+ function i(e) {
+ if (d === clearTimeout)
+ return clearTimeout(e);
+ if ((d === r || !d) && clearTimeout)
+ return d = clearTimeout,
+ clearTimeout(e);
+ try {
+ return d(e)
+ } catch (t) {
+ try {
+ return d.call(null, e)
+ } catch (t) {
+ return d.call(this, e)
+ }
+ }
+ }
+ function a() {
+ v && f && (v = !1,
+ f.length ? h = f.concat(h) : g = -1,
+ h.length && s())
+ }
+ function s() {
+ if (!v) {
+ var e = o(a);
+ v = !0;
+ for (var t = h.length; t; ) {
+ for (f = h,
+ h = []; ++g < t; )
+ f && f[g].run();
+ g = -1,
+ t = h.length
+ }
+ f = null,
+ v = !1,
+ i(e)
+ }
+ }
+ function l(e, t) {
+ this.fun = e,
+ this.array = t
+ }
+ function c() {}
+ var u, d, p = e.exports = {};
+ !function() {
+ try {
+ u = "function" == typeof setTimeout ? setTimeout : n
+ } catch (e) {
+ u = n
+ }
+ try {
+ d = "function" == typeof clearTimeout ? clearTimeout : r
+ } catch (e) {
+ d = r
+ }
+ }();
+ var f, h = [], v = !1, g = -1;
+ p.nextTick = function(e) {
+ var t = new Array(arguments.length - 1);
+ if (arguments.length > 1)
+ for (var n = 1; n < arguments.length; n++)
+ t[n - 1] = arguments[n];
+ h.push(new l(e,t)),
+ 1 !== h.length || v || o(s)
+ }
+ ,
+ l.prototype.run = function() {
+ this.fun.apply(null, this.array)
+ }
+ ,
+ p.title = "browser",
+ p.browser = !0,
+ p.env = {},
+ p.argv = [],
+ p.version = "",
+ p.versions = {},
+ p.on = c,
+ p.addListener = c,
+ p.once = c,
+ p.off = c,
+ p.removeListener = c,
+ p.removeAllListeners = c,
+ p.emit = c,
+ p.prependListener = c,
+ p.prependOnceListener = c,
+ p.listeners = function(e) {
+ return []
+ }
+ ,
+ p.binding = function(e) {
+ throw new Error("process.binding is not supported")
+ }
+ ,
+ p.cwd = function() {
+ return "/"
+ }
+ ,
+ p.chdir = function(e) {
+ throw new Error("process.chdir is not supported")
+ }
+ ,
+ p.umask = function() {
+ return 0
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ function r(e) {
+ return e = JSON.stringify(e),
+ !!/^\{[\s\S]*\}$/.test(e)
+ }
+ function o(e) {
+ return void 0 === e || "function" == typeof e ? e + "" : JSON.stringify(e)
+ }
+ function i(e) {
+ if ("string" == typeof e)
+ try {
+ return JSON.parse(e)
+ } catch (t) {
+ return e
+ }
+ }
+ function a(e) {
+ return "[object Function]" === {}.toString.call(e)
+ }
+ function s(e) {
+ return "[object Array]" === Object.prototype.toString.call(e)
+ }
+ function l() {
+ if (!(this instanceof l))
+ return new l
+ }
+ function c(e, t) {
+ var n = arguments
+ , o = null;
+ if (d || (d = l()),
+ 0 === n.length)
+ return d.get();
+ if (1 === n.length) {
+ if ("string" == typeof e)
+ return d.get(e);
+ if (r(e))
+ return d.set(e)
+ }
+ if (2 === n.length && "string" == typeof e) {
+ if (!t)
+ return d.remove(e);
+ if (t && "string" == typeof t)
+ return d.set(e, t);
+ t && a(t) && (o = null,
+ o = t(e, d.get(e)),
+ c.set(e, o))
+ }
+ if (2 === n.length && s(e) && a(t))
+ for (var i = 0, u = e.length; i < u; i++)
+ o = t(e[i], d.get(e[i])),
+ c.set(e[i], o);
+ return c
+ }
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ /*!
+ * storejs v1.0.24
+ * Local storage localstorage package provides a simple API
+ *
+ * Copyright (c) 2018 kenny wang
+ * https://github.com/jaywcjlove/store.js
+ *
+ * Licensed under the MIT license.
+ */
+ var u = window.localStorage;
+ u = function(e) {
+ var t = "_Is_Incognit";
+ try {
+ e.setItem(t, "yes")
+ } catch (t) {
+ if ("QuotaExceededError" === t.name) {
+ var n = function() {};
+ e.__proto__ = {
+ setItem: n,
+ getItem: n,
+ removeItem: n,
+ clear: n
+ }
+ }
+ } finally {
+ "yes" === e.getItem(t) && e.removeItem(t)
+ }
+ return e
+ }(u),
+ l.prototype = {
+ set: function(e, t) {
+ if (e && !r(e))
+ u.setItem(e, o(t));
+ else if (r(e))
+ for (var n in e)
+ this.set(n, e[n]);
+ return this
+ },
+ get: function(e) {
+ if (!e) {
+ var t = {};
+ return this.forEach(function(e, n) {
+ return t[e] = n
+ }),
+ t
+ }
+ if ("?" === e.charAt(0))
+ return this.has(e.substr(1));
+ var n = arguments;
+ if (n.length > 1) {
+ for (var r = {}, o = 0, a = n.length; o < a; o++) {
+ var s = i(u.getItem(n[o]));
+ s && (r[n[o]] = s)
+ }
+ return r
+ }
+ return i(u.getItem(e))
+ },
+ clear: function() {
+ return u.clear(),
+ this
+ },
+ remove: function(e) {
+ var t = this.get(e);
+ return u.removeItem(e),
+ t
+ },
+ has: function(e) {
+ return {}.hasOwnProperty.call(this.get(), e)
+ },
+ keys: function() {
+ var e = [];
+ return this.forEach(function(t) {
+ e.push(t)
+ }),
+ e
+ },
+ forEach: function(e) {
+ for (var t = 0, n = u.length; t < n; t++) {
+ var r = u.key(t);
+ e(r, this.get(r))
+ }
+ return this
+ },
+ search: function(e) {
+ for (var t = this.keys(), n = {}, r = 0, o = t.length; r < o; r++)
+ t[r].indexOf(e) > -1 && (n[t[r]] = this.get(t[r]));
+ return n
+ }
+ };
+ var d = null;
+ for (var p in l.prototype)
+ c[p] = l.prototype[p];
+ t.default = c
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(12)
+ , o = n(9)
+ , i = n(11)
+ , a = n(13)
+ , s = n(49)
+ , l = r(a());
+ o(l, {
+ getPolyfill: a,
+ implementation: i,
+ shim: s
+ }),
+ e.exports = l
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(1)
+ , o = r("%String%")
+ , i = r("%TypeError%");
+ e.exports = function(e) {
+ if ("symbol" == typeof e)
+ throw new i("Cannot convert a Symbol value to a string");
+ return o(e)
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(1)
+ , o = r("%TypeError%");
+ e.exports = function(e, t) {
+ if (null == e)
+ throw new o(t || "Cannot call method on " + e);
+ return e
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(1)
+ , o = n(12)
+ , i = o(r("String.prototype.indexOf"));
+ e.exports = function(e, t) {
+ var n = r(e, !!t);
+ return "function" == typeof n && i(e, ".prototype.") ? o(n) : n
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ (function(t) {
+ var r = t.Symbol
+ , o = n(48);
+ e.exports = function() {
+ return "function" == typeof r && ("function" == typeof Symbol && ("symbol" == typeof r("foo") && ("symbol" == typeof Symbol("bar") && o())))
+ }
+ }
+ ).call(t, n(14))
+ }
+ , function(e, t, n) {
+ "use strict";
+ e.exports = function() {
+ if ("function" != typeof Symbol || "function" != typeof Object.getOwnPropertySymbols)
+ return !1;
+ if ("symbol" == typeof Symbol.iterator)
+ return !0;
+ var e = {}
+ , t = Symbol("test")
+ , n = Object(t);
+ if ("string" == typeof t)
+ return !1;
+ if ("[object Symbol]" !== Object.prototype.toString.call(t))
+ return !1;
+ if ("[object Symbol]" !== Object.prototype.toString.call(n))
+ return !1;
+ e[t] = 42;
+ for (t in e)
+ return !1;
+ if ("function" == typeof Object.keys && 0 !== Object.keys(e).length)
+ return !1;
+ if ("function" == typeof Object.getOwnPropertyNames && 0 !== Object.getOwnPropertyNames(e).length)
+ return !1;
+ var r = Object.getOwnPropertySymbols(e);
+ if (1 !== r.length || r[0] !== t)
+ return !1;
+ if (!Object.prototype.propertyIsEnumerable.call(e, t))
+ return !1;
+ if ("function" == typeof Object.getOwnPropertyDescriptor) {
+ var o = Object.getOwnPropertyDescriptor(e, t);
+ if (42 !== o.value || !0 !== o.enumerable)
+ return !1
+ }
+ return !0
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ var r = n(9)
+ , o = n(13);
+ e.exports = function() {
+ var e = o();
+ return r(String.prototype, {
+ trim: e
+ }, {
+ trim: function() {
+ return String.prototype.trim !== e
+ }
+ }),
+ e
+ }
+ }
+ , function(e, t, n) {
+ "use strict";
+ (function(t) {
+ var n = "production" !== t.env.NODE_ENV
+ , r = function() {};
+ if (n) {
+ var o = function(e, t) {
+ var n = arguments.length;
+ t = new Array(n > 1 ? n - 1 : 0);
+ for (var r = 1; r < n; r++)
+ t[r - 1] = arguments[r];
+ var o = 0
+ , i = "Warning: " + e.replace(/%s/g, function() {
+ return t[o++]
+ });
+ try {
+ throw new Error(i)
+ } catch (e) {}
+ };
+ r = function(e, t, n) {
+ var r = arguments.length;
+ n = new Array(r > 2 ? r - 2 : 0);
+ for (var i = 2; i < r; i++)
+ n[i - 2] = arguments[i];
+ if (void 0 === t)
+ throw new Error("`warning(condition, format, ...args)` requires a warning message argument");
+ e || o.apply(null, [t].concat(n))
+ }
+ }
+ e.exports = r
+ }
+ ).call(t, n(41))
+ }
+ , function(e, t, n) {
+ function r(e, t) {
+ return new a(t).process(e)
+ }
+ var o = n(15)
+ , i = n(16)
+ , a = n(52);
+ t = e.exports = r,
+ t.filterXSS = r,
+ t.FilterXSS = a;
+ for (var s in o)
+ t[s] = o[s];
+ for (var s in i)
+ t[s] = i[s];
+ "undefined" != typeof window && (window.filterXSS = e.exports),
+ function() {
+ return "undefined" != typeof self && "undefined" != typeof DedicatedWorkerGlobalScope && self instanceof DedicatedWorkerGlobalScope
+ }() && (self.filterXSS = e.exports)
+ }
+ , function(e, t, n) {
+ function r(e) {
+ return void 0 === e || null === e
+ }
+ function o(e) {
+ var t = p.spaceIndex(e);
+ if (-1 === t)
+ return {
+ html: "",
+ closing: "/" === e[e.length - 2]
+ };
+ e = p.trim(e.slice(t + 1, -1));
+ var n = "/" === e[e.length - 1];
+ return n && (e = p.trim(e.slice(0, -1))),
+ {
+ html: e,
+ closing: n
+ }
+ }
+ function i(e) {
+ var t = {};
+ for (var n in e)
+ t[n] = e[n];
+ return t
+ }
+ function a(e) {
+ e = i(e || {}),
+ e.stripIgnoreTag && (e.onIgnoreTag,
+ e.onIgnoreTag = l.onIgnoreTagStripAll),
+ e.whiteList = e.whiteList || l.whiteList,
+ e.onTag = e.onTag || l.onTag,
+ e.onTagAttr = e.onTagAttr || l.onTagAttr,
+ e.onIgnoreTag = e.onIgnoreTag || l.onIgnoreTag,
+ e.onIgnoreTagAttr = e.onIgnoreTagAttr || l.onIgnoreTagAttr,
+ e.safeAttrValue = e.safeAttrValue || l.safeAttrValue,
+ e.escapeHtml = e.escapeHtml || l.escapeHtml,
+ this.options = e,
+ !1 === e.css ? this.cssFilter = !1 : (e.css = e.css || {},
+ this.cssFilter = new s(e.css))
+ }
+ var s = n(3).FilterCSS
+ , l = n(15)
+ , c = n(16)
+ , u = c.parseTag
+ , d = c.parseAttr
+ , p = n(5);
+ a.prototype.process = function(e) {
+ if (e = e || "",
+ !(e = e.toString()))
+ return "";
+ var t = this
+ , n = t.options
+ , i = n.whiteList
+ , a = n.onTag
+ , s = n.onIgnoreTag
+ , c = n.onTagAttr
+ , f = n.onIgnoreTagAttr
+ , h = n.safeAttrValue
+ , v = n.escapeHtml
+ , g = t.cssFilter;
+ n.stripBlankChar && (e = l.stripBlankChar(e)),
+ n.allowCommentTag || (e = l.stripCommentTag(e));
+ var m = !1;
+ if (n.stripIgnoreTagBody) {
+ var m = l.StripTagBody(n.stripIgnoreTagBody, s);
+ s = m.onIgnoreTag
+ }
+ var y = u(e, function(e, t, n, l, u) {
+ var m = {
+ sourcePosition: e,
+ position: t,
+ isClosing: u,
+ isWhite: i.hasOwnProperty(n)
+ }
+ , y = a(n, l, m);
+ if (!r(y))
+ return y;
+ if (m.isWhite) {
+ if (m.isClosing)
+ return "" + n + ">";
+ var b = o(l)
+ , w = i[n]
+ , x = d(b.html, function(e, t) {
+ var o = -1 !== p.indexOf(w, e)
+ , i = c(n, e, t, o);
+ if (!r(i))
+ return i;
+ if (o)
+ return t = h(n, e, t, g),
+ t ? e + '="' + t + '"' : e;
+ var i = f(n, e, t, o);
+ return r(i) ? void 0 : i
+ })
+ , l = "<" + n;
+ return x && (l += " " + x),
+ b.closing && (l += " /"),
+ l += ">"
+ }
+ var y = s(n, l, m);
+ return r(y) ? v(l) : y
+ }, v);
+ return m && (y = m.remove(y)),
+ y
+ }
+ ,
+ e.exports = a
+ }
+ , function(e, t) {
+ e.exports = {
+ smile: "e3/2018new_weixioa02_org.png",
+ lovely: "09/2018new_keai_org.png",
+ happy: "1e/2018new_taikaixin_org.png",
+ clap: "6e/2018new_guzhang_thumb.png",
+ whee: "33/2018new_xixi_thumb.png",
+ haha: "8f/2018new_haha_thumb.png",
+ "laugh and cry": "4a/2018new_xiaoku_thumb.png",
+ wink: "43/2018new_jiyan_org.png",
+ greddy: "fa/2018new_chanzui_org.png",
+ awkward: "a3/2018new_heixian_thumb.png",
+ sweat: "28/2018new_han_org.png",
+ "pick nose": "9a/2018new_wabi_thumb.png",
+ hum: "7c/2018new_heng_thumb.png",
+ angry: "f6/2018new_nu_thumb.png",
+ grievance: "a5/2018new_weiqu_thumb.png",
+ poor: "96/2018new_kelian_org.png",
+ disappoint: "aa/2018new_shiwang_thumb.png",
+ sad: "ee/2018new_beishang_org.png",
+ tear: "6e/2018new_leimu_org.png",
+ "no way": "83/2018new_kuxiao_org.png",
+ shy: "c1/2018new_haixiu_org.png",
+ dirt: "10/2018new_wu_thumb.png",
+ "love you": "f6/2018new_aini_org.png",
+ kiss: "2c/2018new_qinqin_thumb.png",
+ amorousness: "9d/2018new_huaxin_org.png",
+ longing: "c9/2018new_chongjing_org.png",
+ desire: "3e/2018new_tianping_thumb.png",
+ "bad laugh": "4d/2018new_huaixiao_org.png",
+ blackness: "9e/2018new_yinxian_org.png",
+ "laugh without word": "2d/2018new_xiaoerbuyu_org.png",
+ titter: "71/2018new_touxiao_org.png",
+ cool: "c4/2018new_ku_org.png",
+ "not easy": "aa/2018new_bingbujiandan_thumb.png",
+ think: "30/2018new_sikao_org.png",
+ question: "b8/2018new_ningwen_org.png",
+ "no idea": "2a/2018new_wenhao_thumb.png",
+ dizzy: "07/2018new_yun_thumb.png",
+ bomb: "a2/2018new_shuai_thumb.png",
+ bone: "a1/2018new_kulou_thumb.png",
+ "be quiet": "b0/2018new_xu_org.png",
+ "shut up": "62/2018new_bizui_org.png",
+ stupid: "dd/2018new_shayan_org.png",
+ "surprise ": "49/2018new_chijing_org.png",
+ vomit: "08/2018new_tu_org.png",
+ cold: "40/2018new_kouzhao_thumb.png",
+ sick: "3b/2018new_shengbing_thumb.png",
+ bye: "fd/2018new_baibai_thumb.png",
+ "look down on": "da/2018new_bishi_org.png",
+ "white eye": "ef/2018new_landelini_org.png",
+ "left hum": "43/2018new_zuohengheng_thumb.png",
+ "right hum": "c1/2018new_youhengheng_thumb.png",
+ crazy: "17/2018new_zhuakuang_org.png",
+ "scold ": "87/2018new_zhouma_thumb.png",
+ "hit on face": "cb/2018new_dalian_org.png",
+ wow: "ae/2018new_ding_org.png",
+ fan: "86/2018new_hufen02_org.png",
+ money: "a2/2018new_qian_thumb.png",
+ yawn: "55/2018new_dahaqian_org.png",
+ sleepy: "3c/2018new_kun_thumb.png",
+ sleep: "e2/2018new_shuijiao_thumb.png",
+ "watermelon ": "01/2018new_chigua_thumb.png",
+ doge: "a1/2018new_doge02_org.png",
+ dog: "22/2018new_erha_org.png",
+ cat: "7b/2018new_miaomiao_thumb.png",
+ thumb: "e6/2018new_zan_org.png",
+ good: "8a/2018new_good_org.png",
+ ok: "45/2018new_ok_org.png",
+ yeah: "29/2018new_ye_thumb.png",
+ "shack hand": "e9/2018new_woshou_thumb.png",
+ bow: "e7/2018new_zuoyi_org.png",
+ come: "42/2018new_guolai_thumb.png",
+ punch: "86/2018new_quantou_thumb.png"
+ }
+ }
+ , function(e, t) {
+ e.exports = {
+ nick: "NickName",
+ mail: "E-Mail",
+ link: "Website(http://)",
+ nickFail: "NickName cannot be less than 3 bytes.",
+ mailFail: "Please confirm your email address.",
+ sofa: "No comment yet.",
+ submit: "Submit",
+ reply: "Reply",
+ cancelReply: "Cancel reply",
+ comments: "Comments",
+ cancel: "Cancel",
+ confirm: "Confirm",
+ continue: "Continue",
+ more: "Load More...",
+ preview: "Preview",
+ emoji: "Emoji",
+ expand: "See more....",
+ seconds: "seconds ago",
+ minutes: "minutes ago",
+ hours: "hours ago",
+ days: "days ago",
+ now: "just now",
+ uploading: "Uploading ...",
+ uploadDone: "Upload completed!",
+ busy: "Submit is busy, please wait...",
+ "code-98": "Valine initialization failed, please check your version of av-min.js.",
+ "code-99": "Valine initialization failed, Please check the `el` element in the init method.",
+ "code-100": "Valine initialization failed, Please check your appId and appKey.",
+ "code-140": "The total number of API calls today has exceeded the development version limit.",
+ "code-401": "Unauthorized operation, Please check your appId and appKey.",
+ "code-403": "Access denied by API domain white list, Please check your security domain."
+ }
+ }
+ , function(e, t) {
+ e.exports = {
+ nick: "ニックネーム",
+ mail: "メールアドレス",
+ link: "サイト(http://)",
+ nickFail: "3バイト以上のニックネームをご入力ください.",
+ mailFail: "メールアドレスをご確認ください.",
+ sofa: "コメントしましょう~",
+ submit: "提出する",
+ reply: "返信する",
+ cancelReply: "キャンセル",
+ comments: "コメント",
+ cancel: "キャンセル",
+ confirm: "確認する",
+ continue: "继续",
+ more: "さらに読み込む...",
+ preview: "プレビュー",
+ emoji: "絵文字",
+ expand: "もっと見る",
+ seconds: "秒前",
+ minutes: "分前",
+ hours: "時間前",
+ days: "日前",
+ now: "たっだ今",
+ uploading: "アップロード中...",
+ uploadDone: "アップロードが完了しました!",
+ busy: "20 秒間隔で提出してください ...",
+ "code-98": "ロードエラーです。av-min.js のバージョンを確認してください.",
+ "code-99": "ロードエラーです。initにある`el`エレメントを確認ください.",
+ "code-100": "ロードエラーです。AppIdとAppKeyを確認ください.",
+ "code-140": "今日のAPIコールの総数が開発バージョンの上限を超えた.",
+ "code-401": "権限が制限されています。AppIdとAppKeyを確認ください.",
+ "code-403": "アクセスがAPIなどに制限されました、ドメイン名のセキュリティ設定を確認ください"
+ }
+ }
+ , function(e, t) {
+ e.exports = {
+ nick: "昵称",
+ mail: "邮箱",
+ link: "网址(http://)",
+ nickFail: "昵称不能少于3个字符",
+ mailFail: "请填写正确的邮件地址",
+ sofa: "来发评论吧~",
+ submit: "提交",
+ reply: "回复",
+ cancelReply: "取消回复",
+ comments: "评论",
+ cancel: "取消",
+ confirm: "确认",
+ continue: "继续",
+ more: "加载更多...",
+ preview: "预览",
+ emoji: "表情",
+ expand: "查看更多...",
+ seconds: "秒前",
+ minutes: "分钟前",
+ hours: "小时前",
+ days: "天前",
+ now: "刚刚",
+ uploading: "正在传输...",
+ uploadDone: "传输完成!",
+ busy: "操作频繁,请稍候再试...",
+ "code-98": "Valine 初始化失败,请检查 av-min.js 版本",
+ "code-99": "Valine 初始化失败,请检查init中的`el`元素.",
+ "code-100": "Valine 初始化失败,请检查你的AppId和AppKey.",
+ "code-140": "今日 API 调用总次数已超过开发版限制.",
+ "code-401": "未经授权的操作,请检查你的AppId和AppKey.",
+ "code-403": "访问被API域名白名单拒绝,请检查你的安全域名设置."
+ }
+ }
+ , function(e, t) {
+ e.exports = {
+ nick: "暱稱",
+ mail: "郵箱",
+ link: "網址(http://)",
+ nickFail: "昵稱不能少於3個字符",
+ mailFail: "請填寫正確的郵件地址",
+ sofa: "來發評論吧~",
+ submit: "提交",
+ reply: "回覆",
+ cancelReply: "取消回覆",
+ comments: "評論",
+ cancel: "取消",
+ confirm: "確認",
+ continue: "繼續",
+ more: "加載更多...",
+ preview: "預覽",
+ emoji: "表情",
+ expand: "查看更多...",
+ seconds: "秒前",
+ minutes: "分鐘前",
+ hours: "小時前",
+ days: "天前",
+ now: "剛剛",
+ uploading: "正在上傳...",
+ uploadDone: "上傳完成!",
+ busy: "操作頻繁,請稍候再試...",
+ "code-98": "Valine 初始化失敗,請檢查 av-min.js 版本",
+ "code-99": "Valine 初始化失敗,請檢查init中的`el`元素.",
+ "code-100": "Valine 初始化失敗,請檢查你的AppId和AppKey.",
+ "code-140": "今日 API 調用總次數已超過開發版限制.",
+ "code-401": "未經授權的操作,請檢查你的AppId和AppKey.",
+ "code-403": "訪問被API域名白名單拒絕,請檢查你的安全域名設置."
+ }
+ }
+ , function(e, t, n) {
+ var r = n(59);
+ "string" == typeof r && (r = [[e.i, r, ""]]);
+ var o = {};
+ o.transform = void 0;
+ n(61)(r, o);
+ r.locals && (e.exports = r.locals)
+ }
+ , function(e, t, n) {
+ t = e.exports = n(60)(!1),
+ t.push([e.i, '.v[data-class=v]{font-size:16px;text-align:left}.v[data-class=v] *{-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.75}.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#555}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#b3b3b3}.v[data-class=v] .text-right{text-align:right}.v[data-class=v] .text-center{text-align:center}.v[data-class=v] img{max-width:100%;border:none}.v[data-class=v] hr{margin:.825em 0;border-color:#f6f6f6;border-style:dashed}.v[data-class=v].hide-avatar .vimg{display:none}.v[data-class=v] a{position:relative;cursor:pointer;color:#1abc9c;text-decoration:none;display:inline-block}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] code,.v[data-class=v] pre{background-color:#f8f8f8;padding:.2em .4em;border-radius:3px;font-size:85%;margin:0}.v[data-class=v] pre{padding:10px;overflow:auto;line-height:1.45}.v[data-class=v] pre code{padding:0;background:transparent;white-space:pre-wrap;word-break:keep-all}.v[data-class=v] blockquote{color:#666;margin:.5em 0;padding:0 0 0 1em;border-left:8px solid hsla(0,0%,93%,.5)}.v[data-class=v] .vinput{border:none;resize:none;outline:none;padding:10px 5px;max-width:100%;font-size:.775em}.v[data-class=v] input[type=checkbox],.v[data-class=v] input[type=radio]{display:inline-block;vertical-align:middle;margin-top:-2px}.v[data-class=v] .vicon{cursor:pointer;display:inline-block;overflow:hidden;fill:#555;vertical-align:middle}.v[data-class=v] .vicon+.vicon{margin-left:10px}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vrow{font-size:0;padding:10px 0}.v[data-class=v] .vrow .vcol{display:inline-block;vertical-align:middle;font-size:14px}.v[data-class=v] .vrow .vcol.vcol-20{width:20%}.v[data-class=v] .vrow .vcol.vcol-30{width:30%}.v[data-class=v] .vrow .vcol.vcol-40{width:40%}.v[data-class=v] .vrow .vcol.vcol-50{width:50%}.v[data-class=v] .vrow .vcol.vcol-60{width:60%}.v[data-class=v] .vrow .vcol.vcol-70{width:70%}.v[data-class=v] .vrow .vcol.vcol-80{width:80%}.v[data-class=v] .vrow .vcol.vctrl{font-size:12px}.v[data-class=v] .emoji,.v[data-class=v] .vemoji{max-width:25px;vertical-align:middle;margin:0 1px;display:inline-block}.v[data-class=v] .vwrap{border:1px solid #f0f0f0;border-radius:4px;margin-bottom:10px;overflow:hidden;position:relative;padding:10px}.v[data-class=v] .vwrap input{background:transparent}.v[data-class=v] .vwrap .vedit{position:relative;padding-top:10px}.v[data-class=v] .vwrap .cancel-reply-btn{position:absolute;right:5px;top:5px;cursor:pointer}.v[data-class=v] .vwrap .vemojis{display:none;font-size:18px;max-height:145px;overflow:auto;padding-bottom:10px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vemojis i{font-style:normal;padding-top:7px;width:36px;cursor:pointer;text-align:center;display:inline-block;vertical-align:middle}.v[data-class=v] .vwrap .vpreview{padding:7px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vheader .vinput{width:33.33%;border-bottom:1px dashed #dedede}.v[data-class=v] .vwrap .vheader.item2 .vinput{width:50%}.v[data-class=v] .vwrap .vheader.item1 .vinput{width:100%}.v[data-class=v] .vwrap .vheader .vinput:focus{border-bottom-color:#eb5055}@media screen and (max-width:520px){.v[data-class=v] .vwrap .vheader.item2 .vinput,.v[data-class=v] .vwrap .vheader .vinput{width:100%}}.v[data-class=v] .vpower{color:#999;font-size:.75em;padding:.5em 0}.v[data-class=v] .vpower a{font-size:.75em}.v[data-class=v] .vcount{padding:5px;font-weight:600;font-size:1.25em}.v[data-class=v] ol,.v[data-class=v] ul{padding:0;margin-left:1.25em}.v[data-class=v] .txt-center{text-align:center}.v[data-class=v] .txt-right{text-align:right}.v[data-class=v] .pd5{padding:5px}.v[data-class=v] .pd10{padding:10px}.v[data-class=v] .veditor{width:100%;min-height:8.75em;font-size:.875em;background:transparent;resize:vertical;-webkit-transition:all .25s ease;transition:all .25s ease}.v[data-class=v] .vbtn{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#555;border:1px solid #ededed;border-radius:.3em;display:inline-block;background:transparent;margin-bottom:0;font-weight:400;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;white-space:nowrap;padding:.5em 1.25em;font-size:.875em;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.v[data-class=v] .vbtn+.vbtn{margin-left:1.25em}.v[data-class=v] .vbtn:active,.v[data-class=v] .vbtn:hover{color:#3090e4;border-color:#3090e4}.v[data-class=v] .vbtn:disabled{border-color:#e1e1e1;color:#e1e1e1;background-color:#fdfafa;cursor:not-allowed}.v[data-class=v] .vempty{padding:1.25em;text-align:center;color:#555;overflow:auto}.v[data-class=v] .vsys{display:inline-block;padding:.2em .5em;font-size:.75em;border-radius:.2em;margin-right:.3em}@media screen and (max-width:520px){.v[data-class=v] .vsys{display:none}}.v[data-class=v] .vcards{width:100%}.v[data-class=v] .vcards .vcard{padding-top:1.25em;position:relative;display:block}.v[data-class=v] .vcards .vcard:after{content:"";clear:both;display:block}.v[data-class=v] .vcards .vcard .vimg{width:3.125em;height:3.125em;float:left;border-radius:50%;margin-right:.7525em;border:1px solid #f5f5f5;padding:.125em}@media screen and (max-width:720px){.v[data-class=v] .vcards .vcard .vimg{width:2.5em;height:2.5em}}.v[data-class=v] .vcards .vcard .vhead{line-height:1.5;margin-top:0}.v[data-class=v] .vcards .vcard .vhead .vnick{position:relative;font-size:.875em;font-weight:500;margin-right:.875em;cursor:pointer;text-decoration:none;display:inline-block}.v[data-class=v] .vcards .vcard .vhead .vnick:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vh{overflow:hidden;padding-bottom:.5em;border-bottom:1px dashed #f5f5f5}.v[data-class=v] .vcards .vcard .vh .vtime{font-size:.75em;margin-right:.875em}.v[data-class=v] .vcards .vcard .vh .vmeta{line-height:1;position:relative}.v[data-class=v] .vcards .vcard .vh .vmeta .vat{font-size:.8125em;color:#ef2f11;cursor:pointer;float:right}.v[data-class=v] .vcards .vcard:last-child .vh{border-bottom:none}.v[data-class=v] .vcards .vcard .vcontent{word-wrap:break-word;word-break:break-all;font-size:.875em;line-height:2;position:relative;margin-bottom:.75em;padding-top:.625em}.v[data-class=v] .vcards .vcard .vcontent.expand{cursor:pointer;max-height:8em;overflow:hidden}.v[data-class=v] .vcards .vcard .vcontent.expand:before{display:block;content:"";position:absolute;width:100%;left:0;top:0;bottom:3.15em;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(hsla(0,0%,100%,.9)));background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.9));z-index:999}.v[data-class=v] .vcards .vcard .vcontent.expand:after{display:block;content:attr(data-expand);text-align:center;color:#828586;position:absolute;width:100%;height:3.15em;line-height:3.15em;left:0;bottom:0;z-index:999;background:hsla(0,0%,100%,.9)}.v[data-class=v] .vcards .vcard .vquote{padding-left:1em;border-left:1px dashed hsla(0,0%,93%,.5)}.v[data-class=v] .vcards .vcard .vquote .vimg{width:2.225em;height:2.225em}.v[data-class=v] .vpage .vmore{margin:1em 0}.v[data-class=v] .clear{content:"";display:block;clear:both}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes pulse{50%{background:#dcdcdc}}@keyframes pulse{50%{background:#dcdcdc}}.v[data-class=v] .vspinner{width:22px;height:22px;display:inline-block;border:6px double #a0a0a0;border-top-color:transparent;border-bottom-color:transparent;border-radius:50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear;position:relative;vertical-align:middle;margin:0 5px}.dark .v[data-class=v] .status-bar,.dark .v[data-class=v] .veditor,.dark .v[data-class=v] .vinput,.dark .v[data-class=v] p,.dark .v[data-class=v] pre code,.night .v[data-class=v] .status-bar,.night .v[data-class=v] .veditor,.night .v[data-class=v] .vinput,.night .v[data-class=v] p,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] .status-bar,.theme__dark .v[data-class=v] .veditor,.theme__dark .v[data-class=v] .vinput,.theme__dark .v[data-class=v] p,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] .status-bar,[data-theme=dark] .v[data-class=v] .veditor,[data-theme=dark] .v[data-class=v] .vinput,[data-theme=dark] .v[data-class=v] p,[data-theme=dark] .v[data-class=v] pre code{color:#b2b2b5}.dark .v[data-class=v] .vsys,.dark .v[data-class=v] .vtime,.night .v[data-class=v] .vsys,.night .v[data-class=v] .vtime,.theme__dark .v[data-class=v] .vsys,.theme__dark .v[data-class=v] .vtime,[data-theme=dark] .v[data-class=v] .vsys,[data-theme=dark] .v[data-class=v] .vtime{color:#929298}.dark .v[data-class=v] code,.dark .v[data-class=v] pre,.dark .v[data-class=v] pre code,.night .v[data-class=v] code,.night .v[data-class=v] pre,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] code,.theme__dark .v[data-class=v] pre,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] code,[data-theme=dark] .v[data-class=v] pre,[data-theme=dark] .v[data-class=v] pre code{color:#929298;background-color:#151414}.dark .v[data-class=v] .vwrap,.night .v[data-class=v] .vwrap,.theme__dark .v[data-class=v] .vwrap,[data-theme=dark] .v[data-class=v] .vwrap{border-color:#b2b2b5}.dark .v[data-class=v] .vicon,.night .v[data-class=v] .vicon,.theme__dark .v[data-class=v] .vicon,[data-theme=dark] .v[data-class=v] .vicon{fill:#b2b2b5}.dark .v[data-class=v] .vicon.actived,.night .v[data-class=v] .vicon.actived,.theme__dark .v[data-class=v] .vicon.actived,[data-theme=dark] .v[data-class=v] .vicon.actived{fill:#66b1ff}.dark .v[data-class=v] .vbtn,.night .v[data-class=v] .vbtn,.theme__dark .v[data-class=v] .vbtn,[data-theme=dark] .v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.dark .v[data-class=v] .vbtn:hover,.night .v[data-class=v] .vbtn:hover,.theme__dark .v[data-class=v] .vbtn:hover,[data-theme=dark] .v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.dark .v[data-class=v] a:hover,.night .v[data-class=v] a:hover,.theme__dark .v[data-class=v] a:hover,[data-theme=dark] .v[data-class=v] a:hover{color:#d7191a}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,.night .v[data-class=v] .vcards .vcard .vcontent.expand:before,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,.night .v[data-class=v] .vcards .vcard .vcontent.expand:after,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}@media (prefers-color-scheme:dark){.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#b2b2b5}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#929298}.v[data-class=v] code,.v[data-class=v] pre,.v[data-class=v] pre code{color:#929298;background-color:#151414}.v[data-class=v] .vwrap{border-color:#b2b2b5}.v[data-class=v] .vicon{fill:#b2b2b5}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}}', ""])
+ }
+ , function(e, t) {
+ function n(e, t) {
+ var n = e[1] || ""
+ , o = e[3];
+ if (!o)
+ return n;
+ if (t && "function" == typeof btoa) {
+ var i = r(o);
+ return [n].concat(o.sources.map(function(e) {
+ return "/*# sourceURL=" + o.sourceRoot + e + " */"
+ })).concat([i]).join("\n")
+ }
+ return [n].join("\n")
+ }
+ function r(e) {
+ return "/*# sourceMappingURL=data:application/json;charset=utf-8;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(e)))) + " */"
+ }
+ e.exports = function(e) {
+ var t = [];
+ return t.toString = function() {
+ return this.map(function(t) {
+ var r = n(t, e);
+ return t[2] ? "@media " + t[2] + "{" + r + "}" : r
+ }).join("")
+ }
+ ,
+ t.i = function(e, n) {
+ "string" == typeof e && (e = [[null, e, ""]]);
+ for (var r = {}, o = 0; o < this.length; o++) {
+ var i = this[o][0];
+ "number" == typeof i && (r[i] = !0)
+ }
+ for (o = 0; o < e.length; o++) {
+ var a = e[o];
+ "number" == typeof a[0] && r[a[0]] || (n && !a[2] ? a[2] = n : n && (a[2] = "(" + a[2] + ") and (" + n + ")"),
+ t.push(a))
+ }
+ }
+ ,
+ t
+ }
+ }
+ , function(e, t, n) {
+ function r(e, t) {
+ for (var n = 0; n < e.length; n++) {
+ var r = e[n]
+ , o = h[r.id];
+ if (o) {
+ o.refs++;
+ for (var i = 0; i < o.parts.length; i++)
+ o.parts[i](r.parts[i]);
+ for (; i < r.parts.length; i++)
+ o.parts.push(u(r.parts[i], t))
+ } else {
+ for (var a = [], i = 0; i < r.parts.length; i++)
+ a.push(u(r.parts[i], t));
+ h[r.id] = {
+ id: r.id,
+ refs: 1,
+ parts: a
+ }
+ }
+ }
+ }
+ function o(e, t) {
+ for (var n = [], r = {}, o = 0; o < e.length; o++) {
+ var i = e[o]
+ , a = t.base ? i[0] + t.base : i[0]
+ , s = i[1]
+ , l = i[2]
+ , c = i[3]
+ , u = {
+ css: s,
+ media: l,
+ sourceMap: c
+ };
+ r[a] ? r[a].parts.push(u) : n.push(r[a] = {
+ id: a,
+ parts: [u]
+ })
+ }
+ return n
+ }
+ function i(e, t) {
+ var n = g(e.insertInto);
+ if (!n)
+ throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
+ var r = b[b.length - 1];
+ if ("top" === e.insertAt)
+ r ? r.nextSibling ? n.insertBefore(t, r.nextSibling) : n.appendChild(t) : n.insertBefore(t, n.firstChild),
+ b.push(t);
+ else {
+ if ("bottom" !== e.insertAt)
+ throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
+ n.appendChild(t)
+ }
+ }
+ function a(e) {
+ if (null === e.parentNode)
+ return !1;
+ e.parentNode.removeChild(e);
+ var t = b.indexOf(e);
+ t >= 0 && b.splice(t, 1)
+ }
+ function s(e) {
+ var t = document.createElement("style");
+ return e.attrs.type = "text/css",
+ c(t, e.attrs),
+ i(e, t),
+ t
+ }
+ function l(e) {
+ var t = document.createElement("link");
+ return e.attrs.type = "text/css",
+ e.attrs.rel = "stylesheet",
+ c(t, e.attrs),
+ i(e, t),
+ t
+ }
+ function c(e, t) {
+ Object.keys(t).forEach(function(n) {
+ e.setAttribute(n, t[n])
+ })
+ }
+ function u(e, t) {
+ var n, r, o, i;
+ if (t.transform && e.css) {
+ if (!(i = t.transform(e.css)))
+ return function() {}
+ ;
+ e.css = i
+ }
+ if (t.singleton) {
+ var c = y++;
+ n = m || (m = s(t)),
+ r = d.bind(null, n, c, !1),
+ o = d.bind(null, n, c, !0)
+ } else
+ e.sourceMap && "function" == typeof URL && "function" == typeof URL.createObjectURL && "function" == typeof URL.revokeObjectURL && "function" == typeof Blob && "function" == typeof btoa ? (n = l(t),
+ r = f.bind(null, n, t),
+ o = function() {
+ a(n),
+ n.href && URL.revokeObjectURL(n.href)
+ }
+ ) : (n = s(t),
+ r = p.bind(null, n),
+ o = function() {
+ a(n)
+ }
+ );
+ return r(e),
+ function(t) {
+ if (t) {
+ if (t.css === e.css && t.media === e.media && t.sourceMap === e.sourceMap)
+ return;
+ r(e = t)
+ } else
+ o()
+ }
+ }
+ function d(e, t, n, r) {
+ var o = n ? "" : r.css;
+ if (e.styleSheet)
+ e.styleSheet.cssText = x(t, o);
+ else {
+ var i = document.createTextNode(o)
+ , a = e.childNodes;
+ a[t] && e.removeChild(a[t]),
+ a.length ? e.insertBefore(i, a[t]) : e.appendChild(i)
+ }
+ }
+ function p(e, t) {
+ var n = t.css
+ , r = t.media;
+ if (r && e.setAttribute("media", r),
+ e.styleSheet)
+ e.styleSheet.cssText = n;
+ else {
+ for (; e.firstChild; )
+ e.removeChild(e.firstChild);
+ e.appendChild(document.createTextNode(n))
+ }
+ }
+ function f(e, t, n) {
+ var r = n.css
+ , o = n.sourceMap
+ , i = void 0 === t.convertToAbsoluteUrls && o;
+ (t.convertToAbsoluteUrls || i) && (r = w(r)),
+ o && (r += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(o)))) + " */");
+ var a = new Blob([r],{
+ type: "text/css"
+ })
+ , s = e.href;
+ e.href = URL.createObjectURL(a),
+ s && URL.revokeObjectURL(s)
+ }
+ var h = {}
+ , v = function(e) {
+ var t;
+ return function() {
+ return void 0 === t && (t = e.apply(this, arguments)),
+ t
+ }
+ }(function() {
+ return window && document && document.all && !window.atob
+ })
+ , g = function(e) {
+ var t = {};
+ return function(n) {
+ return void 0 === t[n] && (t[n] = e.call(this, n)),
+ t[n]
+ }
+ }(function(e) {
+ return document.querySelector(e)
+ })
+ , m = null
+ , y = 0
+ , b = []
+ , w = n(62);
+ e.exports = function(e, t) {
+ if ("undefined" != typeof DEBUG && DEBUG && "object" != typeof document)
+ throw new Error("The style-loader cannot be used in a non-browser environment");
+ t = t || {},
+ t.attrs = "object" == typeof t.attrs ? t.attrs : {},
+ t.singleton || (t.singleton = v()),
+ t.insertInto || (t.insertInto = "head"),
+ t.insertAt || (t.insertAt = "bottom");
+ var n = o(e, t);
+ return r(n, t),
+ function(e) {
+ for (var i = [], a = 0; a < n.length; a++) {
+ var s = n[a]
+ , l = h[s.id];
+ l.refs--,
+ i.push(l)
+ }
+ if (e) {
+ r(o(e, t), t)
+ }
+ for (var a = 0; a < i.length; a++) {
+ var l = i[a];
+ if (0 === l.refs) {
+ for (var c = 0; c < l.parts.length; c++)
+ l.parts[c]();
+ delete h[l.id]
+ }
+ }
+ }
+ }
+ ;
+ var x = function() {
+ var e = [];
+ return function(t, n) {
+ return e[t] = n,
+ e.filter(Boolean).join("\n")
+ }
+ }()
+ }
+ , function(e, t) {
+ e.exports = function(e) {
+ var t = "undefined" != typeof window && window.location;
+ if (!t)
+ throw new Error("fixUrls requires window.location");
+ if (!e || "string" != typeof e)
+ return e;
+ var n = t.protocol + "//" + t.host
+ , r = n + t.pathname.replace(/\/[^\/]*$/, "/");
+ return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(e, t) {
+ var o = t.trim().replace(/^"(.*)"$/, function(e, t) {
+ return t
+ }).replace(/^'(.*)'$/, function(e, t) {
+ return t
+ });
+ if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/)/i.test(o))
+ return e;
+ var i;
+ return i = 0 === o.indexOf("//") ? o : 0 === o.indexOf("/") ? n + o : r + o.replace(/^\.\//, ""),
+ "url(" + JSON.stringify(i) + ")"
+ })
+ }
+ }
+ , function(e, t, n) {
+ n(58),
+ e.exports = n(18)
+ }
+ ])
+});
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 000000000..cb497a0ac
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,29 @@
+{
+ "short_name": "Volantis",
+ "name": "Volantis",
+ "icons": [{
+ "src": "/assets/favicon/favicon_256.png",
+ "type": "image/png",
+ "sizes": "256x256"
+ }, {
+ "src": "/assets/favicon/favicon_192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ }, {
+ "src": "/assets/favicon/favicon_180.png",
+ "type": "image/png",
+ "sizes": "180x180"
+ }, {
+ "src": "/assets/favicon/favicon_144.png",
+ "type": "image/png",
+ "sizes": "144x144"
+ }, {
+ "src": "/assets/favicon/favicon_128.png",
+ "type": "image/png",
+ "sizes": "128x128"
+ }],
+ "background_color": "#ffffff",
+ "theme_color": "#ffffff",
+ "display": "standalone",
+ "start_url": "./index.html"
+}
diff --git a/news/2017-10-24/index.html b/news/2017-10-24/index.html
new file mode 100644
index 000000000..96404a484
--- /dev/null
+++ b/news/2017-10-24/index.html
@@ -0,0 +1,1976 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis for Hexo 4.2+ - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Volantis
+A Wonderful Theme for Hexo
+
+
+
+Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+ 开始使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-02-18/index.html b/news/2020-02-18/index.html
new file mode 100644
index 000000000..0c3ebdcff
--- /dev/null
+++ b/news/2020-02-18/index.html
@@ -0,0 +1,2045 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 心率测量工具限免活动 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 心率测量工具限免活动
+
+
+
+
+
+
+
+
+
+心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
+如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-02-19/index.html b/news/2020-02-19/index.html
new file mode 100644
index 000000000..571dbd3bf
--- /dev/null
+++ b/news/2020-02-19/index.html
@@ -0,0 +1,2032 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 版本命名规范化 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 版本命名规范化
+
+
+
+
+
+
+
+ 主版本号.子版本号.修订版本号
+
+主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
+
+主版本号 : 较大改动、框架调整或重构
+子版本号 : 较小或局部的功能性更新
+修订版本号 : 修复BUG或无关紧要的细节调整
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-02-20/index.html b/news/2020-02-20/index.html
new file mode 100644
index 000000000..4ec089b46
--- /dev/null
+++ b/news/2020-02-20/index.html
@@ -0,0 +1,2030 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已关闭评论区 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用 GitHub Issue 由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
+遇到问题怎么办
+确定已经查阅文档找不到相关内容。
+前往「常见问题」页面,查看是否有解决方案。
+访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
+如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-02-21/index.html b/news/2020-02-21/index.html
new file mode 100644
index 000000000..1c28f5f38
--- /dev/null
+++ b/news/2020-02-21/index.html
@@ -0,0 +1,2021 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题文档网页更新并开源 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题文档网页更新并开源
+
+
+
+
+
+
+
+ 主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。
+现在使用的文档页面源码是: volantis-docs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-02-22/index.html b/news/2020-02-22/index.html
new file mode 100644
index 000000000..30236f9cd
--- /dev/null
+++ b/news/2020-02-22/index.html
@@ -0,0 +1,2028 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题更名为「Volantis」 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题更名为「Volantis」
+
+
+
+
+
+
+
+ 主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-02-25/index.html b/news/2020-02-25/index.html
new file mode 100644
index 000000000..6ea30a0be
--- /dev/null
+++ b/news/2020-02-25/index.html
@@ -0,0 +1,2028 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增 pjax 开发分支 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增 pjax 开发分支
+
+
+
+
+
+
+
+ 由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。
+
+不能使用封面
+mathjax
+有折叠框的页面,折叠框打开之后目录高亮位置不对应
+很多未知问题
+
+
+感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-03-06-2.0-beta/index.html b/news/2020-03-06-2.0-beta/index.html
new file mode 100644
index 000000000..e2e561662
--- /dev/null
+++ b/news/2020-03-06-2.0-beta/index.html
@@ -0,0 +1,2076 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」测试版发布 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」测试版发布
+
+
+
+
+
+
+
+ Beta6
+
+
+
+
+
+ Beta5
+
+
+
+ Beta4
+
+
+
+ Beta3
+
+
+
+ Beta2
+
+
+
+ Beta1
+
+
>div .info background-color : alpha($color -mac-cyan, 20% ) border-left : $borderradius -codeblock solid $color -mac-cyan border-radius : $borderradius -codeblock >:before ...(省略无关代码) background-size : 16px 16px background-position : 4px 4px background-repeat : no-repeat background-color : $color -mac-cyan background-image : url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyMTYgMTM0NHYxMjhxMCAyNi0xOSA0NXQtNDUgMTloLTUxMnEtMjYgMC00NS0xOXQtMTktNDV2LTEyOHEwLTI2IDE5LTQ1dDQ1LTE5aDY0di0zODRoLTY0cS0yNiAwLTQ1LTE5dC0xOS00NXYtMTI4cTAtMjYgMTktNDV0NDUtMTloMzg0cTI2IDAgNDUgMTl0MTkgNDV2NTc2aDY0cTI2IDAgNDUgMTl0MTkgNDV6bS0xMjgtMTE1MnYxOTJxMCAyNi0xOSA0NXQtNDUgMTloLTI1NnEtMjYgMC00NS0xOXQtMTktNDV2LTE5MnEwLTI2IDE5LTQ1dDQ1LTE5aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==" )
我试过把url里面的内容换成网络图片的URL是可以正常显示的。 源码在: themes/volantis/source/css/_third-party/container.styl
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-03-10-2.0/index.html b/news/2020-03-10-2.0/index.html
new file mode 100644
index 000000000..72021586c
--- /dev/null
+++ b/news/2020-03-10-2.0/index.html
@@ -0,0 +1,2099 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」正式版发布 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」正式版发布
+
+
+
+
+
+
+
+ 本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:
+
+卸载 less
+npm uninstall hexo-renderer-less --save
+
+安装 stylus
+npm install hexo-renderer-stylus --save
+
+
+
+
+
+
+
+新功能 导航栏 导航栏获得了史诗级的增强,可以设置N级 子菜单。考虑到实用性,不太建议使用过多或者过深的菜单(超出屏幕的部分无法被看到)。
+样式设置 现在可以在主题配置文件中设置更多的样式:
+
+最大布局宽度
+导航栏高度、特效(阴影、毛玻璃、鼠标hover时浮起)
+卡片特效(阴影、毛玻璃、鼠标hover时浮起)
+代码框是否显示语言
+标题和正文文本布局(靠左、靠右、居中)
+正文字体
+代码字体
+各部分颜色
+
+封面 封面可以在主题配置文件中设置在首页、归档页面、其它页面默认是否显示。 封面中可以同时显示logo图片、标题、副标题了。
+小部件 grid小部件可以设置 fixed: true
来固定网格宽度(适合文字长短不一的场景)。
+其它 可以设置「评论」的标题和副标题。 可以创建多种颜色的折叠框。 友链增加分组描述。
+功能调整与优化 样式渲染器 使用 stylus
重写了所有样式,无需安装less
插件了。相较于1.7.4
,css
文件体积缩小了19.75% 。
+主题配置文件
+主题配置文件经过了较大改动,使得层级结构更加清晰。
+优化了二维码(微信)分享的使用体验
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/news/2020-04-04/index.html b/news/2020-04-04/index.html
new file mode 100644
index 000000000..52ec5724c
--- /dev/null
+++ b/news/2020-04-04/index.html
@@ -0,0 +1,2073 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关于主题与文档的更新 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 关于主题与文档的更新
+
+
+
+
+
+
+
+ 由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。
+
+计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。
+当主题稳定后会提供英文文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page-settings/body/index.html b/page-settings/body/index.html
new file mode 100644
index 000000000..a6ec4b525
--- /dev/null
+++ b/page-settings/body/index.html
@@ -0,0 +1,2275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 页面自定义布局 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 页面自定义布局
+
+
+
+
+
+
+
+ 显示迷你音乐播放器 标题右边显示迷你音乐播放器,支持的字段有:server
、type
、id
。
+front-matter --- music: server: netease type: song id: 16846091 ---
+
+
+
+文章顶部和底部的日期、分类、更新日期、标签、分享等属于 meta 标签。
+front-matter --- top_meta: false bottom_meta: false ---
+如果一个页面没有 title 则不会显示 top_meta ,像404、关于页面就可以完全隐藏:
+front-matter --- seo_title: 关于 top_meta: false bottom_meta: false ---
+
+
+标题右边显示缩略图 front-matter --- thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png ---
+
+缩略图仅在文章列表和文章页面显示,不会在归档页面显示。
+标题右边显示图标 front-matter --- icons: [fas fa-fire red , fas fa-star green ]---
+
+图标仅在归档页面中显示,可以用来标注热门文章。
+可以通过 red / blue / green / yellow / orange / theme / accent 来设置图标的颜色
+
+
+是否要显示封面 如果某个页面需要封面,可以这样写:
+front-matter
+
+
+显示侧边栏 通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。
+如果某个页面不需要侧边栏,可以这样写:
+front-matter
+
+某个页面想指定显示某几个侧边栏,就这样写:
+front-matter --- sidebar: [grid , toc , tags ] ---
+
+关闭评论 front-matter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page-settings/front-matter/index.html b/page-settings/front-matter/index.html
new file mode 100644
index 000000000..9ff97961a
--- /dev/null
+++ b/page-settings/front-matter/index.html
@@ -0,0 +1,2525 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: front-matter - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ front-matter
+
+
+
+
+
+
+
+ front-matter front-matter 是文件最上方以 ---
分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter
+
+
+
+字段
+含义
+值类型
+默认值
+
+
+
+layout
+布局模版
+String
+-
+
+
+title
+页面标题
+String
+-
+
+
+seo_title
+网页标题
+String
+page.title
+
+
+short_title
+页面标题(在group列表中显示)
+String
+page.title
+
+
+date
+创建时间
+Date
+文件创建时间
+
+
+updated
+更新日期
+Date
+文件修改时间
+
+
+link
+外部文章网址
+String
+-
+
+
+music
+内部音乐控件
+[Object]
+-
+
+
+robots
+robots
+String
+-
+
+
+keywords
+页面关键词
+String
+-
+
+
+description
+页面描述、摘要
+String
+-
+
+
+cover
+是否显示封面
+Bool
+true
+
+
+top_meta
+是否显示文章或页面顶部的meta信息
+Bool
+true
+
+
+bottom_meta
+是否显示文章或页面底部的meta信息
+Bool
+true
+
+
+sidebar
+页面侧边栏
+Bool, Array
+theme.layout.*.sidebar
+
+
+body
+页面主体元素
+Array
+theme.layout.on_page.body
+
+
+mathjax
+是否渲染公式
+Bool, String
+false
+
+
+thumbnail
+缩略图
+String
+false
+
+
+icons
+图标
+Array
+[]
+
+
+pin
+是否置顶
+Bool
+false
+
+
+
+
+layout:post
时特有的字段:
+
+
+
+字段
+含义
+值类型
+默认值
+
+
+
+author
+文章作者
+[Object]
+config.author
+
+
+categories
+分类
+String, Array
+-
+
+
+tags
+标签
+String, Array
+-
+
+
+toc
+是否生成目录
+Bool
+true
+
+
+
+
+author
+
+
+
+字段
+含义
+值类型
+默认值
+
+
+
+name
+作者名
+String
+config.author
+
+
+avatar
+头像
+String
+config.avatar
+
+
+url
+链接
+String
+config.url
+
+
+
+
+music
+
+
+
+字段
+是否必须
+值类型
+
+
+
+server
+是
+netease, tencent, kugou, xiami, baidu
+
+
+type
+是
+song, playlist, album, search, artist
+
+
+id
+是
+song id / playlist id / album id / search keyword
+
+
+
+
+文章置顶 在 front-matter 中设置以下值:
+front-matter
+
+文章分类 多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。
+多级分类:
+front-matter --- categories: [分类A , 分类B ]---
+或者
+front-matter --- categories: - 分类A - 分类B ---
+
+并列分类
+front-matter categories: - [分类A ] - [分类B ]
+
+多级+并列分类
+front-matter categories: - [分类A , 分类B ] - [分类C , 分类D ]
+
+文章摘要 在文章中插入 <!-- more -->
,前面的部分即为摘要。
+某篇文章源码 --- title: xxx date: 2020-02-21 --- 这是摘要 <!-- more --> 这是正文
+
+注意 : <!-- more -->
前后一定要有空行,不然可能导致显示错位。
+
+设置文章作者 由于支持多作者共同维护一个博客,所以可以设置单独一篇文章的作者:
+front-matter --- author: name: 作者 avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com ---
+
+引入外部文章 利用 link
,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如:
+front-matter --- layout: post date: 2017-07-05 title: [转 ]如何搭建基于Hexo的独立博客 categories: [Dev , Hexo ]tags: - Hexo author: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.com link: https://xaoxuu.com/blog/2017-07-05-hexo-blog/ --- ![](https://img.vim -cn.com/d9/a9af7dc49fc0af8ca3e6dd2450a2f7095a87db.png)
+
+置顶 对于任何文章或者页面,设置 pin: true
即可置顶在首页。
+front-matter
+
+这会导致一个小问题:首页 post 卡片数量多于设定值,如果有强迫症希望每一个分页数量一致,可以安装插件来实现,详见:#421
+不归档 存放在 _posts
文件夹下的文章一般都会出现在归档页,如果某篇文章不希望出现在归档页面:
+front-matter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page-settings/layout/index.html b/page-settings/layout/index.html
new file mode 100644
index 000000000..b6e49cb1a
--- /dev/null
+++ b/page-settings/layout/index.html
@@ -0,0 +1,2326 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 页面布局模板 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 布局模板
+
+
+取值
+含义
+
+
+
+page
+独立页面
+
+
+post
+文章页面
+
+
+docs
+文档页面
+
+
+category
+分类页面
+
+
+tag
+标签页面
+
+
+friends
+友链页面
+
+
+list
+列表页面
+
+
+
+
+page & post & docs 这三种页面相同,但是有以下细微区别:
+
+post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 和 docs 不会。
+post 文章末尾最多可以显示「参考资料」、「相关文章」、「版权标识」、「打赏」四个模块。
+docs 文章末尾最多可以显示「参考资料」一个模块。
+
+除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。
+归档页面 归档页面是自动生成的,并且初始化的时候已经生成,路径如下:
+blog/_config.yml
+
+关于页面 Create file if not exists: source/about/index.md --- layout: docs seo_title: 关于 bottom_meta: false sidebar: []valine: placeholder: 有什么想对我说的呢? --- 下面写关于自己的内容
+
+分类页面 Create file if not exists: source/categories/index.md --- layout: category index: true title: 所有分类 ---
+
+标签页面 Create file if not exists: source/tags/index.md --- layout: tag index: true title: 所有标签 ---
+
+列表页面 Create file if not exists: source/mylist/index.md --- layout: list group: mylist index: true ---
+
+结果就是筛选出所有文章中 front-matter
部分含有 group: mylist
的文章。
+友链页面 创建页面文件 Create file if not exists: source/friends/index.md --- layout: friends title: 我的朋友们 --- 这里写友链上方的内容。 <!-- more --> 这里可以写友链页面下方的文字备注,例如自己的友链规范、示例等。
+
+选择布局方案 在主题配置文件中找到以下内容:
+pages: friends: layout_scheme: traditional
+
+目前提供三种布局方案:
+
+simple: 简单布局,只有头像和标题。
+traditional: 传统布局,是 Volantis 旧版本的风格。
+sites: 网站卡片布局,是 Volantis 4.x 新增的网站卡片标签的样式。
+
+设置数据源 友链的数据源写在以下路径,如果没有请自行创建:
+
blog/source/_data/friends.yml
+
内容格式为:
+
blog/source/_data/friends.yml - group: description: items: - title: avatar: url: screenshot: keywords: description: - title: avatar: url: screenshot: keywords: description:
+
+
不同的布局方式,会用到一部分的字段,一般来说,title
、avatar
和 url
都是必须的。这些数据被转成 HTML 标签插入到友链页面的 <!-- more -->
部分。
使用 issues 标签可以从 issues 中获取 JSON 数据解析并生成 HTML 填充到页面中,使用方法如下:
+
{% issues sites | api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %}
+
+
这样添加友链的方式就变成了:对方提 Issue ,自己审核,然后添加 active
标签,然后刷新网页就生效了。更新友链内容也变得十分方便, Issue 的创建者拥有修改和关闭的权限。
+
新建一个 GitHub 或者 Gitee 仓库,创建 Issues 模板,如下:
+
{ "title" : "" , "screenshot" : "" , "url" : "" , "avatar" : "" , "description" : "" , "keywords" : "" }
+
+
关于如何使用 issues 标签,详见这篇文章:
+
+
+建议
两者是可以同时使用的哦,建议开放 issues 友链给大家,常联系的自己再保存到静态友链。 实测 GitHub API 速度和稳定性不如 Gitee ,如果追求稳定建议使用 Gitee。
+
+404页面 Create file if not exists: source/404.md --- cover: true robots: noindex,nofollow sitemap: false seo_title: 404 Not Found bottom_meta: false sidebar: []valine: path: /404.html placeholder: 请留言告诉我您要访问哪个页面找不到了 --- {% p logo center huge , 404 % } {% p center bold , 很抱歉,您访问的页面不存在 % } {% p center small , 可能是输入地址有误或该地址已被删除 % }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page-settings/math/index.html b/page-settings/math/index.html
new file mode 100644
index 000000000..354c4bcff
--- /dev/null
+++ b/page-settings/math/index.html
@@ -0,0 +1,2290 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 渲染公式 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。即便开启了,文章列表中也不会进行渲染,请注意不要把公式写在文章开头。
+
+
+
+example.md: --- title: 渲染公式(MathJax) date: 2020-02-23 mathjax: true # false: 不渲染, true: 渲染 --- 添加一段描述性文字 $$t+1=2$$ $$ \mbox{积累因子}=\begin{cases} 1+ni & \mbox{单利}\\\\ (1+i)^n & \mbox{复利} \end{cases} $$ $$ \begin{equation} \sum_{i=0}^n F_ i \cdot \phi (H, p_i) - \sum_ {i=1}^n a_i \cdot ( \tilde{x_ i}, \tilde{y_i}) + b_ i \cdot ( \tilde{x_i}^2 , \tilde{y_ i}^2 ) \end{equation} $$ $$ \begin{equation} \beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \end{equation} $$
+
+ 查看公式渲染效果
+
+
$$t+1=2$$
$$ \mbox{积累因子}=\begin{cases} 1+ni & \mbox{单利}\\ (1+i)^n & \mbox{复利} \end{cases} $$
$$ \begin{equation} \sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 ) \end{equation} $$ $$ \begin{equation} \beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \end{equation} $$
+
+
+
+
+如果公式仍无法正确渲染可以阅读 @MicDZ 的这篇文章:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page-sitemap.xml b/page-sitemap.xml
new file mode 100644
index 000000000..ab1625607
--- /dev/null
+++ b/page-sitemap.xml
@@ -0,0 +1,333 @@
+
+
+
+
+ https://volantis.js.org
+ daily
+ 1
+
+
+
+ https://volantis.js.org/tag-plugins/
+ 2020-10-09T01:58:13.590Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/style/
+ 2020-10-09T01:48:12.543Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/search/
+ 2020-10-09T01:48:12.542Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/sidebar/
+ 2020-10-09T01:48:12.542Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/layout/
+ 2020-10-09T01:48:12.541Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/navbar/
+ 2020-10-09T01:48:12.541Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/plugins/
+ 2020-10-09T01:48:12.541Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/configuration/
+ 2020-10-09T01:48:12.540Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/cover/
+ 2020-10-09T01:48:12.540Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/footer/
+ 2020-10-09T01:48:12.540Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/video/
+ 2020-10-09T01:48:12.539Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/theme-settings/comments/
+ 2020-10-09T01:48:12.539Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/span/
+ 2020-10-09T01:48:12.538Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/tab/
+ 2020-10-09T01:48:12.538Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/text/
+ 2020-10-09T01:48:12.538Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/timeline/
+ 2020-10-09T01:48:12.538Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/radio/
+ 2020-10-09T01:48:12.537Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/site/
+ 2020-10-09T01:48:12.537Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/link/
+ 2020-10-09T01:48:12.536Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/note/
+ 2020-10-09T01:48:12.536Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/noteblock/
+ 2020-10-09T01:48:12.536Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/p/
+ 2020-10-09T01:48:12.536Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/inlineimage/
+ 2020-10-09T01:48:12.535Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/issues/
+ 2020-10-09T01:48:12.535Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/gallery/
+ 2020-10-09T01:48:12.534Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/ghcard/
+ 2020-10-09T01:48:12.534Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/image/
+ 2020-10-09T01:48:12.534Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/checkbox/
+ 2020-10-09T01:48:12.533Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/dropmenu/
+ 2020-10-09T01:48:12.533Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/folding/
+ 2020-10-09T01:48:12.533Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/frame/
+ 2020-10-09T01:48:12.533Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/audio/
+ 2020-10-09T01:48:12.532Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/button/
+ 2020-10-09T01:48:12.532Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/page-settings/math/
+ 2020-10-09T01:48:12.531Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/site-settings/configuration/
+ 2020-10-09T01:48:12.531Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/tag-plugins/aplayer/
+ 2020-10-09T01:48:12.531Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/page-settings/body/
+ 2020-10-09T01:48:12.530Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/page-settings/front-matter/
+ 2020-10-09T01:48:12.530Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/page-settings/layout/
+ 2020-10-09T01:48:12.530Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/advanced-settings/
+ 2020-10-09T01:48:12.529Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/getting-started/
+ 2020-10-09T01:48:12.529Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/contributors/
+ 2020-09-21T08:49:05.364Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/examples/
+ 2020-09-21T08:45:14.454Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/faqs/
+ 2020-09-04T04:38:30.084Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/blog/tags/
+ 2020-08-28T11:47:58.568Z
+ weekly
+ 0.8
+
+
+
+ https://volantis.js.org/blog/categories/
+ 2020-08-28T11:47:51.622Z
+ weekly
+ 0.8
+
+
+
+
\ No newline at end of file
diff --git a/page/2/index.html b/page/2/index.html
new file mode 100644
index 000000000..cd0d18ad8
--- /dev/null
+++ b/page/2/index.html
@@ -0,0 +1,2438 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)
+
相关 Issue: #164
+
结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。
+
+
markdwon
解析插件为 hexo-renderer-marked
时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false
都可以避免 deploy 报错。 插件:hexo-renderer-marked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。
+
+不能使用封面
+mathjax
+有折叠框的页面,折叠框打开之后目录高亮位置不对应
+很多未知问题
+
+
+感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。
+
现在使用的文档页面源码是: volantis-docs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
使用 GitHub Issue 由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
+
遇到问题怎么办
+确定已经查阅文档找不到相关内容。
+前往「常见问题」页面,查看是否有解决方案。
+访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
+如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
主版本号.子版本号.修订版本号
+
+
主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
+
+主版本号 : 较大改动、框架调整或重构
+子版本号 : 较小或局部的功能性更新
+修订版本号 : 修复BUG或无关紧要的细节调整
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
+
如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2 / 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page/3/index.html b/page/3/index.html
new file mode 100644
index 000000000..55e50fd57
--- /dev/null
+++ b/page/3/index.html
@@ -0,0 +1,2426 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Volantis
+A Wonderful Theme for Hexo
+
+
+
+
Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+
开始使用
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a image test post.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post doesn't have a title. Make sure it's accessible.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The following contents should be invisible in home/archive page.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a video test post.
+
Youtube
+
VIDEO
+
+
Vimeo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post contains 4 photos:
+
+Widescreen wallpaper
+Portrait photo
+Dual widescreen wallpaper
+Small photo
+
+
All photos should be displayed properly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is used for testing tag plugins. See docs for more info.
+
Block Quote Normal blockquote
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+
Quote from a book Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
+
+
+
NEW: DevDocs now comes with syntax highlighting. http://devdocs.io
+
+
+
Quote from an article on the web Every interaction is both precious and an opportunity to delight.
+Seth Godin `http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html` Welcome to Island Marketing
+
+
Code Block Normal code block
+
+
With caption Array.map array.map(callback[, thisArg])
+
+
With caption and URL .compact Underscore.js .compact([0, 1, false, 2, ‘’, 3]); => [1, 2, 3]
+
+
With marked lines Line 1,7-8,10 should be marked with different color.
+
const http = require ('http' );const hostname = '127.0.0.1' ;const port = 1337 ;http.createServer((req, res ) => { res.writeHead(200 , { 'Content-Type' : 'text/plain' }); res.end('Hello World\n' ); }).listen(port, hostname, () => { console .log(`Server running at http://${hostname} :${port} /` ); });
+
+
Note: Theme's style should support .highlight.line.marked
(recommend to use the selection or current line color).
+
Gist
+
+
jsFiddle
+
+
Pullquote Left Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus molestie arcu, et fringilla mauris placerat ac. Nullam luctus bibendum risus. Ut cursus sed ipsum feugiat egestas. Suspendisse elementum, velit eu consequat consequat, augue lorem dapibus libero, eget pulvinar dolor est sit amet nulla. Suspendisse a porta tortor, et posuere mi. Pellentesque ultricies, mi quis volutpat malesuada, erat felis vulputate nisl, ac congue ante tortor ut ante. Proin aliquam sem vel mauris tincidunt, eget scelerisque tortor euismod. Nulla tincidunt enim nec commodo dictum. Mauris id sapien et orci gravida luctus id ut dui. In vel vulputate odio. Duis vel turpis molestie, scelerisque enim eu, lobortis eros. Cras at ipsum gravida, sagittis ante vel, viverra tellus. Nunc mauris turpis, elementum ullamcorper nisl pretium, ultrices cursus justo. Mauris porttitor commodo eros, ac ornare orci interdum in. Cras fermentum cursus leo sed mattis. In dignissim lorem sem, sit amet elementum mauris venenatis ac.
+
Right Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ligula justo, lobortis sit amet semper vel, dignissim sit amet libero. Praesent ac tempus ligula. Maecenas at gravida odio. Etiam tristique volutpat lacus eu faucibus. Donec non tempus arcu. Phasellus adipiscing, mauris nec mollis egestas, ipsum nunc auctor velit, et rhoncus lorem ipsum at ante. Praesent et sem in velit volutpat auctor. Duis vel mauris nulla. Maecenas mattis interdum ante, quis sagittis nibh cursus et. Nulla facilisi. Morbi convallis gravida tortor, ut fermentum enim gravida et. Nunc vel dictum nisl, non ultrices libero. Proin vestibulum felis eget orci consectetur lobortis. Vestibulum augue nulla, iaculis vitae augue vehicula, dignissim ultrices libero. Sed imperdiet urna et quam ultrices tincidunt nec ac magna. Etiam vel pharetra elit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a link post without a title. The title should be the link with or without protocol. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a Japanese test post.
+
私は昨日ついにその助力家というのの上よりするたなけれ。
+
最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。
+
がたを知っないはずも同時に九月をいよいよたありた。
+
もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。
+
+それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。
+
+
この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。
+
From すぐ使えるダミーテキスト - 日本語 Lorem ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a Chinese test post.
+
善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。
+
以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一?
+
就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。
+
國新故。
+
+工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不?
+
+
From 亂數假文產生器 - Chinese Lorem Ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 3 / 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/page/4/index.html b/page/4/index.html
new file mode 100644
index 000000000..580ed6d30
--- /dev/null
+++ b/page/4/index.html
@@ -0,0 +1,2156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post has a long title. Make sure the title displayed right.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is a link post. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The purpose of this post is to help you make sure all of HTML elements can display properly. If you use CSS reset, don't forget to redefine the style by yourself.
+
+
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6
+
Paragraph Lorem ipsum dolor sit amet, test link consectetur adipiscing elit. Strong text pellentesque ligula commodo viverra vehicula. Italic text at ullamcorper enim. Morbi a euismod nibh. Underline text non elit nisl. Deleted text tristique, sem id condimentum tempus, metus lectus venenatis mauris, sit amet semper lorem felis a eros. Fusce egestas nibh at sagittis auctor. Sed ultricies ac arcu quis molestie. Donec dapibus nunc in nibh egestas, vitae volutpat sem iaculis. Curabitur sem tellus, elementum nec quam id, fermentum laoreet mi. Ut mollis ullamcorper turpis, vitae facilisis velit ultricies sit amet. Etiam laoreet dui odio, id tempus justo tincidunt id. Phasellus scelerisque nunc sed nunc ultricies accumsan.
+
Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed erat diam
, blandit eget felis aliquam, rhoncus varius urna. Donec tellus sapien, sodales eget ante vitae, feugiat ullamcorper urna. Praesent auctor dui vitae dapibus eleifend. Proin viverra mollis neque, ut ullamcorper elit posuere eget.
+
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+
Maecenas ornare arcu at mi suscipit, non molestie tortor ultrices. Aenean convallis, diam et congue ultricies, erat magna tincidunt orci, pulvinar posuere mi sapien ac magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent vitae placerat mauris. Nullam laoreet ante posuere tortor blandit auctor. Sed id ligula volutpat leo consequat placerat. Mauris fermentum dolor sed augue malesuada sollicitudin. Vivamus ultrices nunc felis, quis viverra orci eleifend ut. Donec et quam id urna cursus posuere. Donec elementum scelerisque laoreet.
+
List Types Definition List (dl) Definition List Title This is a definition list division.
+
+
Ordered List (ol)
+List Item 1
+List Item 2
+List Item 3
+
+
Unordered List (ul)
+List Item 1
+List Item 2
+List Item 3
+
+
Checkbox List (ul)
+
Table
+
+
+Table Header 1
+Table Header 2
+Table Header 3
+
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+
Misc Stuff - abbr, acronym, sub, sup, kbd, etc. Lorem superscript dolor subscript amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. cite . Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. NBA Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. AVE . Use Crtl + C to stop.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to Hexo! This is your very first post. Check documentation to learn how to use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4 / 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/placeholder b/placeholder
deleted file mode 100644
index e69de29bb..000000000
diff --git a/post-sitemap.xml b/post-sitemap.xml
new file mode 100644
index 000000000..43864a4c6
--- /dev/null
+++ b/post-sitemap.xml
@@ -0,0 +1,307 @@
+
+
+
+
+ https://volantis.js.org
+ daily
+ 1
+
+
+
+ https://volantis.js.org/news/2017-10-24/
+ 2020-10-09T01:48:12.528Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-09-24-list-tags/
+ 2020-09-23T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-07-03-valine/
+ 2020-09-04T02:05:18.449Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-09-03-message-prompt/
+ 2020-09-03T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-09-03-latest-comments/
+ 2020-09-02T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-08-31-hexospeed/
+ 2020-08-30T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-04-04/
+ 2020-08-28T11:26:34.871Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-03-10-2.0/
+ 2020-08-28T11:26:32.295Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-03-06-2.0-beta/
+ 2020-08-28T11:26:29.989Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-02-25/
+ 2020-08-28T11:26:28.041Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-02-22/
+ 2020-08-28T11:26:25.818Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-02-21/
+ 2020-08-28T11:26:23.376Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-02-20/
+ 2020-08-28T11:26:20.424Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-02-19/
+ 2020-08-28T11:26:17.378Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/news/2020-02-18/
+ 2020-08-28T11:26:14.369Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-08-28-issue-api/
+ 2020-08-27T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-08-21-main-banner/
+ 2020-08-21T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%86%E3%82%B9%E3%83%88/
+ 2020-08-21T02:39:20.204Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/videos/
+ 2020-08-21T02:39:20.203Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6/
+ 2020-08-21T02:39:20.203Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/long-title/
+ 2020-08-21T02:39:20.202Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/markdown/
+ 2020-08-21T02:39:20.202Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/no-title/
+ 2020-08-21T02:39:20.202Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/tag-plugins/
+ 2020-08-21T02:39:20.202Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/hello-world/
+ 2020-08-21T02:39:20.201Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/images/
+ 2020-08-21T02:39:20.201Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/link-post-without-title/
+ 2020-08-21T02:39:20.201Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/link-post/
+ 2020-08-21T02:39:20.201Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/code-highlight/
+ 2020-08-21T02:39:20.200Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/elements/
+ 2020-08-21T02:39:20.200Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/excerpts/
+ 2020-08-21T02:39:20.200Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/test/gallery-post/
+ 2020-08-21T02:39:20.200Z
+ weekly
+ 0.6
+
+
+
+ https://volantis.js.org/assets/wallpaper-2572384.jpg
+
+
+
+
+
+ https://volantis.js.org/assets/wallpaper-2311325.jpg
+
+
+
+
+
+ https://volantis.js.org/assets/wallpaper-878514.jpg
+
+
+
+
+
+ http://placehold.it/350x150.jpg
+
+
+
+
+
+
+ https://volantis.js.org/test/2020-03-06-test-url/
+ 2020-08-21T02:39:20.199Z
+ weekly
+ 0.6
+
+
+
+
+ https://volantis.js.org/blogs/2020-05-17-pjax/
+ 2020-08-06T16:00:00.000Z
+ weekly
+ 0.6
+
+
+
+
+
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 000000000..ef09be2a4
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,2 @@
+User-Agent: *
+Allow: /sitemap.xml
\ No newline at end of file
diff --git a/search.xml b/search.xml
new file mode 100644
index 000000000..cf851ba0a
--- /dev/null
+++ b/search.xml
@@ -0,0 +1,565 @@
+
+
+
+
+
+
+ Hexo 标签函数 list_tags 用法详解
+
+ /blogs/2020-09-24-list-tags/
+
+
+
+
+
+
+ 开发心得
+
+
+
+
+
+
+
+
+
+ 如何给博客添加弹窗通知
+
+ /blogs/2020-09-03-message-prompt/
+
+
+
+
+
+
+ 进阶玩法
+
+
+
+
+
+
+
+
+
+ 博客访问速度提升:最佳线路分流
+
+ /blogs/2020-08-31-hexospeed/
+
+
+
+
+
+
+ 进阶玩法
+
+
+
+
+
+
+
+
+
+ 静态博客使用 Issues API 发布动态、友链、书签
+
+ /blogs/2020-08-28-issue-api/
+
+
+
+
+
+
+ 进阶玩法
+
+
+
+
+
+
+
+
+
+ 给 Volantis 主题调用 Valine 最新评论
+
+ /blogs/2020-09-03-latest-comments/
+
+
+
+
+
+
+ 进阶玩法
+
+
+
+
+
+
+
+
+
+ 给 Hexo Volantis 主题添加图片轮播功能
+
+ /blogs/2020-08-21-main-banner/
+
+
+
+
+
+
+ 进阶玩法
+
+
+
+
+
+
+
+
+
+ 如何快速优雅地删除 Valine 的垃圾评论
+
+ /blogs/2020-07-03-valine/
+
+ Valine 评论由于可以匿名,发言成本低、质量低,使用 app 可以方便的删除垃圾评论。操作演示 Your browser does not support the video tag.
App 只支持数据存储于 LeanCloud 的评论系统。
App 登录前需要配置 AppID 和 AppKey,由于字符比较长,输入不方便,所以支持 URL Scheme 配置。将 URL 生成一个二维码,然后用手机扫码就可以打开 App 并自动配置好。
格式为:
valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目
也可以把管理员用户的账号和密码配置上,扫码直接登录,但是注意不要泄露出去:
valine://cfg/id=7yIoRlSmfX09vQCERsuWzFnx-MdYXbMMI&key=3zCL5GFePTUjwbqLop44QFbr&alias=测试项目&user=me@xaoxuu.com&psw=q
注意:这个管理员用户并不是 LeanCloud 的账号,而是当前 Valine 数据库中的 _User
表中的一个用户,可以在 App 中注册,然后在 LeanCloud 上把注册的用户设置为管理员。
设置管理员的方法:在 _Role
表中新建一个 admin
角色,然后在 admin
角色的 users
列中点击 Relations
把自己刚注册的用户添加进去,这个用户就有了修改和删除评论数据的权限。
App 测试版地址 ]]>
+
+
+
+
+ 进阶玩法
+
+
+
+
+
+
+
+
+
+ Volantis 主题部署 Pjax
+
+ /blogs/2020-05-17-pjax/
+
+
+
+
+
+
+ 开发心得
+
+
+
+
+
+
+
+
+
+ 关于主题与文档的更新
+
+ /news/2020-04-04/
+
+ 由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。计划 2.x
的最后一个版本的文档会保留至 5.0
发布时,即最终会同时维护3个大版本的文档。 当主题稳定后会提供英文文档。 ]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」正式版发布
+
+ /news/2020-03-10-2.0/
+
+ 本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:卸载 less
npm uninstall hexo-renderer-less --save
安装 stylus
npm install hexo-renderer-stylus --save
新功能 导航栏 导航栏获得了史诗级的增强,可以设置N级 子菜单。考虑到实用性,不太建议使用过多或者过深的菜单(超出屏幕的部分无法被看到)。
样式设置 现在可以在主题配置文件中设置更多的样式:
最大布局宽度 导航栏高度、特效(阴影、毛玻璃、鼠标hover时浮起) 卡片特效(阴影、毛玻璃、鼠标hover时浮起) 代码框是否显示语言 标题和正文文本布局(靠左、靠右、居中) 正文字体 代码字体 各部分颜色 封面 封面可以在主题配置文件中设置在首页、归档页面、其它页面默认是否显示。 封面中可以同时显示logo图片、标题、副标题了。
小部件 grid小部件可以设置 fixed: true
来固定网格宽度(适合文字长短不一的场景)。
其它 可以设置「评论」的标题和副标题。 可以创建多种颜色的折叠框。 友链增加分组描述。
功能调整与优化 样式渲染器 使用 stylus
重写了所有样式,无需安装less
插件了。相较于1.7.4
,css
文件体积缩小了19.75% 。
主题配置文件 主题配置文件经过了较大改动,使得层级结构更加清晰。 优化了二维码(微信)分享的使用体验 ]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 新版本「2.0」测试版发布
+
+ /news/2020-03-06-2.0-beta/
+
+ Beta6 Beta5 Beta4 Beta3 Beta2 Beta1 >div .info background-color : alpha($color -mac-cyan, 20% ) border-left : $borderradius -codeblock solid $color -mac-cyan border-radius : $borderradius -codeblock >:before ...(省略无关代码) background-size : 16px 16px background-position : 4px 4px background-repeat : no-repeat background-color : $color -mac-cyan background-image : url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyMTYgMTM0NHYxMjhxMCAyNi0xOSA0NXQtNDUgMTloLTUxMnEtMjYgMC00NS0xOXQtMTktNDV2LTEyOHEwLTI2IDE5LTQ1dDQ1LTE5aDY0di0zODRoLTY0cS0yNiAwLTQ1LTE5dC0xOS00NXYtMTI4cTAtMjYgMTktNDV0NDUtMTloMzg0cTI2IDAgNDUgMTl0MTkgNDV2NTc2aDY0cTI2IDAgNDUgMTl0MTkgNDV6bS0xMjgtMTE1MnYxOTJxMCAyNi0xOSA0NXQtNDUgMTloLTI1NnEtMjYgMC00NS0xOXQtMTktNDV2LTE5MnEwLTI2IDE5LTQ1dDQ1LTE5aDI1NnEyNiAwIDQ1IDE5dDE5IDQ1eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==" )
我试过把url里面的内容换成网络图片的URL是可以正常显示的。 源码在: themes/volantis/source/css/_third-party/container.styl
]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 测试「文章内链接作文本的话无法生成静态文件」
+
+ /test/2020-03-06-test-url/
+
+ 5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)相关 Issue: #164
结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。
markdwon
解析插件为 hexo-renderer-marked
时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false
都可以避免 deploy 报错。 插件:hexo-renderer-marked
]]>
+
+
+
+
+
+
+
+
+ 新增 pjax 开发分支
+
+ /news/2020-02-25/
+
+ 由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。不能使用封面 mathjax 有折叠框的页面,折叠框打开之后目录高亮位置不对应 很多未知问题 感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》 当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。
]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 主题更名为「Volantis」
+
+ /news/2020-02-22/
+
+ 主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 主题文档网页更新并开源
+
+ /news/2020-02-21/
+
+ 主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。现在使用的文档页面源码是: volantis-docs
]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 已关闭评论区
+
+ /news/2020-02-20/
+
+ 使用 GitHub Issue由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。 为了精准高效解决问题,请前往 GitHub Issue
遇到问题怎么办 确定已经查阅文档找不到相关内容。 前往「常见问题」页面,查看是否有解决方案。 访问在线示例,查看是否具有相同第问题。 3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。 3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。 ]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 版本命名规范化
+
+ /news/2020-02-19/
+
+ 主版本号.子版本号.修订版本号主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:
主版本号 : 较大改动、框架调整或重构子版本号 : 较小或局部的功能性更新修订版本号 : 修复BUG或无关紧要的细节调整 ]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ 心率测量工具限免活动
+
+ /news/2020-02-18/
+
+ 心率管家 App(仅iOS端),专业版不定期限免,欢迎下载体验。
如果您看到的时候已经过了限免期,可以先下载免费版使用。为了吸引 app 推荐类网站的爬虫进行推荐,专业版的价格通常在0元到68元之间浮动变化的。
]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ Code Highlight Style test
+
+ /test/code-highlight/
+
+ Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
#[derive(Debug)] pub enum State { Start, Transient, Closed, } impl From <&'a str > for State { fn from (s: &'a str ) -> Self { match s { "start" => State::Start, "closed" => State::Closed, _ => unreachable! (), } } }
[ { "title" : "apples" , "count" : [12000 , 20000 ], "description" : {"text" : "..." , "sensitive" : false } }, { "title" : "oranges" , "count" : [17500 , null ], "description" : {"text" : "..." , "sensitive" : false } } ]
class MyClass { public static myValue: string ; constructor (init: string ) { this .myValue = init; } } import fs = require ("fs" );module MyModule { export interface MyInterface extends Other { myProperty: any ; } } declare magicNumber number ;myArray.forEach(() => { });
@requires_authorization def somefunc (param1='' , param2=0 ): r'''A docstring''' if param1 > param2: print 'Gre\'ater' return (param2 - param1 + 1 + 0b10l ) or None class SomeClass : pass >>> message = '''interpreter ... prompt'''
<!DOCTYPE html > <title > Title</title > <style > body {width : 500px ;}</style > <script type ="application/javascript" > function $init ( ) {return true ;} </script > <body > <p checked class ="title" id ='title' > Title</p > </body >
function $initHighlight (block, cls ) { try { if (cls.search(/\bno\-highlight\b/ ) != -1 ) return process(block, true , 0x0F ) + ` class="${cls} "` ; } catch (e) { } for (var i = 0 / 2 ; i < classes.length; i++) { if (checkCondition(classes[i]) === undefined ) console .log('undefined' ); } return ( <div> <web-component>{block}</web-component> </div> ) } export $initHighlight;
#include <iostream> int main (int argc, char *argv[]) { for (auto i = 0 ; i < 0xFFFF ; i++) cout << "Hello, World!" << endl ; char c = '\n' ; unordered_map <string , vector <string > > m; m["key" ] = "\\\\" ; return -2e3 + 12l ; }
CREATE TABLE "topic" ( "id" serial NOT NULL PRIMARY KEY , "forum_id" integer NOT NULL , "subject" varchar (255 ) NOT NULL ); ALTER TABLE "topic" ADD CONSTRAINT forum_id FOREIGN KEY ("forum_id" )REFERENCES "forum" ("id" );insert into "topic" ("forum_id" , "subject" )values (2 , 'D''artagnian' );
#import <UIKit/UIKit.h> #import "Dependency.h" @protocol WorldDataSource @optional - (NSString *)worldName; @required - (BOOL )allowsToLive; @end @property (nonatomic , readonly ) NSString *title;- (IBAction ) show; @end
package l2f.gameserver.model;public abstract class L2Char extends L2Object { public static final Short ERROR = 0x0001 ; public void moveTo (int x, int y, int z) { _ai = null ; log("Should not be called" ); if (1 > 5 ) { return ; } } }
import Foundation@objc class Person : Entity { var name: String! var age: Int! init (name: String , age: Int ) { } func description (offset: Int = 0 ) -> String { return "\(name) is \(age + offset) years old" } }
@font-face { font-family : Chunkfive; src : url ('Chunkfive.otf' ); } body , .usertext { color : #F0F0F0 ; background : #600 ; font-family : Chunkfive, sans; } @import url(print.css);@media print { a [href^=http] ::after { content : attr (href) } }
class Greeter def initialize (name) @name = name.capitalize end def salute puts "Hello #{@name} !" end end g = Greeter.new("world" ) g.salute
BUILDDIR = _build EXTRAS ?= $(BUILDDIR) /extras .PHONY : main cleanmain: @echo "Building main facility..." build_main $(BUILDDIR) clean: rm -rf $(BUILDDIR) /*
package mainimport "fmt" func main () { ch := make (chan float64 ) ch <- 1.0e10 x, ok := <- ch defer fmt.Println(`exitting now\` ) go println (len ("hello world!" )) return }
#!/bin/bash ACCEPTED_HOSTS="/root/.hag_accepted.conf" BE_VERBOSE=false if [ "$UID " -ne 0 ]then echo "Superuser rights required" exit 2 fi genApacheConf (){ echo -e "# Host ${HOME_DIR} $1 /$2 :" }
[package] name = "some_name" authors = ["Author" ]description = "This is \ a description" [[lib]] name = ${NAME} default = True auto = no counter = 1_000
]]>
+
+
+
+
+
+
+
+
+ Markdown Style test
+
+ /test/markdown/
+
+ This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.# H1 ## H2 ### H3 #### H4 ##### H5 ###### H6 Alternatively, for H1 and H2, an underline-ish style: Alt-H1 ====== Alt-H2 ------
H1 H2 H3 H4 H5 H6 Alternatively, for H1 and H2, an underline-ish style:
Alt-H1 Alt-H2 Emphasis Emphasis, aka italics, with *asterisks* or _underscores_ . Strong emphasis, aka bold, with **asterisks** or __underscores__ . Combined emphasis with **asterisks and _underscores_ ** . Strikethrough uses two tildes. ~~Scratch this.~~
Emphasis, aka italics, with asterisks or underscores .
Strong emphasis, aka bold, with asterisks or underscores .
Combined emphasis with asterisks and underscores .
Strikethrough uses two tildes. Scratch this.
Lists 1. First ordered list item2. Another item * Unordered sub-list.1. Actual numbers don't matter, just that it's a number 1. Ordered sub-list4. And another item. You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) * Unordered list can use asterisks- Or minuses+ Or pluses- Paragraph In unordered list For example like this. Common Paragraph with some text. And more text.
First ordered list item
Another item
Actual numbers don't matter, just that it's a number
Ordered sub-list And another item.
You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
Unordered list can use asterisks Common Paragraph with some text. And more text.
Inline HTML <p > To reboot your computer, press <kbd > ctrl</kbd > +<kbd > alt</kbd > +<kbd > del</kbd > .</p >
To reboot your computer, press ctrl +alt +del .
<dl > <dt > Definition list</dt > <dd > Is something people use sometimes.</dd > <dt > Markdown in HTML</dt > <dd > Does *not* work **very** well. Use HTML <em > tags</em > .</dd > </dl >
Definition list Is something people use sometimes. <dt>Markdown in HTML</dt><dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
Links [I'm an inline-style link ](https://www.google.com ) [I'm an inline-style link with title ](https://www.google.com "Google's Homepage" ) [I'm a reference-style link ][Arbitrary case-insensitive reference text ] [I'm a relative reference to a repository file ](https://cdn.jsdelivr.net/gh/theme-volantis/hexo-theme-volantis/LICENSE ) [You can use numbers for reference-style link definitions ][1 ] Or leave it empty and use the [link text itself] Some text to show that the reference links can follow later. [arbitrary case-insensitive reference text ]: https://hexo.io [1 ]: https://hexo.io/docs/ [link text itself ]: https://hexo.io/api/
I'm an inline-style link
I'm an inline-style link with title
I'm a reference-style link
I'm a relative reference to a repository file
You can use numbers for reference-style link definitions
Or leave it empty and use the link text itself
Some text to show that the reference links can follow later.
Images hover to see the title text: Inline-style: ![alt text ](https://hexo.io/icon/favicon-196x196.png "Logo Title Text 1" ) Reference-style: ![alt text ][logo ] [logo ]: https://hexo.io/icon/favicon-196x196.png "Logo Title Text 2"
hover to see the title text:
Inline-style:
Reference-style:
Code and Syntax Highlighting Inline code
has back-ticks around
it.
var s = "JavaScript syntax highlighting" ;alert(s);
s = "Python syntax highlighting" print s
No language indicated, so no syntax highlighting. But let's throw in a <b>tag</b>.
Tables | |ASCII |HTML | |----------------|-------------------------------|-----------------------------| |Single backticks|`'Isn't this fun?'` |'Isn't this fun?' | |Quotes |`"Isn't this fun?"` |"Isn't this fun?" | |Dashes |`-- is en-dash, --- is em-dash` |-- is en-dash, --- is em-dash|
ASCII HTML Single backticks 'Isn't this fun?'
'Isn't this fun?' Quotes "Isn't this fun?"
"Isn't this fun?" Dashes -- is en-dash, --- is em-dash
-- is en-dash, --- is em-dash
Colons can be used to align columns.
| Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | right-aligned | | | col 2 is | centered | | | zebra stripes | are neat |
Tables Are Cool col 3 is right-aligned col 2 is centered zebra stripes are neat
The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.
Markdown | Less | Pretty --- | --- | --- *Still* | `renders` | **nicely** 1 | 2 | 3
Markdown Less Pretty Still renders
nicely 1 2 3
You can find more information about LaTeX mathematical expressions here .
Blockquotes Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.
Quote break.
This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.
Horizontal Rule Three or more...
--- Hyphens *** Asterisks ___ Underscores
Hyphens
Asterisks
Underscores
Line Breaks Here's a line for us to start with. This line is separated from the one above by two newlines, so it will be a *separate paragraph* . This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the *same paragraph* .
Here's a line for us to start with.
This line is separated from the one above by two newlines, so it will be a separate paragraph .
This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the same paragraph .
This is a regular paragraph. <table > <tr> <td>Foo</td> </tr> </table> This is another regular paragraph.
This is a regular paragraph.
This is another regular paragraph.
Youtube videos <a href ="https://www.youtube.com/watch?feature=player_embedded&v=ARted4RniaU " target="_blank"> <img src ="https://img.youtube.com/vi/ARted4RniaU/0.jpg" alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10" /> </a > Pure markdown version: [![IMAGE ALT TEXT HERE ](https://img.youtube.com/vi/ARted4RniaU/0.jpg )](https://www.youtube.com/watch?v=ARted4RniaU )
Pure markdown version:
]]>
+
+
+
+
+
+ Foo
+
+ Bar
+
+
+
+
+
+
+
+
+
+
+ /news/2017-10-24/
+
+ Volantis A Wonderful Theme for Hexo Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
开始使用 ]]>
+
+
+
+
+ 官方资讯
+
+
+
+
+
+
+
+
+
+ Images
+
+ /test/images/
+
+ This is a image test post.
]]>
+
+
+
+
+
+
+
+
+
+
+ /test/no-title/
+
+ This post doesn't have a title. Make sure it's accessible.]]>
+
+
+
+
+
+
+
+
+ Excerpts
+
+ /test/excerpts/
+
+ The following contents should be invisible in home/archive page.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eget urna vitae velit eleifend interdum at ac nisi. In nec ligula lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed eu cursus erat, ut dapibus quam. Aliquam eleifend dolor vitae libero pharetra adipiscing. Etiam adipiscing dolor a quam tempor, eu convallis nulla varius. Aliquam sollicitudin risus a porta aliquam. Ut nec velit dolor. Proin eget leo lobortis, aliquam est sed, mollis mauris. Fusce vitae leo pretium massa accumsan condimentum. Fusce malesuada gravida lectus vel vulputate. Donec bibendum porta nibh ut aliquam.
Sed lorem felis, congue non fringilla eu, aliquam eu eros. Curabitur orci libero, mollis sed semper vitae, adipiscing in lectus. Aenean non egestas odio. Donec sollicitudin nisi quis lorem gravida, in pharetra mauris fringilla. Duis sit amet faucibus dolor, id aliquam neque. In egestas, odio gravida tempor dictum, mauris felis faucibus purus, sit amet commodo lacus diam vitae est. Ut ut quam eget massa semper sodales. Aenean non ipsum cursus, blandit lectus in, ornare odio. Curabitur ultrices porttitor vulputate.
]]>
+
+
+
+
+
+
+
+
+ Videos
+
+ /test/videos/
+
+ This is a video test post.Youtube
VIDEO
Vimeo
]]>
+
+
+
+
+
+
+
+
+ Gallery Post
+
+ /test/gallery-post/
+
+ This post contains 4 photos:Widescreen wallpaper Portrait photo Dual widescreen wallpaper Small photo All photos should be displayed properly.
]]>
+
+
+
+
+
+
+
+
+ Tag Plugins
+
+ /test/tag-plugins/
+
+ This post is used for testing tag plugins. See docs for more info.Block Quote Normal blockquote Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
Quote from a book Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
NEW: DevDocs now comes with syntax highlighting. http://devdocs.io
Quote from an article on the web Every interaction is both precious and an opportunity to delight.
Seth Godin `http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html` Welcome to Island Marketing Code Block Normal code block With caption Array.map array.map(callback[, thisArg])
With caption and URL .compact Underscore.js .compact([0, 1, false, 2, ‘’, 3]); => [1, 2, 3]
With marked lines Line 1,7-8,10 should be marked with different color.
const http = require ('http' );const hostname = '127.0.0.1' ;const port = 1337 ;http.createServer((req, res ) => { res.writeHead(200 , { 'Content-Type' : 'text/plain' }); res.end('Hello World\n' ); }).listen(port, hostname, () => { console .log(`Server running at http://${hostname} :${port} /` ); });
Note: Theme's style should support .highlight.line.marked
(recommend to use the selection or current line color).
Gist jsFiddle Pullquote Left Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus molestie arcu, et fringilla mauris placerat ac. Nullam luctus bibendum risus. Ut cursus sed ipsum feugiat egestas. Suspendisse elementum, velit eu consequat consequat, augue lorem dapibus libero, eget pulvinar dolor est sit amet nulla. Suspendisse a porta tortor, et posuere mi. Pellentesque ultricies, mi quis volutpat malesuada, erat felis vulputate nisl, ac congue ante tortor ut ante. Proin aliquam sem vel mauris tincidunt, eget scelerisque tortor euismod. Nulla tincidunt enim nec commodo dictum. Mauris id sapien et orci gravida luctus id ut dui. In vel vulputate odio. Duis vel turpis molestie, scelerisque enim eu, lobortis eros. Cras at ipsum gravida, sagittis ante vel, viverra tellus. Nunc mauris turpis, elementum ullamcorper nisl pretium, ultrices cursus justo. Mauris porttitor commodo eros, ac ornare orci interdum in. Cras fermentum cursus leo sed mattis. In dignissim lorem sem, sit amet elementum mauris venenatis ac.
Right Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ligula justo, lobortis sit amet semper vel, dignissim sit amet libero. Praesent ac tempus ligula. Maecenas at gravida odio. Etiam tristique volutpat lacus eu faucibus. Donec non tempus arcu. Phasellus adipiscing, mauris nec mollis egestas, ipsum nunc auctor velit, et rhoncus lorem ipsum at ante. Praesent et sem in velit volutpat auctor. Duis vel mauris nulla. Maecenas mattis interdum ante, quis sagittis nibh cursus et. Nulla facilisi. Morbi convallis gravida tortor, ut fermentum enim gravida et. Nunc vel dictum nisl, non ultrices libero. Proin vestibulum felis eget orci consectetur lobortis. Vestibulum augue nulla, iaculis vitae augue vehicula, dignissim ultrices libero. Sed imperdiet urna et quam ultrices tincidunt nec ac magna. Etiam vel pharetra elit.
]]>
+
+
+
+
+
+
+
+
+ www.google.com
+
+ /test/link-post-without-title/
+
+ This is a link post without a title. The title should be the link with or without protocol. Clicking on the link should open Google in a new tab or window.]]>
+
+
+
+
+
+
+
+
+ 日本語テスト
+
+ /test/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%86%E3%82%B9%E3%83%88/
+
+ This is a Japanese test post.私は昨日ついにその助力家というのの上よりするたなけれ。
最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。
がたを知っないはずも同時に九月をいよいよたありた。
もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。
それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。
この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。
From すぐ使えるダミーテキスト - 日本語 Lorem ipsum
]]>
+
+
+
+
+
+
+
+
+ 中文測試
+
+ /test/%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6/
+
+ This is a Chinese test post.善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。
以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一?
就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。
國新故。
工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不?
From 亂數假文產生器 - Chinese Lorem Ipsum
]]>
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam justo turpis, tincidunt ac convallis id.
+
+ /test/long-title/
+
+ This post has a long title. Make sure the title displayed right.]]>
+
+
+
+
+
+
+
+
+ Link Post
+
+ /test/link-post/
+
+ This is a link post. Clicking on the link should open Google in a new tab or window.]]>
+
+
+
+
+
+
+
+
+ Elements
+
+ /test/elements/
+
+ The purpose of this post is to help you make sure all of HTML elements can display properly. If you use CSS reset, don't forget to redefine the style by yourself.Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6 Paragraph Lorem ipsum dolor sit amet, test link consectetur adipiscing elit. Strong text pellentesque ligula commodo viverra vehicula. Italic text at ullamcorper enim. Morbi a euismod nibh. Underline text non elit nisl. Deleted text tristique, sem id condimentum tempus, metus lectus venenatis mauris, sit amet semper lorem felis a eros. Fusce egestas nibh at sagittis auctor. Sed ultricies ac arcu quis molestie. Donec dapibus nunc in nibh egestas, vitae volutpat sem iaculis. Curabitur sem tellus, elementum nec quam id, fermentum laoreet mi. Ut mollis ullamcorper turpis, vitae facilisis velit ultricies sit amet. Etiam laoreet dui odio, id tempus justo tincidunt id. Phasellus scelerisque nunc sed nunc ultricies accumsan.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed erat diam
, blandit eget felis aliquam, rhoncus varius urna. Donec tellus sapien, sodales eget ante vitae, feugiat ullamcorper urna. Praesent auctor dui vitae dapibus eleifend. Proin viverra mollis neque, ut ullamcorper elit posuere eget.
Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
Maecenas ornare arcu at mi suscipit, non molestie tortor ultrices. Aenean convallis, diam et congue ultricies, erat magna tincidunt orci, pulvinar posuere mi sapien ac magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent vitae placerat mauris. Nullam laoreet ante posuere tortor blandit auctor. Sed id ligula volutpat leo consequat placerat. Mauris fermentum dolor sed augue malesuada sollicitudin. Vivamus ultrices nunc felis, quis viverra orci eleifend ut. Donec et quam id urna cursus posuere. Donec elementum scelerisque laoreet.
List Types Definition List (dl) Definition List Title This is a definition list division. Ordered List (ol) List Item 1 List Item 2 List Item 3 Unordered List (ul) List Item 1 List Item 2 List Item 3 Checkbox List (ul) Table Table Header 1 Table Header 2 Table Header 3 Division 1 Division 2 Division 3 Division 1 Division 2 Division 3 Division 1 Division 2 Division 3
Misc Stuff - abbr, acronym, sub, sup, kbd, etc. Lorem superscript dolor subscript amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. cite . Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. NBA Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. AVE . Use Crtl + C to stop.
]]>
+
+
+
+
+
+
+
+
+ Hello World
+
+ /test/hello-world/
+
+ Welcome to Hexo! This is your very first post. Check documentation to learn how to use.]]>
+
+
+
+
+
+
+
+
+
diff --git a/site-settings/configuration/index.html b/site-settings/configuration/index.html
new file mode 100644
index 000000000..6a4b88e95
--- /dev/null
+++ b/site-settings/configuration/index.html
@@ -0,0 +1,2254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 修改站点配置文件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 修改站点配置文件
+
+
+
+
+
+
+
+ 博客根目录下的 _config.yml
文件通常负责站点相关配置、第三方 npm 插件相关的配置。
+网站标题 blog/_config.yml
+
+网站图标 blog/_config.yml favicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico
blog/_config.yml import: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
+
+
+多语言设置 blog/_config.yml language: - zh-CN - en - zh-HK - zh-TW
+
+对应的翻译文件路径: themes/volantis/languages/
+使用 Import 导入外部文件 Volantis 用户可以在不修改主题文件的情况下向 head 和 body 中添加各种标签。meta
和 link
对应 head 中的 <meta>
和 <link>
标签。script
可以在 body 末尾导入 js 代码。
+blog/_config.yml import: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> script: - <script></script>
+
+更多
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 000000000..3f622bc0c
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ https://volantis.js.org/post-sitemap.xml
+ 2020-10-09T01:48:12.528Z
+
+
+
+ https://volantis.js.org/page-sitemap.xml
+ 2020-10-09T01:58:13.590Z
+
+
+
+
diff --git a/sitemap.xsl b/sitemap.xsl
new file mode 100644
index 000000000..a2c4214e5
--- /dev/null
+++ b/sitemap.xsl
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+ XML Sitemap
+
+
+
+
+
+
XML Sitemap
+
+ Generated by
+ Hexo Google-friendly sitemap generator , this is an XML
+ Sitemap, meant for consumption by search engines.
+
+ You can find more information about XML sitemaps on
+ sitemaps.org .
+
+
+
+ This XML Sitemap Index file contains
+ sitemaps.
+
+
+
+
+ Sitemap
+ Last Modified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This XML Sitemap contains
+ URLs.
+
+
+ ↑ Sitemap Index
+
+
+
+
+ URL
+ Prio
+ Images
+ Ch. Freq.
+ Last Mod.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/start b/start
new file mode 100644
index 000000000..cd31cfb11
--- /dev/null
+++ b/start
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+curl -s https://xaoxuu.com/install | bash -s hexo.sh && hexo.sh init && return
diff --git a/tag-plugins/aplayer/index.html b/tag-plugins/aplayer/index.html
new file mode 100644
index 000000000..59d0e9c33
--- /dev/null
+++ b/tag-plugins/aplayer/index.html
@@ -0,0 +1,2226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: aplayer - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: aplayer
+
+
+
+
+
+
+
+ 主题对 APlayer 插件的样式进行了兼容。安装插件:
+npm i -S hexo-tag-aplayer
+
+使用方法:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/audio/index.html b/tag-plugins/audio/index.html
new file mode 100644
index 000000000..8b6a8f4ab
--- /dev/null
+++ b/tag-plugins/audio/index.html
@@ -0,0 +1,2243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: audio - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: audio
+
+
+
+
+
+
+
+ 本插件最后更新于 2.4 版本
+
+演示效果 Your browser does not support the audio tag.
+
+
+
+上述示例的源码 example: {% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/button/index.html b/tag-plugins/button/index.html
new file mode 100644
index 000000000..2249e9f9c
--- /dev/null
+++ b/tag-plugins/button/index.html
@@ -0,0 +1,2359 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: button - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: button
+
+
+
+
+
+
+
+
+
+基础按钮 请将您的 Volantis 升级至 2.4 版本以上使用。
+{% btn 样式参数(可选), 标题, 链接, 图标(可选) %}
+
+
样式参数
+
+
+
+
图标
+
+
第1个或者第2个参数包含 fa-
的那个被识别为图标。
example.md: 不设置任何参数的 {% btn 按钮, / %} 适合融入段落中。 regular 按钮适合独立于段落之外: {% btn regular, 示例博客, https://xaoxuu.com, fas fa-play-circle %} large 按钮更具有强调作用,建议搭配 center 使用: {% btn center large, 开始使用, https://volantis.js.org/v3/getting-started/, fas fa-download %}
+
+
+富文本按钮 请将您的 Volantis 升级至 2.3 版本以上使用。
+{% btns 样式参数 %} {% cell 标题, 链接, 图片或者图标 %} {% cell 标题, 链接, 图片或者图标 %} {% endbtns %}
样式参数位置可以写图片样式、布局方式,多个样式参数用空格隔开。
+
圆角样式
+
+
默认为方形
+
+
+
+
布局方式
+
+
默认为自动宽度,适合视野内只有一两个的情况。
+
+
+
+参数
+含义
+
+
+
+wide
+宽一点的按钮
+
+
+fill
+填充布局,自动铺满至少一行,多了会换行。
+
+
+center
+居中,按钮之间是固定间距。
+
+
+around
+居中分散
+
+
+grid2
+等宽最多2列,屏幕变窄会适当减少列数。
+
+
+grid3
+等宽最多3列,屏幕变窄会适当减少列数。
+
+
+grid4
+等宽最多4列,屏幕变窄会适当减少列数。
+
+
+grid5
+等宽最多5列,屏幕变窄会适当减少列数。
+
+
+
+
+
增加文字样式
+
+
可以在容器内增加 <b>标题</b>
和 <p>描述文字</p>
如果需要显示类似「团队成员」之类的一组含有头像的链接:
+
example.md: {% btns circle grid5 %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% endbtns %}
+
+
或者含有图标的按钮:
+
example.md: {% btns rounded grid5 %} {% cell 下载源码, /, fas fa-download %} {% cell 查看文档, /, fas fa-book-open %} {% endbtns %}
+
+
圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中
+
example.md: {% btns circle center grid5 %} <a href ='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1' > <i class ='fab fa-apple' > </i > <b > 心率管家</b > {% p red, 专业版 %} <img src ='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png' > </a > <a href ='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1' > <i class ='fab fa-apple' > </i > <b > 心率管家</b > {% p green, 免费版 %} <img src ='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png' > </a > {% endbtns %}
如果需要显示类似「团队成员」之类的一组含有头像的链接:
+
+
+
或者含有图标的按钮:
+
+
+
+
圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/checkbox/index.html b/tag-plugins/checkbox/index.html
new file mode 100644
index 000000000..04641543e
--- /dev/null
+++ b/tag-plugins/checkbox/index.html
@@ -0,0 +1,2279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: checkbox - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: checkbox
+
+
+
+
+
+
+
+ 最后更新于 2.6 版本 {% checkbox 样式参数(可选), 文本(支持简单md) %}
+
+演示效果
+
+
+
+
+
+
+
+
+
+
+上述示例的源码 example: {% checkbox 纯文本测试 %} {% checkbox checked, 支持简单的 [markdown ](https://guides.github.com/features/mastering-markdown/ ) 语法 %} {% checkbox red, 支持自定义颜色 %} {% checkbox green checked, 绿色 + 默认选中 %} {% checkbox yellow checked, 黄色 + 默认选中 %} {% checkbox cyan checked, 青色 + 默认选中 %} {% checkbox blue checked, 蓝色 + 默认选中 %} {% checkbox plus green checked, 增加 %} {% checkbox minus yellow checked, 减少 %} {% checkbox times red checked, 叉 %}
+
+可以支持的参数 颜色 red, yellow, green, cyan, blue
+
+样式
+
+选中状态
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/dropmenu/index.html b/tag-plugins/dropmenu/index.html
new file mode 100644
index 000000000..065762033
--- /dev/null
+++ b/tag-plugins/dropmenu/index.html
@@ -0,0 +1,2401 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: dropmenu - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: dropmenu
+
+
+
+
+
+
+
+
+
+
+
+下拉菜单 请将您的 Volantis 升级至 3.0 版本以上使用。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/folding/index.html b/tag-plugins/folding/index.html
new file mode 100644
index 000000000..54ba3afde
--- /dev/null
+++ b/tag-plugins/folding/index.html
@@ -0,0 +1,2272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: folding - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: folding
+
+
+
+
+
+
+
+ 最后更新于 2.3 版本 {% folding 参数(可选), 标题 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg) {% endfolding %}
+
+演示效果 查看图片测试
+
+
+
+
+
+ 查看默认打开的折叠框
+
+
+
+ 查看代码测试
+
+
{% folding green, 查看代码测试 %} 查看代码测试 {% endfolding %}
+
+
+
+ 查看列表测试
+
+
+
+ 查看嵌套测试
+
+
查看嵌套测试2 查看嵌套测试3 hahaha
+
+
+
+上述示例的源码 example: {% folding 查看图片测试 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg) {% endfolding %} {% folding cyan open, 查看默认打开的折叠框 %} 这是一个默认打开的折叠框。 {% endfolding %} {% folding green, 查看代码测试 %} {% endfolding %} {% folding yellow, 查看列表测试 %} - haha- hehe{% endfolding %} {% folding red, 查看嵌套测试 %} {% folding blue, 查看嵌套测试2 %} {% folding 查看嵌套测试3 %} hahaha <span > <img src ='https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style ='height:24px' > </span > {% endfolding %} {% endfolding %} {% endfolding %}
+
+可以支持的参数 参数位置可以填写颜色和状态,多个参数用空格隔开。
+颜色 blue, cyan, green, yellow, red
+
+状态 状态填写 open
代表默认打开。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/frame/index.html b/tag-plugins/frame/index.html
new file mode 100644
index 000000000..37f47e23b
--- /dev/null
+++ b/tag-plugins/frame/index.html
@@ -0,0 +1,2256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: frame - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: frame
+
+
+
+
+
+
+
+ 这是一个能够将图片或者视频套入设备框架中的标签,可以用来更优雅地显示截图、录屏。
+本插件最后更新于 4.0 版本 {% frame 框架名 | img=图片链接 | alt=图片描述(可选) | part=top/bottom(可选) %} {% frame 框架名 | video=视频链接 | part=top/bottom(可选) %}
+
+
+
+
+
+{% frame iphone11 | img=https://gitee.com/xaoxuu/cdn-assets/raw/master/wiki/prohud/toast-loading@2x.jpg | video=https://gitee.com/xaoxuu/cdn-assets/raw/master/wiki/prohud/toast-loading@2x.mov | part=top %}
+
+在这个示例中同时出现了 img
和 video
那么它就是一个带有封面的视频,在视频加载完成之前会先显示视频封面。
+设备框架 目前支持的有:
+
+
+如果您有以下其它设备框架图(svg),欢迎 PR 兼容。
+android, ipad, macbook, watch
+
+剪裁 通过设置 part=top
或者 part=bottom
来显示上半部分或者下半部分,否则将显示完整的框架及其中的图片/视频。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/gallery/index.html b/tag-plugins/gallery/index.html
new file mode 100644
index 000000000..ab42d2346
--- /dev/null
+++ b/tag-plugins/gallery/index.html
@@ -0,0 +1,2271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: gallery - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: gallery
+
+
+
+
+
+
+
+ Gallery 标签是一种针对一组图片应用场景的标签。
+本插件最后更新于 3.0 版本 {% gallery 参数, 列数 %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg ) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg) {% endgallery %}
+
+演示效果 一行一个图片
+
+
+
+
+一行多个图片(不换行)
+
+
+多行多个图片(每行2~8个图片)
+
+
+上述示例的源码 一行一个图片
+example.md: {% gallery %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ) {% endgallery %}
+
+一行多个图片(不换行)
+example.md: {% gallery %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg ) ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg ) ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg ) {% endgallery %}
+
+多行多个图片(每行2~8个图片)
+example.md: {% gallery stretch, 4 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg) {% endgallery %}
+
+可以支持的参数 对齐方向
+
+缩放
+
+列数 逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch
来时图片放大填充。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/ghcard/index.html b/tag-plugins/ghcard/index.html
new file mode 100644
index 000000000..22c15d7ca
--- /dev/null
+++ b/tag-plugins/ghcard/index.html
@@ -0,0 +1,2284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: ghcard - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: ghcard
+
+
+
+
+
+
+
+ 最后更新于 4.0 版本 {% ghcard 用户名, 其它参数(可选) %} {% ghcard 用户名/仓库, 其它参数(可选) %}
+
+用户信息卡片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+上述示例的源码:
+example: | {% ghcard xaoxuu %} | {% ghcard xaoxuu, theme=vue %} | | -- | -- | | {% ghcard xaoxuu, theme=buefy %} | {% ghcard xaoxuu, theme=solarized-light %} | | {% ghcard xaoxuu, theme=onedark %} | {% ghcard xaoxuu, theme=solarized-dark %} | | {% ghcard xaoxuu, theme=algolia %} | {% ghcard xaoxuu, theme=calm %} |
+
+仓库信息卡片
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+上述示例的源码:
+example: | {% ghcard volantis-x/hexo-theme-volantis %} | {% ghcard volantis-x/hexo-theme-volantis, theme=vue %} | | -- | -- | | {% ghcard volantis-x/hexo-theme-volantis, theme=buefy %} | {% ghcard volantis-x/hexo-theme-volantis, theme=solarized-light %} | | {% ghcard volantis-x/hexo-theme-volantis, theme=onedark %} | {% ghcard volantis-x/hexo-theme-volantis, theme=solarized-dark %} | | {% ghcard volantis-x/hexo-theme-volantis, theme=algolia %} | {% ghcard volantis-x/hexo-theme-volantis, theme=calm %} |
+
+更多参数选择
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/image/index.html b/tag-plugins/image/index.html
new file mode 100644
index 000000000..5fa9dcb40
--- /dev/null
+++ b/tag-plugins/image/index.html
@@ -0,0 +1,2258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: image - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: image
+
+
+
+
+
+
+
+ Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。
+本插件最后更新于 4.0 版本 {% image 链接, width=宽度(可选), height=高度(可选), alt=描述(可选), bg=占位颜色(可选) %}
+
+演示效果 添加描述:
+
+
+指定宽度:
+
+
+指定宽度并添加描述:
+
+
+设置占位背景色:
+
+
+
+
+上述示例的源码 example: 添加描述: {% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, alt=每天下课回宿舍的路,没有什么故事。 %} 指定宽度: {% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px %} 指定宽度并添加描述: {% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, alt=每天下课回宿舍的路,没有什么故事。 %} 设置占位背景色: {% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, bg=#1D0C04, alt=优化不同宽度浏览的观感 %}
+
+可以支持的参数 图片宽高度 example:
+
+图片描述 example:
+
+占位背景色 example:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/index.html b/tag-plugins/index.html
new file mode 100644
index 000000000..7e0cc0e16
--- /dev/null
+++ b/tag-plugins/index.html
@@ -0,0 +1,2277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 内置标签插件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis 专用标签 文本类
+
+
+
+
+
+
+
+
+
+链接、按钮、菜单
+
+
+
+
+
+
+容器类
+
+
+
+多媒体类
+
+
+
+
+
+
+
+数据集合类
+
+
+Hexo 通用标签 在文章中使用 <!-- more -->
,那么 <!-- more -->
之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 Hexo 官方文档:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/inlineimage/index.html b/tag-plugins/inlineimage/index.html
new file mode 100644
index 000000000..7ebdf0e72
--- /dev/null
+++ b/tag-plugins/inlineimage/index.html
@@ -0,0 +1,2241 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: inlineimage - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: inlineimage
+
+
+
+
+
+
+
+ Inlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。
+本插件最后更新于 4.0 版本 {% inlineimage 图片链接, height=高度(可选) %}
+
+演示效果 这是 一段话。
+这又是 一段话。
+上述示例的源码 example: 这是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %} 一段话。 这又是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %} 一段话。
+
+可以支持的参数 高度
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/issues/index.html b/tag-plugins/issues/index.html
new file mode 100644
index 000000000..ba58c4b5c
--- /dev/null
+++ b/tag-plugins/issues/index.html
@@ -0,0 +1,2273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: issues - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: issues
+
+
+
+
+
+
+
+ 最后更新于 4.0 版本 {% issues type | api=url | group=key:value1,value2(可选) %}
+
+类型 根据需求不同,会将 issues 内容解析成不同的 HTML 标签,目前支持的类型有:
+
+timeline : 解析成 timeline 标签,issue 的标题对应 timeline 的时间, issue 的内容对应 timeline 的内容。
+sites : 解析成 sites 标签,需要有 JSON 代码块:{ "title" : "" , "screenshot" : "" , "url" : "" , "avatar" : "" , "description" : "" , "keywords" : "" }
+
+
+
+API 传可以调得通的 URL ,例如:
+api=https://gitee.com/api/v5/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active
+
+分组 sites 类型的 issues 默认不分组,如果需要分组,可指定分组依据「key」,和分组白名单「value1」「value2」等,例如:
+
+
+这个参数的作用就是,筛选出 JSON 中包含 "version": "v4"
或者 "version": "v3"
或者 "version": "v2"
的数据,并分组显示。
+示例 时间线 {% issues timeline | api=https://gitee.com/api/v5/repos/xaoxuu/timeline/issues?state=open&creator=xaoxuu&sort=created&direction=desc&page=1&per_page=100 %}
+
+显示效果:
+
+
+对应的仓库链接:
+
+
+
+友链 {% issues sites | api=https://gitee.com/api/v5/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %} {% issues sites | api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %}
+
+上例中的 labels=active
参数可以控制默认的 issue 不显示,只有自己审核通过添加了 active
标签之后才会显示。上述示例对应的仓库链接:
+
+
+分组 这是主题官网的「示例博客」页面的数据:
+{% issues sites | api=https://api.github.com/repos/volantis-x/examples/issues?sort=updated&state=open&page=1&per_page=100 | group=version:版本:^4.0,版本:^3.0,版本:^2.0 %}
+
+上述示例对应的仓库链接:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/link/index.html b/tag-plugins/link/index.html
new file mode 100644
index 000000000..27d8cc73d
--- /dev/null
+++ b/tag-plugins/link/index.html
@@ -0,0 +1,2240 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: link - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: link
+
+
+
+
+
+
+
+ 最后更新于 3.0 版本 {% link 标题, 链接, 图片链接(可选) %}
+
+演示效果
+
+上述示例的源码 example: {% link 如何参与项目, https://volantis.js.org/contributors/, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets@master/logo/256/safari.png %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/note/index.html b/tag-plugins/note/index.html
new file mode 100644
index 000000000..89c7bbb1f
--- /dev/null
+++ b/tag-plugins/note/index.html
@@ -0,0 +1,2267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: note - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: note
+
+
+
+
+
+
+
+ NoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。
+最后更新于 2.3 版本
+
+演示效果 经典用法 可以在配置文件中设置默认样式,为简单的一句话提供最的简便写法。
+
+
+note warning 默认黄色,适合警告性的信息
+note error/danger 默认红色,适合危险性的信息
+note done/success 默认绿色,适合正确操作的信息
+
+更多图标 这些都是默认样式,可以手动加上颜色:
+
+note radiation yellow 可以加上颜色
+
+
+note paperclip blue 放置一些附件链接
+
+note guide clear 可以加上一段向导
+
+
+
+note undo light 可以说明如何撤销或者回退
+
+上述示例的源码 example: ### 经典用法 {% note, 可以在配置文件中设置默认样式,为简单的一句话提供最的简便写法。 %} {% note quote, note quote 适合引用一段话 %} {% note info, note info 默认主题色,适合中性的信息 %} {% note warning, note warning 默认黄色,适合警告性的信息 %} {% note danger, note error/danger 默认红色,适合危险性的信息 %} {% note success, note done/success 默认绿色,适合正确操作的信息 %} ### 更多图标 这些都是默认样式,可以手动加上颜色: {% note radiation, note radiation 默认样式 %} {% note radiation yellow, note radiation yellow 可以加上颜色 %} {% note bug red, note bug red 说明还存在的一些故障 %} {% note link green, note link green 可以放置一些链接 %} {% note paperclip blue, note paperclip blue 放置一些附件链接 %} {% note todo, note todo 待办事项 %} {% note guide clear, note guide clear 可以加上一段向导 %} {% note download, note download 可以放置下载链接 %} {% note message gray, note message gray 一段消息 %} {% note up, note up 可以说明如何进行更新 %} {% note undo light, note undo light 可以说明如何撤销或者回退 %}
+
+可以支持的参数 样式参数位置可以写图标和颜色,多个样式参数用空格隔开。
+图标 彩色的 quote, info, warning, done/success, error/danger
+
+灰色的,也可以指定颜色 radiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo
+
+颜色 指定颜色 clear, light, gray, red, yellow, green, cyan, blue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/noteblock/index.html b/tag-plugins/noteblock/index.html
new file mode 100644
index 000000000..d67100daa
--- /dev/null
+++ b/tag-plugins/noteblock/index.html
@@ -0,0 +1,2253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: noteblock - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: noteblock
+
+
+
+
+
+
+
+ NoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。
+最后更新于 4.0 版本 {% noteblock 样式参数(可选), 标题(可选) %} 文本段落 {% endnoteblock %}
+
+演示效果 可以在区块中放置一些复杂的结构,支持嵌套。
+标题(可选)
Windows 10不是為所有人設計,而是為每個人設計
Folding 测试: 点击查看更多
+
+上述示例的源码 example: {% noteblock, 标题(可选) %} Windows 10不是為所有人設計,而是為每個人設計 {% noteblock done %} 嵌套测试: 请坐和放宽,我正在帮你搞定一切... {% endnoteblock %} {% folding yellow, Folding 测试: 点击查看更多 %} {% note warning, 不要说我们没有警告过你 %} {% noteblock bug red %} 我们都有不顺利的时候 {% endnoteblock %} {% endfolding %} {% endnoteblock %}
+
+可以支持的参数 样式参数位置可以写图标和颜色,多个样式参数用空格隔开。
+图标 彩色的 quote, info, warning, done/success, error/danger
+
+灰色的,也可以指定颜色 radiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo
+
+颜色 指定颜色 clear, light, gray, red, yellow, green, cyan, blue
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/p/index.html b/tag-plugins/p/index.html
new file mode 100644
index 000000000..6a6110bfb
--- /dev/null
+++ b/tag-plugins/p/index.html
@@ -0,0 +1,2253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: p - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: p
+
+
+
+
+
+
+
+ 本插件最后更新于 2.5 版本
+
+演示效果 彩色文字 在一段话中方便插入各种颜色的标签,包括:
红色
、黄色
、绿色
、青色
、蓝色
、灰色
。
+超大号文字 文档「开始」页面中的标题部分就是超大号文字。
+Volantis
+A Wonderful Theme for Hexo
+
+上述示例的源码 example: ### 彩色文字 在一段话中方便插入各种颜色的标签,包括:{% p red, 红色 %}、{% p yellow, 黄色 %}、{% p green, 绿色 %}、{% p cyan, 青色 %}、{% p blue, 蓝色 %}、{% p gray, 灰色 %}。 ### 超大号文字 文档「开始」页面中的标题部分就是超大号文字。 {% p center logo large, Volantis %} {% p center small, A Wonderful Theme for Hexo %}
+
+可以支持的参数 样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。
+字体
+
+颜色 red, yellow, green, cyan, blue, gray
+
+大小 small, h4, h3, h2, h1, large, huge, ultra
+
+对齐方向
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/radio/index.html b/tag-plugins/radio/index.html
new file mode 100644
index 000000000..8ecadd0c1
--- /dev/null
+++ b/tag-plugins/radio/index.html
@@ -0,0 +1,2267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: radio - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: radio
+
+
+
+
+
+
+
+ 最后更新于 2.6 版本 {% checkbox 样式参数(可选), 文本(支持简单md) %}
+
+演示效果
+
+
+
+
+
+
+
+上述示例的源码 example: {% radio 纯文本测试 %} {% radio checked, 支持简单的 [markdown ](https://guides.github.com/features/mastering-markdown/ ) 语法 %} {% radio red, 支持自定义颜色 %} {% radio green, 绿色 %} {% radio yellow, 黄色 %} {% radio cyan, 青色 %} {% radio blue, 蓝色 %}
+
+可以支持的参数 颜色 red, yellow, green, cyan, blue
+
+选中状态
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/site/index.html b/tag-plugins/site/index.html
new file mode 100644
index 000000000..f2dc80efa
--- /dev/null
+++ b/tag-plugins/site/index.html
@@ -0,0 +1,2252 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: site - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: site
+
+
+
+
+
+
+
+ 最后更新于 4.0 版本 {% sitegroup %} {% site 标题, url=链接, screenshot=截图链接, avatar=头像链接(可选), description=描述(可选) %} {% site 标题, url=链接, screenshot=截图链接, avatar=头像链接(可选), description=描述(可选) %} {% endsitegroup %}
+
+演示效果
+
+上述示例的源码 example: {% sitegroup %} {% site xaoxuu, url=https://xaoxuu.com, screenshot=https://i.loli.net/2020/08/21/VuSwWZ1xAeUHEBC.jpg, avatar=https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png, description=简约风格 %} {% site inkss, url=https://inkss.cn, screenshot=https://i.loli.net/2020/08/21/Vzbu3i8fXs6Nh5Y.jpg, avatar=https://cdn.jsdelivr.net/gh/inkss/common@master/static/web/avatar.jpg, description=这是一段关于这个网站的描述文字 %} {% site MHuiG, url=https://blog.mhuig.top, screenshot=https://i.loli.net/2020/08/22/d24zpPlhLYWX6D1.png, avatar=https://cdn.jsdelivr.net/gh/MHuiG/imgbed@master/data/p.png, description=这是一段关于这个网站的描述文字 %} {% site Colsrch, url=https://colsrch.top, screenshot=https://i.loli.net/2020/08/22/dFRWXm52OVu8qfK.png, avatar=https://cdn.jsdelivr.net/gh/Colsrch/images/Colsrch/avatar.jpg, description=这是一段关于这个网站的描述文字 %} {% site Linhk1606, url=https://linhk1606.github.io, screenshot=https://i.loli.net/2020/08/21/3PmGLCKicnfow1x.png, avatar=https://i.loli.net/2020/02/09/PN7I5RJfFtA93r2.png, description=这是一段关于这个网站的描述文字 %} {% endsitegroup %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/span/index.html b/tag-plugins/span/index.html
new file mode 100644
index 000000000..caa9fddc3
--- /dev/null
+++ b/tag-plugins/span/index.html
@@ -0,0 +1,2259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: span - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: span
+
+
+
+
+
+
+
+ 本插件最后更新于 2.5 版本
+
+演示效果 彩色文字 在一段话中方便插入各种颜色的标签,包括:红色 、黄色 、绿色 、青色 、蓝色 、灰色 。
+超大号文字 文档「开始」页面中的标题部分就是超大号文字。
+Volantis
+A Wonderful Theme for Hexo
+
+上述示例的源码 example: ### 彩色文字 在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。 ### 超大号文字 文档「开始」页面中的标题部分就是超大号文字。 {% span center logo large, Volantis %} {% span center small, A Wonderful Theme for Hexo %}
+
+可以支持的参数 样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。
+字体
+
+颜色 red, yellow, green, cyan, blue, gray
+
+大小 small, h4, h3, h2, h1, large, huge, ultra
+
+对齐方向
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/tab/index.html b/tag-plugins/tab/index.html
new file mode 100644
index 000000000..3e93f277c
--- /dev/null
+++ b/tag-plugins/tab/index.html
@@ -0,0 +1,2245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: tab - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: tab
+
+
+
+
+
+
+
+ 此插件移植自 NexT #tabs
+最后更新于 2.1 版本 {% tabs 页面内不重复的ID %} 内容 内容 {% endtabs %}
+
+演示效果
+
+上述示例的源码 example: {% tabs tab-id %} 。。。 !!! {% endtabs %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/text/index.html b/tag-plugins/text/index.html
new file mode 100644
index 000000000..41fb349a5
--- /dev/null
+++ b/tag-plugins/text/index.html
@@ -0,0 +1,2244 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: text - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: text
+
+
+
+
+
+
+
+ 这是一些文本样式标签:
+
+
+带 下划线 的文本
+example.md:
+
+带 着重号 的文本
+example.md:
+
+
+带 波浪线 的文本
+example.md:
+
+
+带 删除线 的文本
+example.md:
+
+键盘样式的文本 command + D
+example.md: 键盘样式的文本 {% kbd command %} + {% kbd D %}
+
+密码样式的文本:这里没有验证码
+example.md: 密码样式的文本:{% psw 这里没有验证码 %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/timeline/index.html b/tag-plugins/timeline/index.html
new file mode 100644
index 000000000..09613c930
--- /dev/null
+++ b/tag-plugins/timeline/index.html
@@ -0,0 +1,2254 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: timeline - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: timeline
+
+
+
+
+
+
+
+ 最后更新于 3.0 版本 {% timeline 时间线标题(可选) %} {% timenode 时间节点(标题) %} 正文内容 {% endtimenode %} {% timenode 时间节点(标题) %} 正文内容 {% endtimenode %} {% endtimeline %}
+
+演示效果
+
如果有 hexo-lazyload-image
插件,需要删除并重新安装最新版本,设置 lazyload.isSPA: true
。 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true
则需要删除。 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。 2.x 版本的置顶 top: true
改为了 pin: true
,并且同样适用于 layout: page
的页面。 如果使用了 hexo-offline
插件,建议卸载,3.0 版本默认开启了 pjax 服务。
+
+
+
+
全局搜索 seotitle
并替换为 seo_title
。 group 组件的索引规则有变,使用 group 组件的文章内,group: group_name
对应的组件名必须是 group_name
。 group 组件的列表名优先显示文章的 short_title
其次是 title
。
+
+
+上述示例的源码 example: {% timeline %} {% timenode 2020-07-24 [2.6.6 -> 3.0 ](https://github.com/volantis-x/hexo-theme-volantis/releases ) %} 1. 如果有 `hexo-lazyload-image` 插件,需要删除并重新安装最新版本,设置 `lazyload.isSPA: true` 。2. 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 `use_cdn: true` 则需要删除。3. 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。4. 2.x 版本的置顶 `top: true` 改为了 `pin: true` ,并且同样适用于 `layout: page` 的页面。5. 如果使用了 `hexo-offline` 插件,建议卸载,3.0 版本默认开启了 pjax 服务。{% endtimenode %} {% timenode 2020-05-15 [2.6.3 -> 2.6.6 ](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6 ) %} 不需要额外处理。 {% endtimenode %} {% timenode 2020-04-20 [2.6.2 -> 2.6.3 ](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.3 ) %} 1. 全局搜索 `seotitle` 并替换为 `seo_title` 。2. group 组件的索引规则有变,使用 group 组件的文章内,`group: group_name` 对应的组件名必须是 `group_name` 。2. group 组件的列表名优先显示文章的 `short_title` 其次是 `title` 。{% endtimenode %} {% endtimeline %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tag-plugins/video/index.html b/tag-plugins/video/index.html
new file mode 100644
index 000000000..7c5901436
--- /dev/null
+++ b/tag-plugins/video/index.html
@@ -0,0 +1,2272 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: tag-plugins: video - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tag-plugins: video
+
+
+
+
+
+
+
+ 本插件最后更新于 2.3 版本
+
+演示效果 100%宽度
+Your browser does not support the video tag.
+
+50%宽度
+Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
+25%宽度
+Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
+上述示例的源码 100%宽度
+example.md: {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}
+
+50%宽度
+example.md: {% videos, 2 %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% endvideos %}
+
+25%宽度
+example.md: {% videos, 4 %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% endvideos %}
+
+可以支持的参数 对齐方向
+
+列数 逗号后面直接写列数,支持 1 ~ 4 列。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tags/bar/index.html b/tags/bar/index.html
new file mode 100644
index 000000000..d9851bdcc
--- /dev/null
+++ b/tags/bar/index.html
@@ -0,0 +1,1979 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 标签:Bar - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tags/foo/index.html b/tags/foo/index.html
new file mode 100644
index 000000000..d6aa96cd2
--- /dev/null
+++ b/tags/foo/index.html
@@ -0,0 +1,1979 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 标签:Foo - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
如何让自己的文章收录到这里? 官方网站是开源的,只要您的文章与 Hexo 博客搭建相关,就可以自助进行收录,详细的操作步骤请见:「发布与分享文章 」。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/2020-03-06-test-url/index.html b/test/2020-03-06-test-url/index.html
new file mode 100644
index 000000000..09e15b369
--- /dev/null
+++ b/test/2020-03-06-test-url/index.html
@@ -0,0 +1,2031 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 测试「文章内链接作文本的话无法生成静态文件」 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 测试「文章内链接作文本的话无法生成静态文件」
+
+
+
+
+
+
+
+ 5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)
+相关 Issue: #164
+结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。
+
+markdwon
解析插件为 hexo-renderer-marked
时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false
都可以避免 deploy 报错。 插件:hexo-renderer-marked
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/code-highlight/index.html b/test/code-highlight/index.html
new file mode 100644
index 000000000..8b128c331
--- /dev/null
+++ b/test/code-highlight/index.html
@@ -0,0 +1,2076 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Code Highlight Style test - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Code Highlight Style test
+
+
+
+
+
+
+
+ Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org
+
+
+Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
+
+#[derive(Debug)] pub enum State { Start, Transient, Closed, } impl From <&'a str > for State { fn from (s: &'a str ) -> Self { match s { "start" => State::Start, "closed" => State::Closed, _ => unreachable! (), } } }
+
+[ { "title" : "apples" , "count" : [12000 , 20000 ], "description" : {"text" : "..." , "sensitive" : false } }, { "title" : "oranges" , "count" : [17500 , null ], "description" : {"text" : "..." , "sensitive" : false } } ]
+
+class MyClass { public static myValue: string ; constructor (init: string ) { this .myValue = init; } } import fs = require ("fs" );module MyModule { export interface MyInterface extends Other { myProperty: any ; } } declare magicNumber number ;myArray.forEach(() => { });
+
+@requires_authorization def somefunc (param1='' , param2=0 ): r'''A docstring''' if param1 > param2: print 'Gre\'ater' return (param2 - param1 + 1 + 0b10l ) or None class SomeClass : pass >>> message = '''interpreter ... prompt'''
+
+<!DOCTYPE html > <title > Title</title > <style > body {width : 500px ;}</style > <script type ="application/javascript" > function $init ( ) {return true ;} </script > <body > <p checked class ="title" id ='title' > Title</p > </body >
+
+function $initHighlight (block, cls ) { try { if (cls.search(/\bno\-highlight\b/ ) != -1 ) return process(block, true , 0x0F ) + ` class="${cls} "` ; } catch (e) { } for (var i = 0 / 2 ; i < classes.length; i++) { if (checkCondition(classes[i]) === undefined ) console .log('undefined' ); } return ( <div> <web-component>{block}</web-component> </div> ) } export $initHighlight;
+
+#include <iostream> int main (int argc, char *argv[]) { for (auto i = 0 ; i < 0xFFFF ; i++) cout << "Hello, World!" << endl ; char c = '\n' ; unordered_map <string , vector <string > > m; m["key" ] = "\\\\" ; return -2e3 + 12l ; }
+
+CREATE TABLE "topic" ( "id" serial NOT NULL PRIMARY KEY , "forum_id" integer NOT NULL , "subject" varchar (255 ) NOT NULL ); ALTER TABLE "topic" ADD CONSTRAINT forum_id FOREIGN KEY ("forum_id" )REFERENCES "forum" ("id" );insert into "topic" ("forum_id" , "subject" )values (2 , 'D''artagnian' );
+
+#import <UIKit/UIKit.h> #import "Dependency.h" @protocol WorldDataSource @optional - (NSString *)worldName; @required - (BOOL )allowsToLive; @end @property (nonatomic , readonly ) NSString *title;- (IBAction ) show; @end
+
+package l2f.gameserver.model;public abstract class L2Char extends L2Object { public static final Short ERROR = 0x0001 ; public void moveTo (int x, int y, int z) { _ai = null ; log("Should not be called" ); if (1 > 5 ) { return ; } } }
+
+import Foundation@objc class Person : Entity { var name: String! var age: Int! init (name: String , age: Int ) { } func description (offset: Int = 0 ) -> String { return "\(name) is \(age + offset) years old" } }
+
+@font-face { font-family : Chunkfive; src : url ('Chunkfive.otf' ); } body , .usertext { color : #F0F0F0 ; background : #600 ; font-family : Chunkfive, sans; } @import url(print.css);@media print { a [href^=http] ::after { content : attr (href) } }
+
+class Greeter def initialize (name) @name = name.capitalize end def salute puts "Hello #{@name} !" end end g = Greeter.new("world" ) g.salute
+
+BUILDDIR = _build EXTRAS ?= $(BUILDDIR) /extras .PHONY : main cleanmain: @echo "Building main facility..." build_main $(BUILDDIR) clean: rm -rf $(BUILDDIR) /*
+
+package mainimport "fmt" func main () { ch := make (chan float64 ) ch <- 1.0e10 x, ok := <- ch defer fmt.Println(`exitting now\` ) go println (len ("hello world!" )) return }
+
+#!/bin/bash ACCEPTED_HOSTS="/root/.hag_accepted.conf" BE_VERBOSE=false if [ "$UID " -ne 0 ]then echo "Superuser rights required" exit 2 fi genApacheConf (){ echo -e "# Host ${HOME_DIR} $1 /$2 :" }
+
+[package] name = "some_name" authors = ["Author" ]description = "This is \ a description" [[lib]] name = ${NAME} default = True auto = no counter = 1_000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/elements/index.html b/test/elements/index.html
new file mode 100644
index 000000000..bbec8b1e0
--- /dev/null
+++ b/test/elements/index.html
@@ -0,0 +1,2100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Elements - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Elements
+
+
+
+
+
+
+
+ The purpose of this post is to help you make sure all of HTML elements can display properly. If you use CSS reset, don't forget to redefine the style by yourself.
+
+Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6
+Paragraph Lorem ipsum dolor sit amet, test link consectetur adipiscing elit. Strong text pellentesque ligula commodo viverra vehicula. Italic text at ullamcorper enim. Morbi a euismod nibh. Underline text non elit nisl. Deleted text tristique, sem id condimentum tempus, metus lectus venenatis mauris, sit amet semper lorem felis a eros. Fusce egestas nibh at sagittis auctor. Sed ultricies ac arcu quis molestie. Donec dapibus nunc in nibh egestas, vitae volutpat sem iaculis. Curabitur sem tellus, elementum nec quam id, fermentum laoreet mi. Ut mollis ullamcorper turpis, vitae facilisis velit ultricies sit amet. Etiam laoreet dui odio, id tempus justo tincidunt id. Phasellus scelerisque nunc sed nunc ultricies accumsan.
+Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed erat diam
, blandit eget felis aliquam, rhoncus varius urna. Donec tellus sapien, sodales eget ante vitae, feugiat ullamcorper urna. Praesent auctor dui vitae dapibus eleifend. Proin viverra mollis neque, ut ullamcorper elit posuere eget.
+
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+Maecenas ornare arcu at mi suscipit, non molestie tortor ultrices. Aenean convallis, diam et congue ultricies, erat magna tincidunt orci, pulvinar posuere mi sapien ac magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent vitae placerat mauris. Nullam laoreet ante posuere tortor blandit auctor. Sed id ligula volutpat leo consequat placerat. Mauris fermentum dolor sed augue malesuada sollicitudin. Vivamus ultrices nunc felis, quis viverra orci eleifend ut. Donec et quam id urna cursus posuere. Donec elementum scelerisque laoreet.
+List Types Definition List (dl) Definition List Title This is a definition list division.
+
+Ordered List (ol)
+List Item 1
+List Item 2
+List Item 3
+
+Unordered List (ul)
+List Item 1
+List Item 2
+List Item 3
+
+Checkbox List (ul)
+Table
+
+
+Table Header 1
+Table Header 2
+Table Header 3
+
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+Division 1
+Division 2
+Division 3
+
+
+Misc Stuff - abbr, acronym, sub, sup, kbd, etc. Lorem superscript dolor subscript amet, consectetuer adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. cite . Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus eget sapien fringilla nonummy. NBA Mauris a ante. Suspendisse quam sem, consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue quis tellus. AVE . Use Crtl + C to stop.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/excerpts/index.html b/test/excerpts/index.html
new file mode 100644
index 000000000..d7e027ec1
--- /dev/null
+++ b/test/excerpts/index.html
@@ -0,0 +1,2047 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Excerpts - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Excerpts
+
+
+
+
+
+
+
+ The following contents should be invisible in home/archive page.
+
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce eget urna vitae velit eleifend interdum at ac nisi. In nec ligula lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed eu cursus erat, ut dapibus quam. Aliquam eleifend dolor vitae libero pharetra adipiscing. Etiam adipiscing dolor a quam tempor, eu convallis nulla varius. Aliquam sollicitudin risus a porta aliquam. Ut nec velit dolor. Proin eget leo lobortis, aliquam est sed, mollis mauris. Fusce vitae leo pretium massa accumsan condimentum. Fusce malesuada gravida lectus vel vulputate. Donec bibendum porta nibh ut aliquam.
+Sed lorem felis, congue non fringilla eu, aliquam eu eros. Curabitur orci libero, mollis sed semper vitae, adipiscing in lectus. Aenean non egestas odio. Donec sollicitudin nisi quis lorem gravida, in pharetra mauris fringilla. Duis sit amet faucibus dolor, id aliquam neque. In egestas, odio gravida tempor dictum, mauris felis faucibus purus, sit amet commodo lacus diam vitae est. Ut ut quam eget massa semper sodales. Aenean non ipsum cursus, blandit lectus in, ornare odio. Curabitur ultrices porttitor vulputate.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/gallery-post/index.html b/test/gallery-post/index.html
new file mode 100644
index 000000000..fe4855e75
--- /dev/null
+++ b/test/gallery-post/index.html
@@ -0,0 +1,2049 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gallery Post - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gallery Post
+
+
+
+
+
+
+
+ This post contains 4 photos:
+
+Widescreen wallpaper
+Portrait photo
+Dual widescreen wallpaper
+Small photo
+
+All photos should be displayed properly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/hello-world/index.html b/test/hello-world/index.html
new file mode 100644
index 000000000..97cc73269
--- /dev/null
+++ b/test/hello-world/index.html
@@ -0,0 +1,2029 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hello World - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hello World
+
+
+
+
+
+
+
+ Welcome to Hexo! This is your very first post. Check documentation to learn how to use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/images/index.html b/test/images/index.html
new file mode 100644
index 000000000..5e2b9040e
--- /dev/null
+++ b/test/images/index.html
@@ -0,0 +1,2047 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Images - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+This is a image test post.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/link-post-without-title/index.html b/test/link-post-without-title/index.html
new file mode 100644
index 000000000..5d2dee718
--- /dev/null
+++ b/test/link-post-without-title/index.html
@@ -0,0 +1,2044 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ www.google.com - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ www.google.com
+
+
+
+
+
+
+
+ This is a link post without a title. The title should be the link with or without protocol. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/link-post/index.html b/test/link-post/index.html
new file mode 100644
index 000000000..8311ae9a9
--- /dev/null
+++ b/test/link-post/index.html
@@ -0,0 +1,2041 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link Post - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Link Post
+
+
+
+
+
+
+
+ This is a link post. Clicking on the link should open Google in a new tab or window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/long-title/index.html b/test/long-title/index.html
new file mode 100644
index 000000000..f97556e72
--- /dev/null
+++ b/test/long-title/index.html
@@ -0,0 +1,2037 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam justo turpis, tincidunt ac convallis id. - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam justo turpis, tincidunt ac convallis id.
+
+
+
+
+
+
+
+ This post has a long title. Make sure the title displayed right.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/markdown/index.html b/test/markdown/index.html
new file mode 100644
index 000000000..292485585
--- /dev/null
+++ b/test/markdown/index.html
@@ -0,0 +1,2279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Markdown Style test - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Markdown Style test
+
+
+
+
+
+
+
+ This post is originated from here and is used for testing markdown style. This post contains nearly every markdown usage. Make sure all the markdown elements below show up correctly.
+
+
+
+# H1 ## H2 ### H3 #### H4 ##### H5 ###### H6 Alternatively, for H1 and H2, an underline-ish style: Alt-H1 ====== Alt-H2 ------
+
+H1 H2 H3 H4 H5 H6 Alternatively, for H1 and H2, an underline-ish style:
+Alt-H1 Alt-H2 Emphasis Emphasis, aka italics, with *asterisks* or _underscores_ . Strong emphasis, aka bold, with **asterisks** or __underscores__ . Combined emphasis with **asterisks and _underscores_ ** . Strikethrough uses two tildes. ~~Scratch this.~~
+
+Emphasis, aka italics, with asterisks or underscores .
+Strong emphasis, aka bold, with asterisks or underscores .
+Combined emphasis with asterisks and underscores .
+Strikethrough uses two tildes. Scratch this.
+Lists 1. First ordered list item2. Another item * Unordered sub-list.1. Actual numbers don't matter, just that it's a number 1. Ordered sub-list4. And another item. You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) * Unordered list can use asterisks- Or minuses+ Or pluses- Paragraph In unordered list For example like this. Common Paragraph with some text. And more text.
+
+
+First ordered list item
+
+Another item
+
+
+Actual numbers don't matter, just that it's a number
+
+Ordered sub-list
+
+
+And another item.
+You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown).
+To have a line break without a paragraph, you will need to use two trailing spaces. Note that this line is separate, but within the same paragraph. (This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
+
+
+
+Unordered list can use asterisks
+
+
+
+
+Common Paragraph with some text. And more text.
+Inline HTML <p > To reboot your computer, press <kbd > ctrl</kbd > +<kbd > alt</kbd > +<kbd > del</kbd > .</p >
+
+To reboot your computer, press ctrl +alt +del .
+
+
+<dl > <dt > Definition list</dt > <dd > Is something people use sometimes.</dd > <dt > Markdown in HTML</dt > <dd > Does *not* work **very** well. Use HTML <em > tags</em > .</dd > </dl >
+
+
+
+ Definition list
+ Is something people use sometimes.
+
+<dt>Markdown in HTML</dt>
+<dd>Does *not* work **very** well. Use HTML <em>tags</em>.</dd>
+
+
+
+Links [I'm an inline-style link ](https://www.google.com ) [I'm an inline-style link with title ](https://www.google.com "Google's Homepage" ) [I'm a reference-style link ][Arbitrary case-insensitive reference text ] [I'm a relative reference to a repository file ](https://cdn.jsdelivr.net/gh/theme-volantis/hexo-theme-volantis/LICENSE ) [You can use numbers for reference-style link definitions ][1 ] Or leave it empty and use the [link text itself] Some text to show that the reference links can follow later. [arbitrary case-insensitive reference text ]: https://hexo.io [1 ]: https://hexo.io/docs/ [link text itself ]: https://hexo.io/api/
+
+I'm an inline-style link
+I'm an inline-style link with title
+I'm a reference-style link
+I'm a relative reference to a repository file
+You can use numbers for reference-style link definitions
+Or leave it empty and use the link text itself
+Some text to show that the reference links can follow later.
+Images hover to see the title text: Inline-style: ![alt text ](https://hexo.io/icon/favicon-196x196.png "Logo Title Text 1" ) Reference-style: ![alt text ][logo ] [logo ]: https://hexo.io/icon/favicon-196x196.png "Logo Title Text 2"
+
+hover to see the title text:
+Inline-style:
+
+Reference-style:
+Code and Syntax Highlighting Inline code
has back-ticks around
it.
+var s = "JavaScript syntax highlighting" ;alert(s);
+
+s = "Python syntax highlighting" print s
+
+No language indicated, so no syntax highlighting. But let's throw in a <b>tag</b>.
+
+Tables | |ASCII |HTML | |----------------|-------------------------------|-----------------------------| |Single backticks|`'Isn't this fun?'` |'Isn't this fun?' | |Quotes |`"Isn't this fun?"` |"Isn't this fun?" | |Dashes |`-- is en-dash, --- is em-dash` |-- is en-dash, --- is em-dash|
+
+
+
+
+
+ASCII
+HTML
+
+
+
+Single backticks
+'Isn't this fun?'
+'Isn't this fun?'
+
+
+Quotes
+"Isn't this fun?"
+"Isn't this fun?"
+
+
+Dashes
+-- is en-dash, --- is em-dash
+-- is en-dash, --- is em-dash
+
+
+Colons can be used to align columns.
+| Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | right-aligned | | | col 2 is | centered | | | zebra stripes | are neat |
+
+
+
+
+Tables
+Are
+Cool
+
+
+
+col 3 is
+right-aligned
+
+
+
+col 2 is
+centered
+
+
+
+zebra stripes
+are neat
+
+
+
+The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown.
+Markdown | Less | Pretty --- | --- | --- *Still* | `renders` | **nicely** 1 | 2 | 3
+
+
+
+
+Markdown
+Less
+Pretty
+
+
+
+Still
+renders
+nicely
+
+
+1
+2
+3
+
+
+
+You can find more information about LaTeX mathematical expressions here .
+
+Blockquotes
+Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.
+
+Quote break.
+
+This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.
+
+Horizontal Rule Three or more...
+--- Hyphens *** Asterisks ___ Underscores
+
+
+Hyphens
+
+Asterisks
+
+Underscores
+Line Breaks Here's a line for us to start with. This line is separated from the one above by two newlines, so it will be a *separate paragraph* . This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the *same paragraph* .
+
+
+Here's a line for us to start with.
+This line is separated from the one above by two newlines, so it will be a separate paragraph .
+This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the same paragraph .
+
+This is a regular paragraph. <table > <tr> <td>Foo</td> </tr> </table> This is another regular paragraph.
+
+This is a regular paragraph.
+
+
+This is another regular paragraph.
+Youtube videos <a href ="https://www.youtube.com/watch?feature=player_embedded&v=ARted4RniaU " target="_blank"> <img src ="https://img.youtube.com/vi/ARted4RniaU/0.jpg" alt="IMAGE ALT TEXT HERE" width="240" height="180" border="10" /> </a > Pure markdown version: [![IMAGE ALT TEXT HERE ](https://img.youtube.com/vi/ARted4RniaU/0.jpg )](https://www.youtube.com/watch?v=ARted4RniaU )
+
+
+Pure markdown version:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/no-title/index.html b/test/no-title/index.html
new file mode 100644
index 000000000..115719f0e
--- /dev/null
+++ b/test/no-title/index.html
@@ -0,0 +1,1995 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This post doesn't have a title. Make sure it's accessible.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/tag-plugins/index.html b/test/tag-plugins/index.html
new file mode 100644
index 000000000..3e2894824
--- /dev/null
+++ b/test/tag-plugins/index.html
@@ -0,0 +1,2087 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tag Plugins - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tag Plugins
+
+
+
+
+
+
+
+ This post is used for testing tag plugins. See docs for more info.
+Block Quote Normal blockquote
+Praesent diam elit, interdum ut pulvinar placerat, imperdiet at magna.
+
+Quote from a book Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
+
+
+NEW: DevDocs now comes with syntax highlighting. http://devdocs.io
+
+
+Quote from an article on the web Every interaction is both precious and an opportunity to delight.
+Seth Godin `http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html` Welcome to Island Marketing
+
+Code Block Normal code block
+
+With caption Array.map array.map(callback[, thisArg])
+
+With caption and URL .compact Underscore.js .compact([0, 1, false, 2, ‘’, 3]); => [1, 2, 3]
+
+With marked lines Line 1,7-8,10 should be marked with different color.
+const http = require ('http' );const hostname = '127.0.0.1' ;const port = 1337 ;http.createServer((req, res ) => { res.writeHead(200 , { 'Content-Type' : 'text/plain' }); res.end('Hello World\n' ); }).listen(port, hostname, () => { console .log(`Server running at http://${hostname} :${port} /` ); });
+
+Note: Theme's style should support .highlight.line.marked
(recommend to use the selection or current line color).
+Gist
+
+jsFiddle
+
+Pullquote Left Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempus molestie arcu, et fringilla mauris placerat ac. Nullam luctus bibendum risus. Ut cursus sed ipsum feugiat egestas. Suspendisse elementum, velit eu consequat consequat, augue lorem dapibus libero, eget pulvinar dolor est sit amet nulla. Suspendisse a porta tortor, et posuere mi. Pellentesque ultricies, mi quis volutpat malesuada, erat felis vulputate nisl, ac congue ante tortor ut ante. Proin aliquam sem vel mauris tincidunt, eget scelerisque tortor euismod. Nulla tincidunt enim nec commodo dictum. Mauris id sapien et orci gravida luctus id ut dui. In vel vulputate odio. Duis vel turpis molestie, scelerisque enim eu, lobortis eros. Cras at ipsum gravida, sagittis ante vel, viverra tellus. Nunc mauris turpis, elementum ullamcorper nisl pretium, ultrices cursus justo. Mauris porttitor commodo eros, ac ornare orci interdum in. Cras fermentum cursus leo sed mattis. In dignissim lorem sem, sit amet elementum mauris venenatis ac.
+Right Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ligula justo, lobortis sit amet semper vel, dignissim sit amet libero. Praesent ac tempus ligula. Maecenas at gravida odio. Etiam tristique volutpat lacus eu faucibus. Donec non tempus arcu. Phasellus adipiscing, mauris nec mollis egestas, ipsum nunc auctor velit, et rhoncus lorem ipsum at ante. Praesent et sem in velit volutpat auctor. Duis vel mauris nulla. Maecenas mattis interdum ante, quis sagittis nibh cursus et. Nulla facilisi. Morbi convallis gravida tortor, ut fermentum enim gravida et. Nunc vel dictum nisl, non ultrices libero. Proin vestibulum felis eget orci consectetur lobortis. Vestibulum augue nulla, iaculis vitae augue vehicula, dignissim ultrices libero. Sed imperdiet urna et quam ultrices tincidunt nec ac magna. Etiam vel pharetra elit.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/videos/index.html b/test/videos/index.html
new file mode 100644
index 000000000..b5b0b8367
--- /dev/null
+++ b/test/videos/index.html
@@ -0,0 +1,2047 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Videos - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is a video test post.
+Youtube
+VIDEO
+
+Vimeo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/test/\344\270\255\346\226\207\346\270\254\350\251\246/index.html" "b/test/\344\270\255\346\226\207\346\270\254\350\251\246/index.html"
new file mode 100644
index 000000000..637f43411
--- /dev/null
+++ "b/test/\344\270\255\346\226\207\346\270\254\350\251\246/index.html"
@@ -0,0 +1,2045 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 中文測試 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is a Chinese test post.
+善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。
+以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一?
+就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。
+國新故。
+
+工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不?
+
+From 亂數假文產生器 - Chinese Lorem Ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git "a/test/\346\227\245\346\234\254\350\252\236\343\203\206\343\202\271\343\203\210/index.html" "b/test/\346\227\245\346\234\254\350\252\236\343\203\206\343\202\271\343\203\210/index.html"
new file mode 100644
index 000000000..8e1bec7ac
--- /dev/null
+++ "b/test/\346\227\245\346\234\254\350\252\236\343\203\206\343\202\271\343\203\210/index.html"
@@ -0,0 +1,2045 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 日本語テスト - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is a Japanese test post.
+私は昨日ついにその助力家というのの上よりするたなけれ。
+最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。
+がたを知っないはずも同時に九月をいよいよたありた。
+もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。
+
+それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。
+
+この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。
+From すぐ使えるダミーテキスト - 日本語 Lorem ipsum
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/comments/index.html b/theme-settings/comments/index.html
new file mode 100644
index 000000000..837127c5a
--- /dev/null
+++ b/theme-settings/comments/index.html
@@ -0,0 +1,2255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 选择评论系统 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 目前支持的评论系统有: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover
+blog/_config.volantis.yml comments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/configuration/index.html b/theme-settings/configuration/index.html
new file mode 100644
index 000000000..61092b348
--- /dev/null
+++ b/theme-settings/configuration/index.html
@@ -0,0 +1,2229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 创建主题配置文件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 创建主题配置文件
+
+
+
+
+
+
+
+ 主题目录下的 _config.yml
文件通常负责主题相关配置,我们强烈建议您使用代替的主题配置文件以防止自己的配置丢失。那么如何使用代替主题配置文件呢?
+
+
在博客根目录的 _config.yml
文件旁边新建一个文件: _config.volantis.yml
,这个文件中的配置信息优先级高于主题文件夹中的配置文件。
+
+
当您需要修改某项内容时,例如导航栏菜单,那么您需要在主题配置文件中找到相关内容,复制进自己创建的配置文件中:
blog/_config.volantis.yml navbar: visiable: auto logo: img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/Logo-NavBar@3x.png icon: title: menu: - name: 博客 icon: fas fa-rss url: /
小提示 使用「npm i hexo-theme-volantis
」方式安装的主题,主题配置文件在「blog/node_modules/hexo-theme-volantis/_config.yml
」 使用传统方式安装的主题,主题配置文件在「blog/themes/volantis/_config.yml
」
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/cover/index.html b/theme-settings/cover/index.html
new file mode 100644
index 000000000..c73983485
--- /dev/null
+++ b/theme-settings/cover/index.html
@@ -0,0 +1,2268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 网站与文章封面 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网站与文章封面
+
+
+
+
+
+
+
+ 封面高度 blog/_config.volantis.yml cover: height_scheme: full ...
+
+目前主题提供两种首页封面高度方案,其它页面均为半屏幕高度。
+封面布局方案 blog/_config.volantis.yml cover: ... scheme: dock ...
+
+
+
+
+布局方案
+适合场景
+
+
+
+search
+注重搜索
+
+
+dock
+入口选项比较多
+
+
+featured
+选项在4个左右
+
+
+focus
+选项在4个左右
+
+
+
+
+
+默认显示设置 blog/_config.volantis.yml cover: ... display: home: true archive: false others: false
+
+由于主页、归档是 hexo 自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter
中通过设置 cover: true/false
来决定显示封面或者不显示封面。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/footer/index.html b/theme-settings/footer/index.html
new file mode 100644
index 000000000..e50dc1ecb
--- /dev/null
+++ b/theme-settings/footer/index.html
@@ -0,0 +1,2225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 设置网站页脚 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 您通过 layout
可以自由布局网站页脚内容 aplayer
, social
, license
, info
, copyright
。
+blog/_config.volantis.yml site_footer: layout: [aplayer , social , license , info , copyright ] social: - icon: fas fa-rss url: atom.xml - icon: fas fa-envelope url: mailto:me@xaoxuu.com - icon: fab fa-github url: https://github.com/xaoxuu - icon: fas fa-headphones-alt url: https://music.163.com/#/user/home?id=63035382 copyright: '[Copyright © 2017-2020 Mr. X](https://xaoxuu.com)' br: '<br>'
+其中,aplayer
需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如:
+blog/_config.volantis.yml site_footer: layout: [... , br , hello , ... ] ... br: '<br>' hello: '[Hello World](/)'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/layout/index.html b/theme-settings/layout/index.html
new file mode 100644
index 000000000..bd5d39d0d
--- /dev/null
+++ b/theme-settings/layout/index.html
@@ -0,0 +1,2223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 文章布局配置 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ article: preview: scheme: landscape pin_icon: https://cdn.jsdelivr.net/gh/twitter/twemoji@13.0/assets/svg/1f4cc.svg auto_title: true auto_excerpt: true line_style: solid readmore: auto body: top_meta: [author , category , date , counter ] footer_widget: references: title: 参考资料 icon: fas fa-quote-left related_posts: enable: false title: 相关文章 icon: fas fa-bookmark max_count: 5 placeholder_img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg copyright: enable: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink donate: enable: false images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png bottom_meta: [updated , tags , share ] meta_library: author: avatar: name: 请设置文章作者 url: / date: icon: fas fa-calendar-alt title: '发布于:' format: 'll' updated: icon: fas fa-edit title: '更新于:' format: 'll' category: icon: fas fa-folder-open counter: icon: fas fa-eye unit: '次浏览' valinecount: icon: fas fa-comment-dots desc: '' wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half tags: icon: fas fa-hashtag share: - id: qq img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png - id: qzone img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png - id: weibo img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png - id: img: - id: img:
+其中 top_meta
和 bottom_meta
部分的取值自 meta_library
库。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/navbar/index.html b/theme-settings/navbar/index.html
new file mode 100644
index 000000000..44a5ffd93
--- /dev/null
+++ b/theme-settings/navbar/index.html
@@ -0,0 +1,2251 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 设置网站导航栏 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置网站导航栏
+
+
+
+
+
+
+
+ 导航栏配置 导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。
+blog/_config.volantis.yml navbar: logo: img: icon: title: menu: - name: 博客 icon: fas fa-rss url: / - name: 分类 icon: fas fa-folder-open url: categories/ - name: 标签 icon: fas fa-tags url: tags/ - name: 归档 icon: fas fa-archive url: archives/ - name: 友链 icon: fas fa-link url: friends/ - name: 关于 icon: fas fa-info-circle url: about/ search: 搜索
+
+使用数据文件
+
+建议新建一个文件,专门存放导航栏菜单 配置,文件的路径为:
+blog/source/_data/menu.yml
+文件的内容为:
+blog/source/_data/menu.yml - name: 博客 icon: fas fa-rss url: / ...
+
+菜单嵌套 导航栏菜单支持嵌套,嵌套的属性名为 rows
,写法示例:
+blog/source/_data/menu.yml ... - name: 更多 icon: fas fa-ellipsis-v rows: - name: 主题源码 url: https://github.com/volantis-x/hexo-theme-volantis/ - name: 更新日志 url: https://github.com/volantis-x/hexo-theme-volantis/releases/ - name: hr - name: 有疑问? rows: - name: 看 FAQ url: faqs/ - name: 看 本站源码 url: https://github.com/volantis-x/volantis-docs/ - name: 提 Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: hr - name: 公告和测试博文 url: archives/ - name: 示例博客 url: examples/ - name: 特别感谢 url: contributors/
+
+分割线 在子菜单中,新增一个只有 name: hr
的“菜单”就会被渲染成一个分割线。
+
+
+小标题 在子菜单中,新增一个只有 name: 小标题内容
(也可以有 icon: 小标题的图标
)的“菜单”就会被渲染成一个小标题。
+... - name: 近期 icon: fas fa-clock url: / rows: - name: 热门文章 icon: fas fa-fire - name: ProHUD 开源库的设计思路 url: blog/2019-08-27-prohud/ - name: ValueX:实用的安全对象类型转换库 url: blog/2019-08-29-valuex/ - name: 心率管家 App 的设计与开发 url: blog/2019-07-23-heartmate/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/plugins/index.html b/theme-settings/plugins/index.html
new file mode 100644
index 000000000..fb5390c68
--- /dev/null
+++ b/theme-settings/plugins/index.html
@@ -0,0 +1,2281 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 第三方插件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 插件库 Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。
+blog/_config.volantis.yml plugins: jquery: https://cdn.jsdelivr.net/npm/jquery@3.5/dist/jquery.min.js fontawesome: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.14/css/all.min.css preload: enable: true service: flying_pages instant_page: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js flying_pages: https://cdn.jsdelivr.net/gh/gijo-varghese/flying-pages@2.1.2/flying-pages.min.js lazyload: enable: true js: https://cdn.jsdelivr.net/npm/vanilla-lazyload@17.1.0/dist/lazyload.min.js onlypost: false loadingImg: blurIn: true highlightjs: enable: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css scrollreveal: enable: js: https://cdn.jsdelivr.net/npm/scrollreveal@4.0.6/dist/scrollreveal.min.js distance: 32px duration: 800 interval: 20 scale: 1 clipboard: enable: true js: https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js wordcount: enable: nodewaves: enable: css: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css js: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js fontawesome_animation: enable: css: https://cdn.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css comment_typing: enable: js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js backstretch: enable: js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover shuffle: true duration: 10000 fade: 1500 images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/056.jpg aplayer: enable: js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js server: netease type: playlist id: 3175833810 fixed: false theme: '#1BCDFC' autoplay: false order: list loop: all volume: 0.7 list_max_height: 320px list_folded: true pjax: enable: true timeout: 5000 cacheBust: false animation: nprogress banUrl: artitalk: appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI appKEY: nHXLd3N3Jgh460t2iRQKWAtr darkmodejs: enable: js: https://cdn.jsdelivr.net/npm/darkmode-js@1.5/lib/darkmode-js.min.js button: enable: true left: '16px' bottom: '32px' buttonDark: '#333' buttonLight: '#ddd' compatible: true
+
+
+
+幻灯片背景 blog/_config.volantis.yml plugins: ... backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover duration: 20000 fade: 1500 images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ...
+幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。
+highlight.js blog/_config.volantis.yml plugins: ... highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css
+如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable
设置为 false
否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。
+如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。
+经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。
+
+APlayer 音乐播放器 blog/_config.volantis.yml plugins: ... aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js server: netease type: playlist id: 3175833810 fixed: false theme: '#1BCDFC' autoplay: false order: list loop: all volume: 0.7 list_max_height: 340px list_folded: true
+
+
+
+Artitalk blog/_config.volantis.yml plugins: ... Artitalk: enable: false appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI appKEY: nHXLd3N3Jgh460t2iRQKWAtr
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/search/index.html b/theme-settings/search/index.html
new file mode 100644
index 000000000..a99c041ed
--- /dev/null
+++ b/theme-settings/search/index.html
@@ -0,0 +1,2223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 站内搜索 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ blog/_config.volantis.yml search: enable: true service: hexo js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2.6.4/js/search.js google: apiKey: engineId: algolia: applicationID: apiKey: indexName: azure: serviceName: indexName: queryKey: baidu: apiId:
+默认配置为 Hexo 搜索,但是需要安装插件才能使用:
+npm i -S hexo-generator-search hexo-generator-json-content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/sidebar/index.html b/theme-settings/sidebar/index.html
new file mode 100644
index 000000000..22c2a0963
--- /dev/null
+++ b/theme-settings/sidebar/index.html
@@ -0,0 +1,2268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 侧边栏配置 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 侧边栏小组件与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。
+ 查看所有相关配置
+
+
blog/_config.volantis.yml sidebar: for_page: [blogger , category , tagcloud , qrcode ] for_post: [toc ] widget_library: blogger: class: blogger display: [desktop , mobile ] avatar: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/Logo-NavBar@3x.png shape: rectangle url: /about/ title: subtitle: jinrishici: true social: true toc: class: toc display: [desktop , mobile ] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 category: class: category display: [desktop ] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ tagcloud: class: tagcloud display: [desktop , mobile ] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' donate: class: qrcode display: [desktop , mobile ] height: 64px images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png webinfo: class: webinfo display: [desktop ] header: icon: fas fa-award title: 站点信息 type: article: enable: true text: '文章数目:' unit: '篇' runtime: enable: true data: '2020/01/01' text: '已运行时间:' unit: '天' wordcount: enable: true text: '本站总字数:' unit: '字' siteuv: enable: true text: '本站访客数:' unit: '人' sitepv: enable: true text: '本站总访问量:' unit: '次' lastupd: enable: true friendlyShow: true text: '最后活动时间:' unit: '日'
+
+
+
+每一个小部件都有 class
和 display
,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。
+小部件名: class: 小部件类别 display: [小部件在桌面端是否显示 , 小部件在移动设备是否显示 ]
+
+博主信息部件 blog/_config.volantis.yml blogger: class: blogger display: [desktop ] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true social: true
+其中,今日诗词 jinrishici
如果设置为一个字符串,这个字符串会变成占位文字,加载失败时显示。如果不需要,就请设置为 jinrishici: false
。social
的具体内容请在网站页脚部分设置。
+文章目录部件 blog/_config.volantis.yml toc: class: toc display: [desktop , mobile ] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5
+这个部件只能放置在侧边栏,并且在文章中有效。在移动设备中预览时,手指向上滑动时,导航栏右边会出现 TOC 按钮,点击即可展开 TOC 部件。如果您需要显示章节序号,请设置 list_number
。 min_depth
和 max_depth
代表 TOC 支持的标题层级,最大范围是2~6。
+文章分类部件 blog/_config.volantis.yml category: class: category display: [desktop ] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/
+这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。
+标签云部件 blog/_config.volantis.yml tagcloud: class: tagcloud display: [desktop ] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555'
+这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。
+二维码部件 blog/_config.volantis.yml donate: class: qrcode display: [desktop , mobile ] height: 64px images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
+您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。
+通用文本部件 blog/_config.volantis.yml repos: class: text display: [desktop ] header: icon: fab fa-github title: 点个赞吧 url: https://github.com/xaoxuu/ content: - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/xaoxuu/Inspire)'
+您可以创建用于展示任何文本内容的文本部件。
+通用列表部件 blog/_config.volantis.yml wiki-hexo-theme: class: list display: [desktop , mobile ] header: icon: fas fa-chevron-left title: Hexo Themes url: /wiki/ rows: - name: Volantis for Hexo url: /wiki/volantis/ - name: Resume for Hexo url: /wiki/resume/
+您可以创建用于展示任何链接列表的列表部件。列表的 rows
中的每一项支持的属性有: name
、url
、icon
、img
、avatar
,其中 img
是方形图片的链接,avatar
是圆形图片的链接。
+组索引 这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。
+blog/_config.volantis.yml group-1: class: group display: [desktop , mobile ] header: icon: fab fa-github title: Git url: /wiki/git/
+
+在文章的 front-matter 中设置:
+front-matter group: group-1 order: 16 sidebar: [group-1 , toc ]
+
+「group-1」卡片将会以列表的形式显示所有设置了 group: group-1
的文章,顺序按照 order
从小到大排列。
+通用网格部件 blog/_config.volantis.yml feedback: class: grid display: [desktop , mobile ] header: icon: fas fa-headset title: 联系开发者 url: https://github.com/volantis-x/hexo-theme-volantis fixed: true rows: - name: 反馈BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 疑问求助 icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 提个建议 icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/
+您可以创建用于展示任何链接列表的网格部件。网格默认根据文字长度自动确定每一个格子的宽度,如果文字长短不一,建议通过设置 fixed: true
来固定宽度,此时文字过长的格子中的文字会换行显示。
+通用页面部件 blog/_config.volantis.yml test: class: page display: [desktop , mobile ] pid: haha content: excerpt
+您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid
属性和文章的 front-matter
中设置一样的 pid
即可。 content
代表这个部件显示的内容,可选 excerpt
,more
,content
分别对应文章的摘要、摘要后面的内容、全文。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/theme-settings/style/index.html b/theme-settings/style/index.html
new file mode 100644
index 000000000..9018c1c43
--- /dev/null
+++ b/theme-settings/style/index.html
@@ -0,0 +1,2269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis: 自定义主题外观 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义主题外观
+
+
+
+
+
+
+
+ 最大布局宽度 blog/_config.volantis.yml custom_css: ... max_width: 1080px
+
+网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。
+抗锯齿 blog/_config.volantis.yml custom_css: ... font_smoothing: true
+
+自定义光标样式 blog/_config.volantis.yml custom_css: ... cursor: enable: true text: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/text.png pointer: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png default: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png not-allowed: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/circle.png zoom-out: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png zoom-in: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png grab: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png
+
+
+导航栏样式 您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有:
+
+shadow :卡片阴影。
+floatable :当鼠标移动到容器内时,呈现出浮起来的效果。
+blur :背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。
+
+blog/_config.volantis.yml custom_css: ... navbar: height: 64px effect: [shadow , blur ]
+
+滚动条样式 blog/_config.volantis.yml custom_css: ... scrollbar: size: 4px border: 2px color: '#2196f3' hover: '#ff5722'
+
+侧边栏样式 视觉特效参数同上,值得注意的是:卡片的 floatable
效果和 blur
效果相冲突。
+blog/_config.volantis.yml custom_css: ... sidebar: effect: [shadow ]
+
+正文区域样式 视觉特效参数同上,值得注意的是:卡片的 floatable
效果和 blur
效果相冲突。您可以在 language: true
这里设置代码块显示语言名称。text_align
可以设置 h1/h2/h3/h4/p 的文字对齐方向。
+blog/_config.volantis.yml custom_css: ... body: effect: [shadow ] highlight: language: true copy_btn: true text_align: h1: left h2: left h3: left h4: left p: justify note: icon: '\f054' color: ''
+
+布局间距 您可以设置几种标题的布局间距 h2/h3/h4、段落间距 line、区块内部的段落间距 inline。
+blog/_config.volantis.yml custom_css: ... gap: h2: 48px h3: 32px h4: 16px paragraph: 1rem row: .5rem
+
+自定义字体 您可以自定义正文和代码字体。
+blog/_config.volantis.yml custom_css: ... fontfamily: logofont: fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'Varela Round' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf weight: normal style: normal bodyfont: fontfamily: 'UbuntuMono, "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'UbuntuMono' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf weight: normal style: normal codefont: fontfamily: 'Menlo, Monaco' name: 'Monaco' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf weight: normal style: normal
+
+自定义颜色 blog/_config.volantis.yml color_scheme: common: theme: '#44D7B6' link: '#2196f3' button: '#44D7B6' hover: '#ff5722' inner: '#fff' selection: 'alpha(#2196f3, 0.2)' light: site_bg: '#f4f4f4' site_inner: '#fff' site_footer: '#666' card: '#fff' text: '#444' block: '#f6f6f6' codeblock: '#FFF7EA' inlinecode: '#D56D28' h1: '#444' h2: '#444' h3: '#444' h4: '#444' h5: '#444' h6: '#444' p: '#444' list: '#666' list_hl: 'mix($color-theme, #000, 80)' meta: '#888' dark: site_bg: '#222' site_inner: '#eee' site_footer: '#aaa' card: '#444' text: '#eee' block: '#3a3a3a' codeblock: '#343a3c' inlinecode: '#D56D28' h1: '#eee' h2: '#eee' h3: '#ddd' h4: '#ddd' h5: '#ddd' h6: '#ddd' p: '#bbb' list: '#aaa' list_hl: 'mix($color-theme, #fff, 80)' meta: '#888' brightness: 70 %
+
+自定义右键菜单 blog/_config.volantis.yml rightmenu: enable: true layout: [home , help , examples , contributors , hr , source_docs , source_theme , hr , print , hr , music ] print: name: 打印页面 icon: fa fa-print onclick: document.execCommand('print') help: name: 常见问题 icon: fa fa-question url: https://volantis.js.org/faqs/ examples: name: 示例博客 icon: fa fa-rss url: https://volantis.js.org/examples/ contributors: name: 加入社区 icon: fa fa-fan fa-spin url: https://volantis.js.org/contributors/ source_docs: name: 本站源码 icon: fa fa-code-branch url: https://github.com/volantis-x/volantis-docs/ source_theme: name: 主题源码 icon: fa fa-code-branch url: https://github.com/volantis-x/hexo-theme-volantis/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v2/advanced-settings/index.html b/v2/advanced-settings/index.html
new file mode 100644
index 000000000..ea61a02f3
--- /dev/null
+++ b/v2/advanced-settings/index.html
@@ -0,0 +1,2212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 进阶设定 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 建议有一定基础知识的朋友进行尝试。
+ 将主题添加为子模块
+
+
git submodule add https://github.com/volantis-x/hexo-theme-volantis themes/volantis
+
+
+
+为网站提速 加载速度
+尝试安装 hexo-all-minifier 插件来压缩文件。
+
+减少不必要的 js 插件,例如字数统计、动态背景。
+
+查找并解决拖慢速度的资源,以 Chrome 浏览器为例:
+
+页面中点击右键,选择「检查」。
+在右边的窗口中「Network」选项卡,并勾选「Disable cache」。
+刷新网页,查看加载速度慢的资源。 3.1. 加载缓慢的图片,建议使用 CDN。 3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。 3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。
+
+
+
+运行速度
+访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。
+
+强烈推荐安装 hexo-offline 插件,初次加载速度不变,后期切换页面和刷新网页速度越来越快。
+
+推荐安装图片懒加载插件 hexo-lazyload-image (需同时安装 hexo-fs
依赖库)。
+
+
+优化 SEO 在 front-matter 中,可以设置 keywords
、description
、robots
和 seo_title
。其中 seo_title
仅仅用作网页标题,优先级高于 title
。
+
+文章内部不要使用 H1 标题。
+
+通过死链检测工具检查并删除无法访问的链接。
+
+安装 SEO 优化插件:
+
+
+页面不要堆砌关键词,不要频繁更改路径。
+
+
+使用 CDN 对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。
+开启方法 blog/_config.yml
+
+如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。
+
+自定义 CDN 如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。
+安装「相关文章」插件
+安装插件
+npm i -S hexo-related-popular-posts
+
+在需要显示的位置添加 related_posts
例如放在侧边栏:
+blog/themes/volantis/_config.yml layout: on_page: sidebar: [related_posts ]
+
+
+
+
+
+分析与统计 默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。
+字数和阅读时长
+安装以下插件:npm i --save hexo-wordcount
+修改配置文件,将 wordcount
插件打开blog/themes/volantis/_config.yml plugins: ... wordcount: true
+然后修改配置文件,将 wordcount
写入需要显示的 meta 位置:blog/themes/volantis/_config.yml layout: on_list: meta: [... , wordcount , ... ] on_page: meta: header: [... , wordcount , ... ] footer: [... , wordcount , ... ]
+
+
+
+百度统计 blog/_config.yml baidu_analytics_key: 百度统计的key
+
+
+Google Analytics blog/_config.yml google_analytics_key: Google Analytics Key
+
+CNZZ 统计 请参考 ZYMIN 的这篇教程:《hexo+ejs+material x 添加CNZZ统计代码》
+网站运行时间等 请参考 TRHX 的这篇教程:《Hexo 博客主题个性化》
+更多 DIY 玩法 详见 @TRHX 的这篇博客:《Hexo 博客主题个性化》
+内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v2/getting-started/index.html b/v2/getting-started/index.html
new file mode 100644
index 000000000..945339150
--- /dev/null
+++ b/v2/getting-started/index.html
@@ -0,0 +1,2195 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 开始使用 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Volantis2
+A Wonderful Theme for Hexo
+
+
+
+Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+这些是使用了本主题的博客: 示例博客
+能力要求 自建博客需要一定的相关知识,在开始前,请务必确保:
+
+
+
+
+
+为了更好地使用,还建议掌握以下知识:
+
+
规范地使用 GitHub Issues(解决文档中没有的问题)
+
+
+
GitHub Fork、Pull Request 操作(使主题保持更新)
+
+
+环境要求 如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。
+Hexo: 4.2 hexo-cli: 3.1 node.js: 12.16 npm: 6.13
+
+下载与安装 在博客路径打开终端,下载安装并应用主题:
+
curl -s https://volantis.js.org/start | bash
+
如果您还没有博客,执行这行命令将会自动检测并安装所需环境,初始化博客,然后下载安装并应用主题。
+
第1/3步:下载主题源码到 themes/
文件夹
+
git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis
+
+
第2/3步:修改站点配置文件
+
blog/_config.yml
+
+
第3/3步:检查并安装依赖
+
安装 Hexo 搜索的依赖包: npm i -S hexo-generator-search hexo-generator-json-content
+
安装 stylus 渲染器: npm i -S hexo-renderer-stylus
+
+升级小助手 升级前请查看 更新日志
+ 2.6.3 -> 2.6.6
+
+
+ 2.6.2 -> 2.6.3
+
+
全局搜索 seotitle
并替换为 seo_title
。 group 组件的索引规则有变,使用 group 组件的文章内,group: group_name
对应的组件名必须是 group_name
。 group 组件的列表名优先显示文章的 short_title
其次是 title
。
+
+
+
+许可协议 本主题采用 MIT开源许可协议 ,永久无限制免费使用。
+MIT开源许可协议
被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。 被授权人可根据程式的需要修改授权条款为适当的内容。 在软件和软件的所有副本中都必须包含版权声明和许可声明。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v2/page-settings/index.html b/v2/page-settings/index.html
new file mode 100644
index 000000000..ee3537fcc
--- /dev/null
+++ b/v2/page-settings/index.html
@@ -0,0 +1,2279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 页面配置 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如无特殊说明,本页面的配置信息写在 页面 文件的 front-matter
中。
+布局模板
+
+
+取值
+含义
+
+
+
+page
+独立页面
+
+
+post
+文章页面
+
+
+category
+分类页面
+
+
+tag
+标签页面
+
+
+links
+友链页面
+
+
+list
+列表页面
+
+
+page & post post 页面布局几乎与 page 页面相同,但是有以下细微区别:
+
+post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 不会。
+主题配置中的 article_footer
只作用于 post
,如果 page 也要显示,可以在 front-matter 中设置meta: article_footer: [xxx ]
+
+
+
+
+front-matter front-matter 是文件最上方以 ---
分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter
+ 查看全部取值
+
+
字段 含义 值类型 默认值 layout 布局模版 String - title 页面标题 String - seo_title 网页标题 String page.title short_title 页面标题(在group列表中显示) String page.title date 创建时间 Date 文件创建时间 updated 更新日期 Date 文件修改时间 link 外部文章网址 String - music 内部音乐控件 [Object] - robots robots String - keywords 页面关键词 String - description 页面描述、摘要 String - cover 是否显示封面 Bool true meta 文章或页面的meta信息 Bool, Array theme.layout.*.meta sidebar 页面侧边栏 Bool, Array theme.layout.*.sidebar body 页面主体元素 Array theme.layout.on_page.body mathjax 是否渲染公式 Bool, String false thumbnail 缩略图 String false icons 图标 Array []
layout:post
时特有的字段:
字段 含义 值类型 默认值 author 文章作者 [Object] config.author categories 分类 String, Array - tags 标签 String, Array - toc 是否生成目录 Bool true top 是否置顶 Bool false
author
字段 含义 值类型 默认值 name 作者名 String config.author avatar 头像 String config.avatar url 链接 String config.url
music
字段 是否必须 值类型 server 是 netease, tencent, kugou, xiami, baidu type 是 song, playlist, album, search, artist id 是 song id / playlist id / album id / search keyword
+
+
+
+独立页面 除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。
+归档页面 归档页面是自动生成的,并且初始化的时候已经生成,路径如下:
+blog/_config.yml
+
+关于页面 Create file if not exists: source/about/index.md --- layout: page title: 关于 meta: header: [] footer: [] sidebar: []valine: placeholder: 有什么想对我说的呢? --- 下面写关于自己的内容
+
+分类页面 Create file if not exists: source/categories/index.md --- layout: category index: true title: 所有分类 ---
+
+标签页面 Create file if not exists: source/tags/index.md --- layout: tag index: true title: 所有标签 ---
+
+列表页面 Create file if not exists: source/mylist/index.md --- layout: list group: mylist index: true ---
+
+结果就是筛选出所有文章中 front-matter
部分含有 group: mylist
的文章。
+友链页面 Create file if not exists: source/friends/index.md --- layout: links title: 我的朋友们 links: - group: 分组1 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: avatar: url: backgroundColor: '#3E74C9' textColor: '#fff' tags: [标签1 , 标签2 ] desc: 描述文字 - group: 分组2 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: avatar: url: backgroundColor: '#3E74C9' textColor: '#fff' tags: [标签1 , 标签2 ] desc: 描述文字 --- 这里写友链上方的内容。 <!-- more --> 这里可以写友链页面下方的文字备注,例如自己的友链规范、示例等。
+
+
+
+404页面 Create file if not exists: source/404.md --- layout: page title: 404 Not Found body: [article , comments ]meta: header: [] footer: [] sidebar: []valine: path: /404.html placeholder: 请留言告诉我您要访问哪个页面找不到了 --- {% p center huge , 404 % } {% p center bold , 很抱歉,您访问的页面不存在 % } {% p center small , 可能是输入地址有误或该地址已被删除 % }
+
+页面元素排列 默认是文章+评论:
+front-matter --- body: [article , comments ]---
+
+如果你想把相关文章卡片显示在评论前,可以这样写:
+front-matter --- body: [article , related_posts , comments ]---
+
+如果想全局修改,在主题配置文件中的 layout.on_page.body
中设置。
+文章属性 文章置顶 在 front-matter 中设置以下值:
+front-matter
+
+如果想自定义置顶标签的文字,可以直接设置为字符串,例如:
+front-matter
+
+文章分类 多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。
+多级分类:
+front-matter --- categories: [分类A , 分类B ]---
+或者
+front-matter --- categories: - 分类A - 分类B ---
+
+并列分类
+front-matter categories: - [分类A ] - [分类B ]
+
+多级+并列分类
+front-matter categories: - [分类A , 分类B ] - [分类C , 分类D ]
+
+文章摘要 在文章中插入 <!-- more -->
,前面的部分即为摘要。
+某篇文章源码 --- title: xxx date: 2020-02-21 --- 这是摘要 <!-- more --> 这是正文
+
+注意 : <!-- more -->
前后一定要有空行,不然可能导致显示错位。
+
+设置文章作者 由于支持多作者共同维护一个博客,所以可以设置单独一篇文章的作者:
+front-matter --- author: name: 作者 avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com ---
+
+
+显示迷你音乐播放器 标题右边显示迷你音乐播放器,支持的字段有:server
、type
、id
。
+front-matter --- music: server: netease type: song id: 16846091 ---
+
+
+
+文章顶部和底部的日期、分类、更新日期、标签、分享等属于 meta 标签,默认跟随主题配置文件,可在 front-matter 中关闭。
+front-matter --- top_meta: false bottom_meta: false ---
+
+
+标题右边显示缩略图 front-matter --- thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png ---
+
+缩略图仅在文章列表和文章页面显示,不会在归档页面显示。
+标题右边显示图标 front-matter --- icons: [fas fa-fire red , fas fa-star green ]---
+
+图标仅在归档页面中显示,可以用来标注热门文章。
+可以通过 red / blue / green / yellow / orange / theme / accent 来设置图标的颜色
+
+例如当前文档页面的设置:
+front-matter --- meta: footer: [btns ] btns: repo: https://github.com/volantis-x/hexo-theme-volantis bug: https://github.com/volantis-x/hexo-theme-volantis/issues/ doubt: https://github.com/volantis-x/hexo-theme-volantis/issues/ idea: https://github.com/volantis-x/hexo-theme-volantis/issues/ ---
+
+按钮的颜色、图标、标题在主题配置文件中设置。
+是否要显示封面 如果某个页面需要封面,可以这样写:
+front-matter
+
+
+引入外部文章 利用 link
,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如:
+front-matter --- layout: post date: 2017-07-05 title: [转 ]如何搭建基于Hexo的独立博客 categories: [Dev , Hexo ]tags: - Hexo author: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.com link: https://xaoxuu.com/blog/2017-07-05-hexo-blog/ --- ![](https://img.vim -cn.com/d9/a9af7dc49fc0af8ca3e6dd2450a2f7095a87db.png)
+
+显示侧边栏 通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。
+如果某个页面不需要侧边栏,可以这样写:
+front-matter
+
+某个页面想指定显示某几个侧边栏,就这样写:
+front-matter --- sidebar: [grid , toc , tags ] ---
+
+关闭评论 可以
+front-matter
+
+也可以
+front-matter
+
+只显示留言板 如果你想创建一个只有留言板的页面
+front-matter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v2/site-settings/index.html b/v2/site-settings/index.html
new file mode 100644
index 000000000..ff18ece2a
--- /dev/null
+++ b/v2/site-settings/index.html
@@ -0,0 +1,2145 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 站点配置 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如无特殊说明,本页面的配置信息写在 博客根目录 的 _config.yml
文件中。
+网站标题 blog/_config.yml
+
+网站图标 blog/_config.yml favicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico
blog/_config.yml import: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
+
+
+Import 可以在无需修改主题文件的情况下在 head 和 body 中添加各种标签。meta
和 link
对应 head 中的 <meta>
和 <link>
标签。script
可以在 body 末尾导入 js 文件。
+blog/_config.yml import: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> script:
+
+更多配置 更多请见 Hexo 官方文档:#Hexo配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v2/tag-plugins/index.html b/v2/tag-plugins/index.html
new file mode 100644
index 000000000..e01356059
--- /dev/null
+++ b/v2/tag-plugins/index.html
@@ -0,0 +1,2718 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 标签插件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题原生支持丰 富 多 彩 的标签。
+文本和段落 Span & P 请将您的 Volantis 升级至 2.5 版本以上使用。
+样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。
+
字体
+
+
+
+
颜色
+
+
red, yellow, green, cyan, blue, gray
+
+
大小
+
+
small, h4, h3, h2, h1, large, huge, ultra
+
+
对齐方向
+
+
彩色文字
+
+
example.md: 在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。
+
+
超大文字
+
+
example.md: 文档「开始」页面中的标题部分就是超大文字。 {% p center logo large, Volantis %} {% p center small, A Wonderful Theme for Hexo %}
彩色文字
+
+
在一段话中方便插入各种颜色的标签,包括:红色 、黄色 、绿色 、青色 、蓝色 、灰色 。
+
超大文字
+
+
文档「开始」页面中的标题部分就是超大文字。
+
Volantis
+
A Wonderful Theme for Hexo
+
+Note & NoteBlock NoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。请将您的 Volantis 升级至 2.3 版本以上使用。
+Note
+
+
+
+
NoteBlock
+
+
{% noteblock 样式参数 %} 文本段落 {% endnoteblock %}
样式参数位置可以写图标和颜色,多个样式参数用空格隔开。
+
图标
+
+
彩色的 quote, info, warning, done/success, error/danger
+
+
灰色的,也可以指定颜色 radiation, bug, idea, link, paperclip, todo, msg, guide, download, up, undo
+
+
颜色
+
+
指定颜色 clear, light, gray, red, yellow, green, cyan, blue
Note
+
+
example.md: {% note, 为简单的一句话提供的简便写法。 %} {% note success, 支持同样丰富的参数。 %}
+
+
NoteBlock
+
+
example.md: 可以在区块中放置一些复杂的结构,支持嵌套。 {% noteblock quote %} {% p subtitle, 小标题 %} Windows 10不是為所有人設計,而是為每個人設計 {% p subtitle, 嵌套测试 %} {% noteblock %} 请坐和放宽,我正在帮你搞定一切... {% endnoteblock %} {% p subtitle, Folding 测试 %} {% folding 点击查看更多 %} {% note warning, 不要说我们没有警告过你 %} {% noteblock bug red %} 我们都有不顺利的时候 {% endnoteblock %} {% endfolding %} {% endnoteblock %}
Note
+
+
+
+
+
+
NoteBlock
+
+
可以在区块中放置一些复杂的结构,支持嵌套。
+
小标题
Windows 10不是為所有人設計,而是為每個人設計
嵌套测试
Folding 测试
点击查看更多
+
+
+Checkbox & Radio 请将您的 Volantis 升级至 2.6 版本以上使用。
+{% checkbox 样式参数(可选), 文本(支持简单md) %}
颜色
+
+
red, yellow, green, cyan, blue
+
+
样式
+
+
+
+
选中状态
+
+
Checkbox
+
+
example.md: {% checkbox 纯文本测试 %} {% checkbox checked, 支持简单的 [markdown ](https://guides.github.com/features/mastering-markdown/ ) 语法 %} {% checkbox red, 支持自定义颜色 %} {% checkbox green checked, 绿色 + 默认选中 %} {% checkbox yellow checked, 黄色 + 默认选中 %} {% checkbox cyan checked, 青色 + 默认选中 %} {% checkbox blue checked, 蓝色 + 默认选中 %} {% checkbox plus green checked, 增加 %} {% checkbox minus yellow checked, 减少 %} {% checkbox times red checked, 叉 %}
+
+
Radio
+
+
example.md: {% radio 纯文本测试 %} {% radio checked, 支持简单的 [markdown ](https://guides.github.com/features/mastering-markdown/ ) 语法 %} {% radio red, 支持自定义颜色 %} {% radio green, 绿色 %} {% radio yellow, 黄色 %} {% radio cyan, 青色 %} {% radio blue, 蓝色 %}
Checkbox
+
+
+
+
+
+
+
+
+
+
+
+
+
Radio
+
+
+
+
+
+
+
+
+
+
+按钮和菜单 基础按钮 请将您的 Volantis 升级至 2.4 版本以上使用。
+{% btn 样式参数(可选), 标题, 链接, 图标(可选) %}
+
+
样式参数
+
+
+
+
图标
+
+
第1个或者第2个参数包含 fa-
的那个被识别为图标。
example.md: 不设置任何参数的 {% btn 按钮, / %} 适合融入段落中。 regular 按钮适合独立于段落之外: {% btn regular, 示例博客, https://xaoxuu.com, fas fa-play-circle %} large 按钮更具有强调作用,建议搭配 center 使用: {% btn center large, 开始使用, https://volantis.js.org/v3/getting-started/, fas fa-download %}
不设置任何参数的 按钮 适合融入段落中。
+
regular 按钮适合独立于段落之外:
+
示例博客
+
large 按钮更具有强调作用,建议搭配 center 使用:
+
开始使用
+
+
+富文本按钮 请将您的 Volantis 升级至 2.3 版本以上使用。
+{% btns 样式参数 %} {% cell 标题, 链接, 图片或者图标 %} {% cell 标题, 链接, 图片或者图标 %} {% endbtns %}
样式参数位置可以写图片样式、布局方式,多个样式参数用空格隔开。
+
圆角样式
+
+
默认为方形
+
+
+
+
布局方式
+
+
默认为自动宽度,适合视野内只有一两个的情况。
+
+
+
+参数
+含义
+
+
+
+wide
+宽一点的按钮
+
+
+fill
+填充布局,自动铺满至少一行,多了会换行。
+
+
+center
+居中,按钮之间是固定间距。
+
+
+around
+居中分散
+
+
+grid2
+等宽最多2列,屏幕变窄会适当减少列数。
+
+
+grid3
+等宽最多3列,屏幕变窄会适当减少列数。
+
+
+grid4
+等宽最多4列,屏幕变窄会适当减少列数。
+
+
+grid5
+等宽最多5列,屏幕变窄会适当减少列数。
+
+
+
增加文字样式
+
+
可以在容器内增加 <b>标题</b>
和 <p>描述文字</p>
如果需要显示类似「团队成员」之类的一组含有头像的链接:
+
example.md: {% btns circle grid5 %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% endbtns %}
+
+
或者含有图标的按钮:
+
example.md: {% btns rounded grid5 %} {% cell 下载源码, /, fas fa-download %} {% cell 查看文档, /, fas fa-book-open %} {% endbtns %}
+
+
圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中
+
example.md: {% btns circle center grid5 %} <a href ='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1' > <i class ='fab fa-apple' > </i > <b > 心率管家</b > {% p red, 专业版 %} <img src ='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png' > </a > <a href ='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1' > <i class ='fab fa-apple' > </i > <b > 心率管家</b > {% p green, 免费版 %} <img src ='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png' > </a > {% endbtns %}
如果需要显示类似「团队成员」之类的一组含有头像的链接:
+
+
+
或者含有图标的按钮:
+
+
+
+
圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中
+
+
+
+请将您的 Volantis 升级至 2.4 版本以上使用。
+
+
+
+容器 Tab 此插件移植自 NexT #tabs 。请将您的 Volantis 升级至 2.1 版本以上使用。
+{% tabs tab-id %} ![](https://i.loli.net/2020/03/18/f5PQlWisvm9zbgK.jpg) 这里面写内容,支持的语法格式有限,请尽量<u > 不要</u > 写太过复杂的东西。 {% endtabs %}
tab-id
+
+
必填,如果一个页面有多个 tabs 时,tab-id 不能重复。
+
tab-name
+
+
标签文本。
+
+
+Folding 请将您的 Volantis 升级至 2.3 版本以上使用。
+{% folding 参数(可选), 标题 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg) {% endfolding %}
参数位置可以填写颜色和状态,多个参数用空格隔开。
+
颜色
+
+
blue, cyan, green, yellow, red
+
+
状态
+
+
状态填写 open
代表默认打开。
{% folding 查看图片测试 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg) {% endfolding %} {% folding cyan open, 查看默认打开的折叠框 %} 这是一个默认打开的折叠框。 {% endfolding %} {% folding green, 查看代码测试 %} {% endfolding %} {% folding yellow, 查看列表测试 %} - haha - hehe {% endfolding %} {% folding red, 查看嵌套测试 %} {% folding blue, 查看嵌套测试2 %} {% folding 查看嵌套测试3 %} hahaha <span><img src='https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style='height:24px'></span> {% endfolding %} {% endfolding %} {% endfolding %}
查看图片测试
+
+
+
+
+
+
查看默认打开的折叠框
+
+
+
+
查看代码测试
+
+
{% folding green, 查看代码测试 %} 查看代码测试 {% endfolding %}
+
+
+
+
查看列表测试
+
+
+
+
查看嵌套测试
+
+
查看嵌套测试2 查看嵌套测试3 hahaha
+
+
+
+
+多媒体 包括图片、音频、视频。
+Image Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。请将您的 Volantis 升级至 2.6 版本以上使用。
+{% image 链接, width=宽度(可选), alt=描述(可选) %}
图片宽度
+
+
阿拉伯数字 + px
+
example:
+
+
图片描述
+
+
纯文本,不能包含引号。
example.md: 添加描述: {% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, alt=每天下课回宿舍的路,承载了太多记忆。 %} 指定宽度: {% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px %} 指定宽度并添加描述: {% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px, alt=每天下课回宿舍的路,承载了太多记忆。 %}
添加描述:
+
+
+
指定宽度:
+
+
+
指定宽度并添加描述:
+
+
+
+Fancybox Fancybox 标签是一种针对一组图片应用场景的标签。请将您的 Volantis 升级至 2.2 版本以上使用。
+{% fancybox 参数, 列数 %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg ) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg) {% endfancybox %}
对齐方向
+
+
+
+
缩放
+
+
+
+
列数
+
+
逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch
来时图片放大填充。
一行一个图片
+
example.md: {% fancybox %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ) {% endfancybox %}
+
+
一行多个图片(不换行)
+
example.md: {% fancybox %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg ) ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg ) ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg ) {% endfancybox %}
+
+
多行多个图片(每行2~8个图片)
+
example.md: {% fancybox stretch, 4 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg) {% endfancybox %}
一行一个图片
+
+
+
+
+
一行多个图片(不换行)
+
+
+
多行多个图片(每行2~8个图片)
+
+
+Audio 请将您的 Volantis 升级至 2.4 版本以上使用。
+example.md: {% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}
Your browser does not support the audio tag.
+
+Video 请将您的 Volantis 升级至 2.3 版本以上使用。
+单个视频
+
+
example.md:
+
+
多个视频
+
+
example.md: {% videos 对齐方向, 列数 %} {% video 视频链接 %} {% video 视频链接 %} {% video 视频链接 %} {% endvideos %}
对齐方向
+
+
+
+
列数
+
+
逗号后面直接写列数,支持 1 ~ 4 列。
100%宽度
+
example.md: {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}
+
+
50%宽度
+
example.md: {% videos, 2 %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% endvideos %}
+
+
25%宽度
+
example.md: {% videos, 4 %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% endvideos %}
100%宽度
+
Your browser does not support the video tag.
+
+
50%宽度
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
+
25%宽度
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
+APlayer 主题对 APlayer 插件的样式进行了兼容。安装插件:
+npm i -S hexo-tag-aplayer
+
+
+
+公式 MathJax公式 默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。
+example.md: --- title: 渲染公式(MathJax) date: 2020-02-23 mathjax: true # false: 不渲染, true: 渲染, internal: 只在文章内部渲染,文章列表中不渲染 --- $$t+1=2$$ $$ \mbox{积累因子}=\begin{cases} 1+ni & \mbox{单利}\\\\ (1+i)^n & \mbox{复利} \end{cases} $$ $$ \begin{equation} \sum_{i=0}^n F_ i \cdot \phi (H, p_i) - \sum_ {i=1}^n a_i \cdot ( \tilde{x_ i}, \tilde{y_i}) + b_ i \cdot ( \tilde{x_i}^2 , \tilde{y_ i}^2 ) \end{equation} $$ $$ \begin{equation} \beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \end{equation} $$
+
+
+ 示例效果
+
+
$$t+1=2$$
$$ \mbox{积累因子}=\begin{cases} 1+ni & \mbox{单利}\\ (1+i)^n & \mbox{复利} \end{cases} $$
$$ \begin{equation} \sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 ) \end{equation} $$ $$ \begin{equation} \beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \end{equation} $$
+
+
+
+
+
+Hexo 标签 引用块 引用书上的句子
+Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
+
+
+代码块 {% codeblock [title] [lang:language] [url] [link text] [additional options] %} code snippet {% endcodeblock %}
+
+指定语言 [rectangle setX: 10 y: 10 width: 20 height: 20 ];
+
+example.md: {% codeblock lang:objc %} [rectangle setX: 10 y: 10 width: 20 height: 20]; {% endcodeblock %}
+
+附加说明 Array.map array.map(callback[, thisArg])
+
+example.md: {% codeblock Array.map %} array.map(callback[, thisArg]) {% endcodeblock %}
+
+行标、高亮 1 2 3 4 5 6 7 8 n=eval(input()) if n==0 : print("Hello World" ) elif n>0 : print("He\nll\no \nWo\nrl\nd" ) else : for c in "Hello World" : print(c)
+
+example.md: {% codeblock lang:python line_number:true mark:3,5,8 %} n=eval(input()) if n==0: print("Hello World") elif n>0: print("He\nll\no \nWo\nrl\nd") else: for c in "Hello World": print(c) {% endcodeblock %}
+
+Pull Quote 在文章中插入 Pull quote
+example.md: {% pullquote [class] %} content {% endpullquote %}
+
+jsFiddle 在文章中嵌入 jsFiddle
+example.md: {% jsfiddle shorttag [tabs] [skin] [width] [height] %}
+
+Gist 在文章中嵌入 Gist,注意 :在国内无法加载。
+example.md: {% gist gist_id [filename] %}
+
+iframe 在文章中插入 iframe
+example.md: {% iframe url [width] [height] %}
+
+Image 在文章中插入指定大小的图片。
+example.md: {% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %}
+
+Link 在文章中插入链接,并自动给外部链接添加 target="_blank"
属性。
+example.md: {% link text url [external] [title] %}
+
+Include Code 插入 source/downloads/code
文件夹内的代码文件。source/downloads/code
不是固定的,取决于你在配置文件中 code_dir
的配置。
+example.md: {% include_code [title] [lang:language] [from:line] [to:line] path/to/file %}
+
+ 示例
+
+
嵌入 test.js
文件全文
{% include_code lang:javascript test.js %}
只嵌入第 3 行
{% include_code lang:javascript from:3 to:3 test.js %}
嵌入第 5 行至第 8 行
{% include_code lang:javascript from:5 to:8 test.js %}
嵌入第 5 行至文件结束
{% include_code lang:javascript from:5 test.js %}
嵌入第 1 行至第 8 行
{% include_code lang:javascript to:8 test.js %}
+
+
+
+引用文章 引用其他文章的链接。
+{% post_path filename %} {% post_ link filename [title] [escape] %}
+
+ 示例
+
+
引用这篇文章:主题更名为「Volantis」
example.md: 引用这篇文章:{% post_link news/2020-02-22 %}
+
+
+
+文章摘要和截断 在文章中使用 <!-- more -->
,那么 <!-- more -->
之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v2/theme-settings/index.html b/v2/theme-settings/index.html
new file mode 100644
index 000000000..ef2e0ab71
--- /dev/null
+++ b/v2/theme-settings/index.html
@@ -0,0 +1,2318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题配置 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 如无特殊说明,本页面的配置信息写在 主题 的 config.yml
文件中。
+实用小技巧
所有需要写在主题配置文件中的配置都可以写在站点配置文件的 theme_config:
中 详见 Hexo 官方文档 #覆盖主题配置 也可以直接查看本站源码中站点配置文件的写法:_config.yml
+
+主题样式 您可以在主题配置文件中设定一些简单的样式,在开始前,确保没有使用 CDN 服务,否则修改不会生效。
+最大布局宽度 blog/themes/volantis/_config.yml style: ... max_width: 1080px
+
+网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。
+导航栏样式 您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有:
+
+shadow :卡片阴影。
+floatable :当鼠标移动到容器内时,呈现出浮起来的效果。
+blur :背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。
+
+blog/themes/volantis/_config.yml style: ... navbar: height: 64px effect: [shadow , blur ]
+
+滚动条样式 blog/themes/volantis/_config.yml style: ... scrollbar: size: 4px border: 2px color: '#2196f3' hover: '#ff5722'
+
+侧边栏样式 视觉特效参数同上,值得注意的是:卡片的 floatable
效果和 blur
效果相冲突。
+blog/themes/volantis/_config.yml style: ... sidebar: effect: [shadow ]
+
+正文区域样式 视觉特效参数同上,值得注意的是:卡片的 floatable
效果和 blur
效果相冲突。您可以在 language: true
这里设置代码块显示语言名称。text_align
可以设置 h1/h2/h3/h4/p 的文字对齐方向。
+blog/themes/volantis/_config.yml style: ... body: effect: [shadow ] highlight: language: true copy_btn: true text_align: h1: left h2: left h3: left h4: left p: justify note: icon: '\f054' color: ''
+
+布局间距 您可以设置几种标题的布局间距 h2/h3/h4、段落间距 line、区块内部的段落间距 inline。
+blog/themes/volantis/_config.yml style: ... gap: h2: 48px h3: 32px h4: 16px paragraph: 1rem row: .5rem
+
+自定义字体 您可以自定义正文和代码字体。
+blog/themes/volantis/_config.yml style: ... fontfamily: logofont: fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'Varela Round' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf weight: normal style: normal bodyfont: fontfamily: 'UbuntuMono, "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'UbuntuMono' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf weight: normal style: normal codefont: fontfamily: 'Menlo, Monaco' name: 'Monaco' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf weight: normal style: normal
+
+颜色样式 blog/themes/volantis/_config.yml style: ... color: site: '#21232F' card: '#444' text: '#fff' theme: '#ff9800' link: '#1BCDFC' hover: '#ff5722' inner: '#333' block: '#555' inlinecode: yellow codeblock: '#555' p: '#ccc'
+
+设置封面 目前主题提供两种封面方案,全屏封面适用于项目文档,半屏封面适用于个人博客。您可以修改参数决定在任何页面是否显示。
+默认显示设置 blog/themes/volantis/_config.yml cover: ... display: home: true archive: false others: false
+由于主页、归档是hexo自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter
中通过设置 cover: true/false
来决定显示封面或者不显示封面。
+设置导航栏 导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。
+blog/themes/volantis/_config.yml navbar: logo: img: icon: title: menu: - name: 博客 icon: fas fa-rss url: / - name: 分类 icon: fas fa-folder-open url: categories/ - name: 标签 icon: fas fa-tags url: tags/ - name: 归档 icon: fas fa-archive url: archives/ - name: 友链 icon: fas fa-link url: friends/ - name: 关于 icon: fas fa-info-circle url: about/ search: 搜索
+使用数据文件 建议新建一个文件,专门存放导航栏菜单 配置,文件的路径为:
+blog/source/_data/menu.yml
+文件的内容为:
+blog/source/_data/menu.yml - name: 博客 icon: fas fa-rss url: / ...
+
+菜单嵌套 导航栏菜单支持嵌套,嵌套的属性名为 rows
,写法示例:
+blog/source/_data/menu.yml ... - name: 更多 icon: fas fa-ellipsis-v rows: - name: 主题源码 url: https://github.com/volantis-x/hexo-theme-volantis/ - name: 更新日志 url: https://github.com/volantis-x/hexo-theme-volantis/releases/ - name: hr - name: 有疑问? rows: - name: 看 FAQ url: faqs/ - name: 看 本站源码 url: https://github.com/volantis-x/volantis-docs/ - name: 提 Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: hr - name: 公告和测试博文 url: archives/ - name: 示例博客 url: examples/ - name: 特别感谢 url: contributors/
+
+分割线 在子菜单中,新增一个只有 name: hr
的“菜单”就会被渲染成一个分割线。
+
+
+小标题 在子菜单中,新增一个只有 name: 小标题内容
(也可以有 icon: 小标题的图标
)的“菜单”就会被渲染成一个小标题。
+... - name: 近期 icon: fas fa-clock url: / rows: - name: 热门文章 icon: fas fa-fire - name: ProHUD 开源库的设计思路 url: blog/2019-08-27-prohud/ - name: ValueX:实用的安全对象类型转换库 url: blog/2019-08-29-valuex/ - name: 心率管家 App 的设计与开发 url: blog/2019-07-23-heartmate/
+
+
+
+
+播放器 在子菜单中,新增一个 icon: fas fa-compact-disc
的“菜单”就会被渲染成一个 APlayer 播放器。
+- name: 背景音乐 icon: fas fa-compact-disc
+
+
+模块化布局 您可以自由决定每个页面是否显示侧边栏,侧边栏显示什么小部件,正文区域显示什么卡片,文章卡片显示什么 meta 信息。
+layout: on_list: meta: [title , author , date , category , top ] sidebar: [blogger , category , tagcloud , qrcode ] on_page: body: [article , comments ] meta: header: [title , author , category , date , top ] footer: [updated , tags , btns , share ] sidebar: [qrcode , toc ] on_post: article_footer: [copyright , donate ]
+其中 meta
部分的取值自 meta
库, 其余部分取值自 widget
库, ( body
除了可以从 widget
库中取值外,还可以选择 article
和 comments
)。
+请别着急,具体的库配置将在下文详细讲解。
+meta 即文章的元数据,描述文章的作者、发布时间、更新时间等等信息,Volantis 不替您决定,显示什么图标、如何描述都可以自定义。
+ 查看所有相关配置
+
+
blog/themes/volantis/_config.yml meta: title: author: avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png name: Mr. X url: https://xaoxuu.com date: icon: fas fa-edit title: '发布于:' format: 'll' updated: icon: fas fa-save title: '更新于:' format: 'll' category: icon: fas fa-folder-open top: icon: fas fa-angle-double-up counter: icon: fas fa-eye wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half tags: icon: fas fa-hashtag share: - id: qq img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png - id: qzone img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png - id: weibo img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png btns: edit: icon: fas fa-edit title: 在GitHub上编辑此页 color: '#888' repo: icon: fas fa-file-code title: 源码 color: '#508EF2' bug: icon: fas fa-bug title: BUG color: '#FE5F58' doubt: icon: fas fa-question-circle title: 疑问 color: '#FFBD2B' idea: icon: fas fa-lightbulb title: 建议 color: '#3DC550' faq: icon: fas fa-comments title: FAQ color: '#29B1C9' feedback: icon: fas fa-comment-dots title: 反馈 color: '#1BCDFC'
+
+
+
+
+widget 即小部件,大部分小部件都可以放置在侧边栏,一部分已经为正文区域显示做了优化,还有一部分只可以放置在文章页脚部分。与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。
+ 查看所有相关配置
+
+
blog/themes/volantis/_config.yml widget: blogger: class: blogger display: [desktop ] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true social: true toc: class: toc display: [desktop , mobile ] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 category: class: category display: [desktop ] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ tagcloud: class: tagcloud display: [desktop ] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' related_posts: class: related_posts display: [desktop , mobile ] header: icon: fas fa-bookmark title: 相关文章 max_count: 5 copyright: class: copyright display: [desktop , mobile ] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink donate: class: qrcode display: [desktop , mobile ] height: 64px fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
+
+
+
+每一个小部件都有 class
和 display
,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。
+小部件名: class: 小部件类别 display: [小部件在桌面端显示 , 小部件在移动设备显示 ]
+
+博主信息部件 blog/themes/volantis/_config.yml blogger: class: blogger display: [desktop ] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true social: true
+其中,今日诗词 jinrishici
如果设置为一个字符串,这个字符串会变成占位文字,加载失败时显示。如果不需要,就请设置为 jinrishici: false
。social
的具体内容请在网站页脚部分设置。
+文章目录部件 blog/themes/volantis/_config.yml toc: class: toc display: [desktop , mobile ] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5
+这个部件只能放置在侧边栏,并且在文章中有效。在移动设备中预览时,手指向上滑动时,导航栏右边会出现 TOC 按钮,点击即可展开 TOC 部件。如果您需要显示章节序号,请设置 list_number
。 min_depth
和 max_depth
代表 TOC 支持的标题层级,最大范围是2~6。
+文章分类部件 blog/themes/volantis/_config.yml category: class: category display: [desktop ] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/
+这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。
+标签云部件 blog/themes/volantis/_config.yml tagcloud: class: tagcloud display: [desktop ] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555'
+这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。
+相关文章部件 blog/themes/volantis/_config.yml related_posts: class: related_posts display: [desktop , mobile ] header: icon: fas fa-bookmark title: 相关文章 max_count: 5
+这个小部件建议放置在文章页脚,要使用这个部件,您需要安装插件:
+npm i -S hexo-related-popular-posts
+值得注意的是,开启了这个功能之后,每次修改文章内容包括 front-matter
之后,都需要重新 hexo s
。
+
+文章版权部件 blog/themes/volantis/_config.yml copyright: class: copyright display: [desktop , mobile ] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink
+这个部件只可以 放置在文章页脚。
+二维码部件 blog/themes/volantis/_config.yml donate: class: qrcode display: [desktop , mobile ] height: 64px fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
+您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。
+通用文本部件 blog/themes/volantis/_config.yml repos: class: text display: [desktop ] header: icon: fab fa-github title: 点个赞吧 url: https://github.com/xaoxuu/ content: - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/xaoxuu/Inspire)'
+您可以创建用于展示任何文本内容的文本部件。
+通用列表部件 blog/themes/volantis/_config.yml wiki-hexo-theme: class: list display: [desktop , mobile ] header: icon: fas fa-chevron-left title: Hexo Themes url: /wiki/ rows: - name: Volantis for Hexo url: /wiki/volantis/ - name: Resume for Hexo url: /wiki/resume/
+您可以创建用于展示任何链接列表的列表部件。列表的 rows
中的每一项支持的属性有: name
、url
、icon
、img
、avatar
,其中 img
是方形图片的链接,avatar
是圆形图片的链接。
+参考资料 这个部件的布局继承自 list 部件,用于展示文章的参考资料。请将您的 Volantis 升级至 2.5 版本以上使用。
+blog/themes/volantis/_config.yml references: class: references display: [desktop , mobile ] header: icon: fas fa-quote-left title: 参考资料
+
+在文章的 front-matter 中设置:
+front-matter references: - name: Apple Developer Documentation url: https://developer.apple.com/documentation/
+
+组索引 这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。
+blog/themes/volantis/_config.yml group-1: class: group display: [desktop , mobile ] header: icon: fab fa-apple title: Developer url: /wiki/ios/
+
+在文章的 front-matter 中设置:
+front-matter group: group-1 order: 16 sidebar: [group-1 , toc ]
+
+「group-1」卡片将会以列表的形式显示所有设置了 group: group-1
的文章,顺序按照 order
从小到大排列。
+
+
+通用网格部件 blog/themes/volantis/_config.yml feedback: class: grid display: [desktop , mobile ] header: icon: fas fa-headset title: 联系开发者 url: https://github.com/volantis-x/hexo-theme-volantis fixed: true rows: - name: 反馈BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 疑问求助 icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 提个建议 icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/
+您可以创建用于展示任何链接列表的网格部件。网格默认根据文字长度自动确定每一个格子的宽度,如果文字长短不一,建议通过设置 fixed: true
来固定宽度,此时文字过长的格子中的文字会换行显示。
+通用页面部件 blog/themes/volantis/_config.yml test: class: page display: [desktop , mobile ] pid: haha content: excerpt
+您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid
属性和文章的 front-matter
中设置一样的 pid
即可。 content
代表这个部件显示的内容,可选 excerpt
,more
,content
分别对应文章的摘要、摘要后面的内容、全文。
+部件库文件 部件库中的所有部件都可以写在部件库文件中,您需要创建一个文件在以下路径:
+blog/source/_data/widget.yml
+文件内容示例:widget.yml
+设置网站页脚 您通过 layout
可以自由布局网站页脚内容 aplayer
, social
, license
, info
, copyright
。
+blog/themes/volantis/_config.yml footer: layout: [aplayer , social , license , info , copyright ] social: - icon: fas fa-rss url: atom.xml - icon: fas fa-envelope url: mailto:me@xaoxuu.com - icon: fab fa-github url: https://github.com/xaoxuu - icon: fas fa-headphones-alt url: https://music.163.com/#/user/home?id=63035382 copyright: '[Copyright © 2017-2020 Mr. X](https://xaoxuu.com)' br: '<br>'
+其中,aplayer
需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如:
+blog/themes/volantis/_config.yml footer: layout: [... , br , hello , ... ] ... br: '<br>' hello: '[Hello World](/)'
+
+SEO blog/themes/volantis/_config.yml seo: use_tags_as_keywords: true use_excerpt_as_description: true robots: home_first_page: index,follow home_other_pages: noindex,follow archive: noindex,follow category: noindex,follow tag: noindex,follow
+这部分一般不需要修改。
+插件库 Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。
+幻灯片背景 blog/themes/volantis/_config.yml plugins: ... backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover duration: 20000 fade: 1500 images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ...
+幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。
+highlight.js blog/themes/volantis/_config.yml plugins: ... highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css
+如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable
设置为 false
否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。
+如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。
+经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。
+
+APlayer 音乐播放器 blog/themes/volantis/_config.yml plugins: ... aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js server: netease type: playlist id: 3175833810 fixed: false theme: '#1BCDFC' autoplay: false order: list loop: all volume: 0.7 list_max_height: 340px list_folded: true
+
+
+
+评论系统 blog/themes/volantis/_config.yml comments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine valine: appId: appKey: js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js path: meta: nick,mail,link requiredFields: ['nick' ,'mail' ] enableQQ: true placeholder: 快来评论吧~ avatar: robohash pageSize: 10 lang: zh-cn highlight: true visitor: true mathJax: false disqus: shortname: gitalk: clientID: clientSecret: repo: owner: admin: livere: uid:
+
+官网: https://disqus.com/
+blog/themes/volantis/_config.yml comments: ... disqus: shortname:
+
+Gitalk 官网: https://github.com/gitalk/gitalk
+blog/themes/volantis/_config.yml comments: ... gitalk: clientID: clientSecret: repo: owner: admin:
+
+clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤:
+
+点击 GitHub -> Settings https://github.com/settings/profile
+点击 Developer settings https://github.com/settings/developers
+点击 New OAuth App https://github.com/settings/applications/new
+填写信息:
+
+Application name 随便填,我的是:xaoxuu.com
Homepage URL 和 Authorization callback URL 都写你的网址,我的是:https://xaoxuu.com
+可以通过设置 gitalk.id 实现多个页面共用一个评论框。
+front-matter --- gitalk: id: /wiki/volantis/ ---
+
+
+Valine 官网: https://valine.js.org
+blog/themes/volantis/_config.yml comments: ... valine: appId: appKey: js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js path: meta: nick,mail,link requiredFields: ['nick' ,'mail' ] enableQQ: true placeholder: 快来评论吧~ avatar: robohash pageSize: 10 lang: zh-cn highlight: true visitor: true mathJax: false
+
+其中,placeholder
支持在 front-matter 中设置。
+front-matter --- valine: placeholder: 你觉得xxx怎么样呢? ---
+
+也可以通过设置 valine.path
实现多个页面共用一个评论框。
+front-matter --- valine: path: /wiki/volantis/ ---
+
+MiniValine 官网: https://github.com/MiniValine/MiniValine/
+blog/themes/volantis/_config.yml comments: ... minivaline: appId: appKey: placeholder: Write a Comment adminEmailMd5: math: true md: true lang:
+
+Livere 官网: https://www.livere.com/
+blog/themes/volantis/_config.yml comments: ... livere: uid:
+
+在这里查看你的 uid:https://livere.com/insight/myCode
,在【代码管理 -> 一般网站】中找到如下这段代码,其中 data-uid
中的内容就是你的 livere_uid
。
+<div id ="lv-container" data-id ="city" data-uid ="你的livere的uid" > ...
+
+
+开启搜索功能 blog/themes/volantis/_config.yml search: enable: true service: hexo js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2.6.4/js/search.js google: apiKey: engineId: algolia: applicationID: apiKey: indexName: azure: serviceName: indexName: queryKey: baidu: apiId:
+默认配置为 Hexo 搜索,但是需要安装插件才能使用:
+npm i -S hexo-generator-search hexo-generator-json-content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/advanced-settings/index.html b/v3/advanced-settings/index.html
new file mode 100644
index 000000000..d7c6d3412
--- /dev/null
+++ b/v3/advanced-settings/index.html
@@ -0,0 +1,2366 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 进阶设定 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用数据文件 有时您可能需要在主题中使用某些资料,而这些资料并不在文章内,并且是需要重复使用的,那么您可以考虑使用 Hexo 3.0 新增的「数据文件」功能。此功能会载入 source/_data
内的 YAML 或 JSON 文件,如此一来您便能在网站中复用这些文件了。
+举例来说,在 source/_data
文件夹中新建 menu.yml
文件:
+Home: / Gallery: /gallery/ Archives: /archives/
+
+您就能在模板中使用这些资料:
+<% for (var link in site.data.menu) { %> <a href="<%= site.data.menu[link] %>"> <%= link %> </a> <% } %>
+
+渲染结果如下 :
+<a href="/"> Home </a> <a href="/gallery/"> Gallery </a> <a href="/archives/"> Archives </a>
+
+Volantis 的数据文件 source/_data/layout.yml source/_data/menu.yml source/_data/widget.yml
+
+
+设置子模块 将主题添加为子模块
+
+
git submodule add git@github.com:theme-volantis/hexo-theme-volantis themes/volantis
or
git submodule add https://github.com/volantis-x/hexo-theme-volantis.git themes/volantis
+
+
+
+为网站提速 加载速度
+尝试安装 hexo-all-minifier 插件来压缩文件。
+
+减少不必要的 js 插件,例如字数统计、动态背景。
+
+查找并解决拖慢速度的资源,以 Chrome 浏览器为例:
+
+页面中点击右键,选择「检查」。
+在右边的窗口中「Network」选项卡,并勾选「Disable cache」。
+刷新网页,查看加载速度慢的资源。 3.1. 加载缓慢的图片,建议使用 CDN。 3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。 3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。
+
+
+
+运行速度
+访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。
+
+
+
+
+优化 SEO blog/_config.volantis.yml seo: use_tags_as_keywords: true use_excerpt_as_description: true robots: home_first_page: index,follow home_other_pages: noindex,follow archive: noindex,follow category: noindex,follow tag: noindex,follow
+
+在 front-matter 中,可以设置 keywords
、description
、robots
和 seo_title
。其中 seo_title
仅仅用作网页标题,优先级高于 title
。
+
+文章内部不要使用 H1 标题。
+
+通过死链检测工具检查并删除无法访问的链接。
+
+安装 SEO 优化插件:
+
+
+
+页面不要堆砌关键词,不要频繁更改路径。
+
+
+使用 CDN 对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。
+开启方法 blog/_config.yml
+
+如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。
+
+自定义 CDN 如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。
+安装「相关文章」插件
+安装插件
+npm i -S hexo-related-popular-posts
+
+在需要显示的位置添加 related_posts
例如放在侧边栏:
+blog/_config.volantis.yml layout: on_page: sidebar: [related_posts ]
+
+插件的自定义配置方法:
+
+
+
+
+分析与统计 默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。
+字数和阅读时长
+安装以下插件:npm i --save hexo-wordcount
+修改配置文件,将 wordcount
插件打开blog/_config.volantis.yml plugins: ... wordcount: true
+然后修改配置文件,将 wordcount
写入需要显示的 meta 位置:blog/_config.volantis.yml layout: on_list: meta: [... , wordcount , ... ] on_page: meta: header: [... , wordcount , ... ] footer: [... , wordcount , ... ]
+
+
+
+百度统计 blog/_config.yml baidu_analytics_key: 百度统计的key
+
+
+Google Analytics blog/_config.yml google_analytics_key: Google Analytics Key
+
+CNZZ 统计 请参考 ZYMIN 的这篇教程:
+
+
+更多 DIY 玩法 详见 @TRHX 的这篇博客:
+
+
+内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/getting-started/index.html b/v3/getting-started/index.html
new file mode 100644
index 000000000..47e7f5e9c
--- /dev/null
+++ b/v3/getting-started/index.html
@@ -0,0 +1,2337 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 安装与版本更新 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 安装与版本更新
+
+
+
+
+
+
+
+
+ Volantis3
+A Wonderful Theme for Hexo 5
+
+
+
+Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。
+这些是使用了本主题的博客: 示例博客
+能力要求 !!! 自建博客需要一定的相关知识,在开始前,请务必 确保:
+
+
+
+
+
+
+
+为了更好地使用,还建议掌握以下知识:
+
+
会阅读源码,知道本站源码在哪里,会参照源码仿写、对比差异
+
+
+
规范地使用 GitHub Issues(解决文档中没有的问题)
+
+
+
GitHub Fork、Pull Request 操作(使主题保持最新)
+
+
+环境要求 如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。
+Hexo: 4.2 ~ 5. x hexo-cli: 3.1 ~ 4. x node.js: 12.16 ~ latest npm: 6.13 ~ latest
+
+下载与安装 在 blog/_config.yml
文件中找到并修改:
+
+
在终端中输入:
npm i hexo-theme-volantis
+
+
如果您是 Mac 用户,可以使用脚本完成全部流程
+
+
在博客路径打开终端,下载安装并应用主题:
curl -s https://volantis.js.org/start | bash
这行命令将会自动检测并安装所需环境,初始化博客,然后下载安装并应用主题。 脚本详细使用方法:#hexo.sh
+
+ 在 blog/_config.yml
文件中找到并修改:
+
+
如果您已经升级到 Hexo 5.0.2
及以上,可以直接使用 npm
命令安装:
npm i hexo-theme-volantis
对于旧版本,需要下载主题源码到 themes/
文件夹:
git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis
如果您无法访问 GitHub 可以使用国内镜像源:
git clone https://e.coding.net/volantis/volantis/volantis.git themes/volantis
+
+
安装 Hexo 搜索的依赖包:
npm i hexo-generator-search hexo-generator-json-content
安装 Stylus 渲染器:
npm i hexo-renderer-stylus
+
+
+版本更新 请对照 更新日志 进行更新,下面是更新之后需要注意的事项:
+
+
如果有 hexo-lazyload-image
插件,需要重新安装最新版本并增加设置 lazyload.isSPA: true
。 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true
则需要删除。 2.x 版本的 fancybox
标签在 3.x 版本中被重命名为 gallery
。 2.x 版本的置顶 top: true
改为了 pin: true
并且同样适用于 layout: page
的页面。 如果使用了 hexo-offline
插件,建议卸载,3.0 版本使用了 pjax 服务。 欢迎补充
+
+
+许可协议 本主题采用 MIT开源许可协议 ,永久无限制免费使用。
+MIT开源许可协议
被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。 被授权人可根据程式的需要修改授权条款为适当的内容。 在软件和软件的所有副本中都必须包含版权声明和许可声明。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/page-settings/body/index.html b/v3/page-settings/body/index.html
new file mode 100644
index 000000000..6a8a97865
--- /dev/null
+++ b/v3/page-settings/body/index.html
@@ -0,0 +1,2319 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 页面自定义布局 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 页面自定义布局
+
+
+
+
+
+
+
+ 正文布局 默认是文章+评论:
+front-matter --- body: [article , comments ]---
+
+如果你想把相关文章卡片显示在评论前,可以这样写:
+front-matter --- body: [article , related_posts , comments ]---
+
+如果想全局修改,在主题配置文件中的 layout.on_page.body
中设置。
+显示迷你音乐播放器 标题右边显示迷你音乐播放器,支持的字段有:server
、type
、id
。
+front-matter --- music: server: netease type: song id: 16846091 ---
+
+
+
+文章顶部和底部的日期、分类、更新日期、标签、分享等属于 meta 标签。 顶部的为 header
,底部的为 footer
,取值见主题配置文件中的 meta 库。
+front-matter --- meta: header: [title , author , date , category , counter , top ] footer: [updated , tags , share ] ---
+像404、关于页面就可以完全隐藏:
+front-matter --- meta: header: [] footer: [] ---
+
+居中标题模式 如果标题居中且下方不想显示任何 meta 信息,可以这样设置:
+front-matter --- meta: header: [centertitle ] ---
+
+标题右边显示缩略图 front-matter --- thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png ---
+
+缩略图仅在文章列表和文章页面显示,不会在归档页面显示。
+标题右边显示图标 front-matter --- icons: [fas fa-fire red , fas fa-star green ]---
+
+图标仅在归档页面中显示,可以用来标注热门文章。
+可以通过 red / blue / green / yellow / orange / theme / accent 来设置图标的颜色
+
+例如当前文档页面的设置:
+front-matter --- meta: footer: [btns ] btns: repo: https://github.com/volantis-x/hexo-theme-volantis bug: https://github.com/volantis-x/hexo-theme-volantis/issues/ doubt: https://github.com/volantis-x/hexo-theme-volantis/issues/ idea: https://github.com/volantis-x/hexo-theme-volantis/issues/ ---
+
+按钮的颜色、图标、标题在主题配置文件中设置。
+是否要显示封面 如果某个页面需要封面,可以这样写:
+front-matter
+
+
+显示侧边栏 通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。
+如果某个页面不需要侧边栏,可以这样写:
+front-matter
+
+某个页面想指定显示某几个侧边栏,就这样写:
+front-matter --- sidebar: [grid , toc , tags ] ---
+
+关闭评论 默认是 body: [article, comments]
,如果某个页面不要评论,只需要去掉 comments
即可。
+front-matter
+
+只显示留言板 如果你想创建一个只有留言板的页面
+front-matter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/page-settings/front-matter/index.html b/v3/page-settings/front-matter/index.html
new file mode 100644
index 000000000..9ba5a792e
--- /dev/null
+++ b/v3/page-settings/front-matter/index.html
@@ -0,0 +1,2517 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ front-matter - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ front-matter
+
+
+
+
+
+
+
+ front-matter front-matter 是文件最上方以 ---
分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter
+
+
+
+字段
+含义
+值类型
+默认值
+
+
+
+layout
+布局模版
+String
+-
+
+
+title
+页面标题
+String
+-
+
+
+seo_title
+网页标题
+String
+page.title
+
+
+short_title
+页面标题(在group列表中显示)
+String
+page.title
+
+
+date
+创建时间
+Date
+文件创建时间
+
+
+updated
+更新日期
+Date
+文件修改时间
+
+
+link
+外部文章网址
+String
+-
+
+
+music
+内部音乐控件
+[Object]
+-
+
+
+robots
+robots
+String
+-
+
+
+keywords
+页面关键词
+String
+-
+
+
+description
+页面描述、摘要
+String
+-
+
+
+cover
+是否显示封面
+Bool
+true
+
+
+meta
+文章或页面的meta信息
+Bool, Array
+theme.layout.*.meta
+
+
+sidebar
+页面侧边栏
+Bool, Array
+theme.layout.*.sidebar
+
+
+body
+页面主体元素
+Array
+theme.layout.on_page.body
+
+
+mathjax
+是否渲染公式
+Bool, String
+false
+
+
+thumbnail
+缩略图
+String
+false
+
+
+icons
+图标
+Array
+[]
+
+
+pin
+是否置顶
+Bool
+false
+
+
+layout:post
时特有的字段:
+
+
+
+字段
+含义
+值类型
+默认值
+
+
+
+author
+文章作者
+[Object]
+config.author
+
+
+categories
+分类
+String, Array
+-
+
+
+tags
+标签
+String, Array
+-
+
+
+toc
+是否生成目录
+Bool
+true
+
+
+author
+
+
+
+字段
+含义
+值类型
+默认值
+
+
+
+name
+作者名
+String
+config.author
+
+
+avatar
+头像
+String
+config.avatar
+
+
+url
+链接
+String
+config.url
+
+
+music
+
+
+
+字段
+是否必须
+值类型
+
+
+
+server
+是
+netease, tencent, kugou, xiami, baidu
+
+
+type
+是
+song, playlist, album, search, artist
+
+
+id
+是
+song id / playlist id / album id / search keyword
+
+
+文章置顶 在 front-matter 中设置以下值:
+front-matter
+
+文章分类 多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。
+多级分类:
+front-matter --- categories: [分类A , 分类B ]---
+或者
+front-matter --- categories: - 分类A - 分类B ---
+
+并列分类
+front-matter categories: - [分类A ] - [分类B ]
+
+多级+并列分类
+front-matter categories: - [分类A , 分类B ] - [分类C , 分类D ]
+
+文章摘要 在文章中插入 <!-- more -->
,前面的部分即为摘要。
+某篇文章源码 --- title: xxx date: 2020-02-21 --- 这是摘要 <!-- more --> 这是正文
+
+注意 : <!-- more -->
前后一定要有空行,不然可能导致显示错位。
+
+设置文章作者 由于支持多作者共同维护一个博客,所以可以设置单独一篇文章的作者:
+front-matter --- author: name: 作者 avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com ---
+
+引入外部文章 利用 link
,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如:
+front-matter --- layout: post date: 2017-07-05 title: [转 ]如何搭建基于Hexo的独立博客 categories: [Dev , Hexo ]tags: - Hexo author: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.com link: https://xaoxuu.com/blog/2017-07-05-hexo-blog/ --- ![](https://img.vim -cn.com/d9/a9af7dc49fc0af8ca3e6dd2450a2f7095a87db.png)
+
+置顶 对于任何文章或者页面,设置 pin: true
即可置顶在首页。
+front-matter
+
+这会导致一个小问题:首页 post 卡片数量多于设定值,如果有强迫症希望每一个分页数量一致,可以安装插件来实现,详见:#421
+不归档 存放在 _posts
文件夹下的文章一般都会出现在归档页,如果某篇文章不希望出现在归档页面:
+front-matter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/page-settings/layout/index.html b/v3/page-settings/layout/index.html
new file mode 100644
index 000000000..4d6af1217
--- /dev/null
+++ b/v3/page-settings/layout/index.html
@@ -0,0 +1,2329 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 页面布局模板 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 布局模板
+
+
+取值
+含义
+
+
+
+page
+独立页面
+
+
+post
+文章页面
+
+
+category
+分类页面
+
+
+tag
+标签页面
+
+
+links
+友链页面
+
+
+list
+列表页面
+
+
+page & post post 页面布局几乎与 page 页面相同,但是有以下细微区别:
+
+post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 不会。
+主题配置中的 article_footer
只作用于 post
,如果 page 也要显示,可以在 front-matter 中设置meta: article_footer: [xxx ]
+
+
+
+
+除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。
+归档页面 归档页面是自动生成的,并且初始化的时候已经生成,路径如下:
+blog/_config.yml
+
+关于页面 Create file if not exists: source/about/index.md --- layout: page title: 关于 meta: header: [] footer: [] sidebar: []valine: placeholder: 有什么想对我说的呢? --- 下面写关于自己的内容
+
+分类页面 Create file if not exists: source/categories/index.md --- layout: category index: true title: 所有分类 ---
+
+标签页面 Create file if not exists: source/tags/index.md --- layout: tag index: true title: 所有标签 ---
+
+列表页面 Create file if not exists: source/mylist/index.md --- layout: list group: mylist index: true ---
+
+结果就是筛选出所有文章中 front-matter
部分含有 group: mylist
的文章。
+友链页面 Create file if not exists: source/friends/index.md --- layout: links title: 我的朋友们 links: - group: 分组1 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: avatar: url: backgroundColor: '#3E74C9' textColor: '#fff' tags: [标签1 , 标签2 ] desc: 描述文字 - group: 分组2 icon: fas fa-user-tie desc: 这个分组的描述 items: - name: avatar: url: backgroundColor: '#3E74C9' textColor: '#fff' tags: [标签1 , 标签2 ] desc: 描述文字 --- 这里写友链上方的内容。 <!-- more --> 这里可以写友链页面下方的文字备注,例如自己的友链规范、示例等。
+
+
+
+404页面 Create file if not exists: source/404.md --- layout: page title: 404 Not Found body: [article , comments ]meta: header: [] footer: [] sidebar: []valine: path: /404.html placeholder: 请留言告诉我您要访问哪个页面找不到了 --- {% p center huge , 404 % } {% p center bold , 很抱歉,您访问的页面不存在 % } {% p center small , 可能是输入地址有误或该地址已被删除 % }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/page-settings/math/index.html b/v3/page-settings/math/index.html
new file mode 100644
index 000000000..052794cc8
--- /dev/null
+++ b/v3/page-settings/math/index.html
@@ -0,0 +1,2282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 渲染公式 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MathJax 默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。
+example.md: --- title: 渲染公式(MathJax) date: 2020-02-23 mathjax: true # false: 不渲染, true: 渲染, internal: 只在文章内部渲染,文章列表中不渲染 --- $$t+1=2$$ $$ \mbox{积累因子}=\begin{cases} 1+ni & \mbox{单利}\\\\ (1+i)^n & \mbox{复利} \end{cases} $$ $$ \begin{equation} \sum_{i=0}^n F_ i \cdot \phi (H, p_i) - \sum_ {i=1}^n a_i \cdot ( \tilde{x_ i}, \tilde{y_i}) + b_ i \cdot ( \tilde{x_i}^2 , \tilde{y_ i}^2 ) \end{equation} $$ $$ \begin{equation} \beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \end{equation} $$
+
+
+ 示例效果
+
+
$$t+1=2$$
$$ \mbox{积累因子}=\begin{cases} 1+ni & \mbox{单利}\\ (1+i)^n & \mbox{复利} \end{cases} $$
$$ \begin{equation} \sum_{i=0}^n F_i \cdot \phi (H, p_i) - \sum_{i=1}^n a_i \cdot ( \tilde{x_i}, \tilde{y_i}) + b_i \cdot ( \tilde{x_i}^2 , \tilde{y_i}^2 ) \end{equation} $$ $$ \begin{equation} \beta^*(D) = \mathop{argmin} \limits_{\beta} \lambda {||\beta||}^2 + \sum_{i=1}^n max(0, 1 - y_i f_{\beta}(x_i)) \end{equation} $$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/site-settings/configuration/index.html b/v3/site-settings/configuration/index.html
new file mode 100644
index 000000000..50a11de45
--- /dev/null
+++ b/v3/site-settings/configuration/index.html
@@ -0,0 +1,2667 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 站点配置文件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网站标题 blog/_config.yml
+
+网站图标 blog/_config.yml favicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico
blog/_config.yml import: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
+
+
+多语言设置 blog/_config.yml language: - zh-CN - en - zh-HK - zh-TW
+
+对应的翻译文件路径: themes/volantis/languages/
+Import 导入外部文件 可以在无需修改主题文件的情况下在 head 和 body 中添加各种标签。meta
和 link
对应 head 中的 <meta>
和 <link>
标签。script
可以在 body 末尾导入 js 文件。
+blog/_config.yml import: meta: - <meta name="msapplication-TileColor" content="#ffffff"> - <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml"> - <meta name="theme-color" content="#ffffff"> link: - <link rel="apple-touch-icon" sizes="180x180" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png"> - <link rel="icon" type="image/png" sizes="32x32" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png"> - <link rel="icon" type="image/png" sizes="16x16" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png"> - <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest"> - <link rel="mask-icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5"> - <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico"> script:
+
+
+网站
+
+
+参数
+描述
+
+
+
+title
+网站标题
+
+
+subtitle
+网站副标题
+
+
+description
+网站描述
+
+
+keywords
+网站的关键词。支援多个关键词。
+
+
+author
+您的名字
+
+
+language
+网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hans
和 zh-CN
。
+
+
+timezone
+网站时区。Hexo 默认使用您电脑的时区。请参考 时区列表 进行设置,如 America/New_York
, Japan
, 和 UTC
。一般的,对于中国大陆地区可以使用 Asia/Shanghai
。
+
+
+其中,description
主要用于SEO,告诉搜索引擎一个关于您站点的简单描述,通常建议在其中包含您网站的关键词。author
参数用于主题显示文章的作者。
+网址
+
+
+参数
+描述
+默认值
+
+
+
+url
+网址
+
+
+
+root
+网站根目录
+
+
+
+permalink
+文章的 永久链接 格式
+:year/:month/:day/:title/
+
+
+permalink_defaults
+永久链接中各部分的默认值
+
+
+
+pretty_urls
+改写 permalink 的值来美化 URL
+
+
+
+pretty_urls.trailing_index
+是否在永久链接中保留尾部的 index.html
,设置为 false
时去除
+true
+
+
+pretty_urls.trailing_html
+是否在永久链接中保留尾部的 .html
, 设置为 false
时去除 (对尾部的 index.html
无效 )
+true
+
+
+网站存放在子目录
如果您的网站存放在子目录中,例如 http://yoursite.com/blog
,则请将您的 url
设为 http://yoursite.com/blog
并把 root
设为 /blog/
。
+
+例如:
+pretty_urls: trailing_index: false
+
+目录
+
+
+参数
+描述
+默认值
+
+
+
+source_dir
+资源文件夹,这个文件夹用来存放内容。
+source
+
+
+public_dir
+公共文件夹,这个文件夹用于存放生成的站点文件。
+public
+
+
+tag_dir
+标签文件夹
+tags
+
+
+archive_dir
+归档文件夹
+archives
+
+
+category_dir
+分类文件夹
+categories
+
+
+code_dir
+Include code 文件夹,source_dir
下的子目录
+downloads/code
+
+
+i18n_dir
+国际化(i18n)文件夹
+:lang
+
+
+skip_render
+跳过指定文件的渲染。匹配到的文件将会被不做改动地复制到 public
目录中。您可使用 glob 表达式 来匹配路径。
+
+
+
+例如:
+skip_render: "mypage/**/*" skip_render: "_posts/test-post.md"
+
+提示
如果您刚刚开始接触 Hexo,通常没有必要修改这一部分的值。
+
+文章
+
+
+参数
+描述
+默认值
+
+
+
+new_post_name
+新文章的文件名称
+:title.md
+
+
+default_layout
+预设布局
+post
+
+
+auto_spacing
+在中文和英文之间加入空格
+false
+
+
+titlecase
+把标题转换为 title case
+false
+
+
+external_link
+在新标签中打开链接
+true
+
+
+external_link.enable
+在新标签中打开链接
+true
+
+
+external_link.field
+对整个网站(site
)生效或仅对文章(post
)生效
+site
+
+
+external_link.exclude
+需要排除的域名。主域名和子域名如 www
需分别配置
+[]
+
+
+filename_case
+把文件名称转换为 (1) 小写或 (2) 大写
+0
+
+
+render_drafts
+显示草稿
+false
+
+
+post_asset_folder
+启动 Asset 文件夹
+false
+
+
+relative_link
+把链接改为与根目录的相对位址
+false
+
+
+future
+显示未来的文章
+true
+
+
+highlight
+代码块的设置, see Highlight.js section for usage guide
+
+
+
+prismjs
+代码块的设置, see PrismJS section for usage guide
+
+
+
+相对地址
默认情况下,Hexo 生成的超链接都是绝对地址。例如,如果您的网站域名为 example.com
,您有一篇文章名为 hello
,那么绝对链接可能像这样:http://example.com/hello.html
,它是绝对 于域名的。相对链接像这样:/hello.html
,也就是说,无论用什么域名访问该站点,都没有关系,这在进行反向代理时可能用到。通常情况下,建议使用绝对地址。
+
+分类 & 标签
+
+
+参数
+描述
+默认值
+
+
+
+default_category
+默认分类
+uncategorized
+
+
+category_map
+分类别名
+
+
+
+tag_map
+标签别名
+
+
+
+日期 / 时间格式 Hexo 使用 Moment.js 来解析和显示时间。
+
+
+
+参数
+描述
+默认值
+
+
+
+date_format
+日期格式
+YYYY-MM-DD
+
+
+time_format
+时间格式
+HH:mm:ss
+
+
+updated_option
+当 Front Matter 中没有指定 updated 时 updated
的取值
+mtime
+
+
+updated_option
updated_option
控制了当 Front Matter 中没有指定 updated
时,updated
如何取值:
mtime
: 使用文件的最后修改时间。这是从 Hexo 3.0.0 开始的默认行为。date
: 使用 date
作为 updated
的值。可被用于 Git 工作流之中,因为使用 Git 管理站点时,文件的最后修改日期常常会发生改变empty
: 直接删除 updated
。使用这一选项可能会导致大部分主题和插件无法正常工作。use_date_for_updated
选项已经被废弃,将会在下个重大版本发布时去除。请改为使用 updated_option: 'date'
。
+
+use_date_for_updated
| 启用以后,如果 Front Matter 中没有指定 updated
, post.updated
将会使用 date
的值而不是文件的创建时间。在 Git 工作流中这个选项会很有用 | true
+分页
+
+
+参数
+描述
+默认值
+
+
+
+per_page
+每页显示的文章量 (0 = 关闭分页功能)
+10
+
+
+pagination_dir
+分页目录
+page
+
+
+扩展
+
+
+参数
+描述
+
+
+
+theme
+当前主题名称。值为false
时禁用主题
+
+
+theme_config
+主题的配置文件。在这里放置的配置会覆盖主题目录下的 _config.yml
中的配置
+
+
+deploy
+部署部分的设置
+
+
+meta_generator
+Meta generator 标签。 值为 false
时 Hexo 不会在头部插入该标签
+
+
+包括或不包括目录和文件 在 Hexo 配置文件中,通过设置 include/exclude 可以让 Hexo 进行处理或忽略某些目录和文件夹。你可以使用 glob 表达式 对目录和文件进行匹配。
+include
and exclude
options only apply to the source/
folder, whereas ignore
option applies to all folders.
+
+
+
+参数
+描述
+
+
+
+include
+Hexo 默认会忽略隐藏文件和文件夹(包括名称以下划线和 .
开头的文件和文件夹,Hexo 的 _posts
和 _data
等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source
目录下。
+
+
+exclude
+Hexo 会忽略这些文件和目录
+
+
+ignore
+Ignore files/folders
+
+
+举例:
+include: - ".nojekyll" - "css/_typing.css" - "_css/*" - "_css/**/*" exclude: - "js/test.js" - "js/*" - "js/**/*" - "js/test*" - "js/**/test*" ignore: - "**/foo" - "**/themes/*/foo" - "**/themes/**/foo"
+
+列表中的每一项都必须用单引号或双引号包裹起来。
+include
和 exclude
并不适用于 themes/
目录下的文件。如果需要忽略 themes/
目录下的部分文件或文件夹,可以使用 ignore
或在文件名之前添加下划线 _
。
+使用代替配置文件 可以在 hexo-cli 中使用 --config
参数来指定自定义配置文件的路径。你可以使用一个 YAML 或 JSON 文件的路径,也可以使用逗号分隔(无空格)的多个 YAML 或 JSON 文件的路径。例如:
+$ hexo server --config custom.yml $ hexo generate --config custom.yml,custom2.json,custom3.yml
+
+当你指定了多个配置文件以后,Hexo 会按顺序将这部分配置文件合并成一个 _multiconfig.yml
。如果遇到重复的配置,排在后面的文件的配置会覆盖排在前面的文件的配置。这个原则适用于任意数量、任意深度的 YAML 和 JSON 文件。
+例如,使用 --options
指定了两个自定义配置文件:
+$ hexo generate --config custom.yml,custom2.json
+
+如果 custom.yml
中指定了 foo: bar
,在 custom2.json 中指定了 "foo": "dinosaur"
,那么在 _multiconfig.yml
中你会得到 foo: dinosaur
。
+使用代替主题配置文件 通常情况下,Hexo 主题是一个独立的项目,并拥有一个独立的 _config.yml
配置文件。
+除了自行维护独立的主题配置文件,你也可以在其它地方对主题进行配置。
+配置文件中的 theme_config
+
+该特性自 Hexo 2.8.2 起提供
+
+theme: "my-theme" theme_config: bio: "My awesome bio" foo: bar: 'a'
+
+bio: "Some generic bio" logo: "a-cool-image.png" foo: baz: 'b'
+
+最终主题配置的输出是:
+{ bio: "My awesome bio", logo: "a-cool-image.png", foo: { bar: "a", baz: "b" } }
+
+独立的 _config.[theme].yml
文件
+
+该特性自 Hexo 5.0.0 起提供
+
+独立的主题配置文件应放置于站点根目录下,支持 yml
或 json
格式。需要配置站点 _config.yml
文件中的 theme
以供 Hexo 寻找 _config.[theme].yml
文件。
+
+
+bio: "My awesome bio" foo: bar: 'a'
+
+bio: "Some generic bio" logo: "a-cool-image.png" foo: baz: 'b'
+
+最终主题配置的输出是:
+{ bio: "My awesome bio", logo: "a-cool-image.png", foo: { bar: "a", baz: "b" } }
+
+我们强烈建议你将所有的主题配置集中在一处。如果你不得不在多处配置你的主题,那么这些信息对你将会非常有用:Hexo 在合并主题配置时,Hexo 配置文件中的 theme_config
的优先级最高,其次是 _config.[theme].yml
文件,最后是位于主题目录下的 _config.yml
文件。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/tag-plugins/container/index.html b/v3/tag-plugins/container/index.html
new file mode 100644
index 000000000..f0993392a
--- /dev/null
+++ b/v3/tag-plugins/container/index.html
@@ -0,0 +1,2370 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 容器类标签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tab 此插件移植自 NexT #tabs 。请将您的 Volantis 升级至 2.1 版本以上使用。
+{% tabs tab-id %} ![](https://i.loli.net/2020/03/18/f5PQlWisvm9zbgK.jpg) 这里面写内容,支持的语法格式有限,请尽量<u > 不要</u > 写太过复杂的东西。 {% endtabs %}
tab-id
+
+
必填,如果一个页面有多个 tabs 时,tab-id 不能重复。
+
tab-name
+
+
标签文本。
+
+
+Folding 请将您的 Volantis 升级至 2.3 版本以上使用。
+{% folding 参数(可选), 标题 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg) {% endfolding %}
参数位置可以填写颜色和状态,多个参数用空格隔开。
+
颜色
+
+
blue, cyan, green, yellow, red
+
+
状态
+
+
状态填写 open
代表默认打开。
{% folding 查看图片测试 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg) {% endfolding %} {% folding cyan open, 查看默认打开的折叠框 %} 这是一个默认打开的折叠框。 {% endfolding %} {% folding green, 查看代码测试 %} {% endfolding %} {% folding yellow, 查看列表测试 %} - haha - hehe {% endfolding %} {% folding red, 查看嵌套测试 %} {% folding blue, 查看嵌套测试2 %} {% folding 查看嵌套测试3 %} hahaha <span><img src='https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style='height:24px'></span> {% endfolding %} {% endfolding %} {% endfolding %}
查看图片测试
+
+
+
+
+
+
查看默认打开的折叠框
+
+
+
+
查看代码测试
+
+
{% folding green, 查看代码测试 %} 查看代码测试 {% endfolding %}
+
+
+
+
查看列表测试
+
+
+
+
查看嵌套测试
+
+
查看嵌套测试2 查看嵌套测试3 hahaha
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/tag-plugins/hexo/index.html b/v3/tag-plugins/hexo/index.html
new file mode 100644
index 000000000..4544115e8
--- /dev/null
+++ b/v3/tag-plugins/hexo/index.html
@@ -0,0 +1,2381 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hexo 内置标签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hexo 内置标签
+
+
+
+
+
+
+
+ 文章摘要和截断 在文章中使用 <!-- more -->
,那么 <!-- more -->
之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 Hexo 官方文档:
+
+
+
+引用块 引用书上的句子
+Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
+
+
+代码块 {% codeblock [title] [lang:language] [url] [link text] [additional options] %} code snippet {% endcodeblock %}
+
+指定语言 [rectangle setX: 10 y: 10 width: 20 height: 20 ];
+
+example.md: {% codeblock lang:objc %} [rectangle setX: 10 y: 10 width: 20 height: 20]; {% endcodeblock %}
+
+附加说明 Array.map array.map(callback[, thisArg])
+
+example.md: {% codeblock Array.map %} array.map(callback[, thisArg]) {% endcodeblock %}
+
+行标、高亮 1 2 3 4 5 6 7 8 n=eval(input()) if n==0 : print("Hello World" ) elif n>0 : print("He\nll\no \nWo\nrl\nd" ) else : for c in "Hello World" : print(c)
+
+example.md: {% codeblock lang:python line_number:true mark:3,5,8 %} n=eval(input()) if n==0: print("Hello World") elif n>0: print("He\nll\no \nWo\nrl\nd") else: for c in "Hello World": print(c) {% endcodeblock %}
+
+Pull Quote 在文章中插入 Pull quote
+example.md: {% pullquote [class] %} content {% endpullquote %}
+
+jsFiddle 在文章中嵌入 jsFiddle
+example.md: {% jsfiddle shorttag [tabs] [skin] [width] [height] %}
+
+Gist 在文章中嵌入 Gist,注意 :在国内无法加载。
+example.md: {% gist gist_id [filename] %}
+
+iframe 在文章中插入 iframe
+example.md: {% iframe url [width] [height] %}
+
+Image 在文章中插入指定大小的图片。
+example.md: {% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %}
+
+Link 在文章中插入链接,并自动给外部链接添加 target="_blank"
属性。
+example.md: {% link text url [external] [title] %}
+
+Include Code 插入 source/downloads/code
文件夹内的代码文件。source/downloads/code
不是固定的,取决于你在配置文件中 code_dir
的配置。
+example.md: {% include_code [title] [lang:language] [from:line] [to:line] path/to/file %}
+
+ 示例
+
+
嵌入 test.js
文件全文
{% include_code lang:javascript test.js %}
只嵌入第 3 行
{% include_code lang:javascript from:3 to:3 test.js %}
嵌入第 5 行至第 8 行
{% include_code lang:javascript from:5 to:8 test.js %}
嵌入第 5 行至文件结束
{% include_code lang:javascript from:5 test.js %}
嵌入第 1 行至第 8 行
{% include_code lang:javascript to:8 test.js %}
+
+
+
+引用文章 引用其他文章的链接。
+{% post_path filename %} {% post_ link filename [title] [escape] %}
+
+ 示例
+
+
引用这篇文章:主题更名为「Volantis」
example.md: 引用这篇文章:{% post_link news/2020-02-22 %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/tag-plugins/link/index.html b/v3/tag-plugins/link/index.html
new file mode 100644
index 000000000..db3f06ceb
--- /dev/null
+++ b/v3/tag-plugins/link/index.html
@@ -0,0 +1,2611 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 链接、按钮和菜单标签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 链接、按钮和菜单标签
+
+
+
+
+
+
+
+ 外链卡片 请将您的 Volantis 升级至 3.0 版本以上使用。
+example.md: {% link 如何参与项目, http://localhost:4000/contributors/, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets@master/logo/256/safari.png %}
+
+
+基础按钮 请将您的 Volantis 升级至 2.4 版本以上使用。
+{% btn 样式参数(可选), 标题, 链接, 图标(可选) %}
+
+
样式参数
+
+
+
+
图标
+
+
第1个或者第2个参数包含 fa-
的那个被识别为图标。
example.md: 不设置任何参数的 {% btn 按钮, / %} 适合融入段落中。 regular 按钮适合独立于段落之外: {% btn regular, 示例博客, https://xaoxuu.com, fas fa-play-circle %} large 按钮更具有强调作用,建议搭配 center 使用: {% btn center large, 开始使用, https://volantis.js.org/v3/getting-started/, fas fa-download %}
+
+
+富文本按钮 请将您的 Volantis 升级至 2.3 版本以上使用。
+{% btns 样式参数 %} {% cell 标题, 链接, 图片或者图标 %} {% cell 标题, 链接, 图片或者图标 %} {% endbtns %}
样式参数位置可以写图片样式、布局方式,多个样式参数用空格隔开。
+
圆角样式
+
+
默认为方形
+
+
+
+
布局方式
+
+
默认为自动宽度,适合视野内只有一两个的情况。
+
+
+
+参数
+含义
+
+
+
+wide
+宽一点的按钮
+
+
+fill
+填充布局,自动铺满至少一行,多了会换行。
+
+
+center
+居中,按钮之间是固定间距。
+
+
+around
+居中分散
+
+
+grid2
+等宽最多2列,屏幕变窄会适当减少列数。
+
+
+grid3
+等宽最多3列,屏幕变窄会适当减少列数。
+
+
+grid4
+等宽最多4列,屏幕变窄会适当减少列数。
+
+
+grid5
+等宽最多5列,屏幕变窄会适当减少列数。
+
+
+
增加文字样式
+
+
可以在容器内增加 <b>标题</b>
和 <p>描述文字</p>
如果需要显示类似「团队成员」之类的一组含有头像的链接:
+
example.md: {% btns circle grid5 %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% cell xaoxuu, https://xaoxuu.com, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %} {% endbtns %}
+
+
或者含有图标的按钮:
+
example.md: {% btns rounded grid5 %} {% cell 下载源码, /, fas fa-download %} {% cell 查看文档, /, fas fa-book-open %} {% endbtns %}
+
+
圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中
+
example.md: {% btns circle center grid5 %} <a href ='https://apps.apple.com/cn/app/heart-mate-pro-hrm-utility/id1463348922?ls=1' > <i class ='fab fa-apple' > </i > <b > 心率管家</b > {% p red, 专业版 %} <img src ='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_pro.png' > </a > <a href ='https://apps.apple.com/cn/app/heart-mate-lite-hrm-utility/id1475747930?ls=1' > <i class ='fab fa-apple' > </i > <b > 心率管家</b > {% p green, 免费版 %} <img src ='https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png' > </a > {% endbtns %}
如果需要显示类似「团队成员」之类的一组含有头像的链接:
+
+
+
或者含有图标的按钮:
+
+
+
+
圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中
+
+
+
+下拉菜单 请将您的 Volantis 升级至 3.0 版本以上使用。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/tag-plugins/media/index.html b/v3/tag-plugins/media/index.html
new file mode 100644
index 000000000..690ef13d9
--- /dev/null
+++ b/v3/tag-plugins/media/index.html
@@ -0,0 +1,2430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 多媒体标签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inlineimage Inlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。请将您的 Volantis 升级至 3.0.0 版本以上使用。
+这是一段话 {% inlineimage 链接, height=高度(可选) %} 这是一段话。
图片高度
+
+
阿拉伯数字 + px
+
example: example.md: 这是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %} 一段话。 这又是 {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %} 一段话。
这是 一段话。
+
这又是 一段话。
+
+
+
+Image Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。请将您的 Volantis 升级至 2.6 版本以上使用。
+{% image 链接, 宽度(可选), 描述(可选) %}
图片宽度
+
+
阿拉伯数字 + px
+
example:
+
+
图片描述
+
+
纯文本,不能包含引号。
example.md: 添加描述: {% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, alt=每天下课回宿舍的路,承载了太多记忆。 %} 指定宽度: {% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px %} 指定宽度并添加描述: {% image https://i.loli.net/2020/04/06/zdeQiOY9rBCjhDR.jpg, width=300px, alt=每天下课回宿舍的路,承载了太多记忆。 %}
添加描述:
+
+
+
指定宽度:
+
+
+
指定宽度并添加描述:
+
+
+
+Gallery Gallery 标签是一种针对一组图片应用场景的标签。请将您的 Volantis 升级至 3.0 版本以上使用。
+{% gallery 参数, 列数 %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg ) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg) {% endgallery %}
对齐方向
+
+
+
+
缩放
+
+
+
+
列数
+
+
逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch
来时图片放大填充。
一行一个图片
+
example.md: {% gallery %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ) {% endgallery %}
+
+
一行多个图片(不换行)
+
example.md: {% gallery %} ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg ) ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg ) ![图片描述 ](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg ) {% endgallery %}
+
+
多行多个图片(每行2~8个图片)
+
example.md: {% gallery stretch, 4 %} ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg) ![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg) {% endgallery %}
一行一个图片
+
+
+
+
+
一行多个图片(不换行)
+
+
+
多行多个图片(每行2~8个图片)
+
+
+Audio 请将您的 Volantis 升级至 2.4 版本以上使用。
+example.md: {% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}
Your browser does not support the audio tag.
+
+Video 请将您的 Volantis 升级至 2.3 版本以上使用。
+单个视频
+
+
example.md:
+
+
多个视频
+
+
example.md: {% videos 对齐方向, 列数 %} {% video 视频链接 %} {% video 视频链接 %} {% video 视频链接 %} {% endvideos %}
对齐方向
+
+
+
+
列数
+
+
逗号后面直接写列数,支持 1 ~ 4 列。
100%宽度
+
example.md: {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}
+
+
50%宽度
+
example.md: {% videos, 2 %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% endvideos %}
+
+
25%宽度
+
example.md: {% videos, 4 %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_ 0341.mov %}{% endvideos %}
100%宽度
+
Your browser does not support the video tag.
+
+
50%宽度
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
+
25%宽度
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
Your browser does not support the video tag.
+
+APlayer 主题对 APlayer 插件的样式进行了兼容。安装插件:
+npm i -S hexo-tag-aplayer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/tag-plugins/text/index.html b/v3/tag-plugins/text/index.html
new file mode 100644
index 000000000..e04bbf206
--- /dev/null
+++ b/v3/tag-plugins/text/index.html
@@ -0,0 +1,2491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 文本和段落标签 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 文本和段落标签
+
+
+
+
+
+
+
+ 行内小标签 请将您的 Volantis 升级至 3.0 版本以上使用。
+带下划线的文本
+
+
+
+
带着重号的文本
+
+
+
+
带波浪线的文本
+
+
+
+
带删除线的文本
+
+
+
+
键盘样式的文本
+
+
+
+
密码样式的文本
+
+
带下划线的文本
+
+
example.md:
+
+
带着重号的文本
+
+
example.md:
+
+
带波浪线的文本
+
+
example.md:
+
+
带删除线的文本
+
+
example.md:
+
+
键盘样式的文本
+
+
example.md: 收藏页面:{% kbd command %} + {% kbd D %}
+
+
密码样式的文本
+
+
example.md: 带下划线的文本
+
+
带 下划线 的文本
+
带着重号的文本
+
+
带 着重号 的文本
+
带波浪线的文本
+
+
带 波浪线 的文本
+
带删除线的文本
+
+
带 删除线 的文本
+
键盘样式的文本
+
+
收藏页面:command + D
+
密码样式的文本
+
+
验证码:这里没有验证码
+
+Span & P 请将您的 Volantis 升级至 2.5 版本以上使用。
+样式参数位置可以写颜色、大小和对齐方向,多个样式参数用空格隔开。
+
字体
+
+
+
+
颜色
+
+
red, yellow, green, cyan, blue, gray
+
+
大小
+
+
small, h4, h3, h2, h1, large, huge, ultra
+
+
对齐方向
+
+
彩色文字
+
+
example.md: 在一段话中方便插入各种颜色的标签,包括:{% span red, 红色 %}、{% span yellow, 黄色 %}、{% span green, 绿色 %}、{% span cyan, 青色 %}、{% span blue, 蓝色 %}、{% span gray, 灰色 %}。
+
+
超大文字
+
+
example.md: 文档「开始」页面中的标题部分就是超大文字。 {% p center logo large, Volantis %} {% p center small, A Wonderful Theme for Hexo %}
彩色文字
+
+
在一段话中方便插入各种颜色的标签,包括:红色 、黄色 、绿色 、青色 、蓝色 、灰色 。
+
超大文字
+
+
文档「开始」页面中的标题部分就是超大文字。
+
Volantis
+
A Wonderful Theme for Hexo
+
+Note & NoteBlock NoteBlock 是 Blockquote 的增强版,在左边显示图标,并且可以自定颜色。而 Note 是 NoteBlock 的简便写法。请将您的 Volantis 升级至 2.3 版本以上使用。
+Note
+
+
+
+
NoteBlock
+
+
{% noteblock 样式参数 %} 文本段落 {% endnoteblock %}
样式参数位置可以写图标和颜色,多个样式参数用空格隔开。
+
图标
+
+
彩色的 quote, info, warning, done/success, error/danger
+
+
灰色的,也可以指定颜色 radiation, bug, idea, link, paperclip, todo, msg, guide, download, up, undo
+
+
颜色
+
+
指定颜色 clear, light, gray, red, yellow, green, cyan, blue
Note
+
+
example.md: {% note, 为简单的一句话提供的简便写法。 %} {% note success, 支持同样丰富的参数。 %}
+
+
NoteBlock
+
+
example.md: 可以在区块中放置一些复杂的结构,支持嵌套。 {% noteblock quote %} {% p subtitle, 小标题 %} Windows 10不是為所有人設計,而是為每個人設計 {% p subtitle, 嵌套测试 %} {% noteblock %} 请坐和放宽,我正在帮你搞定一切... {% endnoteblock %} {% p subtitle, Folding 测试 %} {% folding 点击查看更多 %} {% note warning, 不要说我们没有警告过你 %} {% noteblock bug red %} 我们都有不顺利的时候 {% endnoteblock %} {% endfolding %} {% endnoteblock %}
Note
+
+
+
+
+
+
NoteBlock
+
+
可以在区块中放置一些复杂的结构,支持嵌套。
+
小标题
Windows 10不是為所有人設計,而是為每個人設計
嵌套测试
Folding 测试
点击查看更多
+
+
+Checkbox & Radio 请将您的 Volantis 升级至 2.6 版本以上使用。
+{% checkbox 样式参数(可选), 文本(支持简单md) %}
颜色
+
+
red, yellow, green, cyan, blue
+
+
样式
+
+
+
+
选中状态
+
+
Checkbox
+
+
example.md: {% checkbox 纯文本测试 %} {% checkbox checked, 支持简单的 [markdown ](https://guides.github.com/features/mastering-markdown/ ) 语法 %} {% checkbox red, 支持自定义颜色 %} {% checkbox green checked, 绿色 + 默认选中 %} {% checkbox yellow checked, 黄色 + 默认选中 %} {% checkbox cyan checked, 青色 + 默认选中 %} {% checkbox blue checked, 蓝色 + 默认选中 %} {% checkbox plus green checked, 增加 %} {% checkbox minus yellow checked, 减少 %} {% checkbox times red checked, 叉 %}
+
+
Radio
+
+
example.md: {% radio 纯文本测试 %} {% radio checked, 支持简单的 [markdown ](https://guides.github.com/features/mastering-markdown/ ) 语法 %} {% radio red, 支持自定义颜色 %} {% radio green, 绿色 %} {% radio yellow, 黄色 %} {% radio cyan, 青色 %} {% radio blue, 蓝色 %}
Checkbox
+
+
+
+
+
+
+
+
+
+
+
+
+
Radio
+
+
+
+
+
+
+
+
+
+Timeline 请将您的 Volantis 升级至 3.0 版本以上使用。
+{% timeline 时间线标题 %} {% timenode 时间节点(标题) %} 正文内容 {% endtimenode %} {% timenode 时间节点(标题) %} 正文内容 {% endtimenode %} {% endtimeline %}
example.md: {% timeline 升级小助手 %} {% timenode 2020-07-24 [2.6.6 -> 3.0 ](https://github.com/volantis-x/hexo-theme-volantis/releases ) %} 1. 如果有 `hexo-lazyload-image` 插件,需要删除并重新安装最新版本,设置 `lazyload.isSPA: true` 。2. 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 `use_cdn: true` 则需要删除。3. 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。4. 2.x 版本的置顶 `top: true` 改为了 `pin: true` ,并且同样适用于 `layout: page` 的页面。5. 如果使用了 `hexo-offline` 插件,建议卸载,3.0 版本默认开启了 pjax 服务。{% endtimenode %} {% timenode 2020-05-15 [2.6.3 -> 2.6.6 ](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6 ) %} 不需要额外处理。 {% endtimenode %} {% timenode 2020-04-20 [2.6.2 -> 2.6.3 ](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.3 ) %} 1. 全局搜索 `seotitle` 并替换为 `seo_title` 。2. group 组件的索引规则有变,使用 group 组件的文章内,`group: group_name` 对应的组件名必须是 `group_name` 。2. group 组件的列表名优先显示文章的 `short_title` 其次是 `title` 。{% endtimenode %} {% endtimeline %}
升级小助手
+
如果有 hexo-lazyload-image
插件,需要删除并重新安装最新版本,设置 lazyload.isSPA: true
。 2.x 版本的 css 和 js 不适用于 3.x 版本,如果使用了 use_cdn: true
则需要删除。 2.x 版本的 fancybox 标签在 3.x 版本中被重命名为 gallery 。 2.x 版本的置顶 top: true
改为了 pin: true
,并且同样适用于 layout: page
的页面。 如果使用了 hexo-offline
插件,建议卸载,3.0 版本默认开启了 pjax 服务。
+
+
+
+
全局搜索 seotitle
并替换为 seo_title
。 group 组件的索引规则有变,使用 group 组件的文章内,group: group_name
对应的组件名必须是 group_name
。 group 组件的列表名优先显示文章的 short_title
其次是 title
。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/comments/index.html b/v3/theme-settings/comments/index.html
new file mode 100644
index 000000000..d042de9d6
--- /dev/null
+++ b/v3/theme-settings/comments/index.html
@@ -0,0 +1,2293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择评论系统 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 目前支持的评论系统有: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover
+blog/_config.volantis.yml comments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/configuration/index.html b/v3/theme-settings/configuration/index.html
new file mode 100644
index 000000000..0f7250c5f
--- /dev/null
+++ b/v3/theme-settings/configuration/index.html
@@ -0,0 +1,2278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 主题配置文件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使用代替主题配置文件
+
使用 npm i hexo-theme-volantis
方式安装的主题,配置文件在 blog/node_modules/hexo-theme-volantis/_config.yml
使用传统方式安装的主题,配置文件在 blog/themes/volantis/_config.yml
+
+
将主题配置文件复制并重命名到以下路径:
blog/_config.volantis.yml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/cover/index.html b/v3/theme-settings/cover/index.html
new file mode 100644
index 000000000..310d80020
--- /dev/null
+++ b/v3/theme-settings/cover/index.html
@@ -0,0 +1,2280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网站与文章封面 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网站与文章封面
+
+
+
+
+
+
+
+ 封面方案 blog/_config.volantis.yml
+
+目前主题提供两种封面方案,全屏封面适用于项目文档,半屏封面适用于个人博客。您可以修改参数决定在任何页面是否显示。
+封面布局 blog/_config.volantis.yml cover: ... layout: dock ...
+
+
+默认显示设置 blog/_config.volantis.yml cover: ... display: home: true archive: false others: false
+
+由于主页、归档是hexo自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter
中通过设置 cover: true/false
来决定显示封面或者不显示封面。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/footer/index.html b/v3/theme-settings/footer/index.html
new file mode 100644
index 000000000..27fa7a660
--- /dev/null
+++ b/v3/theme-settings/footer/index.html
@@ -0,0 +1,2261 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置网站页脚 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 您通过 layout
可以自由布局网站页脚内容 aplayer
, social
, license
, info
, copyright
。
+blog/_config.volantis.yml footer: layout: [aplayer , social , license , info , copyright ] social: - icon: fas fa-rss url: atom.xml - icon: fas fa-envelope url: mailto:me@xaoxuu.com - icon: fab fa-github url: https://github.com/xaoxuu - icon: fas fa-headphones-alt url: https://music.163.com/#/user/home?id=63035382 copyright: '[Copyright © 2017-2020 Mr. X](https://xaoxuu.com)' br: '<br>'
+其中,aplayer
需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如:
+blog/_config.volantis.yml footer: layout: [... , br , hello , ... ] ... br: '<br>' hello: '[Hello World](/)'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/layout/index.html b/v3/theme-settings/layout/index.html
new file mode 100644
index 000000000..3e7b27cc8
--- /dev/null
+++ b/v3/theme-settings/layout/index.html
@@ -0,0 +1,2261 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置默认布局 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 您可以自由决定每个页面是否显示侧边栏,侧边栏显示什么小部件,正文区域显示什么卡片,文章卡片显示什么 meta 信息。
+layout: on_list: meta: [title , author , date , category , top ] sidebar: [blogger , category , tagcloud , qrcode ] on_page: body: [article , comments ] meta: header: [title , author , category , date , top ] footer: [updated , tags , btns , share ] sidebar: [qrcode , toc ] on_post: article_footer: [copyright , donate ]
+其中 meta
部分的取值自 meta
库, 其余部分取值自 widget
库, ( body
除了可以从 widget
库中取值外,还可以选择 article
和 comments
)。
+请别着急,具体的库配置将在下文详细讲解。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/meta/index.html b/v3/theme-settings/meta/index.html
new file mode 100644
index 000000000..92c1f9671
--- /dev/null
+++ b/v3/theme-settings/meta/index.html
@@ -0,0 +1,2259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 元数据组件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ meta 即文章的元数据,描述文章的作者、发布时间、更新时间等等信息,Volantis 不替您决定,显示什么图标、如何描述都可以自定义。
+blog/_config.volantis.yml meta: title: author: avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png name: Mr. X url: https://xaoxuu.com date: icon: fas fa-edit title: '发布于:' format: 'll' updated: icon: fas fa-save title: '更新于:' format: 'll' category: icon: fas fa-folder-open top: icon: fas fa-angle-double-up counter: icon: fas fa-eye wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half tags: icon: fas fa-hashtag share: - id: qq img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png - id: qzone img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png - id: weibo img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png btns: edit: icon: fas fa-edit title: 在GitHub上编辑此页 color: '#888' repo: icon: fas fa-file-code title: 源码 color: '#508EF2' bug: icon: fas fa-bug title: BUG color: '#FE5F58' doubt: icon: fas fa-question-circle title: 疑问 color: '#FFBD2B' idea: icon: fas fa-lightbulb title: 建议 color: '#3DC550' faq: icon: fas fa-comments title: FAQ color: '#29B1C9' feedback: icon: fas fa-comment-dots title: 反馈 color: '#1BCDFC'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/navbar/index.html b/v3/theme-settings/navbar/index.html
new file mode 100644
index 000000000..23d64d7cc
--- /dev/null
+++ b/v3/theme-settings/navbar/index.html
@@ -0,0 +1,2289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置网站导航栏 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设置网站导航栏
+
+
+
+
+
+
+
+ 导航栏配置 导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。
+blog/_config.volantis.yml navbar: logo: img: icon: title: menu: - name: 博客 icon: fas fa-rss url: / - name: 分类 icon: fas fa-folder-open url: categories/ - name: 标签 icon: fas fa-tags url: tags/ - name: 归档 icon: fas fa-archive url: archives/ - name: 友链 icon: fas fa-link url: friends/ - name: 关于 icon: fas fa-info-circle url: about/ search: 搜索
+
+使用数据文件
+
+建议新建一个文件,专门存放导航栏菜单 配置,文件的路径为:
+blog/source/_data/menu.yml
+文件的内容为:
+blog/source/_data/menu.yml - name: 博客 icon: fas fa-rss url: / ...
+
+菜单嵌套 导航栏菜单支持嵌套,嵌套的属性名为 rows
,写法示例:
+blog/source/_data/menu.yml ... - name: 更多 icon: fas fa-ellipsis-v rows: - name: 主题源码 url: https://github.com/volantis-x/hexo-theme-volantis/ - name: 更新日志 url: https://github.com/volantis-x/hexo-theme-volantis/releases/ - name: hr - name: 有疑问? rows: - name: 看 FAQ url: faqs/ - name: 看 本站源码 url: https://github.com/volantis-x/volantis-docs/ - name: 提 Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: hr - name: 公告和测试博文 url: archives/ - name: 示例博客 url: examples/ - name: 特别感谢 url: contributors/
+
+分割线 在子菜单中,新增一个只有 name: hr
的“菜单”就会被渲染成一个分割线。
+
+
+小标题 在子菜单中,新增一个只有 name: 小标题内容
(也可以有 icon: 小标题的图标
)的“菜单”就会被渲染成一个小标题。
+... - name: 近期 icon: fas fa-clock url: / rows: - name: 热门文章 icon: fas fa-fire - name: ProHUD 开源库的设计思路 url: blog/2019-08-27-prohud/ - name: ValueX:实用的安全对象类型转换库 url: blog/2019-08-29-valuex/ - name: 心率管家 App 的设计与开发 url: blog/2019-07-23-heartmate/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/plugins/index.html b/v3/theme-settings/plugins/index.html
new file mode 100644
index 000000000..4e9c23bd0
--- /dev/null
+++ b/v3/theme-settings/plugins/index.html
@@ -0,0 +1,2288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 第三方插件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 插件库 Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。
+blog/_config.volantis.yml plugins: jquery: https://cdn.jsdelivr.net/npm/jquery@3.5/dist/jquery.min.js fontawesome: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13/css/all.min.css fontawesome_animation: https://cdn.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css fancybox: https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css instant_page: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css scrollreveal: js: https://cdn.jsdelivr.net/npm/scrollreveal@4.0.6/dist/scrollreveal.min.js distance: 32px duration: 800 interval: 20 scale: 1 clipboard: https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js busuanzi: https://cdn.jsdelivr.net/gh/volantis-x/cdn-busuanzi@2.3/js/busuanzi.pure.mini.js wordcount: nodewaves: css: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css js: https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js comment_typing: backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover shuffle: true duration: 20000 fade: 1500 images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/056.jpg aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js - js/aplayer.js server: netease type: playlist id: 3175833810 fixed: false theme: '#1BCDFC' autoplay: false order: list loop: all volume: 0.7 list_max_height: 320px list_folded: true pjax: enable: true timeout: 5000 cacheBust: false animation: nprogress banUrl: Artitalk: enable: false appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI appKEY: nHXLd3N3Jgh460t2iRQKWAtr darkmodejs: enable: false js: https://cdn.jsdelivr.net/npm/darkmode-js@1.5/lib/darkmode-js.min.js bottom: 32px right: unset left: 16px time: 0s mixColor: '#f4f4f4' backgroundColor: '#f4f4f4' buttonColorDark: '#100f2c' buttonColorLight: '#f4f4f4' saveInCookies: true label: 🌓 autoMatchOsTheme: true
+
+
+
+幻灯片背景 blog/_config.volantis.yml plugins: ... backstretch: enable: true js: https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js position: cover duration: 20000 fade: 1500 images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg ...
+幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。
+highlight.js blog/_config.volantis.yml plugins: ... highlightjs: js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js css: https://cdn.jsdelivr.net/npm/highlight.js@9.18.1/styles/solarized-light.css
+如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable
设置为 false
否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。
+如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。
+经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。
+
+APlayer 音乐播放器 blog/_config.volantis.yml plugins: ... aplayer: enable: true js: - https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js - https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js server: netease type: playlist id: 3175833810 fixed: false theme: '#1BCDFC' autoplay: false order: list loop: all volume: 0.7 list_max_height: 340px list_folded: true
+
+
+
+Artitalk blog/_config.volantis.yml plugins: ... Artitalk: enable: false appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI appKEY: nHXLd3N3Jgh460t2iRQKWAtr
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/search/index.html b/v3/theme-settings/search/index.html
new file mode 100644
index 000000000..90758a9ae
--- /dev/null
+++ b/v3/theme-settings/search/index.html
@@ -0,0 +1,2260 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 站内搜索 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ blog/_config.volantis.yml search: enable: true service: hexo js: https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2.6.4/js/search.js google: apiKey: engineId: algolia: applicationID: apiKey: indexName: azure: serviceName: indexName: queryKey: baidu: apiId:
+默认配置为 Hexo 搜索,但是需要安装插件才能使用:
+npm i -S hexo-generator-search hexo-generator-json-content
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/style/index.html b/v3/theme-settings/style/index.html
new file mode 100644
index 000000000..e37fa3a33
--- /dev/null
+++ b/v3/theme-settings/style/index.html
@@ -0,0 +1,2304 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义主题外观 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义主题外观
+
+
+
+
+
+
+
+ 最大布局宽度 blog/_config.volantis.yml style: ... max_width: 1080px
+
+网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。
+抗锯齿 blog/_config.volantis.yml style: ... font_smoothing: true
+
+自定义光标样式 blog/_config.volantis.yml style: ... cursor: enable: true text: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/text.png pointer: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png default: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png not-allowed: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/circle.png zoom-out: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png zoom-in: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png grab: https://cdn.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png
+
+
+导航栏样式 您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有:
+
+shadow :卡片阴影。
+floatable :当鼠标移动到容器内时,呈现出浮起来的效果。
+blur :背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。
+
+blog/_config.volantis.yml style: ... navbar: height: 64px effect: [shadow , blur ]
+
+滚动条样式 blog/_config.volantis.yml style: ... scrollbar: size: 4px border: 2px color: '#2196f3' hover: '#ff5722'
+
+侧边栏样式 视觉特效参数同上,值得注意的是:卡片的 floatable
效果和 blur
效果相冲突。
+blog/_config.volantis.yml style: ... sidebar: effect: [shadow ]
+
+正文区域样式 视觉特效参数同上,值得注意的是:卡片的 floatable
效果和 blur
效果相冲突。您可以在 language: true
这里设置代码块显示语言名称。text_align
可以设置 h1/h2/h3/h4/p 的文字对齐方向。
+blog/_config.volantis.yml style: ... body: effect: [shadow ] highlight: language: true copy_btn: true text_align: h1: left h2: left h3: left h4: left p: justify note: icon: '\f054' color: ''
+
+布局间距 您可以设置几种标题的布局间距 h2/h3/h4、段落间距 line、区块内部的段落间距 inline。
+blog/_config.volantis.yml style: ... gap: h2: 48px h3: 32px h4: 16px paragraph: 1rem row: .5rem
+
+自定义字体 您可以自定义正文和代码字体。
+blog/_config.volantis.yml style: ... fontfamily: logofont: fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'Varela Round' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/VarelaRound/VarelaRound-Regular.ttf weight: normal style: normal bodyfont: fontfamily: 'UbuntuMono, "PingFang SC", "Microsoft YaHei", Helvetica, Arial' name: 'UbuntuMono' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf weight: normal style: normal codefont: fontfamily: 'Menlo, Monaco' name: 'Monaco' url: https://cdn.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf weight: normal style: normal
+
+自定义颜色 blog/_config.volantis.yml style: ... color: site: '#21232F' card: '#444' text: '#fff' theme: '#ff9800' link: '#1BCDFC' hover: '#ff5722' inner: '#333' block: '#555' inlinecode: yellow codeblock: '#555' p: '#ccc'
+
+自定义右键菜单 blog/_config.volantis.yml rightmenu: enable: true layout: [home , help , examples , contributors , hr , source_docs , source_theme , hr , print , hr , music ] print: name: 打印页面 icon: fa fa-print onclick: document.execCommand('print') help: name: 常见问题 icon: fa fa-question url: https://volantis.js.org/faqs/ examples: name: 示例博客 icon: fa fa-rss url: https://volantis.js.org/examples/ contributors: name: 加入社区 icon: fa fa-fan fa-spin url: https://volantis.js.org/contributors/ source_docs: name: 本站源码 icon: fa fa-code-branch url: https://github.com/volantis-x/volantis-docs/ source_theme: name: 主题源码 icon: fa fa-code-branch url: https://github.com/volantis-x/hexo-theme-volantis/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/v3/theme-settings/widget/index.html b/v3/theme-settings/widget/index.html
new file mode 100644
index 000000000..309460884
--- /dev/null
+++ b/v3/theme-settings/widget/index.html
@@ -0,0 +1,2322 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 卡片式组件 - Volantis
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Volantis
+
+
+
开源社区主页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ widget 即小部件,大部分小部件都可以放置在侧边栏,一部分已经为正文区域显示做了优化,还有一部分只可以放置在文章页脚部分。与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。
+ 查看所有相关配置
+
+
blog/_config.volantis.yml widget: blogger: class: blogger display: [desktop ] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true social: true toc: class: toc display: [desktop , mobile ] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5 category: class: category display: [desktop ] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/ tagcloud: class: tagcloud display: [desktop ] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555' related_posts: class: related_posts display: [desktop , mobile ] header: icon: fas fa-bookmark title: 相关文章 max_count: 5 copyright: class: copyright display: [desktop , mobile ] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink donate: class: qrcode display: [desktop , mobile ] height: 64px fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
+
+
+
+每一个小部件都有 class
和 display
,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。
+小部件名: class: 小部件类别 display: [小部件在桌面端显示 , 小部件在移动设备显示 ]
+
+博主信息部件 blog/_config.volantis.yml blogger: class: blogger display: [desktop ] avatar: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png title: subtitle: jinrishici: true social: true
+其中,今日诗词 jinrishici
如果设置为一个字符串,这个字符串会变成占位文字,加载失败时显示。如果不需要,就请设置为 jinrishici: false
。social
的具体内容请在网站页脚部分设置。
+文章目录部件 blog/_config.volantis.yml toc: class: toc display: [desktop , mobile ] header: icon: fas fa-list title: 本文目录 list_number: false min_depth: 2 max_depth: 5
+这个部件只能放置在侧边栏,并且在文章中有效。在移动设备中预览时,手指向上滑动时,导航栏右边会出现 TOC 按钮,点击即可展开 TOC 部件。如果您需要显示章节序号,请设置 list_number
。 min_depth
和 max_depth
代表 TOC 支持的标题层级,最大范围是2~6。
+文章分类部件 blog/_config.volantis.yml category: class: category display: [desktop ] header: icon: fas fa-folder-open title: 文章分类 url: /blog/categories/
+这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。
+标签云部件 blog/_config.volantis.yml tagcloud: class: tagcloud display: [desktop ] header: icon: fas fa-tags title: 热门标签 url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color: '#999' end_color: '#555'
+这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。
+相关文章部件 blog/_config.volantis.yml related_posts: class: related_posts display: [desktop , mobile ] header: icon: fas fa-bookmark title: 相关文章 max_count: 5
+这个小部件建议放置在文章页脚,要使用这个部件,您需要安装插件:
+npm i -S hexo-related-popular-posts
+值得注意的是,开启了这个功能之后,每次修改文章内容包括 front-matter
之后,都需要重新 hexo s
。
+
+文章版权部件 blog/_config.volantis.yml copyright: class: copyright display: [desktop , mobile ] blockquote: true permalink: '本文永久链接是:' content: - '博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议' - permalink
+这个部件只可以 放置在文章页脚。
+二维码部件 blog/_config.volantis.yml donate: class: qrcode display: [desktop , mobile ] height: 64px fancybox: true images: - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png - https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
+您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。
+通用文本部件 blog/_config.volantis.yml repos: class: text display: [desktop ] header: icon: fab fa-github title: 点个赞吧 url: https://github.com/xaoxuu/ content: - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)' - '[<img src="https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/xaoxuu/Inspire)'
+您可以创建用于展示任何文本内容的文本部件。
+通用列表部件 blog/_config.volantis.yml wiki-hexo-theme: class: list display: [desktop , mobile ] header: icon: fas fa-chevron-left title: Hexo Themes url: /wiki/ rows: - name: Volantis for Hexo url: /wiki/volantis/ - name: Resume for Hexo url: /wiki/resume/
+您可以创建用于展示任何链接列表的列表部件。列表的 rows
中的每一项支持的属性有: name
、url
、icon
、img
、avatar
,其中 img
是方形图片的链接,avatar
是圆形图片的链接。
+参考资料 这个部件的布局继承自 list 部件,用于展示文章的参考资料。请将您的 Volantis 升级至 2.5 版本以上使用。
+blog/_config.volantis.yml references: class: references display: [desktop , mobile ] header: icon: fas fa-quote-left title: 参考资料
+
+在文章的 front-matter 中设置:
+front-matter references: - name: Apple Developer Documentation url: https://developer.apple.com/documentation/
+
+组索引 这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。
+blog/_config.volantis.yml group-1: class: group display: [desktop , mobile ] header: icon: fab fa-apple title: Developer url: /wiki/ios/
+
+在文章的 front-matter 中设置:
+front-matter group: group-1 order: 16 sidebar: [group-1 , toc ]
+
+「group-1」卡片将会以列表的形式显示所有设置了 group: group-1
的文章,顺序按照 order
从小到大排列。
+通用网格部件 blog/_config.volantis.yml feedback: class: grid display: [desktop , mobile ] header: icon: fas fa-headset title: 联系开发者 url: https://github.com/volantis-x/hexo-theme-volantis fixed: true rows: - name: 反馈BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 疑问求助 icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ - name: 提个建议 icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/
+您可以创建用于展示任何链接列表的网格部件。网格默认根据文字长度自动确定每一个格子的宽度,如果文字长短不一,建议通过设置 fixed: true
来固定宽度,此时文字过长的格子中的文字会换行显示。
+通用页面部件 blog/_config.volantis.yml test: class: page display: [desktop , mobile ] pid: haha content: excerpt
+您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid
属性和文章的 front-matter
中设置一样的 pid
即可。 content
代表这个部件显示的内容,可选 excerpt
,more
,content
分别对应文章的摘要、摘要后面的内容、全文。
+部件库文件 部件库中的所有部件都可以写在部件库文件中,您需要创建一个文件在以下路径:
+blog/source/_data/widget.yml
+文件内容示例:widget.yml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
我近期在找工作,希望您能够帮忙给下面这个项目点亮 Star 并保留两三个月,非常感谢。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
这份文档过于久远,如果您使用的是新版的主题,请查看新版本的文档。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
正在检查 Disqus 能否访问...