From ec5accb6c440f498ac4d16a7b897a0d2241bdeca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Dec 2023 01:42:59 +0000 Subject: [PATCH] deploy: volantis-x/hexo-theme-volantis@43dbdbe9e7e471288e0a08ef12082291581e33ca --- .nojekyll | 0 404.html | 1 + CNAME | 1 + advanced-settings/index.html | 1 + archives/2013/12/index.html | 1 + archives/2013/12/page/2/index.html | 1 + archives/2013/index.html | 1 + archives/2013/page/2/index.html | 1 + archives/2017/10/index.html | 1 + archives/2017/index.html | 1 + archives/2018/07/index.html | 1 + archives/2018/index.html | 1 + archives/2019/07/index.html | 1 + archives/2019/index.html | 1 + archives/2020/02/index.html | 1 + archives/2020/03/index.html | 1 + archives/2020/04/index.html | 1 + archives/2020/index.html | 1 + archives/2021/01/index.html | 1 + archives/2021/01/page/2/index.html | 1 + archives/2021/index.html | 1 + archives/2021/page/2/index.html | 1 + archives/index.html | 1 + archives/page/2/index.html | 1 + archives/page/3/index.html | 1 + archives/page/4/index.html | 1 + atom.xml | 425 ++++++++++++++++ blog/categories/index.html | 1 + blog/tags/index.html | 1 + categories/demo/index.html | 1 + categories/demo/page/2/index.html | 1 + .../index.html" | 1 + content.json | 1 + contributors/index.html | 23 + css/Readme.html | 1 + css/first.css | 2 + css/style.css | 2 + demo/test-1/index.html | 4 + demo/test-10/index.html | 4 + demo/test-11/index.html | 4 + demo/test-12/index.html | 4 + demo/test-13/index.html | 4 + demo/test-14/index.html | 4 + demo/test-15/index.html | 4 + demo/test-2/index.html | 4 + demo/test-3/index.html | 4 + demo/test-4/index.html | 4 + demo/test-5/index.html | 4 + demo/test-6/index.html | 4 + demo/test-7/index.html | 4 + demo/test-8/index.html | 4 + demo/test-9/index.html | 4 + examples/index.html | 39 ++ faqs/index.html | 10 + getting-started/index.html | 1 + index.html | 1 + js/app.js | 2 + js/plugins/aplayer.js | 2 + js/plugins/parallax.js | 2 + js/plugins/rightMenus.js | 2 + js/plugins/tags/contributors.js | 2 + js/plugins/tags/friends.js | 2 + js/plugins/tags/sites.js | 2 + js/search/algolia.js | 2 + js/search/hexo.js | 2 + js/search/meilisearch.js | 2 + manifest.json | 29 ++ maps/css/first.css.map | 1 + maps/css/style.css.map | 1 + maps/js/app.js.map | 1 + maps/js/plugins/aplayer.js.map | 1 + maps/js/plugins/parallax.js.map | 1 + maps/js/plugins/rightMenus.js.map | 1 + maps/js/plugins/tags/contributors.js.map | 1 + maps/js/plugins/tags/friends.js.map | 1 + maps/js/plugins/tags/sites.js.map | 1 + maps/js/search/algolia.js.map | 1 + maps/js/search/hexo.js.map | 1 + maps/js/search/meilisearch.js.map | 1 + maps/sw.js.map | 1 + news/2017-10-24/index.html | 1 + news/2020-02-19/index.html | 1 + news/2020-02-20/index.html | 1 + news/2020-02-21/index.html | 1 + news/2020-02-22/index.html | 1 + news/2020-02-25/index.html | 1 + news/2020-03-06-2.0-beta/index.html | 11 + news/2020-03-10-2.0/index.html | 25 + news/2020-04-04/index.html | 14 + page-settings/body/index.html | 1 + page-settings/front-matter/index.html | 1 + page-settings/layout/index.html | 1 + page-settings/math/index.html | 1 + page-sitemap.xml | 480 ++++++++++++++++++ page/2/index.html | 1 + page/3/index.html | 1 + page/4/index.html | 1 + post-sitemap.xml | 348 +++++++++++++ robots.txt | 2 + site-settings/configuration/index.html | 1 + sitemap.xml | 16 + sitemap.xsl | 191 +++++++ start | 3 + sw.js | 2 + tag-plugins/aplayer/index.html | 1 + tag-plugins/audio/index.html | 1 + tag-plugins/button/index.html | 1 + tag-plugins/checkbox/index.html | 1 + tag-plugins/dropmenu/index.html | 1 + tag-plugins/folding/index.html | 1 + tag-plugins/frame/index.html | 1 + tag-plugins/gallery/index.html | 1 + tag-plugins/ghcard/index.html | 1 + tag-plugins/image/index.html | 1 + tag-plugins/index.html | 1 + tag-plugins/inlineimage/index.html | 1 + tag-plugins/issues/index.html | 1 + tag-plugins/link/index.html | 1 + tag-plugins/note/index.html | 1 + tag-plugins/noteblock/index.html | 1 + tag-plugins/p/index.html | 1 + tag-plugins/radio/index.html | 1 + tag-plugins/site/index.html | 1 + tag-plugins/span/index.html | 1 + tag-plugins/tab/index.html | 1 + tag-plugins/text/index.html | 1 + tag-plugins/timeline/index.html | 1 + tag-plugins/video/index.html | 1 + tags/bar/index.html | 1 + tags/foo/index.html | 1 + test/2020-03-06-test-url/index.html | 1 + test/code-highlight/index.html | 1 + test/elements/index.html | 1 + test/excerpts/index.html | 1 + test/gallery-post/index.html | 1 + test/hello-world/index.html | 1 + test/images/index.html | 1 + test/link-post-without-title/index.html | 1 + test/link-post/index.html | 1 + test/long-title/index.html | 1 + test/markdown/index.html | 3 + test/no-title/index.html | 1 + test/tag-plugins/index.html | 1 + .../index.html" | 1 + .../index.html" | 1 + theme-settings/comments/index.html | 1 + theme-settings/configuration/index.html | 1 + theme-settings/cover/index.html | 1 + theme-settings/footer/index.html | 1 + theme-settings/layout/index.html | 1 + theme-settings/navbar/index.html | 1 + theme-settings/plugins/index.html | 1 + theme-settings/search/index.html | 1 + theme-settings/sidebar/index.html | 1 + theme-settings/style/index.html | 1 + v2/advanced-settings/index.html | 1 + v2/getting-started/index.html | 1 + v2/page-settings/index.html | 1 + v2/site-settings/index.html | 1 + v2/tag-plugins/index.html | 1 + v2/theme-settings/index.html | 1 + v3/advanced-settings/index.html | 1 + v3/getting-started/index.html | 1 + v3/page-settings/body/index.html | 1 + v3/page-settings/front-matter/index.html | 1 + v3/page-settings/layout/index.html | 1 + v3/page-settings/math/index.html | 1 + v3/site-settings/configuration/index.html | 1 + v3/tag-plugins/container/index.html | 1 + v3/tag-plugins/hexo/index.html | 1 + v3/tag-plugins/link/index.html | 1 + v3/tag-plugins/media/index.html | 1 + v3/tag-plugins/text/index.html | 1 + v3/theme-settings/comments/index.html | 1 + v3/theme-settings/configuration/index.html | 1 + v3/theme-settings/cover/index.html | 1 + v3/theme-settings/footer/index.html | 1 + v3/theme-settings/layout/index.html | 1 + v3/theme-settings/meta/index.html | 1 + v3/theme-settings/navbar/index.html | 1 + v3/theme-settings/plugins/index.html | 1 + v3/theme-settings/search/index.html | 1 + v3/theme-settings/style/index.html | 1 + v3/theme-settings/widget/index.html | 1 + v4/advanced-settings/index.html | 1 + v4/getting-started/index.html | 1 + v4/page-settings/index.html | 1 + v4/site-settings/index.html | 1 + v4/tag-plugins/index.html | 1 + v4/theme-settings/index.html | 1 + 190 files changed, 1851 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 CNAME create mode 100644 advanced-settings/index.html create mode 100644 archives/2013/12/index.html create mode 100644 archives/2013/12/page/2/index.html create mode 100644 archives/2013/index.html create mode 100644 archives/2013/page/2/index.html create mode 100644 archives/2017/10/index.html create mode 100644 archives/2017/index.html create mode 100644 archives/2018/07/index.html create mode 100644 archives/2018/index.html create mode 100644 archives/2019/07/index.html create mode 100644 archives/2019/index.html create mode 100644 archives/2020/02/index.html create mode 100644 archives/2020/03/index.html create mode 100644 archives/2020/04/index.html create mode 100644 archives/2020/index.html create mode 100644 archives/2021/01/index.html create mode 100644 archives/2021/01/page/2/index.html create mode 100644 archives/2021/index.html create mode 100644 archives/2021/page/2/index.html create mode 100644 archives/index.html create mode 100644 archives/page/2/index.html create mode 100644 archives/page/3/index.html create mode 100644 archives/page/4/index.html create mode 100644 atom.xml create mode 100644 blog/categories/index.html create mode 100644 blog/tags/index.html create mode 100644 categories/demo/index.html create mode 100644 categories/demo/page/2/index.html create mode 100644 "categories/\345\256\230\346\226\271\350\265\204\350\256\257/index.html" create mode 100644 content.json create mode 100644 contributors/index.html create mode 100644 css/Readme.html create mode 100644 css/first.css create mode 100644 css/style.css create mode 100644 demo/test-1/index.html create mode 100644 demo/test-10/index.html create mode 100644 demo/test-11/index.html create mode 100644 demo/test-12/index.html create mode 100644 demo/test-13/index.html create mode 100644 demo/test-14/index.html create mode 100644 demo/test-15/index.html create mode 100644 demo/test-2/index.html create mode 100644 demo/test-3/index.html create mode 100644 demo/test-4/index.html create mode 100644 demo/test-5/index.html create mode 100644 demo/test-6/index.html create mode 100644 demo/test-7/index.html create mode 100644 demo/test-8/index.html create mode 100644 demo/test-9/index.html create mode 100644 examples/index.html create mode 100644 faqs/index.html create mode 100644 getting-started/index.html create mode 100644 index.html create mode 100644 js/app.js create mode 100644 js/plugins/aplayer.js create mode 100644 js/plugins/parallax.js create mode 100644 js/plugins/rightMenus.js create mode 100644 js/plugins/tags/contributors.js create mode 100644 js/plugins/tags/friends.js create mode 100644 js/plugins/tags/sites.js create mode 100644 js/search/algolia.js create mode 100644 js/search/hexo.js create mode 100644 js/search/meilisearch.js create mode 100644 manifest.json create mode 100644 maps/css/first.css.map create mode 100644 maps/css/style.css.map create mode 100644 maps/js/app.js.map create mode 100644 maps/js/plugins/aplayer.js.map create mode 100644 maps/js/plugins/parallax.js.map create mode 100644 maps/js/plugins/rightMenus.js.map create mode 100644 maps/js/plugins/tags/contributors.js.map create mode 100644 maps/js/plugins/tags/friends.js.map create mode 100644 maps/js/plugins/tags/sites.js.map create mode 100644 maps/js/search/algolia.js.map create mode 100644 maps/js/search/hexo.js.map create mode 100644 maps/js/search/meilisearch.js.map create mode 100644 maps/sw.js.map create mode 100644 news/2017-10-24/index.html create mode 100644 news/2020-02-19/index.html create mode 100644 news/2020-02-20/index.html create mode 100644 news/2020-02-21/index.html create mode 100644 news/2020-02-22/index.html create mode 100644 news/2020-02-25/index.html create mode 100644 news/2020-03-06-2.0-beta/index.html create mode 100644 news/2020-03-10-2.0/index.html create mode 100644 news/2020-04-04/index.html create mode 100644 page-settings/body/index.html create mode 100644 page-settings/front-matter/index.html create mode 100644 page-settings/layout/index.html create mode 100644 page-settings/math/index.html create mode 100644 page-sitemap.xml create mode 100644 page/2/index.html create mode 100644 page/3/index.html create mode 100644 page/4/index.html create mode 100644 post-sitemap.xml create mode 100644 robots.txt create mode 100644 site-settings/configuration/index.html create mode 100644 sitemap.xml create mode 100644 sitemap.xsl create mode 100644 start create mode 100644 sw.js create mode 100644 tag-plugins/aplayer/index.html create mode 100644 tag-plugins/audio/index.html create mode 100644 tag-plugins/button/index.html create mode 100644 tag-plugins/checkbox/index.html create mode 100644 tag-plugins/dropmenu/index.html create mode 100644 tag-plugins/folding/index.html create mode 100644 tag-plugins/frame/index.html create mode 100644 tag-plugins/gallery/index.html create mode 100644 tag-plugins/ghcard/index.html create mode 100644 tag-plugins/image/index.html create mode 100644 tag-plugins/index.html create mode 100644 tag-plugins/inlineimage/index.html create mode 100644 tag-plugins/issues/index.html create mode 100644 tag-plugins/link/index.html create mode 100644 tag-plugins/note/index.html create mode 100644 tag-plugins/noteblock/index.html create mode 100644 tag-plugins/p/index.html create mode 100644 tag-plugins/radio/index.html create mode 100644 tag-plugins/site/index.html create mode 100644 tag-plugins/span/index.html create mode 100644 tag-plugins/tab/index.html create mode 100644 tag-plugins/text/index.html create mode 100644 tag-plugins/timeline/index.html create mode 100644 tag-plugins/video/index.html create mode 100644 tags/bar/index.html create mode 100644 tags/foo/index.html create mode 100644 test/2020-03-06-test-url/index.html create mode 100644 test/code-highlight/index.html create mode 100644 test/elements/index.html create mode 100644 test/excerpts/index.html create mode 100644 test/gallery-post/index.html create mode 100644 test/hello-world/index.html create mode 100644 test/images/index.html create mode 100644 test/link-post-without-title/index.html create mode 100644 test/link-post/index.html create mode 100644 test/long-title/index.html create mode 100644 test/markdown/index.html create mode 100644 test/no-title/index.html create mode 100644 test/tag-plugins/index.html create mode 100644 "test/\344\270\255\346\226\207\346\270\254\350\251\246/index.html" create mode 100644 "test/\346\227\245\346\234\254\350\252\236\343\203\206\343\202\271\343\203\210/index.html" create mode 100644 theme-settings/comments/index.html create mode 100644 theme-settings/configuration/index.html create mode 100644 theme-settings/cover/index.html create mode 100644 theme-settings/footer/index.html create mode 100644 theme-settings/layout/index.html create mode 100644 theme-settings/navbar/index.html create mode 100644 theme-settings/plugins/index.html create mode 100644 theme-settings/search/index.html create mode 100644 theme-settings/sidebar/index.html create mode 100644 theme-settings/style/index.html create mode 100644 v2/advanced-settings/index.html create mode 100644 v2/getting-started/index.html create mode 100644 v2/page-settings/index.html create mode 100644 v2/site-settings/index.html create mode 100644 v2/tag-plugins/index.html create mode 100644 v2/theme-settings/index.html create mode 100644 v3/advanced-settings/index.html create mode 100644 v3/getting-started/index.html create mode 100644 v3/page-settings/body/index.html create mode 100644 v3/page-settings/front-matter/index.html create mode 100644 v3/page-settings/layout/index.html create mode 100644 v3/page-settings/math/index.html create mode 100644 v3/site-settings/configuration/index.html create mode 100644 v3/tag-plugins/container/index.html create mode 100644 v3/tag-plugins/hexo/index.html create mode 100644 v3/tag-plugins/link/index.html create mode 100644 v3/tag-plugins/media/index.html create mode 100644 v3/tag-plugins/text/index.html create mode 100644 v3/theme-settings/comments/index.html create mode 100644 v3/theme-settings/configuration/index.html create mode 100644 v3/theme-settings/cover/index.html create mode 100644 v3/theme-settings/footer/index.html create mode 100644 v3/theme-settings/layout/index.html create mode 100644 v3/theme-settings/meta/index.html create mode 100644 v3/theme-settings/navbar/index.html create mode 100644 v3/theme-settings/plugins/index.html create mode 100644 v3/theme-settings/search/index.html create mode 100644 v3/theme-settings/style/index.html create mode 100644 v3/theme-settings/widget/index.html create mode 100644 v4/advanced-settings/index.html create mode 100644 v4/getting-started/index.html create mode 100644 v4/page-settings/index.html create mode 100644 v4/site-settings/index.html create mode 100644 v4/tag-plugins/index.html create mode 100644 v4/theme-settings/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000000..e69de29bb2 diff --git a/404.html b/404.html new file mode 100644 index 0000000000..e9d8abdd5f --- /dev/null +++ b/404.html @@ -0,0 +1 @@ +404 Not Found - Volantis

很抱歉,您访问的页面不存在

可能是输入地址有误或该地址已被删除

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000000..cf595867cb --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +volantis-x.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 0000000000..a5feda625b --- /dev/null +++ b/advanced-settings/index.html @@ -0,0 +1 @@ +Volantis: advanced settings - Volantis

Set up submodule

add the theme as a submodule
git submodule add https://github.com/volantis-x/hexo-theme-volantis.git themes/volantis

Multiplayer collaboration

The default author information is set in the theme configuration file:

blog/themes/volantis/_config.yml
# Article layout
article:
...
body:
...
meta_library:
author:
avatar:
name: Please set the author of the article
url: /

Volantis supports multiple authors, other author information needs to be written in the data file, for example:

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

Just add ʻauthor` to the front-matter of the article:

---
title: Jon Snow | Game of Thrones Wiki | Fandom
author: Jon
---

Speed ​​up the website

Loading speed

  • Reduce unnecessary js plugins, such as word count, dynamic background.

  • Find and solve the slow down resources, take Chrome browser as an example:

    1. Right-click on the page and select "Check".
    2. In the right window, "Network" tab, and check "Disable cache".
    3. Refresh the web page to view resources that load slowly.
      3.1. For slow loading pictures, CDN is recommended.
      3.2. It is recommended to discard the js plugins that load slowly and do not need to.
      3.3. The js plug-in that is slow to load but must be used is recommended to download and upload to jsdelivr.

Running speed

  • When visiting a website with dynamic special effects backgrounds (such as snowflakes, particles, etc.), the phone will soon become hot and get stuck, the notebook will soon fan out and the browser prompts to close this page. If you want the website to have a good experience, please try not to install such plug-ins.

Optimize SEO

blog/_config.volantis.yml
seo:
# 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

In front-matter, you can set keywords, description, robots and seo_title. Among them, seo_title is only used as the title of the webpage and has a higher priority than title.

Use CDN

For most users who deploy blogs to GitHub, it is relatively slow to load local resources directly. You can use the CDN service provided by jsdelivr for open source projects.

For the 4.1.4+ version, the JS file uses the CDN compressed version of https://unpkg.com/hexo-theme-volantis/source/js/ by default.

For example: https://unpkg.com/hexo-theme-volantis@4.1.4/source/js/app.min.js

How to open

blog/_config.volantis.yml
use_cdn: true

important:

  1. Developers note that ʻuse_cdnis set tofalse`.
  2. Pay attention to the version number of the CDN file:
    blog/_config.volantis.yml
    info:
    theme_version: '4.1.4' # This is theme's version.
  3. Only JS files provide CDN by default.
  4. About CSS file CDN:
    blog/_config.volantis.yml
    info:
    theme_name: Volantis # This is theme's name.
    theme_version: '4.1.4' # This is theme's version.
    theme_docs: https://volantis.js.org/ # This is theme's URL.
    theme_repo: https://github.com/volantis-x/hexo-theme-volantis
    cdn:
    js: # The default is https://unpkg.com/hexo-theme-volantis@4.1.4/source/js/app.min.js
    css:
    first: # CDN is not provided by default. First.css is the style rendered for the first screen, and contains the style of cover navbar search.
    style: # CDN is not provided by default, and style.css is a delayed loading style.

if you need to DIY the style

Custom CDN

If you upload the corresponding file to your CDN server, you can change the corresponding link to your own CDN link.

Try Terser to compress ES6

Install compression tool

npm install -g gulp
npm install --save gulp
npm install --save gulp-html-minifier-terser
npm install --save gulp-htmlclean
npm install --save gulp-htmlmin
npm install --save gulp-minify-css
npm install gulp-terser --save-dev

gulp configuration file

blog/gulpfile.js
var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
var htmlmin = require('gulp-html-minifier-terser');
var htmlclean = require('gulp-htmlclean');
var terser = require('gulp-terser');

// Compress the css file
const minify_css = () => (
gulp.src(['./public/**/*.css'])
.pipe(minifycss())
.pipe(gulp.dest('./public'))
);

// Compress html file
const minify_html = () => (
gulp.src(['./public/**/*.html','!./public/{lib,lib/**}'])
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}))
.pipe(gulp.dest('./public'))
)

// Compress the js file
const minify_js = () => (
gulp.src(['./public/**/*.js','!./public/**/*.min.js','!./public/{lib,lib/**}'] )
.pipe(terser())
.pipe(gulp.dest('./public'))
)

module.exports = {
minify_html: minify_html,
minify_css: minify_css,
minify_js: minify_js
};
gulp.task('one', gulp.parallel(
minify_html,
minify_css,
minify_js
))

gulp.task('default', gulp.series('one'));

Run compression

gulp

Install Service Worker Service

blog/_config.yml
# Global import
import:
script:
-<script>"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then(function(n){n.onupdatefound=function(){var e=n.installing;e.onstatechange=function( ){switch(e.state){case"installed":navigator.serviceWorker.controller?console.log("Updated serviceWorker."):console.log("serviceWorker Sucess!");break;case"redundant":console .log("The installing service worker became redundant.")}}}}).catch(function(e){console.log("Error during service worker registration:",e)}); </script>

Create the sw.js file in blog/source.

The content is as follows:

importScripts('https://unpkg.com/workbox-cdn@5.1.3/workbox/workbox-sw.js');

workbox.setConfig({
modulePathPrefix:'https://unpkg.com/workbox-cdn@5.1.3/workbox/'
});

const {core, precaching, routing, strategies, expiration, cacheableResponse, backgroundSync} = workbox;
const {CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate} = strategies;
const {ExpirationPlugin} = expiration;
const {CacheableResponsePlugin} = cacheableResponse;

const cacheSuffixVersion ='-000010', // The cache version number is extremely important. You must modify the cache version number when publishing web pages after modifying static files
maxEntries = 100;

self.addEventListener('activate', (event) => {
event.waitUntil(
caches.keys().then((keys) => {
return Promise.all(keys.map((key) => {
if (!key.includes(cacheSuffixVersion)) return caches.delete(key);
}));
})
);
});


core.setCacheNameDetails({
prefix:'volantis', // extremely important, draw up a name by yourself
suffix: cacheSuffixVersion
});

core.skipWaiting();
core.clientsClaim();
precaching.cleanupOutdatedCaches();

/*
* Precache
*-Static Assets
*/
precaching.precacheAndRoute( // Extremely important defines the static file to be cached for the first time
[
{url:'/css/first.css', revision: null },
{url:'/css/style.css', revision: null },
{url:'/js/app.js', revision: null },
],
);

/*
* Cache File From CDN
*
* Method: CacheFirst
* cacheName: static-immutable
* cacheTime: 30d
*/

// cdn.jsdelivr.net-cors enabled
routing.registerRoute(
/.*cdn\.jsdelivr\.net/,
new CacheFirst({
cacheName:'static-immutable' + cacheSuffixVersion,
fetchOptions: {
mode:'cors',
credentials:'omit'
},
plugins: [
new ExpirationPlugin({
maxAgeSeconds: 30 * 24 * 60 * 60,
purgeOnQuotaError: true
})
]
})
);

// m7.music.126.net-cors enabled
routing.registerRoute(
/.*m7\.music\.126\.net/,
new CacheFirst({
cacheName:'static-immutable' + cacheSuffixVersion,
fetchOptions: {
mode:'cors',
credentials:'omit'
},
plugins: [
new ExpirationPlugin({
maxAgeSeconds: 30 * 24 * 60 * 60,
purgeOnQuotaError: true
})
]
})
);

/*
* No Cache
*
* Method: networkOnly
*/
routing.registerRoute(
/.*baidu\.com.*/,
new NetworkOnly()
);
/*
* Others img fonts
* Method: staleWhileRevalidate
*/
routing.registerRoute(
// Cache image fonts files
/.*\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/,
new StaleWhileRevalidate()
);

/*
* Static Assets
* Method: staleWhileRevalidate
*/
routing.registerRoute(
// Cache CSS files
/.*\.(css|js)/,
// Use cache but update in the background ASAP
new StaleWhileRevalidate()
);

/*
* sw.js-Revalidate every time
* staleWhileRevalidate
*/
routing.registerRoute(
'/sw.js', // this file name
new StaleWhileRevalidate()
);

/*
* Default-Serve as it is
* networkFirst
*/
routing.setDefaultHandler(
new NetworkFirst({
networkTimeoutSeconds: 3
})
);

after modifying the static file

  1. Install the plugin

    npm i -S hexo-related-popular-posts
  2. Custom configuration method of plug-in:

If you use a header image, you can add the following settings in the site configuration file to make related articles display the correct article header image:

blog/_config.yml
popularPosts:
eyeCatchImageAttributeName: headimg

note

You need to upgrade to 5.0.1 and above to support custom header images, see #29

Analysis and Statistics

By default, the visit statistics of Bu Suanzi are supported. You can add Baidu statistics and Google Analytics by yourself.

Word count and reading time

  1. Install the following plugins:
    npm i --save hexo-wordcount
  2. Modify the configuration file and open the wordcount plugin
    blog/_config.volantis.yml
    plugins:
    ...
    # The word count of the article, the reading time, and the plug-in needs to be installed: npm i --save hexo-wordcount
    wordcount:
    enable: #true
  3. Then modify the configuration file to write wordcount into the meta location that needs to be displayed:
    blog/_config.volantis.yml
    # Article layout
    article:
    ...
    # The layout scheme of the article card body on the article details page
    body:
    # Top of article information
    # Take from meta_library
    top_meta: [..., wordcount, ...]
    ...
    # Information at the bottom of the article
    # Take from meta_library
    bottom_meta: [..., wordcount, ...]

CNZZ Statistics

Please refer to this tutorial by ZYMIN:

More advanced gameplay

For details, please refer to this blog of @TRHX:

Contains a variety of detailed tutorials such as translucent cards, adding cartoon characters, custom mouse styles, mouse special effects, firework special effects, color scrolling fonts, website running time, dynamic browser titles, and snowflakes falling special effects.

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/archives/2013/12/index.html b/archives/2013/12/index.html new file mode 100644 index 0000000000..c31be836a4 --- /dev/null +++ b/archives/2013/12/index.html @@ -0,0 +1 @@ +Archive: 2013/12 - 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 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.

David LevithanWide Awake

Quote from Twitter

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

alert('Hello World!');

With caption

Array.map
array.map(callback[, thisArg])

With caption and URL

.compactUnderscore.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).

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.

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.

This is a link post. Clicking on the link should open Google in a new tab or window.


1 / 2

\ No newline at end of file diff --git a/archives/2013/12/page/2/index.html b/archives/2013/12/page/2/index.html new file mode 100644 index 0000000000..db417c7bb0 --- /dev/null +++ b/archives/2013/12/page/2/index.html @@ -0,0 +1 @@ +Archive: 2013/12 - Volantis

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)

  1. List Item 1
  2. List Item 2
  3. 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 1Table Header 2Table Header 3
Division 1Division 2Division 3
Division 1Division 2Division 3
Division 1Division 2Division 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.


\ No newline at end of file diff --git a/archives/2013/index.html b/archives/2013/index.html new file mode 100644 index 0000000000..2aacd6e54a --- /dev/null +++ b/archives/2013/index.html @@ -0,0 +1 @@ +Archive: 2013 - 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 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.

David LevithanWide Awake

Quote from Twitter

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

alert('Hello World!');

With caption

Array.map
array.map(callback[, thisArg])

With caption and URL

.compactUnderscore.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).

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.

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.

This is a link post. Clicking on the link should open Google in a new tab or window.


1 / 2

\ No newline at end of file diff --git a/archives/2013/page/2/index.html b/archives/2013/page/2/index.html new file mode 100644 index 0000000000..4226a31264 --- /dev/null +++ b/archives/2013/page/2/index.html @@ -0,0 +1 @@ +Archive: 2013 - Volantis

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)

  1. List Item 1
  2. List Item 2
  3. 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 1Table Header 2Table Header 3
Division 1Division 2Division 3
Division 1Division 2Division 3
Division 1Division 2Division 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.


\ No newline at end of file diff --git a/archives/2017/10/index.html b/archives/2017/10/index.html new file mode 100644 index 0000000000..9e1ede5d36 --- /dev/null +++ b/archives/2017/10/index.html @@ -0,0 +1 @@ +Archive: 2017/10 - Volantis


Volantis is a functional and highly modular hexo blog theme. Thanks to its powerful modular features, you can easily build a minimalist style blog, or follow the example of the official website to build a large-scale comprehensive blog with multi person cooperation and document module.


Let's get started
\ No newline at end of file diff --git a/archives/2017/index.html b/archives/2017/index.html new file mode 100644 index 0000000000..691720a17d --- /dev/null +++ b/archives/2017/index.html @@ -0,0 +1 @@ +Archive: 2017 - Volantis


Volantis is a functional and highly modular hexo blog theme. Thanks to its powerful modular features, you can easily build a minimalist style blog, or follow the example of the official website to build a large-scale comprehensive blog with multi person cooperation and document module.


Let's get started
\ No newline at end of file diff --git a/archives/2018/07/index.html b/archives/2018/07/index.html new file mode 100644 index 0000000000..176d8694a3 --- /dev/null +++ b/archives/2018/07/index.html @@ -0,0 +1 @@ +Archive: 2018/7 - 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.

\ No newline at end of file diff --git a/archives/2018/index.html b/archives/2018/index.html new file mode 100644 index 0000000000..980f33dc51 --- /dev/null +++ b/archives/2018/index.html @@ -0,0 +1 @@ +Archive: 2018 - 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.

\ No newline at end of file diff --git a/archives/2019/07/index.html b/archives/2019/07/index.html new file mode 100644 index 0000000000..4f3a3c7255 --- /dev/null +++ b/archives/2019/07/index.html @@ -0,0 +1 @@ +Archive: 2019/7 - Volantis

Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org

\ No newline at end of file diff --git a/archives/2019/index.html b/archives/2019/index.html new file mode 100644 index 0000000000..4395bceb25 --- /dev/null +++ b/archives/2019/index.html @@ -0,0 +1 @@ +Archive: 2019 - Volantis

Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org

\ No newline at end of file diff --git a/archives/2020/02/index.html b/archives/2020/02/index.html new file mode 100644 index 0000000000..8c1f08c04d --- /dev/null +++ b/archives/2020/02/index.html @@ -0,0 +1 @@ +Archive: 2020/2 - Volantis

由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。

  • 不能使用封面
  • mathjax
  • 有折叠框的页面,折叠框打开之后目录高亮位置不对应
  • 很多未知问题

感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》
当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。

主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。

主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。

现在使用的文档页面源码是: volantis-docs

使用 GitHub Issue

由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。
为了精准高效解决问题,请前往 GitHub Issue

遇到问题怎么办

  1. 确定已经查阅文档找不到相关内容。
  2. 前往「常见问题」页面,查看是否有解决方案。
  3. 访问在线示例,查看是否具有相同第问题。
    3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。
    3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
  4. 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。

主版本号.子版本号.修订版本号

主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:

  • 主版本号: 较大改动、框架调整或重构
  • 子版本号: 较小或局部的功能性更新
  • 修订版本号: 修复BUG或无关紧要的细节调整
\ No newline at end of file diff --git a/archives/2020/03/index.html b/archives/2020/03/index.html new file mode 100644 index 0000000000..75699bdf2f --- /dev/null +++ b/archives/2020/03/index.html @@ -0,0 +1 @@ +Archive: 2020/3 - Volantis

本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:

  1. 卸载 less

    npm uninstall hexo-renderer-less --save
  2. 安装 stylus

    npm install hexo-renderer-stylus --save

Beta6
  • 导航栏N级菜单支持分割线和小标题,详见我的个人博客。

5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)

相关 Issue: #164

结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。

markdwon 解析插件为 hexo-renderer-marked 时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false 都可以避免 deploy 报错。
插件:hexo-renderer-marked

\ No newline at end of file diff --git a/archives/2020/04/index.html b/archives/2020/04/index.html new file mode 100644 index 0000000000..fdbc1bdd37 --- /dev/null +++ b/archives/2020/04/index.html @@ -0,0 +1 @@ +Archive: 2020/4 - Volantis

由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。

  • 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。
  • 当主题稳定后会提供英文文档。
\ No newline at end of file diff --git a/archives/2020/index.html b/archives/2020/index.html new file mode 100644 index 0000000000..8d066ded1e --- /dev/null +++ b/archives/2020/index.html @@ -0,0 +1 @@ +Archive: 2020 - Volantis

由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。

  • 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。
  • 当主题稳定后会提供英文文档。

本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:

  1. 卸载 less

    npm uninstall hexo-renderer-less --save
  2. 安装 stylus

    npm install hexo-renderer-stylus --save

Beta6
  • 导航栏N级菜单支持分割线和小标题,详见我的个人博客。

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

遇到问题怎么办

  1. 确定已经查阅文档找不到相关内容。
  2. 前往「常见问题」页面,查看是否有解决方案。
  3. 访问在线示例,查看是否具有相同第问题。
    3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。
    3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
  4. 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。

主版本号.子版本号.修订版本号

主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:

  • 主版本号: 较大改动、框架调整或重构
  • 子版本号: 较小或局部的功能性更新
  • 修订版本号: 修复BUG或无关紧要的细节调整
\ No newline at end of file diff --git a/archives/2021/01/index.html b/archives/2021/01/index.html new file mode 100644 index 0000000000..6bb78ad3ae --- /dev/null +++ b/archives/2021/01/index.html @@ -0,0 +1 @@ +Archive: 2021/1 - Volantis

Lorem ipsum dolor sit amet1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

1 / 2

\ No newline at end of file diff --git a/archives/2021/01/page/2/index.html b/archives/2021/01/page/2/index.html new file mode 100644 index 0000000000..40a20ab2ec --- /dev/null +++ b/archives/2021/01/page/2/index.html @@ -0,0 +1 @@ +Archive: 2021/1 - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

\ No newline at end of file diff --git a/archives/2021/index.html b/archives/2021/index.html new file mode 100644 index 0000000000..ff8376d469 --- /dev/null +++ b/archives/2021/index.html @@ -0,0 +1 @@ +Archive: 2021 - Volantis

Lorem ipsum dolor sit amet1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

1 / 2

\ No newline at end of file diff --git a/archives/2021/page/2/index.html b/archives/2021/page/2/index.html new file mode 100644 index 0000000000..b7853309af --- /dev/null +++ b/archives/2021/page/2/index.html @@ -0,0 +1 @@ +Archive: 2021 - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

\ No newline at end of file diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000000..9260f5865a --- /dev/null +++ b/archives/index.html @@ -0,0 +1 @@ +Archive - Volantis
\ No newline at end of file diff --git a/archives/page/2/index.html b/archives/page/2/index.html new file mode 100644 index 0000000000..10e6aa310a --- /dev/null +++ b/archives/page/2/index.html @@ -0,0 +1 @@ +Archive - Volantis
\ No newline at end of file diff --git a/archives/page/3/index.html b/archives/page/3/index.html new file mode 100644 index 0000000000..36b910d389 --- /dev/null +++ b/archives/page/3/index.html @@ -0,0 +1 @@ +Archive - Volantis
\ No newline at end of file diff --git a/archives/page/4/index.html b/archives/page/4/index.html new file mode 100644 index 0000000000..468e85eeed --- /dev/null +++ b/archives/page/4/index.html @@ -0,0 +1 @@ +Archive - Volantis
\ No newline at end of file diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000000..c294827636 --- /dev/null +++ b/atom.xml @@ -0,0 +1,425 @@ + + + Volantis + + + + + + 2023-12-26T01:42:16.914Z + https://volantis.js.org/ + + + Volantis Team + + + + Hexo + + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-1/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa3

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa4

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet3

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet4

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet5

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet6

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet7

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet8

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet9

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-10/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-11/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-12/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-13/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-14/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-15/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-2/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-3/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-4/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-5/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-6/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-7/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-8/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + Lorem ipsum dolor sit amet + + https://volantis.js.org/demo/test-9/ + 2021-01-26T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

]]>
+ + + Lorem ipsum dolor sit amet + + + + + + +
+ + + 关于主题与文档的更新 + + https://volantis.js.org/news/2020-04-04/ + 2020-04-04T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + 由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。

  • 计划 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-10T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + 本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:

  1. 卸载 less

    npm uninstall hexo-renderer-less --save
  2. 安装 stylus

    npm install hexo-renderer-stylus --save

新功能

导航栏

导航栏获得了史诗级的增强,可以设置N级子菜单。考虑到实用性,不太建议使用过多或者过深的菜单(超出屏幕的部分无法被看到)。

样式设置

现在可以在主题配置文件中设置更多的样式:

  • 最大布局宽度
  • 导航栏高度、特效(阴影、毛玻璃、鼠标hover时浮起)
  • 卡片特效(阴影、毛玻璃、鼠标hover时浮起)
  • 代码框是否显示语言
  • 标题和正文文本布局(靠左、靠右、居中)
  • 正文字体
  • 代码字体
  • 各部分颜色

封面

封面可以在主题配置文件中设置在首页、归档页面、其它页面默认是否显示。
封面中可以同时显示logo图片、标题、副标题了。

小部件

grid小部件可以设置 fixed: true 来固定网格宽度(适合文字长短不一的场景)。

其它

可以设置「评论」的标题和副标题。
可以创建多种颜色的折叠框。
友链增加分组描述。

功能调整与优化

样式渲染器

使用 stylus 重写了所有样式,无需安装less插件了。相较于1.7.4css文件体积缩小了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-06T19:43:00.000Z + 2023-12-26T01:42:16.914Z + + 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

]]>
+ + + <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-06T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + 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-25T00:00:00.000Z + 2023-12-26T01:42:16.914Z + + 由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。

  • 不能使用封面
  • mathjax
  • 有折叠框的页面,折叠框打开之后目录高亮位置不对应
  • 很多未知问题

感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》
当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。

]]>
+ + + + + <p>由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。</p> +<ul> +<li>不能使用封面</li> +<li>mathjax</li> +<li>有折叠框的页面,折叠框打开之后目录高亮位置不对应</li> +<li>很多未知问题</li> +</ul> +<blockqu + + + + + + + +
+ +
diff --git a/blog/categories/index.html b/blog/categories/index.html new file mode 100644 index 0000000000..35ed97ecdf --- /dev/null +++ b/blog/categories/index.html @@ -0,0 +1 @@ +文章分类 - Volantis
\ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html new file mode 100644 index 0000000000..1884dfe948 --- /dev/null +++ b/blog/tags/index.html @@ -0,0 +1 @@ +所有标签 - Volantis
\ No newline at end of file diff --git a/categories/demo/index.html b/categories/demo/index.html new file mode 100644 index 0000000000..32482fdcac --- /dev/null +++ b/categories/demo/index.html @@ -0,0 +1 @@ +Category: Demo - Volantis

Lorem ipsum dolor sit amet1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

1 / 2

\ No newline at end of file diff --git a/categories/demo/page/2/index.html b/categories/demo/page/2/index.html new file mode 100644 index 0000000000..8d474cab7c --- /dev/null +++ b/categories/demo/page/2/index.html @@ -0,0 +1 @@ +Category: Demo - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

\ No newline at end of file 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 0000000000..62e6079043 --- /dev/null +++ "b/categories/\345\256\230\346\226\271\350\265\204\350\256\257/index.html" @@ -0,0 +1 @@ +Category: 官方资讯 - Volantis


Volantis is a functional and highly modular hexo blog theme. Thanks to its powerful modular features, you can easily build a minimalist style blog, or follow the example of the official website to build a large-scale comprehensive blog with multi person cooperation and document module.


Let's get started

由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。

  • 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。
  • 当主题稳定后会提供英文文档。

本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:

  1. 卸载 less

    npm uninstall hexo-renderer-less --save
  2. 安装 stylus

    npm install hexo-renderer-stylus --save

Beta6
  • 导航栏N级菜单支持分割线和小标题,详见我的个人博客。

由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。

  • 不能使用封面
  • mathjax
  • 有折叠框的页面,折叠框打开之后目录高亮位置不对应
  • 很多未知问题

感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》
当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。

主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。

主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。

现在使用的文档页面源码是: volantis-docs

使用 GitHub Issue

由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。
为了精准高效解决问题,请前往 GitHub Issue

遇到问题怎么办

  1. 确定已经查阅文档找不到相关内容。
  2. 前往「常见问题」页面,查看是否有解决方案。
  3. 访问在线示例,查看是否具有相同第问题。
    3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。
    3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
  4. 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。

主版本号.子版本号.修订版本号

主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:

  • 主版本号: 较大改动、框架调整或重构
  • 子版本号: 较小或局部的功能性更新
  • 修订版本号: 修复BUG或无关紧要的细节调整
\ No newline at end of file diff --git a/content.json b/content.json new file mode 100644 index 0000000000..b7f9fdcabd --- /dev/null +++ b/content.json @@ -0,0 +1 @@ +{"meta":{"title":"Volantis","subtitle":"","description":"Volantis is a feature-rich and highly modular Hexo blog theme. Thanks to its powerful modularity, you can easily build a minimalist style blog, or you can build a large-scale comprehensive blog with multi-person collaboration and document modules based on the official website.","author":"Volantis Team","url":"https://volantis.js.org","root":"/"},"pages":[{"title":"","date":"2023-12-26T01:42:16.910Z","updated":"2023-12-26T01:42:16.910Z","comments":true,"path":"404.html","permalink":"https://volantis.js.org/404","excerpt":"","text":"404 很抱歉,您访问的页面不存在 可能是输入地址有误或该地址已被删除"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"sw.js","permalink":"https://volantis.js.org/sw.js","excerpt":"","text":"importScripts('https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/workbox-sw.js'); workbox.setConfig({ modulePathPrefix: 'https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/' }); const { core, precaching, routing, strategies, expiration, cacheableResponse, backgroundSync } = workbox; const { CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate } = strategies; const { ExpirationPlugin } = expiration; const { CacheableResponsePlugin } = cacheableResponse; const cacheSuffixVersion = '-000010', // 缓存版本号 极端重要,修改静态文件后发布网页一定要修改缓存版本号 maxEntries = 100; self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((keys) => { return Promise.all(keys.map((key) => { if (!key.includes(cacheSuffixVersion)) return caches.delete(key); })); }) ); }); core.setCacheNameDetails({ prefix: 'volantis', // 极端重要 自己拟定一个名字 suffix: cacheSuffixVersion }); core.skipWaiting(); core.clientsClaim(); precaching.cleanupOutdatedCaches(); /* * Precache * - Static Assets */ precaching.precacheAndRoute( // 极端重要 定义首次缓存的静态文件 [ { url: '/css/first.css', revision: null }, { url: '/css/style.css', revision: null }, { url: '/js/app.js', revision: null }, ], ); /* * Cache File From CDN * * Method: CacheFirst * cacheName: static-immutable * cacheTime: 30d */ // cdn.jsdelivr.net - cors enabled routing.registerRoute( /.*cdn\\.jsdelivr\\.net/, new CacheFirst({ cacheName: 'static-immutable' + cacheSuffixVersion, fetchOptions: { mode: 'cors', credentials: 'omit' }, plugins: [ new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60, purgeOnQuotaError: true }) ] }) ); // m7.music.126.net - cors enabled routing.registerRoute( /.*m7\\.music\\.126\\.net/, new CacheFirst({ cacheName: 'static-immutable' + cacheSuffixVersion, fetchOptions: { mode: 'cors', credentials: 'omit' }, plugins: [ new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60, purgeOnQuotaError: true }) ] }) ); /* * No Cache * * Method: networkOnly */ routing.registerRoute( /.*baidu\\.com.*/, new NetworkOnly() ); /* * Others img fonts * Method: staleWhileRevalidate */ routing.registerRoute( // Cache image fonts files /.*\\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/, new StaleWhileRevalidate() ); /* * Static Assets * Method: staleWhileRevalidate */ routing.registerRoute( // Cache CSS files /.*\\.(css|js)/, // Use cache but update in the background ASAP new StaleWhileRevalidate() ); /* * sw.js - Revalidate every time * staleWhileRevalidate */ routing.registerRoute( '/sw.js', // 本文件名 new StaleWhileRevalidate() ); /* * Default - Serve as it is * networkFirst */ routing.setDefaultHandler( new NetworkFirst({ networkTimeoutSeconds: 3 }) );"},{"title":"advanced settings","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"advanced-settings/index.html","permalink":"https://volantis.js.org/advanced-settings/","excerpt":"","text":"Set up submodule add the theme as a submodule git submodule add https://github.com/volantis-x/hexo-theme-volantis.git themes/volantis Multiplayer collaborationThe default author information is set in the theme configuration file: blog/themes/volantis/_config.yml# Article layoutarticle: ... body: ... meta_library: author: avatar: name: Please set the author of the article url: / Volantis supports multiple authors, other author information needs to be written in the data file, for example: 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 Just add ʻauthor` to the front-matter of the article: ---title: Jon Snow | Game of Thrones Wiki | Fandomauthor: Jon--- Speed ​​up the websiteLoading speed Reduce unnecessary js plugins, such as word count, dynamic background. Find and solve the slow down resources, take Chrome browser as an example: Right-click on the page and select "Check". In the right window, "Network" tab, and check "Disable cache". Refresh the web page to view resources that load slowly. 3.1. For slow loading pictures, CDN is recommended. 3.2. It is recommended to discard the js plugins that load slowly and do not need to. 3.3. The js plug-in that is slow to load but must be used is recommended to download and upload to jsdelivr. Running speed When visiting a website with dynamic special effects backgrounds (such as snowflakes, particles, etc.), the phone will soon become hot and get stuck, the notebook will soon fan out and the browser prompts to close this page. If you want the website to have a good experience, please try not to install such plug-ins. Optimize 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 In front-matter, you can set keywords, description, robots and seo_title. Among them, seo_title is only used as the title of the webpage and has a higher priority than title. Do not use H1 headings inside articles. Check and delete the inaccessible links through the dead link detection tool. Install SEO optimization plugin: hexo-autonofollowhttps://github.com/liuzc/hexo-autonofollow hexo-generator-seo-friendly-sitemaphttps://github.com/ludoviclefevre/hexo-generator-seo-friendly-sitemap Don't pile up keywords on the page and don't change the path frequently. Use CDNFor most users who deploy blogs to GitHub, it is relatively slow to load local resources directly. You can use the CDN service provided by jsdelivr for open source projects. For the 4.1.4+ version, the JS file uses the CDN compressed version of https://cdn.jsdelivr.net/npm/hexo-theme-volantis/source/js/ by default. For example: https://cdn.jsdelivr.net/npm/hexo-theme-volantis@4.1.4/source/js/app.min.js How to openblog/_config.volantis.ymluse_cdn: true important: Developers note that ʻuse_cdnis set tofalse`. Pay attention to the version number of the CDN file:blog/_config.volantis.ymlinfo: theme_version: '4.1.4' # This is theme's version. Only JS files provide CDN by default. About CSS file CDN:blog/_config.volantis.ymlinfo: theme_name: Volantis # This is theme's name. theme_version: '4.1.4' # This is theme's version. theme_docs: https://volantis.js.org/ # This is theme's URL. theme_repo: https://github.com/volantis-x/hexo-theme-volantis cdn: js: # The default is https://cdn.jsdelivr.net/npm/hexo-theme-volantis@4.1.4/source/js/app.min.js css: first: # CDN is not provided by default. First.css is the style rendered for the first screen, and contains the style of cover navbar search. style: # CDN is not provided by default, and style.css is a delayed loading style. if you need to DIY the style Custom CDNIf you upload the corresponding file to your CDN server, you can change the corresponding link to your own CDN link. Try Terser to compress ES6Install compression toolnpm install -g gulpnpm install --save gulpnpm install --save gulp-html-minifier-tersernpm install --save gulp-htmlcleannpm install --save gulp-htmlminnpm install --save gulp-minify-cssnpm install gulp-terser --save-dev gulp configuration fileblog/gulpfile.jsvar gulp = require('gulp');var minifycss = require('gulp-minify-css');var htmlmin = require('gulp-html-minifier-terser');var htmlclean = require('gulp-htmlclean');var terser = require('gulp-terser');// Compress the css fileconst minify_css = () => ( gulp.src(['./public/**/*.css']) .pipe(minifycss()) .pipe(gulp.dest('./public')));// Compress html fileconst minify_html = () => ( gulp.src(['./public/**/*.html','!./public/{lib,lib/**}']) .pipe(htmlclean()) .pipe(htmlmin({ removeComments: true, minifyJS: true, minifyCSS: true, minifyURLs: true, })) .pipe(gulp.dest('./public')))// Compress the js fileconst minify_js = () => ( gulp.src(['./public/**/*.js','!./public/**/*.min.js','!./public/{lib,lib/**}'] ) .pipe(terser()) .pipe(gulp.dest('./public')))module.exports = { minify_html: minify_html, minify_css: minify_css, minify_js: minify_js};gulp.task('one', gulp.parallel( minify_html, minify_css, minify_js))gulp.task('default', gulp.series('one')); Run compressiongulp Install Service Worker Serviceblog/_config.yml# Global importimport: script: -<script>"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then(function(n){n.onupdatefound=function(){var e=n.installing;e.onstatechange=function( ){switch(e.state){case"installed":navigator.serviceWorker.controller?console.log("Updated serviceWorker."):console.log("serviceWorker Sucess!");break;case"redundant":console .log("The installing service worker became redundant.")}}}}).catch(function(e){console.log("Error during service worker registration:",e)}); </script> Create the sw.js file in blog/source. The content is as follows: importScripts('https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/workbox-sw.js');workbox.setConfig({ modulePathPrefix:'https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/'});const {core, precaching, routing, strategies, expiration, cacheableResponse, backgroundSync} = workbox;const {CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate} = strategies;const {ExpirationPlugin} = expiration;const {CacheableResponsePlugin} = cacheableResponse;const cacheSuffixVersion ='-000010', // The cache version number is extremely important. You must modify the cache version number when publishing web pages after modifying static files maxEntries = 100;self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((keys) => { return Promise.all(keys.map((key) => { if (!key.includes(cacheSuffixVersion)) return caches.delete(key); })); }) );});core.setCacheNameDetails({ prefix:'volantis', // extremely important, draw up a name by yourself suffix: cacheSuffixVersion});core.skipWaiting();core.clientsClaim();precaching.cleanupOutdatedCaches();/* * Precache *-Static Assets */precaching.precacheAndRoute( // Extremely important defines the static file to be cached for the first time [ {url:'/css/first.css', revision: null }, {url:'/css/style.css', revision: null }, {url:'/js/app.js', revision: null }, ],);/* * Cache File From CDN * * Method: CacheFirst * cacheName: static-immutable * cacheTime: 30d */// cdn.jsdelivr.net-cors enabledrouting.registerRoute( /.*cdn\\.jsdelivr\\.net/, new CacheFirst({ cacheName:'static-immutable' + cacheSuffixVersion, fetchOptions: { mode:'cors', credentials:'omit' }, plugins: [ new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60, purgeOnQuotaError: true }) ] }));// m7.music.126.net-cors enabledrouting.registerRoute( /.*m7\\.music\\.126\\.net/, new CacheFirst({ cacheName:'static-immutable' + cacheSuffixVersion, fetchOptions: { mode:'cors', credentials:'omit' }, plugins: [ new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60, purgeOnQuotaError: true }) ] }));/* * No Cache * * Method: networkOnly */routing.registerRoute( /.*baidu\\.com.*/, new NetworkOnly());/* * Others img fonts * Method: staleWhileRevalidate */routing.registerRoute( // Cache image fonts files /.*\\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/, new StaleWhileRevalidate());/* * Static Assets * Method: staleWhileRevalidate */routing.registerRoute( // Cache CSS files /.*\\.(css|js)/, // Use cache but update in the background ASAP new StaleWhileRevalidate());/* * sw.js-Revalidate every time * staleWhileRevalidate */routing.registerRoute( '/sw.js', // this file name new StaleWhileRevalidate());/* * Default-Serve as it is * networkFirst */routing.setDefaultHandler( new NetworkFirst({ networkTimeoutSeconds: 3 })); after modifying the static file Install the "Related Articles" plugin Install the plugin npm i -S hexo-related-popular-posts Custom configuration method of plug-in: hexo-related-popular-postshttps://github.com/tea3/hexo-related-popular-posts If you use a header image, you can add the following settings in the site configuration file to make related articles display the correct article header image: blog/_config.ymlpopularPosts: eyeCatchImageAttributeName: headimg noteYou need to upgrade to 5.0.1 and above to support custom header images, see #29 Analysis and StatisticsBy default, the visit statistics of Bu Suanzi are supported. You can add Baidu statistics and Google Analytics by yourself. Word count and reading time Install the following plugins:npm i --save hexo-wordcount Modify the configuration file and open the wordcount pluginblog/_config.volantis.ymlplugins: ... # The word count of the article, the reading time, and the plug-in needs to be installed: npm i --save hexo-wordcount wordcount: enable: #true Then modify the configuration file to write wordcount into the meta location that needs to be displayed:blog/_config.volantis.yml# Article layoutarticle: ... # The layout scheme of the article card body on the article details page body: # Top of article information # Take from meta_library top_meta: [..., wordcount, ...] ... # Information at the bottom of the article # Take from meta_library bottom_meta: [..., wordcount, ...] CNZZ StatisticsPlease refer to this tutorial by ZYMIN: Hexo hexo+ejs+material x Add CNZZ statistical codehttps://zymin.cn/arcticle/hexo+ejs+material.html More advanced gameplayFor details, please refer to this blog of @TRHX: Hexo blog topic personalizationhttps://www.itrhx.com/2018/08/27/A04-Hexo-blog-topic-personalization/ Contains a variety of detailed tutorials such as translucent cards, adding cartoon characters, custom mouse styles, mouse special effects, firework special effects, color scrolling fonts, website running time, dynamic browser titles, and snowflakes falling special effects. theme official website #Advanced gameplayhttps://volantis.js.org/categories/Advanced gameplay/"},{"title":"Join the community and team","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"contributors/index.html","permalink":"https://volantis.js.org/contributors/","excerpt":"The more people participating in an open source project, the more vital it is. I hope that interested partners can join the team~ so how to become a member of the team? To become a member of the team, the first prerequisites that must be met are: use the theme for at least one month, have been active in the community for a long time: "comment" or "Answer issues" or "Submit valid suggestions in issues". After you meet the above prerequisites, and do what you can according to the situation, for example: -Find and solve problems, such as raising or answering issues or submitting PR-Improve documents, correct document errors, language errors, translation problems, etc.-Post articles recommended topics-Publish related articles and repost the external link to the official website or publish the article directly on the official website You can apply for joining the team by posting in forum. You can see the team members on the GitHub page","text":"The more people participating in an open source project, the more vital it is. I hope that interested partners can join the team~ so how to become a member of the team? To become a member of the team, the first prerequisites that must be met are: use the theme for at least one month, have been active in the community for a long time: "comment" or "Answer issues" or "Submit valid suggestions in issues". After you meet the above prerequisites, and do what you can according to the situation, for example: -Find and solve problems, such as raising or answering issues or submitting PR-Improve documents, correct document errors, language errors, translation problems, etc.-Post articles recommended topics-Publish related articles and repost the external link to the official website or publish the article directly on the official website You can apply for joining the team by posting in forum. You can see the team members on the GitHub page Thanks to the project contributorsthank you very much for those who directly submitted PR! xaoxuu MHuiG inkss Colsrch Drew233 Linhk1606 ericclose Flexiston CRainyDay view all also thank those netizens who helped each other in comments and issues~ If you have a good idea or solve a problem that is not solved here, please go to GitHub to contribute code. 👏 Publish and share articlesIf you have an original article related to Hexo blog construction, you can reprint it on the Volantis official website, an example is as follows: _posts/blogs/2020-05-17-pjax.md---title: Volantis theme deployment Pjaxdate: 2020-05-17updated: 2020-08-07categories: [Development experience]author: inksslink: https://inkss.cn/article/other/76993423.htmldescription: This article records all my Pjax compatibility with Volantis theme, it is probably a record~headimg: # You can set the article head image--- If you are submitting an article on the official website for the first time, you need to add author information in the _data/author.yml file, for example: _data/author.yml...inkss: name: inkss avatar: https://cdn.jsdelivr.net/gh/inkss/common@1.4.2/hexo/img/static/avatar.jpg url: https://inkss.cn ClaimThe post is stored in the _posts/blogs/ directory, and the file name format is "year-month-day-post subject".It must be an original article with an abstract within 200 characters. (You can also not write the summary)It is best to choose an article category. If there is no suitable one in the existing category, you can add it yourself.If there is a header image, please make sure that there is only one word or phrase in the image. Get startedhttps://github.com/volantis-x/volantis-docs/tree/master/source/_posts/blogs Channels for communicationsolve the problem Channel Method Use Issues @volantis-x/hexo-theme-volantis The only channel to communicate with developers for follow-up And solve problems please do not send mailDevelopers of open source projects are disgusted that others do not use the correct channels such as Issues to ask questions about open source projects through private emails, so they generally do not reply to such emails. exchange Channel Method Use Forum @volantis-x/forum Slow, relatively formal, easy to retrieve, and can be referenced by other users QQ Group 1146399464 (Verification code: vlts-2021) Informal, instant messaging, easy to fight pictures; not conducive to other users' reference Buddhist interaction Channel Method Use Comment area Message You can test, irrigate, and promote your blog."},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"examples/index.html","permalink":"https://volantis.js.org/examples/","excerpt":"Sample Blog Team member's blogvolantis-x.js.orgTest Site For Development Who uses Volantis","text":"Sample Blog Team member's blogvolantis-x.js.orgTest Site For Development Who uses Volantis how,to,add,your,own,blog,link Step 1: Create a new Issue Fill in and submit according to the format { "title": "", "description": "", "screenshot": "", "url": "", "avatar": "", "version": "版本:^4.0"}In order to improve the image loading speed, it is recommended to optimize the image size:Open compressed image to upload your own screenshot, adjust the height of the image to 360px and download it.Upload the compressed picture to 去不图床 and use the picture link as the screenshot link. Step 2: Refresh Come back and refresh to take effect. how to update my blog link If the issue is created by yourself, you can modify it yourself. If it was created by the administrator, please create a new one by yourself, and then ask the administrator to delete the old one."},{"title":"FAQ","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"faqs/index.html","permalink":"https://volantis.js.org/faqs/","excerpt":"Generally speaking, a brand new project using the default configuration is normal without failure. If it is not available or the effect is quite different from the example, you can use the official Hexo blog for unit testing to apply this topic to check whether the style is normal, and compare the _config.yml file to troubleshoot problems. Hexo official unit test project: https://github.com/hexojs/hexo-theme-unit-test feedback issues to developers","text":"Generally speaking, a brand new project using the default configuration is normal without failure. If it is not available or the effect is quite different from the example, you can use the official Hexo blog for unit testing to apply this topic to check whether the style is normal, and compare the _config.yml file to troubleshoot problems. Hexo official unit test project: https://github.com/hexojs/hexo-theme-unit-test feedback issues to developers How to update the themeWhen using themes, try to fork the theme to your GitHub, then modify and use it. The advantage of this is that when the theme undergoes an important update, you can pull and merge the code as needed, so that your DIY theme can get BUG fixes or new features through the update. If you don’t understand, please search for keywords yourself: fork update practical tipsAll the configuration that needs to be written in the theme configuration file can be written in the theme_config: of the site configuration file, after Hexo 5.0, it can also be written in the file _config.volantis.yml, see details Hexo official documents:covers theme configurationhttps://hexo.io/docs/configuration#%E8%A6%86%E7%9B%96%E4%B8%BB%E9%A2%98%E9% 85%8D%E7%BD%AEYou can also directly view the wording of the site configuration file in the source code of this site: _config.volantis.yml Unable to run local preview successfully There may be no installation dependencies. Please follow the steps on the "Start" page to install and install the required dependencies. If some third-party services are enabled, please check whether the installation of plug-ins is required in the documentation. If the error message has lastIndex, you can try to find highlight in the blog root directory configuration file and set ʻauto_detecttofalse`. Theme configuration modification does not take effectPlease confirm whether the document requires modification to the configuration file blog/_config.yml of the blog home directory or the theme configuration file blog/_config.volantis.yml. Theme style modification does not take effectIf the cdn service is enabled in the theme configuration file, then the modification of the local style will not take effect, and the cdn service needs to be disabled. The modification did not take effectRequires hexo clean and then restarts hexo s If you install the "Related Article Recommendations" plugin, you need to re-hexo s every time you modify the md file The style is messy after turning off the CDN Please go to the "Start" page of the document to check whether the necessary dependencies are installed. Search is not available Please go to the "Start" page of the document to check whether the necessary dependencies are installed. Check the root directory configuration file for conflicts with search fields. If the problem cannot be found in the above two steps, please download the sample source code for comparison. The search result link is incorrectPlease check whether the link in the root directory configuration file is correct, such as: blog/_config.ymlurl: https://xaoxuu.comroot: / tutorials and guides Hexo official document | Valine official documentPlease be sure to read the official documentation!"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"getting-started/index.html","permalink":"https://volantis.js.org/getting-started/","excerpt":"","text":"Volantis A Wonderful Theme for Hexo Volantis is a feature-rich and highly modular Hexo blog theme. Thanks to its powerful modularity, you can easily build a minimalist style blog, or you can build a large-scale comprehensive blog with multi-person collaboration and document modules based on the official website. example bloghttps://volantis.js.org/examples/ All Volantis users can create their own Issue according to the format to add their blog to the sample blog page of the official website. Ready to workability conditionsenvironment configuration conditionsSelf-built blog requires certain relevant knowledge. Before you start, please must make sure you can use the markdown grammar, simple to master My git knowledge, and most importantly, know how to seek solutions when encountering difficulties: Scroll through and search documents Search whether there is a solution in issues Create a new issue and follow the requirements to describe the problem you encountered in detail If you haven’t used Hexo before, don’t worry, you can read through the Hexo Chinese document. If you want to use it handily, it’s best to refer to the open source project provided by the team. The source code to build: Demo source code | Official website source codeIf you are updating from an old version or migrating with other themes, please make sure that the environment version is not too low, otherwise compatibility problems will occur. Hexo: 4.2 ~ 5.xhexo-cli: 3.1 ~ 4.xnode.js: 12.16 ~ latest # LTS version is recommendednpm: 6.13 ~ latest Quick experienceIf you already have the environment configuration conditions, you can enter the following line of code in the terminal, and you can try the experience after a while: git clone https://github.com/volantis-x/demo.git && cd demo && npm i && hexo s Download and installnew blog installationmigration from other themesStep 1/2: Modify the site configuration file Find and modify in the blog/_config.yml file:theme: volantis Step 2/2: Download themes Type in the terminal:npm i hexo-theme-volantis if you are a Mac user Open the terminal in the blog path, download, install and apply the theme:curl -s https://volantis.js.org/start | bashThis command will automatically detect and install the required environment, initialize the blog, then download, install and apply the theme.Detailed usage of the script: #hexo.sh Step 1/3: Modify the site configuration file Find and modify in the blog/_config.yml file:theme: volantis Step 2/3: Download theme If you have already upgraded to Hexo 5.0.2 and above, you can directly use the npm command to install:npm i hexo-theme-volantisFor the old version, you need to download the theme source code to the themes/ folder:git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantisIf you cannot access GitHub, you can use the domestic mirror source:git clone https://e.coding.net/volantis-x/p/hexo-theme-volantis.git themes/volantis Step 3/3: Check and install dependencies Install Hexo search dependencies:npm i hexo-generator-search hexo-generator-json-contentInstall the Stylus renderer:npm i hexo-renderer-stylus new version updatePlease refer to update log to update, the following are the things to note after the update: 2020-09-26 3.0.0 -> 4.0.0 The configuration file of 4.0.0 has changed a lot. It is strongly recommended not to change the old configuration file.The configuration items in the original data file are no longer supported, please set in the configuration file.The theme configuration file has been redesigned and needs to be reconfigured "completely".Friends chain uses data files and supports issues tags to realize dynamic self-help friends chain.The original meta custom layout now only supports top_meta and bottom_meta inside the article.The layout of the article list page can only be customized within a limited range.The sidebar component now only supports the sidebar position; there is a dedicated component at the end of the article.If the lazy loading plugin is installed, you need to uninstall it and use the lazy loading built into the theme (which conflicts with the plugin).If you want to close the comments, you need to change it to comments: false.If you want to hide the meta tag at the top or bottom of the article, you need to set top_meta: false or bottom_meta: false.If you need to hide the title and the meta tag at the top at the same time, you can also change title: xxx to seo_title: xxx.The information of multiple authors is defined using a data file. You only need to write ʻauthor: xxx` in the article instead of repeating the author's information.Now only the pictures with the gallery tag support zooming.The friend link page layout: links is changed to layout: friends. agreementThis theme adopts the MIT Open Source License Agreement, which is free forever and unlimited use. MIT Open Source License AgreementThe authorized person has the right to use, copy, modify, merge, publish, distribute, sublicense and sell the software and copies of the software.The licensee can modify the license terms as appropriate according to the needs of the program.The software and all copies of the software must include a copyright notice and a license notice. Configuration and useConfiguration and use/site-settings/configuration/"},{"title":"文章分类","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"blog/categories/index.html","permalink":"https://volantis.js.org/blog/categories/","excerpt":"","text":""},{"title":"所有标签","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"blog/tags/index.html","permalink":"https://volantis.js.org/blog/tags/","excerpt":"","text":""},{"title":"Built-in tag plugin","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/index.html","permalink":"https://volantis.js.org/tag-plugins/","excerpt":"","text":"Volantis dedicated labelText classinline text styletext inline textspan paragraph textp quotenote quote blocknoteblock check listcheckbox single-selection listradio timelinetimeline Links, buttons, menuslink cardlink buttonbutton GitHub cardghcard website cardsite drop-down menudropmenu Container Classcolumntab folding boxfolding Multimediainline imageinlineimage single imageimage albumgallery audioaudio videovideo Picture video with frameframe music playeraplayer Data collection classIssues APIissues Hexo General TagsUse <!-- more --> in the article, then the text before <!-- more --> will be regarded as an abstract. Only this part of the text will appear on the homepage, and it will also appear in the main text. For details, see Hexo official documentation:"},{"title":"page custom layout","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"page-settings/body/index.html","permalink":"https://volantis.js.org/page-settings/body/","excerpt":"","text":"Show mini music playerThe mini music player is displayed on the right side of the title. The supported fields are: 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--- see the actual effect: #contributors Show meta tagsThe date, category, update date, tags, sharing, etc. at the top and bottom of the article are meta tags. front-matter---top_meta: falsebottom_meta: false--- If a page has no title, top_meta will not be displayed, like 404, about pages can be completely hidden: front-matter---seo_title: Abouttop_meta: falsebottom_meta: false--- Thumbnails are shown on the rightfront-matter---thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png--- The thumbnail is only displayed on the article list and article page, not on the archive page. The icon is displayed on the right side of the titlefront-matter---icons: [fas fa-fire red, fas fa-star green]--- The icon is only displayed on the archive page and can be used to mark popular articles. you can set the color of the icon through red / blue / green / yellow / orange / theme / accent Do you want to show coverIf a page needs a cover, you can write it like this: front-matter---cover: true--- Show sidebarBy freely setting the sidebar card to delete the redundant information of the corresponding page, increase the weight of valuable information in the page. If a page does not require a sidebar, you can write: front-matter---sidebar: []--- If a certain page wants to display certain sidebars, just write: front-matter---sidebar: [grid, toc, tags] # Place any sidebar widgets you want to display--- Close commentfront-matter---comments: false---"},{"title":"front-matter","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"page-settings/front-matter/index.html","permalink":"https://volantis.js.org/page-settings/front-matter/","excerpt":"","text":"front-matterThe front-matter is the area at the top of the file separated by ---, used to specify the variables of individual files. For more information, please refer to Hexo official document: #front-matter Field Meaning Value Type Default Value layout Layout template String - title Page title String - seo_title Page title String page.title short_title Page title (displayed in the group list) String page.title date Creation time Date File creation time updated Update date Date File modification time link External article URL String - music Internal music controls [Object] - robots robots String - keywords Page keywords String - description Page description, abstract String - cover Whether to show the cover Bool true top_meta Whether to display the meta information at the top of the article or page Bool true bottom_meta Whether to display the meta information at the bottom of the article or page Bool true sidebar Page sidebar Bool, Array theme.layout.*.sidebar body Page body elements Array theme.layout.on_page.body mathjax Whether to render formulas Bool, String false thumbnail Thumbnail String false icons icons Array [] pin whether to top Bool false Fields unique to layout:post: | Field | Meaning | Value Type | Default Value || :----------------- | :------------ | :------------- |: ------ || author | Article author | [Object] | config.author || categories | Categories | String, Array |-|| tags | Tags | String, Array |-|| toc | Whether to generate a directory | Bool | true | author | Field | Meaning | Value Type | Default Value || :----------------- | :------------ | :------------- |: ------ || name | Author name | String | config.author || avatar | Avatar | String | config.avatar || url | Link | String | config.url | music | Field | Must | Value Type || :----------------- | :------------ | :--------------- - || server | yes | netease, tencent, kugou, xiami, baidu || type | yes | song, playlist, album, search, artist || id | yes | song id / playlist id / album id / search keyword | Top articleSet the following values ​​in front-matter: front-matterpin: true Article classificationMultiple categories have two relationships, one is hierarchy (equivalent to folders), and the other is juxtaposition (equivalent to tags). Multi-level classification: front-matter---categories: [category A, category B]--- or front-matter---categories: -Category A -Category B--- Parallel classification front-mattercategories: -[Category A] -[Category B] Multi-level + parallel classification front-mattercategories: -[Category A, Category B] -[Category C, Category D] Article SummaryInsert <!-- more --> in the article, the previous part is the abstract. source code of an article---title: xxxdate: 2020-02-21---This is a summary<!-- more -->This is the text Note: <!-- more --> There must be blank lines before and after <!-- more --> Set article authorWith support for multi-author jointly maintain a blog, so you can set up a separate authors: front-matter---author: name: Author avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png url: https://baidu.com--- Import external articlesUsing link, with customized article author information, you can display external articles or URLs in the article list, for example: front-matter---layout: postdate: 2017-07-05title: [转] How to build an independent blog based on Hexocategories: [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) TopFor any article or page, set pin: true to put it on the top page. front-matter---pin: true--- This will cause a small problem: the number of post cards on the homepage is more than the set value. If you have obsessive-compulsive disorder and want the number of each page to be the same, you can install a plug-in to achieve it, see: [#421](https://github.com/ volantis-x/hexo-theme-volantis/issues/421) Do not archiveArticles stored in the _posts folder will generally appear on the archive page. If a post does not want to appear on the archive page: front-matter---archive: false---"},{"title":"page layout template","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"page-settings/layout/index.html","permalink":"https://volantis.js.org/page-settings/layout/","excerpt":"","text":"Layout template Value Meaning page Independent page post Article page docs Documentation page category Category page tag Tag page friends Friends link page list List page page & post & docsThese three types of pages are the same, but have the following subtle differences: When the post article has a title, scroll down the web page, the navigation bar will move up and out of the screen to display the article title, but page and docs will not. post At the end of the article, up to four modules can be displayed: "Reference", "Related Article", "Copyright Mark", and "Reward". At most one module of "reference" can be displayed at the end of the docs article. Except that the archive page is automatically generated, other independent pages need to be created manually. Archive pageThe archive page is automatically generated and has been generated during initialization. The path is as follows: blog/_config.yml# Directoryarchive_dir: archives About pageCreate file if not exists: source/about/index.md---layout: docsseo_title: Aboutbottom_meta: falsesidebar: []valine: placeholder: What do you want to tell me?---Write about yourself below Category pageCreate file if not exists: source/categories/index.md---layout: categoryindex: truetitle: All categories--- Tag pageCreate file if not exists: source/tags/index.md---layout: tagindex: truetitle: all tags--- List pageCreate file if not exists: source/mylist/index.md---layout: listgroup: mylistindex: true--- The result is to filter out all articles that contain group: mylist in the front-matter section. Friends link pageCreate page fileCreate file if not exists: source/friends/index.md---layout: friends # requiredtitle: My friends # Optional, this is the title of the friend link page---Write the content above the friend chain here.<!-- more -->Here you can write text notes at the bottom of the friend chain page, such as your own friend chain specifications, examples, etc. Choose a layoutFind the following in the theme configuration file: pages: # Friends link page configuration friends: layout_scheme: traditional # simple: simple layout, traditional: traditional layout, sites: website card layout Three layout schemes are currently provided: simple: Simple layout, only avatar and title. traditional: Traditional layout, the style of the old version of Volantis. sites: site card layout, which is the new style of website card tags added in Volantis 4.x. Set data sourcestatic data sourcedynamic data sourceThe data source of Friends Chain is written in the following path, if not, please create it yourself: blog/source/_data/friends.yml The content format is: blog/source/_data/friends.yml-group: # Group title description: # Group description items: -title: # name avatar: # Avatar url: # link screenshot: # Screenshot keywords: # Keywords description: # description -title: # name avatar: # Avatar url: # link screenshot: # Screenshot keywords: # Keywords description: # description Different layout methods will use some fields. Generally speaking, title, ʻavatar and ʻurl are all required. These data are converted into HTML tags and inserted into the <!-- more --> part of the friend link page.Use the issues tag to get JSON data from issues to parse and generate HTML to fill in the page. The usage is as follows: {% issues sites | api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %} In this way, the way to add a friend chain becomes: the other party raises an Issue, reviews it by yourself, then adds the ʻactive` tag, and then refreshes the webpage to take effect. It is also very convenient to update the content of the friend chain. The creator of the issue has the right to modify and close it. Create a new GitHub or Gitee repository and create the Issues template as follows: { "title": "", "screenshot": "", "url": "", "avatar": "", "description": "", "keywords": ""} For details on how to use the issues tag, see this article: suggestBoth can be used at the same time. It is recommended to open the issues friend chain to everyone, and save it to the static friend chain if you contact yourself frequently.The actual speed and stability of the GitHub API is not as good as Gitee. If you pursue stability, it is recommended to use Gitee. 404 pageCreate file if not exists: source/404.md---cover: truerobots: noindex,nofollowsitemap: falseseo_title: 404 Not Foundbottom_meta: falsesidebar: []valine: path: /404.html placeholder: Please leave a message and tell me which page you want to visit is not found---{% p logo center huge, 404 %}{% p center bold, sorry, the page you visited does not exist %}{% p center small, the address may be entered incorrectly or the address has been deleted %}"},{"title":"rendering formula","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"page-settings/math/index.html","permalink":"https://volantis.js.org/page-settings/math/","excerpt":"The default is not to render. If there is a formula in the article, it needs to be set to enable in front-matter. Even if it is turned on, the article list will not be rendered. Please be careful not to write the formula at the beginning of the article.","text":"The default is not to render. If there is a formula in the article, it needs to be set to enable in front-matter. Even if it is turned on, the article list will not be rendered. Please be careful not to write the formula at the beginning of the article. example.md:---title: Rendering formula (MathJax)date: 2020-02-23mathjax: true # false: do not render, true: render---Add a descriptive text<!-- more -->$$t+1=2$$$$\\mbox{accumulation factor}=\\begin{cases}1+ni & \\mbox{simple interest}\\\\\\\\(1+i)^n & \\mbox{compound interest}\\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}$$ View formula rendering effect $$t+1=2$$$$\\mbox{accumulation factor}=\\begin{cases}1+ni & \\mbox{simple interest}\\\\(1+i)^n & \\mbox{compound interest}\\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}$$ If the formula still cannot be rendered correctly, you can read this article by @MicDZ: Use KaTeX on Material-Xhttps://www.micdz.cn/article/katex-on-volantis/"},{"title":"Modify site configuration file","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"site-settings/configuration/index.html","permalink":"https://volantis.js.org/site-settings/configuration/","excerpt":"","text":"The _config.yml file in the blog root directory is usually responsible for site-related configuration and third-party npm plugin-related configuration. Site titleblog/_config.yml# Site titletitle: my blog Website iconsimple wayblog/_config.yml# Website icons, more sizes and other icons, please use the import method to batch importfavicon: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico Multi-language settingsblog/_config.ymllanguage: -zh-CN -en -zh-HK -zh-TW Corresponding translation file path: themes/volantis/languages/ Use Import to import external filesVolantis users can add various tags to head and body without modifying the theme file. meta and link correspond to the <meta> and <link> tags in the head. script can import js code at the end of body. 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> MoreHexo official document #Configurationhttps://hexo.io/docs/configuration"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"tag-plugins/aplayer/index.html","permalink":"https://volantis.js.org/tag-plugins/aplayer/","excerpt":"","text":"The theme is compatible with APlayer plug-in styles. Install the plugin: npm i -S hexo-tag-aplayer Instructions: hexo-tag-aplayerhttps://github.com/MoePlayer/hexo-tag-aplayer"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"tag-plugins/audio/index.html","permalink":"https://volantis.js.org/tag-plugins/audio/","excerpt":"","text":"This plugin was last updated in version 2.4{% audio audio link %} Demo effectYour browser does not support the audio tag. Source code of the above exampleexample:{% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"tag-plugins/button/index.html","permalink":"https://volantis.js.org/tag-plugins/button/","excerpt":"","text":"the label of this page will be refactored soon Basic buttonPlease upgrade your Volantis to version 2.4 and above. syntax formatparameter listsample effect{% btn style parameters (optional), title, link, icon (optional) %} optional parameters can be omittedstyle parameter regular, large, center icon The one with fa- in the first or second parameter is recognized as an icon.inline button button without any parameters is suitable to be integrated into the paragraph. hollow button sample blog sample blog sample blog sample blog Centered: get started solid button sample blog sample blog sample blog sample blog Centered: get started Rich Text ButtonPlease upgrade your Volantis to version 2.3 and above. syntax formatparameter listexample effect{% btns style parameter %}{% cell title, link, picture or icon %}{% cell title, link, picture or icon %}{% endbtns %}The style parameter position can write the picture style, layout method, multiple style parameters are separated by spaces. rounded corner style The default is square rounded, circle layout method The default is automatic width, which is suitable for situations where there is only one or two in the field of view. Parameters Meaning wide Wider buttons fill Fill the layout, automatically fill at least one line, and will wrap if there is more. center Centered, with fixed spacing between buttons. around Centered and scattered grid2 The same width is up to 2 columns, and the narrower screen will reduce the number of columns appropriately. grid3 The same width is up to 3 columns, and the narrower screen will reduce the number of columns appropriately. grid4 Up to 4 columns with equal width, narrower screen will reduce the number of columns appropriately. grid5 The same width is up to 5 columns. The narrower screen will reduce the number of columns appropriately. add text style You can add <b>title</b> and <p>description text</p> in the containerIf you need to display a group of links containing avatars like "team members": xaoxuu xaoxuu xaoxuu xaoxuu xaoxuu Or buttons with icons: download source code view document Circular icon + title + description + picture + grid 5 columns + center Heart Rate Manager professional edition Heart Rate Manager free version"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"tag-plugins/checkbox/index.html","permalink":"https://volantis.js.org/tag-plugins/checkbox/","excerpt":"","text":"was last updated in 2.6 version{% checkbox style parameter (optional), text (support simple md) %} Demo effect plain text test supports simple markdown syntax support custom color green + default selected yellow + default selected cyan + default selected blue + default selected increase reduce cross Source code of the above exampleexample:{% checkbox plain text test %}{% checkbox checked, supports simple [markdown](https://guides.github.com/features/mastering-markdown/) syntax %}{% checkbox red, support custom color %}{% checkbox green checked, green + default selected %}{% checkbox yellow checked, yellow + default selected %}{% checkbox cyan checked, cyan + default selected %}{% checkbox blue checked, blue + default selected %}{% checkbox plus green checked, increase %}{% checkbox minus yellow checked, reduce %}{% checkbox times red checked, cross %} Supportable parameterscolourred, yellow, green, cyan, blue Styleplus, minus, times Selected statechecked"},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"tag-plugins/folding/index.html","permalink":"https://volantis.js.org/tag-plugins/folding/","excerpt":"","text":"was last updated in version 2.3{% folding parameter (optional), title %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %} Demo effect View image test view the folding box opened by default This is a folding box that is opened by default. view code test {% folding green, view code test %}View code test{% endfolding %} view list test -haha-hehe view nested tests view nested test 2 View nested test 3 hahaha Source code of the above exampleexample:{% folding View image test %}![](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endfolding %}{% folding cyan open, view the folding box opened by default %}This is a folding box that opens by default.{% endfolding %}{% folding green, view code test %}{% endfolding %}{% folding yellow, view list test %}-haha-hehe{% endfolding %}{% folding red, view nested tests %}{% folding blue, view nested test 2 %}{% folding View nested test 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 %} Supportable parametersThe color and status can be filled in the parameter position, and multiple parameters are separated by spaces. colourblue, cyan, green, yellow, red StatusFill in the status with ʻopen` to represent the default open."},{"title":"","date":"2023-12-26T01:42:16.914Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"tag-plugins/dropmenu/index.html","permalink":"https://volantis.js.org/tag-plugins/dropmenu/","excerpt":"","text":"the label of this page will be refactored soon Drop-down menuPlease upgrade your Volantis to version 3.0 and above. syntax formatexample effectcontainer {% menu prefix (can be omitted), title, suffix (can be omitted) %}Menu content{% endmenu %} menu content Menu Item {% menuitem text, link, icon %} Dividing line {% menuitem hr %} Submenu {% submenu Nested menu, icon %}Menu content{% endsubmenu %}example 1 drop-down menu theme source code update log Have questions? see FAQ see the source code of this site raise an Issue example 2 this is drop-down menu theme source code update log Have questions? see FAQ see the source code of this site raise an Issue example 3 This is the example effect of the drop-down menu. theme source code update log Have questions? see FAQ see the source code of this site raise an Issue"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/frame/index.html","permalink":"https://volantis.js.org/tag-plugins/frame/","excerpt":"","text":"This is a label that can put pictures or videos into the device frame, which can be used to display screenshots and screen recordings more elegantly. This plugin was last updated in version 4.0{% frame frame name | img=picture link | alt=picture description (optional) | part=top/bottom (optional) %}{% frame frame name | video=video link | part=top/bottom (optional) %} {% 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 %} In this example, both ʻimgandvideo` appear at the same time, then it is a video with a cover, and the video cover will be displayed before the video is loaded. Device FrameworkCurrently supported are: iphone11 If you have the following other equipment frame diagrams (svg), welcome PR compatibility. android, ipad, macbook, watch TailoringSet part=top or part=bottom to display the upper or lower part, otherwise the complete frame and the pictures/videos in it will be displayed."},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/gallery/index.html","permalink":"https://volantis.js.org/tag-plugins/gallery/","excerpt":"","text":"The Gallery tag is a tag for a set of picture application scenarios. This plugin was last updated in version 3.0{% gallery parameter, number of columns %}![Picture description](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 %} Demo effectOne picture per line Picture description Multiple pictures in one line (no line break) Picture descriptionPicture descriptionPicture description Multiple lines and multiple pictures (2-8 pictures per line) Source code of the above exampleOne picture per line example.md:{% gallery %}![Picture description](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg){% endgallery %} Multiple pictures in one line (no line break) example.md:{% gallery %}![Picture description](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)![Picture description](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)![Picture description](https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg){% endgallery %} Multiple lines and multiple pictures (2-8 pictures per line) 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 %} Supportable parametersAlignment directionleft, center, right Zoomstretch Number of columnsWrite the number of columns directly after the comma, and support 2 to 8 columns. After setting the number of columns, it is the "multi-line and multi-image" layout. At this time, the image is aligned to the left by default. In order to avoid different sizes of pictures, it is recommended to use stretch to enlarge and fill the pictures."},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/ghcard/index.html","permalink":"https://volantis.js.org/tag-plugins/ghcard/","excerpt":"","text":"was last updated in version 4.0{% ghcard username, other parameters (optional) %}{% ghcard username/warehouse, other parameters (optional) %} User Information Card The source code of the above example: 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 %} | Warehouse Information Card The source code of the above example: 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 %} | More parameter optionsGitHub card API parametershttps://github-readme-stats.vercel.app"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/image/index.html","permalink":"https://volantis.js.org/tag-plugins/image/","excerpt":"","text":"The Image tag is a tag for a single picture application scenario, supporting picture description text and specified width. This plugin was last updated in version 4.0{% image link, width=width (optional), height=height (optional), alt=description (optional), bg=placeholder color (optional) %} Demo effectAdd description: The way back to the dormitory after class every day Specify width: Specify the width and add a description: The way back to the dormitory after class every day Set the background color of the placeholder: Optimize the look and feel of browsing in different widths Source code of the above exampleexample:Add description:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, alt=The way back to the dormitory after class every day, there is no story. %}Specify width:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px %}Specify the width and add a description:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, alt=The way back to the dormitory after class every day, there is no story. %}Set the placeholder background color:{% image https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, bg=#1D0C04, alt=Optimize the look and feel of browsing with different widths %} Supportable parametersPicture width and heightexample:width=300px, height=32px image descriptionexample:alt=picture description Placeholder background colorexample:bg=#f2f2f2"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/inlineimage/index.html","permalink":"https://volantis.js.org/tag-plugins/inlineimage/","excerpt":"","text":"Inlineimage tag is a kind of inline image tag, which can be used to insert emoticons in the middle of a paragraph. This plugin was last updated in version 4.0{% inlineimage image link, height=height (optional) %} Demo effectThis is a passage from . This is another paragraph of . Source code of the above exampleexample:This is a passage from {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %}.This is another paragraph of {% inlineimage https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %}. Supportable parametersHeightheight=20px"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/link/index.html","permalink":"https://volantis.js.org/tag-plugins/link/","excerpt":"","text":"was last updated in version 3.0{% link title, link, image link (optional) %} Demo effectHow to participate in the projecthttps://volantis.js.org/contributors/ Source code of the above exampleexample:{% link How to participate in the project, https://volantis.js.org/contributors/, https://cdn.jsdelivr.net/gh/xaoxuu/cdn-assets@master/logo/256/safari.png %}"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/issues/index.html","permalink":"https://volantis.js.org/tag-plugins/issues/","excerpt":"","text":"was last updated in version 4.0{% issues type | api=url | group=key:value1,value2(optional) %} Types ofAccording to different requirements, the content of issues will be parsed into different HTML tags. The currently supported types are: -timeline: parsed into timeline tags, the title of the issue corresponds to the time of the timeline, and the content of the issue corresponds to the content of the timeline.-sites: parsed into sites tag, need JSON code block: { "title": "", "screenshot": "", "url": "", "avatar": "", "description": "", "keywords": ""} APIPass a URL that can be transferred, for example: 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 GroupThe issues of the site type are not grouped by default. If you need to group, you can specify the grouping basis "key", and the grouping whitelist "value1" "value2", etc., for example: group=version:v4,v3,v2 The function of this parameter is to filter out the data that contains "version": "v4" or "version": "v3" or "version": "v2" in JSON and display them in groups. Exampletimeline{% 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 %} Corresponding warehouse link: Gitee: xaoxuu/timelinehttps://gitee.com/xaoxuu/timeline/issues Friends chain{% 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 %} The labels=active parameter in the above example can control the default issue not to be displayed, and it will only be displayed after the ʻactive` label is added after the self-review. The warehouse link corresponding to the above example: GitHub: xaoxuu/friendshttps://github.com/xaoxuu/friends/issues GroupThis is the data of the "Sample Blog" page of the theme's official website: {% 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 %} The warehouse link corresponding to the above example: GitHub: volantis-x/exampleshttps://github.com/volantis-x/examples/issues"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/note/index.html","permalink":"https://volantis.js.org/tag-plugins/note/","excerpt":"","text":"NoteBlock is an enhanced version of Blockquote, with icons displayed on the left and colors can be customized. Note is a simple way of writing NoteBlock. was last updated in version 2.3{% note style parameter, text content %} Demo effectClassic usageyou can set the default style in the configuration file to provide the most convenient way to write a simple sentence. note quote is suitable for quoting a paragraph note info default theme color note warning default yellow note error/danger default red note done/success default green More iconsThese are the default styles, you can add colors manually: note radiation default style note radiation yellow can add color note bug red indicate some failures that still exist note link green can place some links note paperclip blue place some attachment links note todo to-do items note guide clear can add a section of guide note download can place download link note message gray A piece of message note up can explain how to update note undo light can explain how to cancel or roll back Source code of the above exampleexample:### Classic usage{% note, you can set the default style in the configuration file to provide the most convenient way to write a simple sentence. %}{% note quote, note quote is suitable for quoting a paragraph %}{% note info, note info default theme color, suitable for neutral information %}{% note warning, note warning default yellow, suitable for warning information %}{% note danger, note error/danger default red, suitable for dangerous information %}{% note success, note done/success default green, information suitable for correct operation %}### More iconsThese are the default styles, you can add colors manually:{% note radiation, note radiation default style %}{% note radiation yellow, note radiation yellow can add color %}{% note bug red, note bug red indicate some failures that still exist %}{% note link green, note link green can place some links %}{% note paperclip blue, note paperclip blue place some attachment links %}{% note todo, note todo todo %}{% note guide clear, note guide clear can add a section of guide %}{% note download, note download can place download link %}{% note message gray, note message gray A piece of message %}{% note up, note up can explain how to update %}{% note undo light, note undo light can explain how to cancel or roll back %} Supportable parametersThe position of style parameters can be written with icons and colors. Multiple style parameters are separated by spaces. iconcolorquote, info, warning, done/success, error/danger gray, color can also be specifiedradiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo colourspecify colorclear, light, gray, red, yellow, green, cyan, blue"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/noteblock/index.html","permalink":"https://volantis.js.org/tag-plugins/noteblock/","excerpt":"","text":"NoteBlock is an enhanced version of Blockquote, with icons displayed on the left and colors can be customized. Note is a simple way of writing NoteBlock. was last updated in version 4.0{% noteblock style parameter (optional), title (optional) %}Text paragraph{% endnoteblock %} Demo effectSome complicated structures can be placed in the block, and nesting is supported. title (optional)Windows 10 is not designed for everyone, but for everyoneNested test: Please sit down and relax, I'm doing everything for you... Folding test: Click to see more don't say we haven't warned youWe all have troubles Source code of the above exampleexample:{% noteblock, title (optional) %}Windows 10 is not designed for everyone, but for everyone{% noteblock done %}Nested test: Please sit down and relax, I'm helping you with everything...{% endnoteblock %}{% folding yellow, Folding test: click to see more %}{% note warning, don't say we haven't warned you %}{% noteblock bug red %}We all have troubles{% endnoteblock %}{% endfolding %}{% endnoteblock %} Supportable parametersThe position of style parameters can be written with icons and colors. Multiple style parameters are separated by spaces. iconcolorquote, info, warning, done/success, error/danger gray, color can also be specifiedradiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo colourspecify colorclear, light, gray, red, yellow, green, cyan, blue"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/p/index.html","permalink":"https://volantis.js.org/tag-plugins/p/","excerpt":"","text":"This plugin was last updated in version 2.5{% p style parameter, text content %} Demo effectColored textIt is convenient to insert labels of various colors in a paragraph, including: red, yellow, green, cyan, blue, gray. Oversized textThe title part of the document "start" page is oversized text. Volantis A Wonderful Theme for Hexo Source code of the above exampleexample:### Colored textIt is convenient to insert labels of various colors in a paragraph, including: {% p red, red%}, {% p yellow, yellow%}, {% p green, green%}, {% p cyan, cyan%}, {% p blue, blue%}, {% p gray, gray%}.### Oversized textThe title part of the document "start" page is oversized text.{% p center logo large, Volantis %}{% p center small, A Wonderful Theme for Hexo %} Supportable parametersThe style parameter position can write color, size, and alignment direction, and multiple style parameters are separated by spaces. Fontlogo, code colourred, yellow, green, cyan, blue, gray Sizesmall, h4, h3, h2, h1, large, huge, ultra Alignment directionleft, center, right"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/radio/index.html","permalink":"https://volantis.js.org/tag-plugins/radio/","excerpt":"","text":"was last updated in 2.6 version{% checkbox style parameter (optional), text (support simple md) %} Demo effect plain text test supports simple markdown syntax support custom color green yellow cyan blue Source code of the above exampleexample:{% radio plain text test %}{% radio checked, supports simple [markdown](https://guides.github.com/features/mastering-markdown/) syntax %}{% radio red, support custom color %}{% radio green, green %}{% radio yellow, yellow %}{% radio cyan, cyan %}{% radio blue, blue %} Supportable parameterscolourred, yellow, green, cyan, blue Selected statechecked"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/site/index.html","permalink":"https://volantis.js.org/tag-plugins/site/","excerpt":"","text":"was last updated in version 4.0{% sitegroup %}{% site title, url=link, screenshot=screenshot link, avatar=avatar link (optional), description=description (optional) %}{% site title, url=link, screenshot=screenshot link, avatar=avatar link (optional), description=description (optional) %}{% endsitegroup %} Demo effect{% 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 %} Source code of the above exampleexample:{% 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":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/tab/index.html","permalink":"https://volantis.js.org/tag-plugins/tab/","excerpt":"","text":"This plugin is ported from NexT #tabs was last updated to version 2.1{% tabs unique ID in the page %}<!-- tab column 1 -->content<!-- endtab --><!-- tab column 2 -->content<!-- endtab -->{% endtabs %} Demo effectcolumn 1column 2. . .! ! ! Source code of the above exampleexample:{% tabs tab-id %}<!-- tab column 1 -->. . .<!-- endtab --><!-- tab column 2 -->! ! !<!-- endtab -->{% endtabs %}"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/span/index.html","permalink":"https://volantis.js.org/tag-plugins/span/","excerpt":"","text":"This plugin was last updated in version 2.5{% span style parameter, text content %} Demo effectColored textIt is convenient to insert tags of various colors in a paragraph, including: red, yellow, green, cyan, blue, gray. Oversized textThe title part of the document "start" page is oversized text. Volantis A Wonderful Theme for Hexo Source code of the above exampleexample:### Colored textIt is convenient to insert tags of various colors in a paragraph, including: {% span red, red%}, {% span yellow, yellow%}, {% span green, green%}, {% span cyan, cyan%}, {% span blue, blue%}, {% span gray, gray%}.### Oversized textThe title part of the document "start" page is oversized text.{% span center logo large, Volantis %}{% span center small, A Wonderful Theme for Hexo %} Supportable parametersThe style parameter position can write color, size and alignment direction, and multiple style parameters are separated by spaces. Fontlogo, code colourred, yellow, green, cyan, blue, gray Sizesmall, h4, h3, h2, h1, large, huge, ultra Alignment directionleft, center, right"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/text/index.html","permalink":"https://volantis.js.org/tag-plugins/text/","excerpt":"","text":"Here are some text style tags: Text with underline example.md:Text with {% u underline %} Text with emphasis example.md:Text with {% emp emphasis %} Text with example.md:Text with {% wavy %} Text with strikethrough example.md:Text with {% del strikethrough %} Keyboard style text command + D example.md:Keyboard style text {% kbd command %} + {% kbd D %} Password style text: There is no verification code here example.md:Password style text: {% psw There is no verification code here %}"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/timeline/index.html","permalink":"https://volantis.js.org/tag-plugins/timeline/","excerpt":"","text":"was last updated in version 3.0{% timeline title (optional) %}{% timenode time node (title) %}Text content{% endtimenode %}{% timenode time node (title) %}Text content{% endtimenode %}{% endtimeline %} Demo effect 2020-07-24 2.6.6 -> 3.0 If there is a hexo-lazyload-image plugin, you need to delete and reinstall the latest version, set lazyload.isSPA: true.The 2.x version of css and js are not applicable to the 3.x version. If you use ʻuse_cdn: true`, you need to delete them.The fancybox tag of the 2.x version was renamed to gallery in the 3.x version.In the 2.x version, the top top: true is changed to pin: true, and it is also applicable to the page of layout: page.If you use the hexo-offline plug-in, it is recommended to uninstall it. The pjax service is enabled by default in version 3.0. 2020-05-15 2.6.3 -> 2.6.6 No additional processing is required. 2020-04-20 2.6.2 -> 2.6.3 Search globally for seotitle and replace with seo_title.The index rule of the group component has changed. In the article using the group component, the component name corresponding to group: group_name must be group_name.The list name of the group component first displays the article's short_title followed by title. Source code of the above exampleexample:{% timeline %}{% timenode 2020-07-24 [2.6.6 -> 3.0](https://github.com/volantis-x/hexo-theme-volantis/releases) %}1. If there is a `hexo-lazyload-image` plugin, you need to delete and reinstall the latest version, set `lazyload.isSPA: true`.2. The 2.x version of css and js are not applicable to the 3.x version. If you use ʻuse_cdn: true`, you need to delete them.3. The 2.x version of the fancybox label was renamed to gallery in the 3.x version.4. In the 2.x version, the top `top: true` is changed to `pin: true`, and it is also applicable to the page of `layout: page`.5. If the `hexo-offline` plug-in is used, it is recommended to uninstall it. The pjax service is enabled by default in version 3.0.{% endtimenode %}{% timenode 2020-05-15 [2.6.3 -> 2.6.6](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6) %}No additional processing is required.{% 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. Search globally for `seotitle` and replace with `seo_title`.2. The indexing rules of the group component have changed. In articles using the group component, the component name corresponding to `group: group_name` must be `group_name`.2. The list name of the group component first displays the `short_title` of the article followed by `title`.{% endtimenode %}{% endtimeline %}"},{"title":"","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"tag-plugins/video/index.html","permalink":"https://volantis.js.org/tag-plugins/video/","excerpt":"","text":"This plugin was last updated in version 2.3{% video video link %} Demo effect100% width Your browser does not support the video tag. 50% width 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% width 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. Source code of the above example100% width example.md:{% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %} 50% width 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% width 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 %} Supportable parametersAlignment directionleft, center, right Number of columnsWrite the number of columns directly after the comma, and support 1 to 4 columns."},{"title":"Select comment system","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/comments/index.html","permalink":"https://volantis.js.org/theme-settings/comments/","excerpt":"","text":"The currently supported comment systems are: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover blog/_config.volantis.ymlcomments: title: <i class='fas fa-comments'></i> Comments subtitle: service: valine # valine, minivaline, disqus, gitalk, vssue, livere, isso, hashover ValineMiniValineVssueGitalkDisqusLivereIssoHashover... A fast, concise and efficient no back-end comment system 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 ... See the source code for optional configuration items Among them, placeholder supports setting in front-matter. front-matter---valine: placeholder: What do you think of xxx?--- You can also share a comment box for multiple pages by setting valine.path. front-matter---valine: path: /wiki/volantis/--- A fast, concise and efficient no back-end comment system https://github.com/MiniValine/MiniValine/ blog/_config.volantis.ymlcomments: ... service: minivaline ... minivaline: appId: # Your leancloud application appid appKey: # Your leancloud application appkey ... See source code for optional configuration items Vue-driven, Issue-based comment plugin 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: # [] The method of obtaining clientID and clientSecret can be searched for the tutorial by yourself, here is only a brief description of the steps: Click GitHub -> Settings https://github.com/settings/profile Click Developer settings https://github.com/settings/developers Click New OAuth App https://github.com/settings/applications/new Fill in the information:Application name Fill in whatever you want, mine is: xaoxuu.comHomepage URL and Authorization callback URL both write your URL, mine is: https://xaoxuu.com **You can share a comment box on multiple pages by setting 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: #Your livere's uid Check your uid here: https://livere.com/insight/myCode, find the following code in [Code Management -> General Website], where the content in data-uid is yours livere_uid. <!-- Labilee City version installation code --><div id="lv-container" data-id="city" data-uid="Your livere’s 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/comment system name/layout.ejsWrite layout code here blog/themes/volantis/layout/_third-party/comments/comment system name/script.ejsHere to write the code to load js contains more comment systems"},{"title":"Create a theme configuration file","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/configuration/index.html","permalink":"https://volantis.js.org/theme-settings/configuration/","excerpt":"","text":"The _config.yml file in the theme directory is usually responsible for theme-related configuration. We strongly recommend that you use a replacement theme configuration file to prevent your configuration from being lost. So how to use instead of theme configuration files? Step 1/2: Create configuration file Create a new file next to the _config.yml file in the blog root directory: _config.volantis.yml, the configuration information in this file has priority over the configuration files in the theme folder. Step 2/2: Overwrite custom configuration When you need to modify something, such as the navigation bar menu, then you need to find the relevant content in the theme configuration file and copy it into the configuration file you created: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: blog icon: fas fa-rss url: /hintFor themes installed using "npm i hexo-theme-volantis", the theme configuration file is in "blog/node_modules/hexo-theme-volantis/_config.yml"The theme installed in the traditional way, the theme configuration file is in "blog/themes/volantis/_config.yml""},{"title":"website and article cover","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/cover/index.html","permalink":"https://volantis.js.org/theme-settings/cover/","excerpt":"","text":"Cover heightblog/_config.volantis.ymlcover: height_scheme: full # full, half ... Currently the theme provides two home page cover height schemes, and other pages are half screen height. Cover layout schemeblog/_config.volantis.ymlcover: ... scheme: dock # search (search), dock (dock), featured (selected), focus (focus) ... Layout plan Suitable for scene search Focus on search dock More entry options featured There are about 4 options focus There are about 4 options Default display settingsblog/_config.volantis.ymlcover: ... display: home: true archive: false others: false # can be written in front-matter'cover: true' Since the homepage and archive are automatically generated by hexo, you need to set whether to display the cover in the theme configuration file, while other pages can be set in front-matter by setting cover: true/false to determine whether to display the cover or not Cover."},{"title":"Set website footer","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/footer/index.html","permalink":"https://volantis.js.org/theme-settings/footer/","excerpt":"","text":"Through layout, you can freely lay out the content of website footer ʻ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>' Among them, ʻaplayer` needs to be enabled in the plugin settings. You can add text attributes to display other text information, for example: 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":"Article layout configuration","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/layout/index.html","permalink":"https://volantis.js.org/theme-settings/layout/","excerpt":"","text":"# Article layoutarticle: # Article card layout scheme of the article list page 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 # The layout scheme of the article card body on the article details page body: # Top of article information # Take from meta_library top_meta: [author, category, date, counter] # ---------------- # Article footer component footer_widget: # ---------------- # Reference materials, related materials, etc. (for layout: post/docs) references: title: Reference icon: fas fa-quote-left # In front-matter: # references: #-title: an article # url: https:// # To display this component. # ---------------- # Related articles, plug-ins need to be installed (for layout: post) # npm i hexo-related-popular-posts related_posts: enable: false title: Related articles icon: fas fa-bookmark max_count: 5 # Set to empty to not use the article header placeholder_img: https://cdn.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg # ---------------- # Copyright notice component (for layout: post/docs) copyright: enable: true permalink:'The permanent link to this article is:' content: -'The content of the blog follows the attribution-non-commercial use-share in the same way 4.0 International (CC BY-NC-SA 4.0) agreement' -permalink # ---------------- # Reward component (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 # Information at the bottom of the article # Take from meta_library bottom_meta: [updated, tags, share] # meta library meta_library: # Default article author (can be overridden in front-matter) author: avatar: name: Please set the author of the article url: / # Article creation date date: icon: fas fa-calendar-alt title:'Posted on:' format:'ll' # Date format http://momentjs.com/docs/ # Article update date updated: icon: fas fa-edit title:'Updated at:' format:'ll' # Date format http://momentjs.com/docs/ # Article classification category: icon: fas fa-folder-open # Article view count counter: icon: fas fa-eye unit:'Views' # Number of article comments: only valine is supported valinecount: icon: fas fa-comment-dots desc:'' # comments # Article word count and reading time wordcount: icon_wordcount: fas fa-keyboard icon_duration: fas fa-hourglass-half # Article tags tags: icon: fas fa-hashtag # share it 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 # When id is qrcode, plug-in needs to be installed 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 The values ​​of top_meta and bottom_meta are taken from the meta_library library."},{"title":"Set the website navigation bar","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/navbar/index.html","permalink":"https://volantis.js.org/theme-settings/navbar/","excerpt":"","text":"Navigation bar configurationThe navigation bar is divided into three area settings: logo, menu, and search. If pictures are set in the logo area, icons and titles cannot be displayed. The settings of the menu area can be written in a separate file. 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: blog icon: fas fa-rss url: / -name: category icon: fas fa-folder-open url: categories/ -name: label icon: fas fa-tags url: tags/ -name: archive icon: fas fa-archive url: archives/ -name: Friends chain icon: fas fa-link url: friends/ -name: About icon: fas fa-info-circle url: about/ search: search # Search bar placeholder use data file It is recommended to create a new file to store the configuration of the navigation bar menu. The path of the file is: blog/source/_data/menu.yml The content of the file is: blog/source/_data/menu.yml-name: blog icon: fas fa-rss url: /... Menu nestingThe navigation bar menu supports nesting, the nested attribute is named rows, and the writing example: blog/source/_data/menu.yml...-name: more icon: fas fa-ellipsis-v rows: -name: theme source code url: https://github.com/volantis-x/hexo-theme-volantis/ -name: update log url: https://github.com/volantis-x/hexo-theme-volantis/releases/ -name: hr -name: Have questions? rows: -name: see FAQ url: faqs/ -name: see the source code of this site url: https://github.com/volantis-x/volantis-docs/ -name: mention Issue url: https://github.com/volantis-x/hexo-theme-volantis/issues/ -name: hr -name: announcements and test blog posts url: archives/ -name: sample blog url: examples/ -name: special thanks url: contributors/ Dividing lineIn the submenu, a new "menu" with only name: hr will be rendered as a dividing line. -name: hr SubtitleIn the submenu, a new "menu" with only name: subtitle content (can also have ʻicon: icon for subtitle`) will be rendered as a subtitle. ...-name: recent icon: fas fa-clock url: / rows: -name: popular article icon: fas fa-fire -name: Design Ideas of ProHUD Open Source Library url: blog/2019-08-27-prohud/ -name: ValueX: Practical safe object type conversion library url: blog/2019-08-29-valuex/ -name: Design and development of Heart Rate Manager App url: blog/2019-07-23-heartmate/"},{"title":"Third-party plugin","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/plugins/index.html","permalink":"https://volantis.js.org/theme-settings/plugins/","excerpt":"","text":"Plugin libraryVolantis provides compatibility optimization for rich plug-ins. You only need to turn on and off most of the plug-ins without any settings. 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: # Preloading 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 # Picture lazy loading # 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 # blur loading effect (valid when loadingImg is empty) ######## 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: # The blocked URL address will not enable pjax redirection, you can use window.location.pathname to get it under the console #-/artitalk/ # artitalk does not support pjax # Artitalk https://artitalk.js.org # Please refer to the configuration process: https://artitalk.js.org/doc.html # Except appID and appKEY are optional artitalk: # Set `layout: artitalk` to enable in page appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # severurl: #leancloud binds the secure domain name, you don’t need to fill in if you use the international version # slanguage: # Language setting, zh is Chinese, en is English, and es is Spanish. The default is Chinese # per: #Display number of talks on each page # placeholder1: #Placeholder in the input box of the editor talk # placeholder2: #Customize the placeholder for the input box of the avatar url # lazy: #Load animation switch, 1 is on, 0 is off, the default is on # bgimg: #Talk about the background image url of the input box # color1: #Talk about background color 1 & button color 1 # color2: #Talk about background color 2 & button color 2 # color3: #Talk about font color ################################# # Dark Mode # Style:source/css/_plugins/dark.styl # Switch button: add in navbar.menu: # - name: Dark Mode # Customizable # icon: fas fa-moon # Customizable # toggle: darkmode darkmodejs: enable: #true Slide backgroundblog/_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 ... The display position of the slideshow background image can be selected to be pasted on the cover and slide along with the cover, or fixed as the background image of the webpage. 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 If you need to use highlight.js for syntax highlighting, please set highlight.enable in the site configuration file to false, otherwise the plugin will not be loaded. You can choose your favorite theme among the 94 Syntax Highlighting Themes, and then replace the above Css link. if you use highlight.js after testing APlayer Music Playerblog/_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 player can only be used in mainland China. Related documents: APlayer | MetingJS Artitalkblog/_config.volantis.ymlplugins: ... # Artitalk https://artitalk.js.org # Please refer to the configuration process: https://artitalk.js.org/doc.html # Except appID and appKEY are optional Artitalk: enable: false # true is turned on, false is turned off appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # severurl: #leancloud binds the secure domain name, you don’t need to fill in if you use the international version # slanguage: # Language setting, zh is Chinese, en is English, and es is Spanish. The default is Chinese # per: #Display number of talks on each page # placeholder1: #Placeholder in the input box of the editor talk # placeholder2: #Customize the placeholder for the input box of the avatar url # lazy: #Load animation switch, 1 is on, 0 is off, the default is on # bgimg: #Talk about the background image url of the input box # color1: #Talk about background color 1 & button color 1 # color2: #Talk about background color 2 & button color 2 # color3: #Talk about font color"},{"title":"site search","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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: The default configuration is Hexo search, but you need to install a plug-in to use it: npm i -S hexo-generator-search hexo-generator-json-content"},{"title":"Sidebar configuration","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/sidebar/index.html","permalink":"https://volantis.js.org/theme-settings/sidebar/","excerpt":"","text":"The sidebar widget is different from the meta library: In addition to the existing widget, you can easily create your own widget and place it where you need it. In addition, you can also write widgets in separate files. View all related configurations blog/_config.volantis.ymlsidebar: # Home page, category, archive and other independent pages for_page: [blogger, category, tagcloud, qrcode] # layout: docs/post such article pages for_post: [toc] # Sidebar component library 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: Contents of this article 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: Article classification url: /blog/categories/ # --------------------------------------- # tagcloud widget tagcloud: class: tagcloud display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-tags title: Popular tags 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: site information type: article: enable: true text:'Number of articles:' unit:'Article' runtime: enable: true data: '2020/01/01' # Fill in the site construction date text:'Elapsed time:' unit:'day' wordcount: enable: true text:'Total words on this site:' # Need to enable wordcount unit:'word' siteuv: enable: true text:'Number of visitors to this site:' # Need to enable busuanzi unit:'person' sitepv: enable: true text:'Total visits to this site:' # Need to enable busuanzi unit:'time' lastupd: enable: true friendlyShow: true # More friendly time display text:'Last activity time:' unit:'day' Every widget has class and display. The former represents what the widget is, and the latter represents whether the widget is displayed on what desktop and mobile platform. The sidebar widgets will be moved to the bottom of the body area, so some sidebar widgets have no meaning. It is recommended to set it to display only on the desktop. Widget name: class: widget category display: [Whether the widget is displayed on the desktop, and whether the widget is displayed on the mobile device] Blogger information widgetblog/_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 Among them, if today's poem jinrishici is set to a string, this string will become a placeholder text and will be displayed when loading fails. If you don't need it, please set it to jinrishici: false. Please set the specific content of social in the footer of the website. Article directory widgetblog/_config.volantis.ymltoc: class: toc display: [desktop, mobile] # [desktop, mobile] header: icon: fas fa-list title: Contents of this article list_number: false min_depth: 2 max_depth: 5 This widget can only be placed in the sidebar and is valid in the article. When previewing on a mobile device, the TOC button will appear on the right side of the navigation bar when you swipe your finger upwards, click to expand the TOC component. If you need to display the chapter number, please set list_number. min_depth and max_depth represent the header level supported by TOC, the maximum range is 2-6. Article classification widgetblog/_config.volantis.ymlcategory: class: category display: [desktop] # [desktop, mobile] header: icon: fas fa-folder-open title: Article classification url: /blog/categories/ This component can directly display all article categories. If you want a separate page to display, you need to create a file by yourself. The specific operation is in the "page" part of the document. Tag cloud widgetblog/_config.volantis.ymltagcloud: class: tagcloud display: [desktop] # [desktop, mobile] header: icon: fas fa-tags title: Popular tags url: /blog/tags/ min_font: 14 max_font: 24 color: true start_color:'#999' end_color:'#555' This component can directly display the tags of all articles. If you want a separate page to display, you need to create a file by yourself. The specific operation is in the "page" part of the document. QR code partsblog/_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 You can place it in the footer of the article to display rewarding pictures, or place it in the sidebar. Universal text widgetblog/_config.volantis.ymlrepos: class: text display: [desktop] # [desktop, mobile] header: icon: fab fa-github title: Like it url: https://github.com/xaoxuu/ content: -'Your likes are very important to me. If you like this theme, I hope you can give me a like to support the items below. ' -'[<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)' You can create text widgets to display any text content. Universal list widgetblog/_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/ You can create a list part to display any linked list. The attributes supported by each item in the list of rows are: name, ʻurl, ʻicon, ʻimg, ʻavatar, where ʻimg is a link to a square image and ʻavatar is a circle Link to the shape picture. Group IndexThe layout of this widget is inherited from the list widget and is used to display the grouped article list to which the article belongs. Please upgrade your Volantis to version 2.5 or higher. blog/_config.volantis.ymlgroup-1: class: group display: [desktop, mobile] # [desktop, mobile] header: icon: fab fa-github title: Git url: /wiki/git/ Set in the front-matter of the article: front-mattergroup: group-1order: 16sidebar: [group-1, toc] The "group-1" card will display all the articles with group: group-1 in the form of a list, sorted from small to large in the order of ʻorder`. Universal grid widgetblog/_config.volantis.ymlfeedback: class: grid display: [desktop, mobile] header: icon: fas fa-headset title: Contact the developer url: https://github.com/volantis-x/hexo-theme-volantis fixed: true # fixed width rows: -name: feedback BUG icon: fas fa-bug url: https://github.com/volantis-x/hexo-theme-volantis/issues/ -name: ask for help icon: fas fa-question-circle url: https://github.com/volantis-x/hexo-theme-volantis/issues/ -name: make a suggestion icon: fas fa-lightbulb url: https://github.com/volantis-x/hexo-theme-volantis/issues/ You can create a grid widget to display any list of links. By default, the grid automatically determines the width of each grid according to the text length. If the text length is different, it is recommended to set fixed: true to fix the width. At this time, the text in the grid with too long text will be displayed in a new line. Universal page widgetblog/_config.volantis.ymltest: class: page display: [desktop, mobile] pid: haha content: excerpt # excerpt, more, content You can render the md content of the entire page as a small part. Just set the pid property in the widget and the same pid in the article's front-matter. content represents the content displayed by this component, optional ʻexcerpt, more, and content` correspond to the abstract of the article, the content behind the abstract, and the full text respectively."},{"title":"进阶设定","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"Custom theme appearance","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","comments":true,"path":"theme-settings/style/index.html","permalink":"https://volantis.js.org/theme-settings/style/","excerpt":"","text":"Maximum layout widthblog/_config.volantis.ymlcustom_css: ... max_width: 1080px # Sum of body width and sidebar width The maximum width of the content presented on the web page, that is, the sum of the width of the body and sidebar. Anti-aliasingblog/_config.volantis.ymlcustom_css: ... font_smoothing: true # font-smoothing for webkit Custom cursor styleblog/_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 Navigation bar styleYou can set the height of the navigation bar and visual effects. The currently available visual effects are:-shadow: Card shadow.-floatable: When the mouse moves into the container, it will appear to float.-blur: The background blur effect (frosted glass), displayed as opaque when the browser does not support it. blog/_config.volantis.ymlcustom_css: ... navbar: height: 64px effect: [shadow, blur] # [shadow, floatable, blur] Scroll bar styleblog/_config.volantis.ymlcustom_css: ... scrollbar: size: 4px border: 2px color:'#2196f3' hover:'#ff5722' Sidebar styleThe visual effects parameters are the same as above. It is worth noting that the card's floatable effect and blur effect conflict. blog/_config.volantis.ymlcustom_css: ... sidebar: effect: [shadow] # [shadow, floatable, blur] Body area styleThe visual effects parameters are the same as above. It is worth noting that the card's floatable effect and blur effect conflict. You can set the display language name of the code block in language: true. text_align can set the text alignment direction of 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:'' Layout spacingYou can set several heading layout spacing h2/h3/h4, paragraph spacing line, and paragraph spacing inline within blocks. 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 Custom fontYou can customize the body and code fonts. 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 Custom colorblog/_config.volantis.ymlcolor_scheme: # ------------ # Universal color common: # Theme color theme:'#44D7B6' # Link color link:'#2196f3' # Button color button:'#44D7B6' # The color when the mouse is placed on the interactive element hover:'#ff5722' # The color of the text inside the theme color block inner:'#fff' # The background color of the text in the selected area selection:'alpha(#2196f3, 0.2)' # ------------ # Bright theme (default) light: # Website background color site_bg:'#f4f4f4' # Text on website background site_inner:'#fff' # Site footer text site_footer:'#666' # Card background color card:'#fff' # Normal text on the card text:'#444' # Block and code block background color block:'#f6f6f6' # The background color when the code block is highlighted codeblock:'#FFF7EA' # Inline code color inlinecode:'#D56D28' # Article section h1:'#444' h2:'#444' h3:'#444' h4:'#444' h5:'#444' h6:'#444' p:'#444' # List text list:'#666' # List the text when hover list_hl:'mix($color-theme, #000, 80)' # Supporting text meta:'#888' # ------------ # Dark theme dark: # Website background color site_bg:'#222' # Text on website background site_inner:'#eee' # Site footer text site_footer:'#aaa' # Card background color card:'#444' # Normal text on the card text:'#eee' # Block and code block background color block:'#3a3a3a' # The background color when the code block is highlighted codeblock:'#343a3c' # Inline code color inlinecode:'#D56D28' # Article section h1:'#eee' h2:'#eee' h3:'#ddd' h4:'#ddd' h5:'#ddd' h6:'#ddd' p:'#bbb' # List text list:'#aaa' # List the text when hover list_hl:'mix($color-theme, #fff, 80)' # Supporting text meta:'#888' # Night picture brightness brightness: 70% Customize the right-click menublog/_config.volantis.ymlrightmenu: enable: true # hr: dividing line, music: music controller layout: [home, help, examples, contributors, hr, source_docs, source_theme, hr, print, hr, music] # Optional function item print: name: print page icon: fa fa-print onclick: document.execCommand('print') # The format of the custom menu is as follows help: name: FAQ icon: fa fa-question url: https://volantis.js.org/faqs/ examples: name: sample blog icon: fa fa-rss url: https://volantis.js.org/examples/ contributors: name: Join the community icon: fa fa-fan fa-spin url: https://volantis.js.org/contributors/ source_docs: name: source code of this site icon: fa fa-code-branch url: https://github.com/volantis-x/volantis-docs/ source_theme: name: theme source code icon: fa fa-code-branch url: https://github.com/volantis-x/hexo-theme-volantis/"},{"title":"开始使用","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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/git/ 通用网格部件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-2021 XXX](/)' # 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: /--- 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"},{"title":"进阶设定","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","comments":true,"path":"v4/advanced-settings/index.html","permalink":"https://volantis.js.org/v4/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--- 为网站提速加载速度 减少不必要的 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.volantis.yml# use_cdn: /source/js/* 中的JS文件(JS Only)使用jsdelivr的min版本加速# 默认使用 https://cdn.jsdelivr.net/npm/hexo-theme-volantis@<%- theme.info.theme_version %>/source/js/*.min.js 的CDN压缩版本(min.js),注意版本号对应关系!!可以通过修改以下配置项覆盖# 开发者注意 use_cdn 设置为 falseuse_cdn: trueinfo: theme_version: 'x.x.x' # This is theme's version. cdn: js: # https://cdn.jsdelivr.net/npm/hexo-theme-volantis@<%- theme.info.theme_version %>/source/js/app.min.js # 注意版本!!! css: first: # /css/first.css (默认不提供CDN,first.css 中为首屏渲染的样式,内含 cover navbar search 的样式。) style: # /css/style.css (默认不提供CDN,style.css 为异步延迟加载的样式。) 如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。 如果你需要对样式进行 DIY,请注意首屏渲染和异步延迟加载的差异。 自定义 CDN如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。 尝试使用 Terser 压缩 ES6安装压缩工具npm install -g gulpnpm install --save-dev gulp gulp-html-minifier-terser gulp-htmlclean gulp-htmlmin gulp-minify-css gulp-terser gulp 配置文件blog/gulpfile.jsvar gulp = require('gulp');var minifycss = require('gulp-minify-css');var htmlmin = require('gulp-html-minifier-terser');var htmlclean = require('gulp-htmlclean');var terser = require('gulp-terser');// 压缩css文件const minify_css = () => ( gulp.src(['./public/**/*.css']) .pipe(minifycss()) .pipe(gulp.dest('./public')));// 压缩html文件const minify_html = () => ( gulp.src(['./public/**/*.html','!./public/{lib,lib/**}']) .pipe(htmlclean()) .pipe(htmlmin({ removeComments: true, minifyJS: true, minifyCSS: true, minifyURLs: true, })) .pipe(gulp.dest('./public')))// 压缩js文件const minify_js = () => ( gulp.src(['./public/**/*.js', '!./public/**/*.min.js','!./public/{lib,lib/**}']) .pipe(terser()) .pipe(gulp.dest('./public')))module.exports = { minify_html: minify_html, minify_css: minify_css, minify_js: minify_js};gulp.task('one', gulp.parallel( minify_html, minify_css, minify_js))gulp.task('default', gulp.series('one')); 运行压缩gulp 安装 Service Worker 服务blog/_config.yml# 全局导入import: script: - <script>"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then(function(n){n.onupdatefound=function(){var e=n.installing;e.onstatechange=function(){switch(e.state){case"installed":navigator.serviceWorker.controller?console.log("Updated serviceWorker."):console.log("serviceWorker Sucess!");break;case"redundant":console.log("The installing service worker became redundant.")}}}}).catch(function(e){console.log("Error during service worker registration:",e)}); </script> 在blog/source中创建sw.js文件。 内容如下: importScripts('https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/workbox-sw.js');workbox.setConfig({ modulePathPrefix: 'https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/'});const { core, precaching, routing, strategies, expiration, cacheableResponse, backgroundSync } = workbox;const { CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate } = strategies;const { ExpirationPlugin } = expiration;const { CacheableResponsePlugin } = cacheableResponse;const cacheSuffixVersion = '-000010', // 缓存版本号 极端重要,修改静态文件后发布网页一定要修改缓存版本号 maxEntries = 100;self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((keys) => { return Promise.all(keys.map((key) => { if (!key.includes(cacheSuffixVersion)) return caches.delete(key); })); }) );});core.setCacheNameDetails({ prefix: 'volantis', // 极端重要 自己拟定一个名字 suffix: cacheSuffixVersion});core.skipWaiting();core.clientsClaim();precaching.cleanupOutdatedCaches();/* * Precache * - Static Assets */precaching.precacheAndRoute( // 极端重要 定义首次缓存的静态文件 如果开启CDN需要修改为CDN链接 [ { url: '/css/first.css', revision: null }, { url: '/css/style.css', revision: null }, { url: '/js/app.js', revision: null }, ],);/* * Cache File From CDN * * Method: CacheFirst * cacheName: static-immutable * cacheTime: 30d */// cdn.jsdelivr.net - cors enabledrouting.registerRoute( /.*cdn\\.jsdelivr\\.net/, new CacheFirst({ cacheName: 'static-immutable' + cacheSuffixVersion, fetchOptions: { mode: 'cors', credentials: 'omit' }, plugins: [ new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60, purgeOnQuotaError: true }) ] }));// m7.music.126.net - cors enabledrouting.registerRoute( /.*m7\\.music\\.126\\.net/, new CacheFirst({ cacheName: 'static-immutable' + cacheSuffixVersion, fetchOptions: { mode: 'cors', credentials: 'omit' }, plugins: [ new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60, purgeOnQuotaError: true }) ] }));/* * No Cache * * Method: networkOnly */routing.registerRoute( /.*baidu\\.com.*/, new NetworkOnly());/* * Others img fonts * Method: staleWhileRevalidate */routing.registerRoute( // Cache image fonts files /.*\\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/, new StaleWhileRevalidate());/* * Static Assets * Method: staleWhileRevalidate */routing.registerRoute( // Cache CSS files /.*\\.(css|js)/, // Use cache but update in the background ASAP new StaleWhileRevalidate());/* * sw.js - Revalidate every time * staleWhileRevalidate */routing.registerRoute( '/sw.js', // 本文件名 new StaleWhileRevalidate());/* * Default - Serve as it is * networkFirst */routing.setDefaultHandler( new NetworkFirst({ networkTimeoutSeconds: 3 })); 安装「相关文章」插件 安装插件 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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","comments":true,"path":"v4/getting-started/index.html","permalink":"https://volantis.js.org/v4/getting-started/","excerpt":"","text":" Volantis4 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-x/p/hexo-theme-volantis.git themes/volantis 第 3/3 步:检查并安装依赖 安装 Hexo 搜索的依赖包:npm i hexo-generator-search hexo-generator-json-content安装 Stylus 渲染器:npm i hexo-renderer-stylus 版本更新注意事项使用主题的时候,尽量 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 请对照 更新日志 进行更新,下面是更新之后需要注意的事项: 2021-01-15 4.2.0 -> 4.3.0 更多关于Volantis的小版本更新请点击上方更新日志按钮增加 disqusjs 评论系统;增加 waline 评论系统;增加 旧版 Internet Explorer 淘汰行动 ;增加 Tidio聊天功能;增加 twitoo waline valine minivaline 文章阅读量统计;增加 bbtalk.js;修复#514 #538 #567 #431 #468;修复关闭 pjax 时 cover样式失效 和 报错 的问题 。 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 标签的图片支持放大。友链页面 layout: links 改为 layout: friends。 许可协议本主题采用 MIT开源许可协议 ,永久无限制免费使用。 MIT开源许可协议被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。被授权人可根据程式的需要修改授权条款为适当的内容。在软件和软件的所有副本中都必须包含版权声明和许可声明。 配置与使用配置与使用/v4/site-settings/"},{"title":"页面配置","date":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","comments":true,"path":"v4/page-settings/index.html","permalink":"https://volantis.js.org/v4/page-settings/","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, 可能是输入地址有误或该地址已被删除 %} 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 headimg 文章头图 url - layout:post 时特有的字段: 字段 含义 值类型 默认值 author 文章作者 [Object] config.author categories 分类 String, Array - tags 标签 String, Array - toc 是否生成目录 Bool true 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 --> 前后一定要有空行,不然可能导致显示错位。 设置文章作者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 即可: front-matter---title: Jon Snow | Game of Thrones Wiki | Fandomauthor: Jon--- 引入外部文章利用 link,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如: blog/source/_data/author.ymlxaoxuu: name: xaoxuu avatar: https://cdn.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png url: https://xaoxuu.com front-matter---layout: postdate: 2017-07-05title: [转]如何搭建基于Hexo的独立博客categories: [Dev, Hexo]tags: - Hexoauthor: xaoxuulink: 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--- 页面自定义布局显示迷你音乐播放器标题右边显示迷你音乐播放器,支持的字段有: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--- 渲染公式默认是不渲染的,如果文章内有公式,需要在 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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","comments":true,"path":"v4/site-settings/index.html","permalink":"https://volantis.js.org/v4/site-settings/","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":"标签插件","date":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","comments":true,"path":"v4/tag-plugins/index.html","permalink":"https://volantis.js.org/v4/tag-plugins/","excerpt":"","text":"为了兼容老用户,旧的标签插件在重构之前依然沿用旧的格式,即「英文逗号+空格」作为参数分隔符,而部分新增标签插件是「空格+英文竖线+空格」,请注意区分。 我们也在探索哪种分隔符既简单又不容易引起冲突,所以可能存在多种格式,具体以对应文档描述为准。 text这是一些文本样式标签: 带 下划线 的文本 example.md:带 {% u 下划线 %} 的文本 带 着重号 的文本 example.md:带 {% emp 着重号 %} 的文本 带 波浪线 的文本 example.md:带 {% wavy 波浪线 %} 的文本 带 删除线 的文本 example.md:带 {% del 删除线 %} 的文本 键盘样式的文本 command + D example.md:键盘样式的文本 {% kbd command %} + {% kbd D %} 密码样式的文本:这里没有验证码 example.md:密码样式的文本:{% psw 这里没有验证码 %} span本插件最后更新于 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 p本插件最后更新于 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 noteNoteBlock 是 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 noteblockNoteBlock 是 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 checkbox最后更新于 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 radio最后更新于 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 timeline最后更新于 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 %} link最后更新于 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 %} button这个页面的标签将会在不久后重构 基础按钮请将您的 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列 + 居中 心率管家 专业版 心率管家 免费版 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 %} | 更多参数选择GitHub 卡片 API 参数https://github-readme-stats.vercel.app site网站卡片可以显示网站截图、logo、标题、描述,使用方法和友链标签一模一样,唯一的区别是数据文件名称为 sites.yml,可以和友链数据混用,通过分组过滤实现不一样的效果。 示例写法{% sites only:community_team %} sites only:community_team dropmenu这个页面的标签将会在不久后重构 下拉菜单请将您的 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 的示例效果。 tab此插件移植自 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 %} folding最后更新于 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 代表默认打开。 inlineimageInlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。 本插件最后更新于 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 imageImage 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。 本插件最后更新于 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 galleryGallery 标签是一种针对一组图片应用场景的标签。 本插件最后更新于 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 来时图片放大填充。 audio本插件最后更新于 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 %} video本插件最后更新于 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 列。 frame这是一个能够将图片或者视频套入设备框架中的标签,可以用来更优雅地显示截图、录屏。 本插件最后更新于 4.0 版本{% frame 框架名 | img=图片链接 | alt=图片描述(可选) | part=top/bottom(可选) %}{% frame 框架名 | video=视频链接 | part=top/bottom(可选) %} {% frame iphone11 | img=https://7.dusays.com/2020/09/28/baa33914a34ec.jpg | video=https://7.dusays.com/2020/09/28/39db723f1e200.mp4 | part=top %} 在这个示例中同时出现了 img 和 video 那么它就是一个带有封面的视频,在视频加载完成之前会先显示视频封面。 设备框架目前支持的有: iphone11 如果您有以下其它设备框架图(svg),欢迎 PR 兼容。 android, ipad, macbook, watch 剪裁通过设置 part=top 或者 part=bottom 来显示上半部分或者下半部分,否则将显示完整的框架及其中的图片/视频。 aplayer主题对 APlayer 插件的样式进行了兼容。安装插件: npm i -S hexo-tag-aplayer 使用方法: hexo-tag-aplayerhttps://github.com/MoePlayer/hexo-tag-aplayer 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=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 Hexo 通用标签在文章中使用 <!-- more -->,那么 <!-- more --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 Hexo 官方文档: Hexo 官方文档 #标签插件https://hexo.io/zh-cn/docs/tag-plugins"},{"title":"主题配置","date":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","comments":true,"path":"v4/theme-settings/index.html","permalink":"https://volantis.js.org/v4/theme-settings/","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」 自定义主题外观最大布局宽度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.yml# 自定义右键菜单rightmenu: enable: true # hr: 分割线, music: 音乐控制器 layout: [home, help, examples, contributors, hr, source_docs, source_theme, hr, print, hr, dark_mode, 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/ dark_mode: name: Dark mode icon: fas fa-moon toggle: darkmode 设置网站导航栏导航栏配置导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。 blog/_config.volantis.yml# 注意事项:建议规范全站路径 URL 最后带一个 "/" 例如 "about/"navbar: 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/ 播放器在子菜单中,新增一个 icon: fas fa-compact-disc 的“菜单”就会被渲染成一个 APlayer 播放器。 - name: 背景音乐 icon: fas fa-compact-disc 设置网站页脚您通过 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-2021 XXX](/)' # 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](/)' 网站与文章封面封面高度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 来决定显示封面或者不显示封面。 文章布局配置# 文章布局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 库。 侧边栏配置侧边栏小组件与 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 分别对应文章的摘要、摘要后面的内容、全文。 选择评论系统目前支持的评论系统有: valine, twikoo, waline, minivaline, disqus, disqusjs, gitalk, vssue, livere, isso, hashover blog/_config.volantis.ymlcomments: title: <i class='fas fa-comments'></i> 评论 subtitle: service: valine # valine, twikoo, waline, minivaline, disqus, disqusjs, gitalk, vssue, livere, isso, hashover ValinetwikoowalineMiniValineVssueGitalkDisqusDisqusJSLivereIssoHashover... 一款快速、简洁且高效的无后端评论系统 https://valine.js.org blog/_config.volantis.ymlcomments: ... service: valine ... valine: # js: https://cdn.jsdelivr.net/npm/valine@1.4/dist/Valine.min.js path: # 全局评论地址 目前设置全局评论地址后visitor失效,这是valine的问题 placeholder: 快来评论吧~ # 评论占位提示 # 其他配置项按照yml格式继续填写即可 除了 [el path placeholder emojiCDN emojiMaps] 选项 appId: # your appId appKey: # your appKey ... 可选配置项详见源码 其中,placeholder 支持在 front-matter 中设置。 front-matter---valine: placeholder: 你觉得xxx怎么样呢?--- 也可以通过设置 valine.path 实现多个页面共用一个评论框。 front-matter---valine: path: /--- 一个简洁、安全、免费的静态网站评论系统 | A simple, safe, free comment system. https://twikoo.js.org/ blog/_config.volantis.ymlcomments: ... service: twikoo ... twikoo: js: https://cdn.jsdelivr.net/npm/twikoo@latest # 建议锁定版本 path: # 全局评论地址 # 其他配置项按照yml格式继续填写即可 除了 [el path] 选项 envId: xxxxxxxxxxxxxxx # 腾讯云环境id 一个简洁、安全、免费的静态网站评论系统 | A simple, safe, free comment system. https://waline.js.org/ blog/_config.volantis.ymlcomments: ... service: waline ... # Waline # https://waline.js.org/ waline: js: https://cdn.jsdelivr.net/npm/@waline/client/dist/Waline.min.js path: # 全局评论地址 目前设置全局评论地址后visitor失效,这是waline的问题 placeholder: 快来评论吧~ # 评论占位提示 imageHosting: https://7bu.top/api/upload # 图床api(默认使用去不图床) # 其他配置项按照yml格式继续填写即可 除了 [el path placeholder uploadImage] 选项 serverURL: xxxxxxxxxxxxxxx # Waline 的服务端地址(必填) 测试用地址: https://waline-ruddy.vercel.app ... 可选配置项详见源码 一款快速、简洁且高效的无后端评论系统 https://github.com/MiniValine/MiniValine/ blog/_config.volantis.ymlcomments: ... service: minivaline ... # MiniValine # https://github.com/MiniValine/MiniValine minivaline: js: https://cdn.jsdelivr.net/npm/minivaline@latest path: # 全局评论地址 placeholder: 快来评论吧~ # 全局评论占位提示 # 更多选项 https://minivaline.js.org/docs/cn/#/Options 按照yml格式继续填写即可 (除了 [el path placeholder] 选项) # emoticonUrl 等列表选项 可参考 https://github.com/MiniValine/hexo-next-minivaline # 下面是一个例子: backend: waline serverURL: https://waline.vercel.app 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: Render Disqus comments in Mainland China using Disqus API https://github.com/SukkaW/DisqusJS blog/_config.volantis.ymlcomments: ... service: disqusjs ... # DisqusJS # https://github.com/SukkaW/DisqusJS disqusjs: path: # 全局评论地址 # 配置项按照yml格式继续填写即可 除了 [siteName url identifier] 选项 #shortname: #api: #apikey: #admin: #nesting: 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 的代码 收录更多评论系统 站内搜索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 第三方插件插件库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-volantis@3/img/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@10/build/highlight.min.js css: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10/build/styles/solarized-light.min.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: aplayer: https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js meting: 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 cover: true # 封面是否pjax处理 false:每次切换页面封面都重载,适合封面较少的情况 true:封面经过Pjax处理,适合封面较多的情况 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: false # false, nprogress, circle banUrl: # 被屏蔽的 url 地址将不启用 pjax 跳转,可以在控制台下使用 window.location.pathname 获取 # - '/artitalk/' # artitalk 不支持 pjax # - '/bb/' # bbtalk 不支持 pjax # 从 issues 加载动态数据 # {% issues sites/timeline/friends | api=xxx | group=key:a,b,c %} # 例如: # {% issues sites | api=https://api.github.com/repos/volantis-x/examples/issues?sort=updated&state=open&page=1&per_page=100 | group=version:latest,v6,v5,v4,v3,v2,v1,v0 %} # 暗黑模式 darkmode # 样式:source/css/_plugins/dark.styl # 开关按钮:在 navbar.menu 中添加: # - name: 暗黑模式 # 可自定义 # icon: fas fa-moon # 可自定义 # toggle: darkmode darkmodejs: enable: #true # 旧版 Internet Explorer 淘汰行动 # https://www.microsoft.com/zh-cn/WindowsForBusiness/End-of-IE-support # 本主题不支持Internet Explorer的任何版本!!! killOldVersionsOfIE: enable: true # 禁用JavaScript提示 # 本页面需要浏览器支持(启用)JavaScript # 主题中的某些插件必须启用JavaScript才能正常工作,例如开启scrollreveal如果禁用JavaScript会导致卡片消失 killNoScript: enable: true # Artitalk https://artitalk.js.org # 配置过程请参考:https://artitalk.js.org/doc.html # 使用过旧版本的请修改Leancloud shuoshuo class部分列名:https://artitalk.js.org/release.html # 除appID和appKEY外均为选填项 artitalk: # Set `layout: artitalk` to enable in page # 配置项按照yml格式继续填写即可 appId: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKey: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # serverURL: #leancloud绑定的安全域名,使用国际版的话不需要填写 # lang: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语 # pageSize: #每页说说的显示数量 # shuoPla: #在编辑说说的输入框中的占位符 # avatarPla: #自定义头像url的输入框的占位符 # motion: #加载动画的开关,1为开,0为关,默认为开 # bgImg: #说说输入框背景图片url # color1: #说说背景颜色1&按钮颜色1 # color2: #说说背景颜色2&按钮颜色2 # color3: #说说字体颜色 # cssUrl: #自定义css接口 # BBtalk https://bb.js.org bbtalk: js: https://cdn.jsdelivr.net/npm/bbtalk@0.1.5/dist/bbtalk.min.js # BBtalk.js appId: 0KzOX4vC7Jsk6vzUGNeEiUaI-gzGzoHsz # your appID appKey: HwCiWuxfpvKiLm4teCUgTIba # your appKEY serverURLs: https://bbapi.heson10.com # Request Api 域名 # Tidio聊天功能 # https://www.tidio.com/ tidio: enable: #true id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 幻灯片背景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: ... # highlight.js highlightjs: enable: true # Please set hexo.config.highlight.enable = false !!! js: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10/build/highlight.min.js css: https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10/build/styles/solarized-light.min.css # more: https://www.jsdelivr.com/package/npm/highlight.js?path=styles 如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable 设置为 false 否则不会加载插件。您可以在 94 种 语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。 如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。 经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。 APlayer 音乐播放器blog/_config.volantis.ymlplugins: ... # APlayer is only available in mainland China. # APlayer config: https://github.com/metowolf/MetingJS aplayer: enable: true js: aplayer: https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js meting: 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 APlayer播放器只可以在中国大陆地区使用。相关文档: APlayer | MetingJS 暗黑模式blog/_config.volantis.ymlplugins: ... # 样式:source/css/_plugins/dark.styl # 开关按钮:在 navbar.menu 中添加: # - name: 暗黑模式 # 可自定义 # icon: fas fa-moon # 可自定义 # toggle: darkmode darkmodejs: enable: true 结束支持blog/_config.volantis.ymlplugins: ... # 旧版 Internet Explorer 淘汰行动 # https://www.microsoft.com/zh-cn/WindowsForBusiness/End-of-IE-support # 本主题不支持Internet Explorer的任何版本!!! killOldVersionsOfIE: enable: true # 禁用JavaScript提示 # 本页面需要浏览器支持(启用)JavaScript # 主题中的某些插件必须启用JavaScript才能正常工作,例如开启scrollreveal如果禁用JavaScript会导致卡片消失 killNoScript: enable: true Artitalkblog/_config.volantis.ymlplugins: ... # Artitalk https://artitalk.js.org # 配置过程请参考:https://artitalk.js.org/doc.html # 使用过旧版本的请修改Leancloud shuoshuo class部分列名:https://artitalk.js.org/release.html # 除appID和appKEY外均为选填项 artitalk: # Set `layout: artitalk` to enable in page # 配置项按照yml格式继续填写即可 appId: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID appKey: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY # serverURL: #leancloud绑定的安全域名,使用国际版的话不需要填写 # lang: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语 # pageSize: #每页说说的显示数量 # shuoPla: #在编辑说说的输入框中的占位符 # avatarPla: #自定义头像url的输入框的占位符 # motion: #加载动画的开关,1为开,0为关,默认为开 # bgImg: #说说输入框背景图片url # color1: #说说背景颜色1&按钮颜色1 # color2: #说说背景颜色2&按钮颜色2 # color3: #说说字体颜色 # cssUrl: #自定义css接口 BBtalkblog/_config.volantis.ymlplugins: ... bbtalk: js: https://cdn.jsdelivr.net/npm/bbtalk@0.1.5/dist/bbtalk.min.js # BBtalk.js appId: 0KzOX4vC7Jsk6vzUGNeEiUaI-gzGzoHsz # your appID appKey: HwCiWuxfpvKiLm4teCUgTIba # your appKEY serverURLs: https://bbapi.heson10.com # Request Api 域名 Tidioblog/_config.volantis.ymlplugins: ... # Tidio聊天功能 # https://www.tidio.com/ tidio: enable: true id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"},{"title":"页面自定义布局","date":"2023-12-26T01:42:16.918Z","updated":"2023-12-26T01:42:16.918Z","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":"front-matter","date":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"渲染公式","date":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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: /--- 一款快速、简洁且高效的无后端评论系统 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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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-2021 XXX](/)' # 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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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":"2023-12-26T01:42:16.922Z","updated":"2023-12-26T01:42:16.922Z","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"}],"posts":[{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-1","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-1/","permalink":"https://volantis.js.org/demo/test-1/","excerpt":"Lorem ipsum dolor sit amet1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit amet1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa2Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa3Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa4Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet2Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa2Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet3Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet4Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet5Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet6Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet7Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet8Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet9Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa1Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpa2Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-10","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-10/","permalink":"https://volantis.js.org/demo/test-10/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-11","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-11/","permalink":"https://volantis.js.org/demo/test-11/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-12","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-12/","permalink":"https://volantis.js.org/demo/test-12/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-13","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-13/","permalink":"https://volantis.js.org/demo/test-13/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-14","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-14/","permalink":"https://volantis.js.org/demo/test-14/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-15","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-15/","permalink":"https://volantis.js.org/demo/test-15/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-2","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-2/","permalink":"https://volantis.js.org/demo/test-2/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-3","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-3/","permalink":"https://volantis.js.org/demo/test-3/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-4","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-4/","permalink":"https://volantis.js.org/demo/test-4/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-5","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-5/","permalink":"https://volantis.js.org/demo/test-5/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-6","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-6/","permalink":"https://volantis.js.org/demo/test-6/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-7","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-7/","permalink":"https://volantis.js.org/demo/test-7/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-8","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-8/","permalink":"https://volantis.js.org/demo/test-8/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"Lorem ipsum dolor sit amet","slug":"demo/test-9","date":"2021-01-26T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"demo/test-9/","permalink":"https://volantis.js.org/demo/test-9/","excerpt":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","text":"Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit ametLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! tempora ipsa excepturi culpaLorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!","categories":[{"name":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"}],"tags":[]},{"title":"关于主题与文档的更新","slug":"news/2020-04-04","date":"2020-04-04T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","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-10T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-03-10-2.0/","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-06T19:43:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-03-06-2.0-beta/","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-06T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/2020-03-06-test-url/","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-25T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-02-25/","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-22T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-02-22/","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-21T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-02-21/","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-20T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-02-20/","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-19T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2020-02-19/","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":"Code Highlight Style test","slug":"test/code-highlight","date":"2019-07-25T16:43:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/code-highlight/","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 长文本测试 #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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}#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;}","categories":[],"tags":[]},{"title":"Markdown Style test","slug":"test/markdown","date":"2018-07-24T23:31:06.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/markdown/","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-24T00:00:00.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"news/2017-10-24/","permalink":"https://volantis.js.org/news/2017-10-24/","excerpt":"","text":"Volantis A Wonderful Theme for Hexo Volantis is a functional and highly modular hexo blog theme. Thanks to its powerful modular features, you can easily build a minimalist style blog, or follow the example of the official website to build a large-scale comprehensive blog with multi person cooperation and document module. Let's get started","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-26T22:46:49.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/images/","permalink":"https://volantis.js.org/test/images/","excerpt":"","text":"This is a image test post. 截屏2020-03-1317.25.10.png截屏2020-03-1317.27.42.png截屏2020-03-1317.28.02.png","categories":[],"tags":[]},{"title":"","slug":"test/no-title","date":"2013-12-25T22:57:49.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/no-title/","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-25T00:23:23.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/excerpts/","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":"Gallery Post","slug":"test/gallery-post","date":"2013-12-25T00:16:18.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/gallery-post/","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-25T00:14:39.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/tag-plugins/","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). 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":"","slug":"test/link-post-without-title","date":"2013-12-24T23:44:13.000Z","updated":"2023-12-26T01:42:16.914Z","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-24T23:33:26.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/日本語テスト/","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-24T23:31:30.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/中文測試/","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-24T23:31:06.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/long-title/","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-24T23:30:04.000Z","updated":"2023-12-26T01:42:16.914Z","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-24T23:29:08.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/elements/","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-24T17:49:32.000Z","updated":"2023-12-26T01:42:16.914Z","comments":true,"path":"test/hello-world/","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":"Demo","slug":"demo","permalink":"https://volantis.js.org/categories/demo/"},{"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 0000000000..0f703d6731 --- /dev/null +++ b/contributors/index.html @@ -0,0 +1,23 @@ +Join the community and team - Volantis

The more people participating in an open source project, the more vital it is. I hope that interested partners can join the team~

so how to become a member of the team?

To become a member of the team, the first prerequisites that must be met are: use the theme for at least one month, have been active in the community for a long time: "comment" or "Answer issues" or "Submit valid suggestions in issues".

After you meet the above prerequisites, and do what you can according to the situation, for example:

-Find and solve problems, such as raising or answering issues or submitting PR
-Improve documents, correct document errors, language errors, translation problems, etc.
-Post articles recommended topics
-Publish related articles and repost the external link to the official website or publish the article directly on the official website

You can apply for joining the team by posting in forum.

You can see the team members on the GitHub page
You can see the team members on the GitHub page



Thanks to the project contributors

thank you very much for those who directly submitted PR!

also thank those netizens who helped each other in comments and issues~

If you have a good idea or solve a problem that is not solved here, please go to GitHub to contribute code. 👏

Publish and share articles

If you have an original article related to Hexo blog construction, you can reprint it on the Volantis official website, an example is as follows:

_posts/blogs/2020-05-17-pjax.md
---
title: Volantis theme deployment Pjax
date: 2020-05-17
updated: 2020-08-07
categories: [Development experience]
author: inkss
link: https://inkss.cn/article/other/76993423.html
description: This article records all my Pjax compatibility with Volantis theme, it is probably a record~
headimg: # You can set the article head image
---

If you are submitting an article on the official website for the first time, you need to add author information in the _data/author.yml file, for example:

_data/author.yml
...
inkss:
name: inkss
avatar: https://gcore.jsdelivr.net/gh/inkss/common@1.4.2/hexo/img/static/avatar.jpg
url: https://inkss.cn

Claim

  1. The post is stored in the _posts/blogs/ directory, and the file name format is "year-month-day-post subject".
  2. It must be an original article with an abstract within 200 characters. (You can also not write the summary)
  3. It is best to choose an article category. If there is no suitable one in the existing category, you can add it yourself.
  4. If there is a header image, please make sure that there is only one word or phrase in the image.

Channels for communication

solve the problem

ChannelMethodUse
Issues@volantis-x/hexo-theme-volantisThe only channel to communicate with developers for follow-up And solve problems

please do not send mail

Developers of open source projects are disgusted that others do not use the correct channels such as Issues to ask questions about open source projects through private emails, so they generally do not reply to such emails.

exchange

ChannelMethodUse
Forum@volantis-x/forumSlow, relatively formal, easy to retrieve, and can be referenced by other users
QQ Group1146399464 (Verification code:vlts-2021)Informal, instant messaging, easy to fight pictures; not conducive to other users' reference

Buddhist interaction

ChannelMethodUse
Comment areaMessageYou can test, irrigate, and promote your blog.

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/css/Readme.html b/css/Readme.html new file mode 100644 index 0000000000..a32de3d7c1 --- /dev/null +++ b/css/Readme.html @@ -0,0 +1 @@ +

样式文件说明

样式拆分说明

方案是对 https://blog.skk.moe/post/improve-fcp-for-my-blog/ 的开源实现

first.styl

首屏样式, 内含 首屏基础样式、 cover、 navbar、 首屏search、首屏暗黑模式、首屏字体 等样式, 首屏样式采用硬编码的方式写在HTML中.

内联硬编码自动化方案 see:scripts/helpers/first-style/index.js

style.styl

异步加载样式, 除首屏样式外的其他样式, 最终生成 /css/style.css 异步加载.

暗黑模式样式说明

暗黑模式样式被拆分为首屏暗黑模式样式和异步暗黑模式样式,其中在 source/css/ 文件夹下:

_first/dark_first.styl : 包含 首屏暗黑模式样式 的 暗黑模式 CSS 变量 和 强制覆盖样式

_style/_plugins/_dark : 异步暗黑模式样式文件夹

_style/_plugins/_dark/dark_async.styl : 包含 异步暗黑模式样式 的 暗黑模式 CSS 变量

_style/_plugins/_dark/dark_plugins.styl : 包含 异步暗黑模式样式 的 强制覆盖样式

\ No newline at end of file diff --git a/css/first.css b/css/first.css new file mode 100644 index 0000000000..d6b4c3cb71 --- /dev/null +++ b/css/first.css @@ -0,0 +1,2 @@ +#safearea{display:none}:root{--color-site-body:#f4f4f4;--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:#30ad91;--color-meta:#888;--color-read-bkg:#e0d8c8;--color-read-post:#f8f1e2;--color-copyright-bkg:#f5f5f5}*{box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;outline:0;margin:0;padding:0}::-webkit-scrollbar{height:4px;width:4px}::-webkit-scrollbar-track-piece{background:0 0}::-webkit-scrollbar-thumb{background:#3dd9b6;cursor:pointer;border-radius:2px;-webkit-border-radius:2px}::-webkit-scrollbar-thumb:hover{background:#ff5722}html{color:var(--color-text);width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Menlo,Monaco,monospace,sans-serif;font-size:16px}html>::-webkit-scrollbar{height:4px;width:4px}html>::-webkit-scrollbar-track-piece{background:0 0}html>::-webkit-scrollbar-thumb{background:#3dd9b6;cursor:pointer;border-radius:2px;-webkit-border-radius:2px}html>::-webkit-scrollbar-thumb:hover{background:#ff5722}body{background-color:var(--color-site-body);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}}a{color:#2092ec;cursor:pointer;text-decoration:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}a:hover{color:#ff5722}a:active,a:hover{outline:0}ol,ul{padding-left:0}ol li,ul li{list-style:none}header{display:-webkit-box;display:-moz-box;display:block}img{border:0;background:0 0;max-width:100%}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;height:0;border:0;border-radius:1px;-webkit-border-radius:1px;border-bottom:1px solid rgba(68,68,68,.1)}button,input{color:inherit;font:inherit;margin:0}button{overflow:visible;text-transform:none;-webkit-appearance:button;cursor:pointer}@supports ((-webkit-backdrop-filter:blur(20px)) or (backdrop-filter:blur(20px))){.blur{background:rgba(255,255,255,.9)!important;-webkit-backdrop-filter:saturate(200%) blur(20px);backdrop-filter:saturate(200%) blur(20px)}}.shadow{box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}.shadow.floatable{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.shadow.floatable:hover{box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1)}#l_cover{min-height:64px}.cover-wrapper{top:0;left:0;max-width:100%;height:100vh;display:flex;display:flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-khtml-flex-wrap:nowrap;-moz-flex-wrap:nowrap;-o-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-direction:column;align-items:center;align-self:center;align-content:center;color:var(--color-site-inner);padding:0 16px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;position:relative;overflow:hidden;margin-bottom:-100px}.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,.1);animation:scroll-down-effect 1.5s infinite;-webkit-animation:scroll-down-effect 1.5s infinite;-khtml-animation:scroll-down-effect 1.5s infinite;-moz-animation:scroll-down-effect 1.5s infinite;-o-animation:scroll-down-effect 1.5s infinite;-ms-animation:scroll-down-effect 1.5s infinite}@keyframes scroll-down-effect{0%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}50%{top:-16px;opacity:.4;-webkit-opacity:.4;-moz-opacity:.4}100%{top:0;opacity:1;-webkit-opacity:1;-moz-opacity:1}}.cover-wrapper .cover-body{margin-top:64px;margin-bottom:100px}.cover-wrapper .cover-body,.cover-wrapper .cover-body .bottom,.cover-wrapper .cover-body .top{display:flex;display:flex;flex-direction:column;align-items:center;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-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,.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:-webkit-box;display:-moz-box;display:block;width:100%}.cover-wrapper .cover-body .m_search .icon,.cover-wrapper .cover-body .m_search .input{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.cover-wrapper .cover-body .m_search .icon{position:absolute;display:-webkit-box;display:-moz-box;display:block;line-height:2.5rem;width:32px;top:0;left:5px;color:rgba(68,68,68,.75)}.cover-wrapper .cover-body .m_search .input{display:-webkit-box;display:-moz-box;display:block;height:2.5rem;width:100%;box-shadow:none;-webkit-box-shadow:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;font-size:.875rem;-webkit-appearance:none;padding-left:36px;border-radius:1.4rem;-webkit-border-radius:1.4rem;background:rgba(255,255,255,.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,.8)}.cover-wrapper .cover-body .m_search .input:focus{background:#fff}.cover-wrapper .list-h{display:flex;display:flex;flex-direction:row;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:stretch;border-radius:4px;-webkit-border-radius:4px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.cover-wrapper .list-h a{flex:1 0;display:flex;display:flex;font-weight:600}.cover-wrapper .list-h a img{display:-webkit-box;display:-moz-box;display:block;border-radius:2px;-webkit-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;flex-direction:row;align-items:baseline;padding:2px;margin:4px;color:var(--color-site-inner);opacity:.75;-webkit-opacity:.75;-moz-opacity:.75;text-shadow:0 1px 2px rgba(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:.9375rem}.cover-wrapper.search .bottom .menu .list-h a.active,.cover-wrapper.search .bottom .menu .list-h a:active,.cover-wrapper.search .bottom .menu .list-h a:hover{opacity:1;-webkit-opacity:1;-moz-opacity:1;border-bottom:2px solid var(--color-site-inner)}.cover-wrapper #parallax-window{position:absolute;width:100%;height:100%;background:0 0}.parallax-mirror{animation-delay:0s;animation-duration:.5s;animation-fill-mode:forwards;animation-timing-function:ease-out;animation-name:fadeIn}@keyframes fadeIn{0%{opacity:0;-webkit-opacity:0;-moz-opacity:0;filter:blur(12px)}100%{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@media (prefers-color-scheme:dark){:root{--color-mode:'dark'}:root:not([color-scheme]){--color-site-body:#121212;--color-read-bkg:#1f1f1f;--color-read-post:#262626;--color-site-bg:#1f1f1f;--color-site-inner:rgba(238,238,238,0.871);--color-site-footer:rgba(170,170,170,0.871);--color-card:#262626;--color-text:rgba(238,238,238,0.871);--color-block:#434343;--color-codeblock:#1f1f1f;--color-inlinecode:#d56d28;--color-h1:rgba(255,255,255,0.871);--color-h2:rgba(255,255,255,0.871);--color-h3:rgba(255,255,255,0.6);--color-h4:rgba(255,255,255,0.6);--color-h5:rgba(255,255,255,0.6);--color-h6:rgba(255,255,255,0.6);--color-p:rgba(217,217,217,0.871);--color-list:rgba(217,217,217,0.871);--color-list-hl:#63e0c4;--color-meta:rgba(191,191,191,0.871);--color-link:rgba(191,191,191,0.871);--color-copyright-bkg:#21252b}:root:not([color-scheme]) img{filter:brightness(70%)!important}:root:not([color-scheme]) .blur{background:rgba(31,31,31,.9)!important}:root:not([color-scheme]) .white-box.blur{background:rgba(38,38,38,.9)!important}:root:not([color-scheme]) .nav-main .u-search-input{background:var(--color-card)!important}:root:not([color-scheme]) #l_main .article .prev-next>a{background:var(--color-block)!important}:root:not([color-scheme]) #l_main .article .prev-next>a:hover{background:var(--color-site-bg)!important}:root:not([color-scheme]) .article blockquote{background:var(--color-block)!important}:root:not([color-scheme]) .article-title a{color:var(--color-h1)!important}:root:not([color-scheme]) details>summary{color:var(--color-p)!important;background:var(--color-site-bg)!important}:root:not([color-scheme]) details{border:1px solid var(--color-site-bg)!important;background:var(--color-site-bg)!important}:root:not([color-scheme]) #u-search .modal,:root:not([color-scheme]) #u-search .modal-body,:root:not([color-scheme]) #u-search .modal-header{background:var(--color-card)!important}:root:not([color-scheme]) #u-search .modal-body .modal-results .result:hover{background:var(--color-block)!important}:root:not([color-scheme]) .u-search-input:hover{background:var(--color-block)!important}:root:not([color-scheme]) .u-search-input:focus{background:var(--color-site-body)!important}}[color-scheme=dark]{--color-site-body:#121212;--color-read-bkg:#1f1f1f;--color-read-post:#262626;--color-site-bg:#1f1f1f;--color-site-inner:rgba(238,238,238,0.871);--color-site-footer:rgba(170,170,170,0.871);--color-card:#262626;--color-text:rgba(238,238,238,0.871);--color-block:#434343;--color-codeblock:#1f1f1f;--color-inlinecode:#d56d28;--color-h1:rgba(255,255,255,0.871);--color-h2:rgba(255,255,255,0.871);--color-h3:rgba(255,255,255,0.6);--color-h4:rgba(255,255,255,0.6);--color-h5:rgba(255,255,255,0.6);--color-h6:rgba(255,255,255,0.6);--color-p:rgba(217,217,217,0.871);--color-list:rgba(217,217,217,0.871);--color-list-hl:#63e0c4;--color-meta:rgba(191,191,191,0.871);--color-link:rgba(191,191,191,0.871);--color-copyright-bkg:#21252b}[color-scheme=dark] img{filter:brightness(70%)!important}[color-scheme=dark] .blur{background:rgba(31,31,31,.9)!important}[color-scheme=dark] .white-box.blur{background:rgba(38,38,38,.9)!important}[color-scheme=dark] .nav-main .u-search-input{background:var(--color-card)!important}[color-scheme=dark] #l_main .article .prev-next>a{background:var(--color-block)!important}[color-scheme=dark] #l_main .article .prev-next>a:hover{background:var(--color-site-bg)!important}[color-scheme=dark] .article blockquote{background:var(--color-block)!important}[color-scheme=dark] .article-title a{color:var(--color-h1)!important}[color-scheme=dark] details>summary{color:var(--color-p)!important;background:var(--color-site-bg)!important}[color-scheme=dark] details{border:1px solid var(--color-site-bg)!important;background:var(--color-site-bg)!important}[color-scheme=dark] #u-search .modal,[color-scheme=dark] #u-search .modal-body,[color-scheme=dark] #u-search .modal-header{background:var(--color-card)!important}[color-scheme=dark] #u-search .modal-body .modal-results .result:hover{background:var(--color-block)!important}[color-scheme=dark] .u-search-input:hover{background:var(--color-block)!important}[color-scheme=dark] .u-search-input:focus{background:var(--color-site-body)!important}@media screen and (max-width:500px){[color-scheme=dark] .l_header .m_search{background:var(--color-site-bg)!important}}@font-face{font-family:UbuntuMono;src:url(https://unpkg.com/volantis-static@0.0.1660614606622/media/fonts/UbuntuMono/UbuntuMono-Regular.ttf);font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'Varela Round';src:url(https://unpkg.com/volantis-static@0.0.1660614606622/media/fonts/VarelaRound/VarelaRound-Regular.ttf);font-weight:400;font-style:normal;font-display:swap}.l_header{position:fixed;z-index:1000;top:0;width:100%;height:64px;background:var(--color-card);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}.l_header.auto{transition:opacity .4s ease;-webkit-transition:opacity .4s ease;-khtml-transition:opacity .4s ease;-moz-transition:opacity .4s ease;-o-transition:opacity .4s ease;-ms-transition:opacity .4s ease;visibility:hidden}.l_header.auto.show{opacity:1!important;-webkit-opacity:1!important;-moz-opacity:1!important;visibility:visible}.l_header .container{margin-left:16px;margin-right:16px}.l_header #wrapper{height:100%;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.l_header #wrapper .nav-main,.l_header #wrapper .nav-sub{display:flex;display:flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-khtml-flex-wrap:nowrap;-moz-flex-wrap:nowrap;-o-flex-wrap:nowrap;-ms-flex-wrap:nowrap;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;align-items:center}.l_header #wrapper .nav-main{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.l_header #wrapper.sub .nav-main{transform:translateY(-64px);-webkit-transform:translateY(-64px);-khtml-transform:translateY(-64px);-moz-transform:translateY(-64px);-o-transform:translateY(-64px);-ms-transform:translateY(-64px)}.l_header #wrapper .nav-sub{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;opacity:0;-webkit-opacity:0;-moz-opacity:0;height:64px;width:calc(100% - 2 * 16px);position:absolute}.l_header #wrapper .nav-sub ::-webkit-scrollbar{display:-webkit-box;display:-moz-box;display:none}@media screen and (min-width:2048px){.l_header #wrapper .nav-sub{max-width:55vw;margin:auto}}.l_header #wrapper.sub .nav-sub{opacity:1;-webkit-opacity:1;-moz-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;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:700;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Menlo,Monaco,monospace,sans-serif;line-height:1.2;max-height:64px;white-space:normal;flex-shrink:1}.l_header .switcher{display:-webkit-box;display:-moz-box;display:none;line-height:64px;align-items:center}.l_header .switcher .s-toc{display:-webkit-box;display:-moz-box;display:none}@media screen and (max-width:768px){.l_header .switcher .s-toc{display:flex;display:flex}}.l_header .switcher>li{height:48px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;width:48px;height:48px;padding:.85em 1.1em;border-radius:100px;-webkit-border-radius:100px;border:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;color:#3dd9b6}.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:flex;display:flex}.l_header .m_search{display:flex;display:flex;height:64px;width:240px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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;-webkit-opacity:0;-moz-opacity:0}.l_header .m_search input::placeholder{opacity:0;-webkit-opacity:0;-moz-opacity:0}.l_header .m_search:hover{width:240px}.l_header .m_search:hover input::-moz-placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}.l_header .m_search:hover input::placeholder{opacity:1;-webkit-opacity:1;-moz-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;-webkit-opacity:1;-moz-opacity:1}.l_header .m_search:hover .input::placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}}@media screen and (max-width:500px){.l_header .m_search{min-width:0}.l_header .m_search input::-moz-placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}.l_header .m_search input::placeholder{opacity:1;-webkit-opacity:1;-moz-opacity:1}}.l_header .m_search .form{position:relative;display:flex;display:flex;width:100%;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:-webkit-box;display:-moz-box;display:none}}.l_header .m_search .input{display:-webkit-box;display:-moz-box;display:block;padding-top:8px;padding-bottom:8px;line-height:1.3;width:100%;color:var(--color-text);background:#fafafa;box-shadow:none;-webkit-box-shadow:none;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;padding-left:40px;font-size:.875rem;border-radius:8px;-webkit-border-radius:8px;border:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}@media screen and (min-width:500px){.l_header .m_search .input:focus{box-shadow:0 4px 8px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px 0 rgba(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:focus,.l_header .m_search .input:hover{border:none}}@media (max-width:500px){.l_header .m_search{left:0;width:0;overflow:hidden;position:absolute;background:#fff;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.l_header .m_search .input{border-radius:32px;-webkit-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 #3dd9b6}ul.list-v li:hover>ul.list-v,ul.m-pc li:hover>ul.list-v{display:-webkit-box;display:-moz-box;display:block}ul.nav-list-h{display:flex;display:flex;align-items:stretch}ul.nav-list-h>li{position:relative;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;height:100%;line-height:2.4;border-radius:4px;-webkit-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:-webkit-box;display:-moz-box;display:none;position:absolute;background:var(--color-card);box-shadow:0 2px 4px 0 rgba(0,0,0,.08),0 4px 8px 0 rgba(0,0,0,.08),0 8px 16px 0 rgba(0,0,0,.08);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.08),0 4px 8px 0 rgba(0,0,0,.08),0 8px 16px 0 rgba(0,0,0,.08);margin-top:-6px;border-radius:4px;-webkit-border-radius:4px;padding:8px 0}ul.list-v.show{display:-webkit-box;display:-moz-box;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:.78125rem;font-weight:700;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:-webkit-box;display:-moz-box;display:none;margin-top:-40px}ul.list-v .aplayer-container{min-height:64px;padding:6px 16px}ul.list-v>li>a{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;display:-webkit-box;display:-moz-box;display:block;color:var(--color-list);font-size:.875rem;font-weight:700;line-height:36px;padding:0 20px 0 16px;text-overflow:ellipsis;margin:0 4px;border-radius:4px;-webkit-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:-webkit-box;display:-moz-box;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:64px}.l_header ul.nav-list-h>li>a{max-height:64px;overflow:hidden;color:inherit}.l_header ul.nav-list-h>li>a.active,.l_header ul.nav-list-h>li>a:active{color:#3dd9b6}.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;-webkit-animation:rotate-effect 1.5s linear infinite;-khtml-animation:rotate-effect 1.5s linear infinite;-moz-animation:rotate-effect 1.5s linear infinite;-o-animation:rotate-effect 1.5s linear infinite;-ms-animation:rotate-effect 1.5s linear infinite}@keyframes rotate-effect{0%{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0)}25%{transform:rotate(90deg);-webkit-transform:rotate(90deg);-khtml-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg)}50%{transform:rotate(180deg);-webkit-transform:rotate(180deg);-khtml-transform:rotate(180deg);-moz-transform:rotate(180deg);-o-transform:rotate(180deg);-ms-transform:rotate(180deg)}75%{transform:rotate(270deg);-webkit-transform:rotate(270deg);-khtml-transform:rotate(270deg);-moz-transform:rotate(270deg);-o-transform:rotate(270deg);-ms-transform:rotate(270deg)}100%{transform:rotate(360deg);-webkit-transform:rotate(360deg);-khtml-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}}.menu-phone li ul.list-v{right:calc(100% - .5 * 16px)}.menu-phone li ul.list-v ul{right:calc(100% - .5 * 16px)}#wrapper{max-width:1080px;margin:auto}@media screen and (min-width:2048px){#wrapper{max-width:55vw}}#wrapper .menu{flex:1 1;margin:0 16px 0 0}#wrapper .menu .list-v ul{left:calc(100% - .5 * 16px)}.menu-phone{display:-webkit-box;display:-moz-box;display:none;margin-top:16px;right:8px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.menu-phone ul{right:calc(100% - .5 * 16px)}@media screen and (max-width:500px){.menu-phone{display:-webkit-box;display:-moz-box;display:block}}.l_header{max-width:65vw;left:calc((100% - 65vw) * .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) * .5)}}@media screen and (max-width:1112px){.l_header{left:0;border-radius:0;-webkit-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:flex;display:flex;margin-right:8px}.l_header .menu{display:-webkit-box;display:-moz-box;display:none}}@media screen and (max-width:500px){.list-v li{max-width:270px}}#u-search{display:-webkit-box;display:-moz-box;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:0}}@media screen and (prefers-color-scheme:dark) and (max-width:500px){.l_header .m_search{background:var(--color-site-bg)!important}} +/*# sourceMappingURL=../maps/css/first.css.map */ diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000000..d9767b60a5 --- /dev/null +++ b/css/style.css @@ -0,0 +1,2 @@ +#safearea{display:block}:root{--block-hover:#ededed;--text-p1:#222;--text-p3:#777;--card:#fff}::-moz-selection{background:rgba(33,150,243,.2)}::selection{background:rgba(33,150,243,.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:400}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:after,.clearfix:before{content:" ";display:-webkit-box;display:-moz-box;display:table}.clearfix:after{clear:both}.hidden{text-indent:-9999px;visibility:hidden;display:-webkit-box;display:-moz-box;display:none}.inner{position:relative;width:80%;max-width:710px;margin:0 auto}.vertical{display:-webkit-box;display:-moz-box;display:table-cell;vertical-align:middle}article,aside,details,figcaption,figure,footer,hgroup,main,menu,nav,section,summary{display:-webkit-box;display:-moz-box;display:block}article{overflow:hidden}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.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}figure{margin:1em 40px}pre{overflow:auto}span.dot,span.sep{font-size:.9em;margin:0 .2rem}span.dot:before{content:'·'}span.sep:before{content:'/'}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}optgroup,select,textarea{color:inherit;font:inherit;margin:0}select{text-transform:none}html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}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;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table:not([class]){border-collapse:collapse;overflow:auto;display:-webkit-box;display:-moz-box;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 .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}table:not([class]) tr:hover{background-color:#f1f1f1}td,th{padding:0}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:after,article#arc .timenode:before{margin-left:12px}article#arc .timenode .meta{padding:6px 0;line-height:1.5;height:auto;max-width:100%;display:flex;display:flex;font-size:.9375rem;font-weight:500;border-radius:2px;-webkit-border-radius:2px;color:var(--color-list)}article#arc .timenode .meta:before{display:-webkit-box;display:-moz-box;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;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:#3dd9b6}article#arc .timenode .meta i.accent{color:#ff5722}article#arc .timenode .meta i.orange{color:#ff5722}article#cat .all-cats a{display:-webkit-box;display:-moz-box;display:block;padding:8px 16px;border-radius:4px;-webkit-border-radius:4px;color:var(--color-list);font-size:.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:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:flex-start;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start;align-items:baseline;text-align:center}article#tag .all-tags ul{margin:0 -8px;padding:0;display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap}article#tag .all-tags ul li{list-style:none;margin:8px;border-radius:4px;-webkit-border-radius:4px;overflow:hidden;display:flex;display:flex;position:relative;font-size:.9375rem}article#tag .all-tags ul li a{display:-webkit-box;display:-moz-box;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;-webkit-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:.2rem;margin-bottom:1rem;border-bottom:1px solid rgba(68,68,68,.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:700;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:-webkit-box;display:-moz-box;display:inline-block;width:400px;max-width:100%;border-radius:4px;-webkit-border-radius:4px;color:#666}.article div.small-img img,.article p.small-img img{width:auto;max-width:100%;margin:0;box-shadow:none;-webkit-box-shadow:none}.article s{color:#8e8e8e;-webkit-text-decoration-color:#8e8e8e;text-decoration-color:#8e8e8e}.article p{margin-top:1em;margin-bottom:1em;text-align:justify;max-width:100%;line-height:inherit}.article .subtitle h6{color:rgba(68,68,68,.9)}.article figure figcaption span{display:-webkit-box;display:-moz-box;display:inline-block;margin-right:5px}.article blockquote{background:var(--color-block);border-left:4px solid #3dd9b6;border-radius:4px;-webkit-border-radius:4px}.article blockquote{position:relative;width:100%;padding:16px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.article blockquote,.article blockquote ol,.article blockquote p,.article blockquote ul{text-align:left;word-wrap:normal;font-size:.9375rem;margin-top:.5em;margin-bottom:.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 .3em}.article blockquote.pullquote.right{border-left:none;border-right:4px solid #3dd9b6}.article blockquote.pullquote.right p{text-align:right}.article pre{display:-webkit-box;display:-moz-box;display:block;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;margin-top:1em;margin-bottom:1em;overflow:auto;background:var(--color-codeblock);font-size:.8125rem;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace,monospace,courier,sans-serif;border:1px solid #ffebcb;padding:16px;border-radius:4px;-webkit-border-radius:4px}.article pre>code:not([class]){background:0 0}.article div>pre{border-radius:4px;-webkit-border-radius:4px}.article div>pre>code:not([class]){padding:0;margin:0;background:0 0;color:rgba(68,68,68,.9)}.article code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace,monospace,courier,sans-serif}.article code:not([class]){word-break:break-all;color:var(--color-inlinecode);border-radius:2px;-webkit-border-radius:2px}@media screen and (max-width:500px){.article ol,.article ul{font-size:.875rem}.article figure{font-size:13px;line-height:1.5}}.article .widget{background:0 0;margin:1em 0;box-shadow:none;-webkit-box-shadow:none;border-radius:4px;-webkit-border-radius:4px;cursor:auto;background:var(--color-block);padding:8px 0;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;width:100%}.article .widget:hover{box-shadow:none;-webkit-box-shadow:none}.article .widget:active{box-shadow:none;-webkit-box-shadow:none}.article .widget header{padding:4px .6em;padding-bottom:0}.article .widget header,.article .widget header a{color:rgba(68,68,68,.85)}.article .widget.copyright,.article .widget.qrcode{background:0 0;padding:0}.article .widget.copyright header,.article .widget.qrcode header{display:-webkit-box;display:-moz-box;display:none}.article .widget.copyright .content,.article .widget.qrcode .content{padding:0}.article .widget.list .content,.article .widget.related_posts .content{padding:0 .6em!important}.article .widget.list .content a,.article .widget.related_posts .content a{color:#2092ec}.article .widget.list .content a:hover,.article .widget.related_posts .content a:hover{color:#ff5722}.article .widget .content{padding:0 .6em;margin:0}.article .widget .content ul{padding-left:4px;margin-left:16px}.article .widget .content ul a{transition:all .1s ease;-webkit-transition:all .1s ease;-khtml-transition:all .1s ease;-moz-transition:all .1s ease;-o-transition:all .1s ease;-ms-transition:all .1s ease;display:-webkit-box;display:-moz-box;display:inline;border-left:none;padding:0;padding-left:4px;color:#2092ec;font-weight:400;text-decoration:none}.article .widget .content ul a.active,.article .widget .content ul a:active,.article .widget .content ul a:hover{border-left:none!important;background:0 0!important}.article .widget .content ul a:hover{color:#ff5722}.article .widget .content .list a .name{display:-webkit-box;display:-moz-box;display:inline;color:#2092ec}.article .widget .content .list a:hover .name{color:#ff5722}.article .widget.qrcode>.content{display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:center;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-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:.875rem;color:var(--color-list)}.md .footer .header i{margin-right:2px}.md .footer .body ol,.md .footer .body ul{margin-top:0;margin-bottom:0}.md .footer .references,.md .footer .related_posts{background:var(--color-block);border-radius:4px;-webkit-border-radius:4px;padding:16px}.md .footer .references .body a{font-size:.9375rem;font-weight:500}.md .footer .related_posts .body{margin:4px;overflow:hidden;border-radius:2px;-webkit-border-radius:2px}.md .footer .related_posts .body .vlts-rps{display:flex;display:flex}.md .footer .related_posts .body .vlts-rps .item{flex-shrink:0;width:240px}.md .footer .related_posts .body .vlts-rps .item+.item{margin-left:16px}.md .footer .related_posts .body .vlts-rps img{border-radius:2px;-webkit-border-radius:2px;width:100%;height:120px;-o-object-fit:cover;object-fit:cover}.md .footer .related_posts .body .vlts-rps span{display:-webkit-box;display:-moz-box;display:block;text-align:justify;display:-webkit-box;display:-moz-box;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:.875rem;color:var(--color-meta);-webkit-line-clamp:3}.md .footer .copyright blockquote p{font-size:.875rem;margin:.25em 0}.md .footer .copyright blockquote p a{font-weight:500}.md .footer .donate{display:flex;display:flex;margin:0 auto}.md .footer .donate .imgs{display:inline-flex;display:inline-flex;margin:0 auto}.md .footer .donate .imgs .fancybox{margin:8px}.md .footer .donate .imgs img{width:80px}article .readmore{display:-webkit-box;display:-moz-box;display:block;margin-top:24px;font-size:.875rem}.copyright.license{background:var(--color-copyright-bkg);color:var(--color-meta);display:-webkit-box;display:-moz-box;display:block;font-size:.95rem;line-height:1.2;margin:15px -40px;overflow:hidden;padding:1.25em 40px;position:relative;border-radius:4px;-webkit-border-radius:4px}.copyright.license:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg version='1.1' id='Capa_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 367.467 367.467' style='enable-background:new 0 0 367.467 367.467;' xml:space='preserve'%3E%3Cg%3E%3Cpath d='M183.73,0.018C82.427,0.018,0,82.404,0,183.733c0,101.289,82.427,183.716,183.73,183.716 c101.315,0,183.737-82.427,183.737-183.716C367.467,82.404,285.045,0.018,183.73,0.018z M183.73,326.518 c-78.743,0-142.798-64.052-142.798-142.784c0-78.766,64.055-142.817,142.798-142.817c78.752,0,142.807,64.052,142.807,142.817 C326.536,262.466,262.481,326.518,183.73,326.518z'/%3E%3Cpath d='M244.036,217.014c-11.737,20.141-33.562,32.635-56.956,32.635c-36.329,0-65.921-29.585-65.921-65.915 c0-36.36,29.592-65.955,65.921-65.955c23.395,0,45.219,12.54,56.956,32.641l1.517,2.627h44.28l-2.658-7.129 c-7.705-20.413-21.225-37.769-39.122-50.157c-17.942-12.42-39.017-19.009-60.973-19.009c-58.981,0-106.946,48.006-106.946,106.982 c0,58.98,47.965,106.941,106.946,106.941c21.956,0,43.03-6.567,60.973-19.006c17.897-12.391,31.417-29.741,39.122-50.154 l2.658-7.133h-44.28L244.036,217.014z'/%3E%3C/g%3E%3C/svg%3E");content:" ";opacity:.1;-webkit-opacity:.1;-moz-opacity:.1;height:180px;right:-10px;top:-35px;width:180px;position:absolute}.copyright.license a{color:var(--color-meta)}.copyright.license a:hover{color:#ff5722}.copyright.license .license-meta-title,.copyright.license .license-title{margin:0 0 .25rem}.copyright.license .license-link,.copyright.license .license-meta-title{font-size:.8rem}.copyright.license .license-title{font-weight:700}.copyright.license .license-link{margin-bottom:1rem}.copyright.license .license-meta{align-items:center;display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start}.copyright.license .license-meta-item{margin:0 2rem 1em 0}.copyright.license .license-meta-text{margin:0}.copyright.license .license-meta-text a{border-bottom:1px solid var(--color-meta)}.copyright.license .license-meta-text a:hover{border-bottom-color:#ff5722}.recommended-article{overflow:hidden}.recommended-article .recommended-article-header{margin-top:8px;margin-left:8px;margin-right:0}.recommended-article .recommended-article-group{display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;overflow:hidden}@media screen and (max-width:768px){.recommended-article .recommended-article-group{height:190px;overflow:scroll;-ms-overflow-style:none}.recommended-article .recommended-article-group::-webkit-scrollbar{width:0!important}}.recommended-article .recommended-article-group .recommended-article-item{display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-content:center;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;overflow:hidden;width:calc(100%/3 - 16px);max-height:200px;margin-top:8px;margin-left:8px;margin-right:0}@media screen and (max-width:768px){.recommended-article .recommended-article-group .recommended-article-item{width:calc(100%/2 - 16px)}}@media screen and (max-width:500px){.recommended-article .recommended-article-group .recommended-article-item{width:calc(100% - 16px)}}.recommended-article .recommended-article-group .recommended-article-item img{display:flex;display:flex;width:100%;height:150px}.recommended-article .recommended-article-group .recommended-article-item span{display:-webkit-box;display:-moz-box;display:block;text-align:justify;display:-webkit-box;display:-moz-box;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}footer.footer{position:relative;padding:40px 10px 120px 10px;width:100%;color:var(--color-site-footer);margin:0 auto;overflow:hidden;text-align:center}footer.footer,footer.footer p{font-size:.8125rem}footer.footer .licenses{color:fade(,50%)}footer.footer .social-wrapper{display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;margin:4px 8px}footer.footer a{color:var(--color-site-footer);padding:0;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}footer.footer a:hover{color:#ff5722}footer.footer a:not(.social):hover{text-decoration:underline}footer.footer a.social{position:relative;display:-webkit-box;display:-moz-box;display:inline-block;text-align:center;display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;min-width:36px;min-height:36px;margin:4px;opacity:.75;-webkit-opacity:.75;-moz-opacity:.75;border-radius:4px;-webkit-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,.1)}footer.footer .copyright{margin-top:16px}footer.footer .copyright p{font-size:.78125rem}@media screen and (max-width:768px){footer.footer{justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center}}.article.l_friends .friends-group .friend-content{display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;margin:-8px;border-radius:8px;-webkit-border-radius:8px;align-items:flex-start;line-height:1.3}.article.l_friends .friends-group .friend-content .friend-card{display:flex;display:flex;border-radius:4px;-webkit-border-radius:4px;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1);padding:8px 0;margin:8px;margin-top:calc(2.25 * 16px + 32px);color:var(--color-meta);background:var(--color-block);justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start;align-content:flex-start;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);-webkit-transform:scale(1.2) rotate(12deg);-khtml-transform:scale(1.2) rotate(12deg);-moz-transform:scale(1.2) rotate(12deg);-o-transform:scale(1.2) rotate(12deg);-ms-transform:scale(1.2) rotate(12deg);box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1)}.article.l_friends .friends-group .friend-content .friend-card .friend-left{display:flex;display:flex;align-self:center}.article.l_friends .friends-group .friend-content .friend-card .friend-left .avatar{width:64px;height:64px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin:16px 8px 4px 8px;margin-top:calc(-1.25 * 16px - 32px);border-radius:100%;-webkit-border-radius:100%;border:2px solid #fff;background:#fff}.article.l_friends .friends-group .friend-content .friend-card .friend-right{margin:4px 8px;display:flex;display:flex;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 .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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:.8125rem;padding-top:4px;font-weight:700}.article.l_friends .friends-group .friend-content .friend-card .friend-right p.tags{font-size:.78125rem;display:-webkit-box;display:-moz-box;display:inline;background:0 0;word-wrap:break-word;padding-right:4px}.md img{position:relative;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}@media screen and (max-width:500px){.md img{box-shadow:none;-webkit-box-shadow:none}}.md div>img,.md p>img{display:-webkit-box;display:-moz-box;display:block;margin:auto;border-radius:4px;-webkit-border-radius:4px}@media screen and (max-width:500px){.md div>img,.md p>img{border-radius:2px;-webkit-border-radius:2px}}.md span img{display:-webkit-box;display:-moz-box;display:inline;margin:auto}.md .img-wrap{margin:1.5rem auto;text-align:center;border-radius:2px;-webkit-border-radius:2px;overflow:hidden}.md .img-wrap .img-bg{width:100%}.md .img-wrap .image-caption{display:-webkit-box;display:-moz-box;display:block;margin:.75rem auto;font-size:.8125rem;color:var(--color-meta)}.md .img-wrap .image-caption:empty{display:-webkit-box;display:-moz-box;display:none}svg.loading{display:-webkit-box;display:-moz-box;display:block;position:absolute;color:var(--text-p3);width:100%;height:2rem;margin:auto;animation:spin infinite 2s;-webkit-animation:spin infinite 2s;-khtml-animation:spin infinite 2s;-moz-animation:spin infinite 2s;-o-animation:spin infinite 2s;-ms-animation:spin infinite 2s;animation-timing-function:linear}@keyframes spin{from{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0)}to{transform:rotate(360deg);-webkit-transform:rotate(360deg);-khtml-transform:rotate(360deg);-moz-transform:rotate(360deg);-o-transform:rotate(360deg);-ms-transform:rotate(360deg)}}#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:-webkit-box;display:-moz-box;display:block}#l_body div.loading,#l_body div.loading p{text-align:center}#l_body #s-top{transition:all .6s ease;-webkit-transition:all .6s ease;-khtml-transition:all .6s ease;-moz-transition:all .6s ease;-o-transition:all .6s ease;-ms-transition:all .6s ease;z-index:50;position:fixed;width:48px;height:48px;line-height:48px;border-radius:100%;-webkit-border-radius:100%;bottom:32px;right:32px;transform:translateY(100px) scale(0);-webkit-transform:translateY(100px) scale(0);-khtml-transform:translateY(100px) scale(0);-moz-transform:translateY(100px) scale(0);-o-transform:translateY(100px) scale(0);-ms-transform:translateY(100px) scale(0);transform-origin:bottom;-webkit-transform-origin:bottom;-khtml-transform-origin:bottom;-moz-transform-origin:bottom;-o-transform-origin:bottom;-ms-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);-webkit-transform:translateY(0) scale(1);-khtml-transform:translateY(0) scale(1);-moz-transform:translateY(0) scale(1);-o-transform:translateY(0) scale(1);-ms-transform:translateY(0) scale(1)}#l_body #s-top.show.hl{background:#3dd9b6;color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}@media screen and (min-width:768px){#l_body #s-top:hover{transform:scale(1.2);-webkit-transform:scale(1.2);-khtml-transform:scale(1.2);-moz-transform:scale(1.2);-o-transform:scale(1.2);-ms-transform:scale(1.2);border-radius:25%;-webkit-border-radius:25%;background:#3dd9b6;color:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1)}#l_body #s-top:hover.hl{box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(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:-webkit-box;display:-moz-box;display:none}#l_main .post-list{position:relative;margin-bottom:16px;column-gap:16px;-webkit-column-gap:16px;-moz-column-gap:16px}#l_main .post-list.multiple-columns{-moz-columns:320px;columns:320px}#l_main .post-wrapper{column-break-inside:avoid;-moz-column-break-inside:avoid;break-inside:avoid-column}#l_main .widget .content .tabs,#l_main .widget .content details,#l_main .widget .content ol,#l_main .widget .content p,#l_main .widget .content table,#l_main .widget .content ul{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;-webkit-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 .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;border-radius:100%;-webkit-border-radius:100%;float:right;margin:2px;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}#l_main .post .article-meta .aplayer:hover,#l_main .post .article-meta .thumbnail:hover{border-radius:25%;-webkit-border-radius:25%;transform:scale(1.1);-webkit-transform:scale(1.1);-khtml-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(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%;-webkit-border-radius:100%;transform:scale(1);-webkit-transform:scale(1);-khtml-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1)}}#l_main .post .article-meta .thumbnail{width:auto;border-radius:4px;-webkit-border-radius:4px;box-shadow:none;-webkit-box-shadow:none;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}#l_main .post .article-meta .thumbnail:hover{border-radius:4px;-webkit-border-radius:4px;transform:scale(1.1) rotate(4deg);-webkit-transform:scale(1.1) rotate(4deg);-khtml-transform:scale(1.1) rotate(4deg);-moz-transform:scale(1.1) rotate(4deg);-o-transform:scale(1.1) rotate(4deg);-ms-transform:scale(1.1) rotate(4deg);box-shadow:none;-webkit-box-shadow:none}#l_main .post .article-meta .new-meta-box{transition:all .1s ease;-webkit-transition:all .1s ease;-khtml-transition:all .1s ease;-moz-transition:all .1s ease;-o-transition:all .1s ease;-ms-transition:all .1s ease;display:flex;display:flex;align-items:center;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-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 i,#l_main .post .article-meta .new-meta-box p{font-size:.8125rem}#l_main .post .article-meta .new-meta-box .new-meta-item{color:var(--color-meta);display:flex;display:flex;align-items:baseline;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;margin:0 16px 0 0;padding:8px 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 i,#l_main .post .article-meta .new-meta-box .new-meta-item img{display:-webkit-box;display:-moz-box;display:inline-block}#l_main .post .article-meta .new-meta-box .new-meta-item i{margin-right:4px;border-radius:0;-webkit-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 a,#l_main .post .article-meta .new-meta-box .new-meta-item p{color:var(--color-meta);padding:3px 0}#l_main .post .article-meta .new-meta-box .new-meta-item a{display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center}#l_main .post .article-meta .new-meta-box .new-meta-item a img{height:16px;width:16px;margin-right:8px}#l_main .post .article-meta .new-meta-box .new-meta-item a p{margin:0;font-weight:400;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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 i,#l_main .post .article-meta .new-meta-box .author img{border-radius:100%;-webkit-border-radius:100%}#l_main .post .article-meta .new-meta-box .author img{transform:translateY(-.5px);-webkit-transform:translateY(-.5px);-khtml-transform:translateY(-.5px);-moz-transform:translateY(-.5px);-o-transform:translateY(-.5px);-ms-transform:translateY(-.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;-webkit-border-radius:4px}}#l_main .post .article-meta .new-meta-box .share-body{position:relative;display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-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:0 0}@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:-webkit-box;display:-moz-box;display:none;position:absolute;background:var(--color-card);border-radius:8px;-webkit-border-radius:8px;box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);padding:8px;left:50%;top:-20px;transform:translate(-50%,-100%);-webkit-transform:translate(-50%,-100%);-khtml-transform:translate(-50%,-100%);-moz-transform:translate(-50%,-100%);-o-transform:translate(-50%,-100%);-ms-transform:translate(-50%,-100%)}#l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target img{display:-webkit-box;display:-moz-box;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:flex;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:-webkit-box;display:-moz-box;display:inline-block}#l_main .post a img{display:-webkit-box;display:-moz-box;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:flex;display:flex;width:100%;max-width:1080px;margin:0 auto;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;align-items:stretch}@media screen and (min-width:2048px){.body-wrapper{max-width:55vw}}article#comments p[ct]{margin-top:0;margin-bottom:1em;font-size:1.125rem;color:var(--color-text);font-weight:600}article#comments p[cst]{margin-top:1em;margin-bottom:1em;font-size:.875rem}article#comments #load-btns,article#comments #loading-comments{text-align:center;margin:16px 0}article#comments #load-btns,article#comments #load-btns a,article#comments #load-btns i,article#comments #loading-comments,article#comments #loading-comments a,article#comments #loading-comments i{line-height:3em}article#comments #load-btns a.load-comments,article#comments #loading-comments a.load-comments{display:-webkit-box;display:-moz-box;display:inline-block;border-radius:2px;-webkit-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 .5s ease-out 0s;transition:filter .25s ease-out 0s;-webkit-transition:filter .25s ease-out 0s;-khtml-transition:filter .25s ease-out 0s;-moz-transition:filter .25s ease-out 0s;-o-transition:filter .25s ease-out 0s;-ms-transition:filter .25s ease-out 0s}img.lazyload:not(.placeholder):not(.loaded){opacity:0;-webkit-opacity:0;-moz-opacity:0}img.lazyload:not(.placeholder).loaded{opacity:1;-webkit-opacity:1;-moz-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:-webkit-box;display:-moz-box;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:700}.md h2+h3:before{margin-top:-80px}.md ol,.md ul{font-size:.9375rem;list-style:initial;padding-left:8px;margin-left:16px;margin-top:1em;margin-bottom:1em}.md ol ol,.md ol ul,.md ul ol,.md ul ul{margin-top:0;margin-bottom:0}.md ol li,.md ul li{margin-top:0;margin-bottom:0}.md ol li li,.md ul li li{margin-top:0;margin-bottom:0}.md ol li p,.md ul li p{margin-top:4px;margin-bottom:0}.md ol.task-list,.md ul.task-list{padding-left:0;margin-left:4px}.md ol.task-list li,.md ul.task-list li{list-style:none}.md ol.task-list li input,.md ul.task-list li input{margin-right:4px}.md ul>li{list-style:initial}.md ol>li{list-style:decimal}.md .div-ori-link{display:-webkit-box;display:-moz-box;display:block;text-align:center;margin:4rem 0}.md .ori-link{margin:auto;padding:1em 3em;border:1px solid #3dd9b6;border-radius:4px;-webkit-border-radius:4px;color:#3dd9b6;font-weight:500}.md .ori-link:hover{color:#ff5722;border-color:#ff5722}#l_main .prev-next{width:100%;display:flex;display:flex;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;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;-webkit-border-radius:8px}#l_main .prev-next section:hover{color:#ff5722}#l_main .article .prev-next{width:100%;display:flex;display:flex;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;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;-webkit-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 .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:.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}.article-desc{word-break:break-word}.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;-webkit-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,.1)}.meta-v3[line_style=dashed]{border-top:2px dashed rgba(68,68,68,.1)}.meta-v3[line_style=dotted]{border-top:4px dotted rgba(68,68,68,.1)}.meta-v3{margin-top:16px;padding-top:12px;display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;color:var(--color-meta)}.meta-v3>div{display:flex;display:flex;align-items:center;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.meta-v3 time{font-size:.875rem}.meta-v3 .category-link{font-size:.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:700}.meta-v3 .avatar{line-height:0;margin-right:.75em}.meta-v3 .avatar img{width:24px;height:24px;display:-webkit-box;display:-moz-box;display:block;border-radius:12px;-webkit-border-radius:12px;-o-object-fit:cover;object-fit:cover}.headimg-div{display:-webkit-box;display:-moz-box;display:block;margin-left:-24px;margin-top:-24px;margin-bottom:20px;width:calc(100% + 3 * 16px)}.headimg-div .headimg-a{display:-webkit-box;display:-moz-box;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;-webkit-transition:transform 3s ease-out;-khtml-transition:transform 3s ease-out;-moz-transition:transform 3s ease-out;-o-transition:transform 3s ease-out;-ms-transition:transform 3s ease-out}.headimg-div .headimg:hover{transform:scale(1.1);-webkit-transform:scale(1.1);-khtml-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1)}.headimg-div .headimg.lazyload:not(.placeholder){transition:transform 3s ease-out,opacity .5s ease-out;-webkit-transition:transform 3s ease-out,opacity .5s ease-out;-khtml-transition:transform 3s ease-out,opacity .5s ease-out;-moz-transition:transform 3s ease-out,opacity .5s ease-out;-o-transition:transform 3s ease-out,opacity .5s ease-out;-ms-transition:transform 3s ease-out,opacity .5s ease-out}.headimg-div .headimg.lazyload:not(.placeholder):not(.loaded){opacity:0;-webkit-opacity:0;-moz-opacity:0}.headimg-div .headimg.lazyload:not(.placeholder).loaded{opacity:1;-webkit-opacity:1;-moz-opacity:1}#u-search .modal{position:fixed;height:80%;width:100%;max-width:640px;left:50%;top:0;margin:64px 0 0 -320px;background:var(--color-card);z-index:3;border-radius:8px;-webkit-border-radius:8px;overflow:hidden}#u-search .modal #resule-hits-empty,#u-search .modal .search-icon{position:absolute;top:50%;left:50%;width:50%;text-align:center;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-khtml-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}#u-search .modal #resule-hits-empty i,#u-search .modal .search-icon i{font-size:8em;color:#e8e8e8;margin-bottom:10px}@media screen and (max-width:680px){#u-search .modal{box-shadow:none;-webkit-box-shadow:none;max-width:none;top:0;left:0;margin:0;height:100%;border-radius:0;-webkit-border-radius:0}}#u-search .modal .modal-header{position:relative;width:100%;height:64px;z-index:3;border-top-left-radius:8px;border-top-right-radius:8px;font-size:$fontsize;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1);background:#fff;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}@media screen and (max-width:680px){#u-search .modal .modal-header{border-radius:0;-webkit-border-radius:0;padding:0}}#u-search .modal .modal-header .btn-close{display:-webkit-box;display:-moz-box;display:block;position:absolute;width:55px;height:64px;top:0;right:0;color:#3dd9b6;cursor:pointer;text-align:center;line-height:64px;vertical-align:middle;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;z-index:2}#u-search .modal .modal-header .btn-close:hover{transform:rotate(90deg);-webkit-transform:rotate(90deg);-khtml-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);-ms-transform:rotate(90deg)}#u-search .modal .modal-header #u-search-modal-form{position:relative;width:100%;height:100%;z-index:2}#u-search .modal .modal-header #u-search-modal-form input{color:var(--color-text)}#u-search .modal .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:8px;-webkit-border-radius:8px;vertical-align:middle;border:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;-webkit-box-shadow:none;background:0 0;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}@media screen and (max-width:680px){#u-search .modal .modal-header #u-search-modal-form #u-search-modal-input{padding:0}}#u-search .modal .modal-header #u-search-modal-form #u-search-modal-input:focus{border-top-left-radius:8px;border-top-right-radius:8px}#u-search .modal .modal-header #u-search-modal-btn-submit{position:absolute;top:0;left:0;padding-left:5px;padding-top:2px;background:0 0;border:none;width:50px;height:64px;vertical-align:middle;color:#3dd9b6;z-index:2}#u-search .modal .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:8px;-webkit-border-radius:8px}#u-search .modal .modal-body::-webkit-scrollbar{height:4px;width:4px}#u-search .modal .modal-body::-webkit-scrollbar-track-piece{background:0 0}#u-search .modal .modal-body::-webkit-scrollbar-thumb{background:#3dd9b6;cursor:pointer;border-radius:2px;-webkit-border-radius:2px}#u-search .modal .modal-body::-webkit-scrollbar-thumb:hover{background:#ff5722}#u-search .modal .modal-body .modal-results{list-style:none}#u-search .modal .modal-body .modal-results .result{position:relative;display:-webkit-box;display:-moz-box;display:block;padding:16px;border-radius:8px;-webkit-border-radius:8px}#u-search .modal .modal-body .modal-results .result b[mark]{color:#25be9c;text-decoration:underline;font-size:120%;background-color:#ffe600}#u-search .modal .modal-body .modal-results .result:hover{background:var(--color-site-bg)}#u-search .modal .modal-body .modal-results .result:hover .title{color:var(--color-list-hl)}#u-search .modal .modal-body .modal-results .result .title{display:-webkit-box;display:-moz-box;display:inline-block;max-width:100%;color:var(--color-list);font-weight:700;padding:1px;margin-bottom:2px;white-space:normal;overflow:hidden;text-overflow:ellipsis;font-size:1.125rem}#u-search .modal .modal-body .modal-results .result .digest{display:-webkit-box;display:-moz-box;display:block;white-space:inherit;overflow:hidden;word-break:break-all;text-overflow:ellipsis;font-size:.8125rem;color:var(--color-meta)}#u-search .modal .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,.7);z-index:1}#l_side{width:240px;float:right;position:relative;display:flex;display:flex;flex-direction:column}@media screen and (max-width:768px){#l_side{width:100%}}#l_side .widget{overflow:hidden}#l_side .widget.sticky{position:sticky;top:80px;z-index:1}#l_side .widget>.content{max-height:200vh;overflow:auto;text-align:justify;font-size:.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:0 0}#l_side .widget>.content::-webkit-scrollbar-thumb{background:#3dd9b6;cursor:pointer;border-radius:2px;-webkit-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;-webkit-border-radius:8px;width:100%;display:-webkit-box;display:-moz-box;display:none}.widget ol li,.widget ul li{margin-top:0;margin-bottom:0}.widget.desktop{display:-webkit-box;display:-moz-box;display:block}@media screen and (max-width:768px){.widget{display:-webkit-box;display:-moz-box;display:none!important}.widget.mobile{display:-webkit-box;display:-moz-box;display:block!important}}.widget header{border-top-left-radius:8px;border-top-right-radius:8px;padding:calc(16px - 2px);font-weight:700;font-size:.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:.5em}.widget>.content ul>li a{color:var(--color-meta);padding:0 16px;padding-left:12px;line-height:2;display:flex;display:flex;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;align-content:center;border-left:2px solid transparent;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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{flex:auto 0}.widget>.content ul.entry a .badge,.widget>.content ul.popular-posts a .badge{flex:none 0;font-weight:400;font-size:.875rem;color:rgba(68,68,68,.7)}.widget>.content ul.entry a.active,.widget>.content ul.popular-posts a.active{border-left:2px solid #3dd9b6;color:var(--color-list-hl)}.widget>.content ul.entry a.active .badge,.widget>.content ul.popular-posts a.active .badge{color:rgba(61,217,182,.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 #3dd9b6;color:var(--color-list-hl);background:var(--color-site-bg)}.widget.blogger{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.widget.blogger .content{padding:0;display:flex;display:flex;flex-direction:column;align-items:stretch}.widget.blogger .content>.avatar{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%;-webkit-border-radius:100%;width:128px;height:128px;margin-top:32px;margin-bottom:1em}.widget.blogger .content>.avatar.circle img{display:-webkit-box;display:-moz-box;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-khtml-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}@media screen and (max-width:768px){.widget.blogger .content>.avatar{width:80px;height:80px;border-radius:100%;-webkit-border-radius:100%;border:2px solid #fff}.widget.blogger .content>.avatar img{display:-webkit-box;display:-moz-box;display:block;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-khtml-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);position:absolute}}.widget.blogger .content .text :first-child{margin-top:16px}.widget.blogger .content h2{text-align:center;font-weight:700;margin:8px}@media screen and (max-width:768px){.widget.blogger .content h2{margin:8px}}.widget.blogger .content p{text-align:center;font-weight:700;margin:8px 8px 0 8px;empty-cells:hide}.widget.blogger .content .social-wrapper{display:flex;display:flex;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;margin:4px 4px}.widget.blogger .content .social-wrapper a{color:var(--color-meta);padding:0;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.widget.blogger .content .social-wrapper a:hover{color:#ff5722}.widget.blogger .content .social-wrapper a.social{display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;width:32px;height:32px;margin:4px;border-radius:100px;-webkit-border-radius:100px}.widget.blogger .content .social-wrapper a.social:hover{background:#ebfbf7;color:#3dd9b6}@media screen and (max-width:768px){.widget.blogger .content .social-wrapper{justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;display:-webkit-box;display:-moz-box;display:none}}@media screen and (max-width:768px){.widget.blogger{box-shadow:none;-webkit-box-shadow:none;background:0 0!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:.875rem;word-break:break-all}.widget.text .content a{color:#2092ec;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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:.875rem;font-weight:700;line-height:1.5;padding-top:6px;padding-bottom:6px}.widget.list .content a i,.widget.list .content a img{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%;-webkit-border-radius:100%}.widget.grid .content .grid{border:none;display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:space-around;-webkit-justify-content:space-around;-khtml-justify-content:space-around;-moz-justify-content:space-around;-o-justify-content:space-around;-ms-justify-content:space-around;padding:4px 16px}.widget.grid .content .grid a{text-align:center;border-radius:2px;-webkit-border-radius:2px;margin:0;padding:4px 8px;display:flex;display:flex;flex-direction:column;align-items:center;font-size:.78125rem;font-weight:700;color:rgba(68,68,68,.7);line-height:1.5;word-wrap:break-word}.widget.grid .content .grid a i{margin-top:.3em;margin-bottom:.3em;font-size:1.8em}.widget.grid .content .grid a img{display:-webkit-box;display:-moz-box;display:inline;vertical-align:middle;margin-bottom:4px}.widget.grid .content .grid a img#round{border-radius:100%;-webkit-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;-webkit-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:-webkit-box;display:-moz-box;display:inline-block;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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:700}.widget.related_posts .content ul{margin-top:8px;margin-bottom:8px}.widget.related_posts .content h3{font-size:.875rem;font-weight:700;margin:0}.widget.related_posts .content h3 a{line-height:inherit;padding-top:4px;padding-bottom:4px}.widget.qrcode .content{display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:center;justify-content:space-around;-webkit-justify-content:space-around;-khtml-justify-content:space-around;-moz-justify-content:space-around;-o-justify-content:space-around;-ms-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:.2rem 1rem}.webinfo .webinfo-item{display:-webkit-box;display:-moz-box;display:block;padding:4px 0 0}.webinfo .webinfo-item div:first-child{display:-webkit-box;display:-moz-box;display:inline-block}.webinfo .webinfo-item div:last-child{display:-webkit-box;display:-moz-box;display:inline-block;float:right}.widget-last{display:-webkit-box;display:-moz-box;display:block!important}.widget-last .item{display:flex;display:flex;justify-content:space-between;-webkit-justify-content:space-between;-khtml-justify-content:space-between;-moz-justify-content:space-between;-o-justify-content:space-between;-ms-justify-content:space-between;font-size:.8rem}.widget-last .item-title{width:100%;display:-webkit-box;display:-moz-box;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.widget-sticky{position:sticky;top:80px;z-index:10}.bber-talk{padding:.2rem 1rem}.bber-talk :hover{border-color:#49b1f5;box-shadow:none;-webkit-box-shadow:none}.bber-talk a{color:var(--font-color)}.bber-talk .talk-list{display:-webkit-box;display:-moz-box;display:block!important;max-height:25px;overflow:hidden}.bber-talk .talk-list :hover{color:#49b1f5!important;transition:all .2s ease-in-out;-webkit-transition:all .2s ease-in-out;-khtml-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out}.bber-talk .talk-list .item{text-overflow:ellipsis;white-space:nowrap;width:98%;overflow:hidden}.snackbar-wrap{position:fixed;width:100%;left:0;bottom:0;background:#3dd9b6;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:.5rem;margin-bottom:.5rem;color:#fff}.snackbar-content .title{font-size:1.5rem;font-weight:600}.snackbar-content .action{display:-webkit-box;display:-moz-box;display:block;margin:1.5rem -4px}.snackbar-content .action a{margin:4px;cursor:pointer;color:#fff;display:-webkit-box;display:-moz-box;display:inline-block;padding:.4em 2em;font-weight:600;border-radius:2px;-webkit-border-radius:2px;border:1px solid #fff}.snackbar-content .action a:hover{color:#3dd9b6;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;-webkit-border-radius:8px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;line-height:1.6;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}#l_side .toc-wrapper header{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 #3dd9b6}#l_side .toc-wrapper .content a:hover{color:var(--color-list-hl);background:var(--color-site-bg);border-left:2px solid #3dd9b6}@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;-webkit-border-radius:4px;box-shadow:0 4px 8px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.1);border:1px solid #e7e7e7;visibility:hidden;transform:scale(0,0);-webkit-transform:scale(0,0);-khtml-transform:scale(0,0);-moz-transform:scale(0,0);-o-transform:scale(0,0);-ms-transform:scale(0,0);transform-origin:right top;-webkit-transform-origin:right top;-khtml-transform-origin:right top;-moz-transform-origin:right top;-o-transform-origin:right top;-ms-transform-origin:right top}#l_side .toc-wrapper.active{visibility:visible;transform:scale(1,1);-webkit-transform:scale(1,1);-khtml-transform:scale(1,1);-moz-transform:scale(1,1);-o-transform:scale(1,1);-ms-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:.875rem;display:-webkit-box;display:-moz-box;display:inline-block}#l_side .toc-wrapper ol .toc-child a,#l_side .toc-wrapper ul .toc-child a{font-weight:400}#l_side .toc-wrapper ol .toc-item.toc-level-1 .toc-child a,#l_side .toc-wrapper ul .toc-item.toc-level-1 .toc-child a{padding-left:12.8px}#l_side .toc-wrapper ol .toc-item.toc-level-2 .toc-child a,#l_side .toc-wrapper ul .toc-item.toc-level-2 .toc-child a{padding-left:25.6px}#l_side .toc-wrapper ol .toc-item.toc-level-3 .toc-child a,#l_side .toc-wrapper ul .toc-item.toc-level-3 .toc-child a{padding-left:38.4px}#l_side .toc-wrapper ol .toc-item.toc-level-4 .toc-child a,#l_side .toc-wrapper ul .toc-item.toc-level-4 .toc-child a{padding-left:51.2px}#l_side .toc-wrapper ol .toc-item.toc-level-5 .toc-child a,#l_side .toc-wrapper ul .toc-item.toc-level-5 .toc-child a{padding-left:64px}#l_side .toc-wrapper ol .toc-item.toc-level-6 .toc-child a,#l_side .toc-wrapper ul .toc-item.toc-level-6 .toc-child a{padding-left:76.8px}#l_side .toc-wrapper ol li,#l_side .toc-wrapper ul li{width:auto;text-align:left}#l_side .toc-wrapper ol li a,#l_side .toc-wrapper ul li a{padding:0 8px 0 11px;font-weight:700;width:100%}#l_side .toc-wrapper:empty{display:-webkit-box;display:-moz-box;display:none}#l_side .toc-wrapper .toc-child{font-size:1rem;overflow:hidden;transition:max-height .6s ease-in;-webkit-transition:max-height .6s ease-in;-khtml-transition:max-height .6s ease-in;-moz-transition:max-height .6s ease-in;-o-transition:max-height .6s ease-in;-ms-transition:max-height .6s ease-in;max-height:0}#l_side .toc-wrapper .toc-item.active>.toc-link{color:var(--color-list-hl);border-left:2px solid #3dd9b6}#l_side .toc-wrapper .toc-item.active>.toc-child{max-height:1000px}.md .video-wrap{margin:1.5rem auto}.article span.btn,.md span.btn{display:-webkit-box;display:-moz-box;display:inline}.article span.btn a,.md span.btn a{text-decoration:none;border-bottom:none;display:-webkit-box;display:-moz-box;display:inline-block;padding:3px 4px 2px 4px;margin:2px;line-height:1.1;border-radius:2px;-webkit-border-radius:2px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .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:.5;-webkit-opacity:.5;-moz-opacity:.5}.article span.btn a:not([href]):hover,.md span.btn a:not([href]):hover{cursor:$not-allowed,not-allowed}.article span.btn a,.article span.btn.regular a,.md span.btn a,.md span.btn.regular a{color:#44d7b6;border:1px solid #44d7b6}.article span.btn a:hover,.article span.btn.regular a:hover,.md span.btn a:hover,.md span.btn.regular a:hover{color:#ff5722;border-color:#ff5722}.article span.btn a i,.article span.btn.regular a i,.md span.btn a i,.md span.btn.regular a i{margin-right:4px}.article span.btn.regular a,.article span.btn.solid a,.md span.btn.regular 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:-webkit-box;display:-moz-box;display:block;text-align:center}.article div.btns,.md div.btns{margin:0 -8px;display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:flex-start;overflow:visible;line-height:1.8}.article div.btns,.article div.btns a,.article div.btns p,.md div.btns,.md div.btns a,.md div.btns p{font-size:.8125rem;color:var(--color-p)}.article div.btns b,.md div.btns b{font-size:.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{flex-grow:1;width:auto}.article div.btns.around,.md div.btns.around{justify-content:space-around;-webkit-justify-content:space-around;-khtml-justify-content:space-around;-moz-justify-content:space-around;-o-justify-content:space-around;-ms-justify-content:space-around}.article div.btns.center,.md div.btns.center{justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-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 .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;text-decoration:none;border-bottom:none;margin:8px;margin-top:calc(1.25 * 16px + 32px);min-width:120px;font-weight:700;display:flex;display:flex;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start;align-content:center;align-items:center;flex-direction:column;padding:8px;text-align:center;background:var(--color-block);border-radius:4px;-webkit-border-radius:4px}.article div.btns a>i:first-child,.article div.btns a>img:first-child,.md div.btns a>i:first-child,.md div.btns a>img:first-child{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;height:64px;width:64px;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(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>i:first-child.auto,.article div.btns a>img:first-child.auto,.md div.btns a>i:first-child.auto,.md div.btns a>img:first-child.auto{width:auto}.article div.btns a>i:first-child,.md div.btns a>i:first-child{color:#fff;background:#3dd9b6}.article div.btns a b,.article div.btns a p,.md div.btns a b,.md div.btns a p{margin:.25em;font-weight:400;line-height:1.25;word-wrap:break-word}.article div.btns a b,.md div.btns a b{font-weight:700;line-height:1.3}.article div.btns a img,.md div.btns a img{margin:.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,.15)}.article div.btns a[href]:hover,.article div.btns a[href]:hover b,.md div.btns a[href]:hover,.md div.btns a[href]:hover b{color:#ff5722}.article div.btns a[href]:hover>i:first-child,.article div.btns a[href]:hover>img:first-child,.md div.btns a[href]:hover>i:first-child,.md div.btns a[href]:hover>img:first-child{transform:scale(1.1) translateY(-8px);-webkit-transform:scale(1.1) translateY(-8px);-khtml-transform:scale(1.1) translateY(-8px);-moz-transform:scale(1.1) translateY(-8px);-o-transform:scale(1.1) translateY(-8px);-ms-transform:scale(1.1) translateY(-8px);box-shadow:0 4px 8px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px 0 rgba(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>i:first-child,.article div.btns.circle a>img:first-child,.md div.btns.circle a>i:first-child,.md div.btns.circle a>img:first-child{border-radius:32px;-webkit-border-radius:32px}.article div.btns.rounded a>i:first-child,.article div.btns.rounded a>img:first-child,.md div.btns.rounded a>i:first-child,.md div.btns.rounded a>img:first-child{border-radius:16px;-webkit-border-radius:16px}.md .checkbox{display:flex;display:flex;align-items:center;margin-top:1em;margin-bottom:1em}.md .checkbox+.checkbox{margin-top:-1em}.md .checkbox input{transform:translate(0,-1px);-webkit-transform:translate(0,-1px);-khtml-transform:translate(0,-1px);-moz-transform:translate(0,-1px);-o-transform:translate(0,-1px);-ms-transform:translate(0,-1px);-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;position:relative;height:16px;width:16px;transition:all .15s ease-out 0s;-webkit-transition:all .15s ease-out 0s;-khtml-transition:all .15s ease-out 0s;-moz-transition:all .15s ease-out 0s;-o-transition:all .15s ease-out 0s;-ms-transition:all .15s ease-out 0s;cursor:pointer;display:-webkit-box;display:-moz-box;display:inline-block;outline:0;border-radius:2px;-webkit-border-radius:2px;flex-shrink:0;margin-right:8px;pointer-events:none}.md .checkbox input[type=checkbox]:after,.md .checkbox input[type=checkbox]:before{position:absolute;content:"";background:#fff}.md .checkbox input[type=checkbox]:before{left:1px;top:5px;width:0;height:2px;transition:all .2s ease-in;-webkit-transition:all .2s ease-in;-khtml-transition:all .2s ease-in;-moz-transition:all .2s ease-in;-o-transition:all .2s ease-in;-ms-transition:all .2s ease-in;transform:rotate(45deg);-webkit-transform:rotate(45deg);-khtml-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-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:0;transition:all .2s ease-out;-webkit-transition:all .2s ease-out;-khtml-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;-ms-transition:all .2s ease-out;transform:rotate(40deg);-webkit-transform:rotate(40deg);-khtml-transform:rotate(40deg);-moz-transform:rotate(40deg);-o-transform:rotate(40deg);-ms-transform:rotate(40deg);-webkit-transform:rotate(40deg);-moz-transform:rotate(40deg);-ms-transform:rotate(40deg);-o-transform:rotate(40deg);transition-delay:.25s;-webkit-transition-delay:.25s;-khtml-transition-delay:.25s;-moz-transition-delay:.25s;-o-transition-delay:.25s;-ms-transition-delay:.25s}.md .checkbox input[type=checkbox]:checked:before{left:0;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);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);left:1px;top:5px;width:0;height:2px}.md .checkbox.minus input[type=checkbox]:after{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);left:1px;top:5px;width:0;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);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);left:1px;top:5px;width:0;height:2px}.md .checkbox.plus input[type=checkbox]:after{transform:rotate(0);-webkit-transform:rotate(0);-khtml-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);-ms-transform:rotate(0);left:5px;top:1px;width:2px;height:0}.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);-webkit-transform:rotate(45deg);-khtml-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-ms-transform:rotate(45deg);left:3px;top:1px;width:0;height:2px}.md .checkbox.times input[type=checkbox]:after{transform:rotate(135deg);-webkit-transform:rotate(135deg);-khtml-transform:rotate(135deg);-moz-transform:rotate(135deg);-o-transform:rotate(135deg);-ms-transform:rotate(135deg);right:3px;top:1px;width:0;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%;-webkit-border-radius:50%}.md .checkbox input[type=radio]:before{content:"";display:-webkit-box;display:-moz-box;display:block;width:8px;height:8px;border-radius:50%;-webkit-border-radius:50%;margin:2px;transform:scale(0);-webkit-transform:scale(0);-khtml-transform:scale(0);-moz-transform:scale(0);-o-transform:scale(0);-ms-transform:scale(0);transition:all .25s ease-out;-webkit-transition:all .25s ease-out;-khtml-transition:all .25s ease-out;-moz-transition:all .25s ease-out;-o-transition:all .25s ease-out;-ms-transition:all .25s ease-out}.md .checkbox input[type=radio]:checked:before{transform:scale(1);-webkit-transform:scale(1);-khtml-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1)}.md .checkbox input{border:2px solid #3dd9b6}.md .checkbox input[type=checkbox]:checked{background:#3dd9b6}.md .checkbox input[type=radio]:checked:before{background:#3dd9b6}.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:-webkit-box;display:-moz-box;display:inline-block;margin-top:0!important;margin-bottom:0!important}div.dropmenu-wrapper{display:-webkit-box;display:-moz-box;display:inline-block}div.dropmenu{position:relative;display:-webkit-box;display:-moz-box;display:inline-block;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;color:#2092ec}div.dropmenu:hover{color:inherit}div.dropmenu:hover>ul{display:-webkit-box;display:-moz-box;display:block;left:0;margin-left:0;margin-top:0}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% - .5 * 16px)}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;-webkit-opacity:0;-moz-opacity:0;transform:translateY(100%);-webkit-transform:translateY(100%);-khtml-transform:translateY(100%);-moz-transform:translateY(100%);-o-transform:translateY(100%);-ms-transform:translateY(100%);transition:all .3s ease;-webkit-transition:all .3s ease;-khtml-transition:all .3s ease;-moz-transition:all .3s ease;-o-transition:all .3s ease;-ms-transition:all .3s ease;pointer-events:none;position:absolute;width:100%;bottom:0;text-align:center;background:rgba(0,0,0,.3);color:#fff}div.gallery>.fancybox .image-caption:empty,div.gallery>p>.fancybox .image-caption:empty{display:-webkit-box;display:-moz-box;display:none}div.gallery>.fancybox:hover .image-caption,div.gallery>p>.fancybox:hover .image-caption{opacity:1;-webkit-opacity:1;-moz-opacity:1;transform:translateY(0);-webkit-transform:translateY(0);-khtml-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);-ms-transform:translateY(0)}div.gallery,div.gallery>p{display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-khtml-flex-wrap:nowrap;-moz-flex-wrap:nowrap;-o-flex-wrap:nowrap;-ms-flex-wrap:nowrap;padding:0!important;align-items:stretch}div.gallery[col]{flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start}div.gallery[col='2']>.fancybox{width:calc(50% - 2 * 1px)}div.gallery[col='3']>.fancybox{width:calc(33.33% - 2 * 1px)}div.gallery[col='4']>.fancybox{width:calc(25% - 2 * 1px)}div.gallery[col='5']>.fancybox{width:calc(20% - 2 * 1px)}div.gallery[col='6']>.fancybox{width:calc(16.66% - 2 * 1px)}div.gallery[col='7']>.fancybox{width:calc(14.2857% - 2 * 1px)}div.gallery[col='8']>.fancybox{width:calc(12.5% - 2 * 1px)}div.gallery>p{margin:0}div.gallery.left,div.gallery.left>p{justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start}div.gallery.center,div.gallery.center>p{justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center}div.gallery.right,div.gallery.right>p{justify-content:flex-end;-webkit-justify-content:flex-end;-khtml-justify-content:flex-end;-moz-justify-content:flex-end;-o-justify-content:flex-end;-ms-justify-content:flex-end}div.gallery.stretch,div.gallery.stretch>p{align-items:stretch}.fancybox-container .fancybox-stage{cursor:zoom-out}div.fancybox{margin-top:1em;margin-bottom:1em;display:flex;display:flex;flex-direction:column;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;-khtml-flex-wrap:nowrap;-moz-flex-wrap:nowrap;-o-flex-wrap:nowrap;-ms-flex-wrap:nowrap;padding:0!important;overflow:hidden;border-radius:2px;-webkit-border-radius:2px}@media screen and (max-width:500px){div.fancybox{border-radius:1px;-webkit-border-radius:1px}}div.fancybox a{line-height:0;margin:0 auto;align-items:stretch}div.fancybox .gallery{overflow:hidden}div.fancybox .image-caption{font-size:.8125rem;padding-top:.5em;padding-bottom:1em;color:var(--color-meta)}div.fancybox .image-caption:empty{display:-webkit-box;display:-moz-box;display:none}details{display:-webkit-box;display:-moz-box;display:block;padding:16px;margin:1em 0;border-radius:4px;-webkit-border-radius:4px;background:var(--color-card);font-size:.9375rem;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease;border:1px solid var(--color-block)}details summary{cursor:pointer;padding:16px;margin:-16px;border-radius:4px;-webkit-border-radius:4px;color:rgba(68,68,68,.7);font-size:.875rem;font-weight:700;position:relative;line-height:normal}details summary>h1,details summary>h2,details summary>h3,details summary>h4,details summary>h5,details summary>h6,details summary>p{display:-webkit-box;display:-moz-box;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%);-webkit-transform:translateY(-50%);-khtml-transform:translateY(-50%);-moz-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-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,.2)}details[open]>summary{border-bottom:1px solid rgba(68,68,68,.2);border-bottom-left-radius:0;border-bottom-right-radius:0}details[open][blue]{border-color:rgba(33,150,243,.3)}details[open][blue]>summary{border-bottom-color:rgba(33,150,243,.3)}details[open][cyan]{border-color:rgba(27,205,252,.3)}details[open][cyan]>summary{border-bottom-color:rgba(27,205,252,.3)}details[open][green]{border-color:rgba(61,197,80,.3)}details[open][green]>summary{border-bottom-color:rgba(61,197,80,.3)}details[open][yellow]{border-color:rgba(255,189,43,.3)}details[open][yellow]>summary{border-bottom-color:rgba(255,189,43,.3)}details[open][red]{border-color:rgba(254,95,88,.3)}details[open][red]>summary{border-bottom-color:rgba(254,95,88,.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>.highlight:first-child,details[open]>div.content>.note:first-child,details[open]>div.content>.tabs:first-child,details[open]>div.content>details:first-child,details[open]>div.content>ol:first-child,details[open]>div.content>p:first-child,details[open]>div.content>ul:first-child{margin-top:0}details[open]>div.content>.highlight:last-child,details[open]>div.content>.note:last-child,details[open]>div.content>.tabs:last-child,details[open]>div.content>details:last-child,details[open]>div.content>ol:last-child,details[open]>div.content>p:last-child,details[open]>div.content>ul:last-child{margin-bottom:0}.md .frame-wrap{position:relative;overflow:hidden;margin:0 auto;max-width:100%;display:flex;display:flex;flex-direction:column;align-items:center}.md .frame-wrap img,.md .frame-wrap video{border-radius:0;-webkit-border-radius:0}.md .frame-wrap .frame{z-index:1;display:-webkit-box;display:-moz-box;display:block;position:absolute;background-size:100%;-webkit-background-size:100%;-moz-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}}.users-wrap{overflow:hidden}.users-wrap .group-header{margin:0 0 1rem}.users-wrap .group-header p{margin:0;font-size:.875rem}.users-wrap .group-header p:first-child{font-size:1.25rem;font-weight:500}.users-wrap .group-body{width:100%;display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;align-items:stretch;margin-bottom:2rem}.users-wrap .friendsjs-wrap{display:-webkit-box;display:-moz-box;display:block}.users-wrap .friendsjs-wrap .loading-wrap{min-height:50px;margin:2rem 0;text-align:center}.users-wrap .user-card{flex-shrink:1;display:flex;display:flex;align-items:stretch;width:12.5%}@media screen and (max-width:980px){.users-wrap .user-card{width:14.28%}}@media screen and (max-width:900px){.users-wrap .user-card{width:16.66%}}@media screen and (max-width:820px){.users-wrap .user-card{width:20%}}@media screen and (max-width:768px){.users-wrap .user-card{width:16.66%}}@media screen and (max-width:500px){.users-wrap .user-card{width:25%}}.users-wrap .user-card .card-link{margin:0;width:100%;color:var(--text-p1);font-size:10px;font-weight:500;display:flex;display:flex;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start;flex-direction:column;align-items:center;text-align:center;line-height:1.2;border-radius:4px;-webkit-border-radius:4px;overflow:hidden;position:relative;padding:1rem .5rem}.users-wrap .user-card .card-link img{-o-object-fit:cover;object-fit:cover;display:-webkit-box;display:-moz-box;display:block;width:48px;height:48px;background:var(--card);border-radius:64px;-webkit-border-radius:64px;margin:0 0 .5rem}.users-wrap .user-card .card-link>img{transition:transform .2s ease-out,box-shadow .2s ease-out;-webkit-transition:transform .2s ease-out,box-shadow .2s ease-out;-khtml-transition:transform .2s ease-out,box-shadow .2s ease-out;-moz-transition:transform .2s ease-out,box-shadow .2s ease-out;-o-transition:transform .2s ease-out,box-shadow .2s ease-out;-ms-transition:transform .2s ease-out,box-shadow .2s ease-out}.users-wrap .user-card .card-link:hover{background:var(--block-hover)}.users-wrap .user-card .card-link:hover img{transform:scale(1.2) rotate(8deg);-webkit-transform:scale(1.2) rotate(8deg);-khtml-transform:scale(1.2) rotate(8deg);-moz-transform:scale(1.2) rotate(8deg);-o-transform:scale(1.2) rotate(8deg);-ms-transform:scale(1.2) rotate(8deg);box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1)}a.ghcard{display:-webkit-box;display:-moz-box;display:inline-block;line-height:0}.md .ghcard-group{column-count:2;-webkit-column-count:2;-moz-column-count:2;column-gap:0;-webkit-column-gap:0;-moz-column-gap:0;margin:0 -8px}.md .ghcard-group .ghcard{margin:8px}.md .img{-o-object-fit:contain;object-fit:contain}img.inline{display:-webkit-box;display:-moz-box;display:inline!important;vertical-align:middle;transform:translateY(-4px);-webkit-transform:translateY(-4px);-khtml-transform:translateY(-4px);-moz-transform:translateY(-4px);-o-transform:translateY(-4px);-ms-transform:translateY(-4px)}.md .tag.link{margin-top:1em;margin-bottom:1em}.md .link-card{margin-right:1em;background:var(--color-block);display:inline-flex;display:inline-flex;align-items:center;cursor:pointer;text-align:center;width:361px;max-width:100%;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1);color:var(--color-p);border-radius:8px;-webkit-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 0 rgba(0,0,0,.1),0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.1),0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(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;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:-webkit-box;display:-moz-box;display:block;position:absolute;border-radius:8px/4;-webkit-border-radius:8px/4;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);-khtml-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-ms-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:700}.md .link-card p.url{flex-shrink:0;color:var(--color-meta);font-size:.8125rem}.md .link-group{display:-webkit-box;display:-moz-box;display:grid;grid-template-columns:1fr 1fr;grid-gap:16px}@media screen and (max-width:850px){.md .link-group{grid-template-columns:1fr}}.md .link-group .tag.link{margin:0}.md .link-group .link-card{width:100%}audio,video{border-radius:4px;-webkit-border-radius:4px;max-width:100%}video{z-index:1;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}video:hover{box-shadow:0 4px 8px 0 rgba(0,0,0,.24),0 8px 16px 0 rgba(0,0,0,.24);-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.24),0 8px 16px 0 rgba(0,0,0,.24)}div.video{line-height:0;text-align:center}div.videos{max-width:calc(100% + 2 * 4px);display:flex;display:flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;-khtml-flex-wrap:wrap;-moz-flex-wrap:wrap;-o-flex-wrap:wrap;-ms-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start;align-items:flex-end;margin:1em -4px}div.videos .video,div.videos iframe{width:100%;margin:4px}div.videos iframe{border-radius:4px;-webkit-border-radius:4px;width:100%;min-height:300px}div.videos.left{justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start}div.videos.center{justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center}div.videos.right{justify-content:flex-end;-webkit-justify-content:flex-end;-khtml-justify-content:flex-end;-moz-justify-content:flex-end;-o-justify-content:flex-end;-ms-justify-content:flex-end}div.videos.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;-webkit-border-radius:4px;font-size:.9375rem;background:var(--color-block);border-left:4px solid #3dd9b6}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 blockquote,div.note img,div.note ol,div.note p,div.note ul{margin-top:.5em;margin-bottom:.5em}div.note .link-card{background:var(--color-card)}div.note::before{position:absolute;top:calc(50% - 24px * .5);left:4px;width:24px;height:24px;text-align:center;font-weight:600;line-height:24px;vertical-align:middle;font-family:'Font Awesome 6 Pro'}div.note::before{color:#3dd9b6;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:#ebfbf7;border-color:#3dd9b6}div.note.info::before{color:#3dd9b6;content:'\f129'}div.note.done,div.note.success{background:#ebf9ed;border-color:#3dc550}div.note.done::before,div.note.success::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:0 0;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:#ebfbf7;border-color:#3dd9b6}div.note.theme::before{color:#3dd9b6}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}.sites-wrap .group-header{margin:0 0 1rem}.sites-wrap .group-header p{margin:0;font-size:.875rem}.sites-wrap .group-header p:first-child{font-size:1.25rem;font-weight:500}.sites-wrap .group-body{width:100%;margin-bottom:2rem}.sites-wrap .sitesjs-wrap{display:-webkit-box;display:-moz-box;display:block}.sites-wrap .sitesjs-wrap .loading-wrap{min-height:50px;margin:2rem 0;text-align:center}.sites-wrap .group-body{display:-webkit-box;display:-moz-box;display:grid;grid-gap:1rem 1rem;grid-template-columns:repeat(auto-fill,calc((100% - 3 * 1rem)/ 4));margin-bottom:2rem}@media screen and (max-width:1024px){.sites-wrap .group-body{grid-template-columns:repeat(auto-fill,calc((100% - 2 * 1rem)/ 3))}}@media screen and (max-width:900px){.sites-wrap .group-body{grid-template-columns:repeat(auto-fill,calc((100% - 1 * 1rem)/ 2))}}@media screen and (max-width:768px){.sites-wrap .group-body{grid-template-columns:repeat(auto-fill,calc((100% - 2 * 1rem)/ 3))}}@media screen and (max-width:500px){.sites-wrap .group-body{grid-template-columns:repeat(auto-fill,calc((100% - 1 * 1rem)/ 2))}}.sites-wrap .group-body .site-card .card-link{width:100%;display:flex;display:flex;flex-direction:column}.sites-wrap .group-body .site-card .card-link>img{width:100%;height:120px;border-radius:4px;-webkit-border-radius:4px;-o-object-fit:cover;object-fit:cover;box-shadow:0 1px 2px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.2)}@media screen and (max-width:1024px){.sites-wrap .group-body .site-card .card-link>img{height:150px}}@media screen and (max-width:900px){.sites-wrap .group-body .site-card .card-link>img{height:180px}}@media screen and (max-width:768px){.sites-wrap .group-body .site-card .card-link>img{height:150px}}.sites-wrap .group-body .site-card .card-link .info{margin-top:.5rem;line-height:1.2}.sites-wrap .group-body .site-card .card-link .info>img{width:28px;height:28px;border-radius:28px;-webkit-border-radius:28px;float:left;margin-right:8px;margin-top:2px}.sites-wrap .group-body .site-card .card-link .info span{display:-webkit-box;display:-moz-box;display:block}.sites-wrap .group-body .site-card .card-link .info .title{font-weight:500;color:var(--text-p1);font-size:.875rem;margin-top:1px;display:-webkit-box;display:-moz-box;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:1}.sites-wrap .group-body .site-card .card-link .info .desc{font-size:10px;margin-top:2px;word-wrap:break-word;color:var(--text-p3);display:-webkit-box;display:-moz-box;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:2}.sites-wrap .site-card .card-link>img{transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.sites-wrap .site-card .card-link:hover>img{box-shadow:0 4px 8px 0 rgba(0,0,0,.1),0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.1),0 2px 4px 0 rgba(0,0,0,.1),0 4px 8px 0 rgba(0,0,0,.1),0 8px 16px 0 rgba(0,0,0,.1)}p.p.subtitle{font-weight:700;color:#3eb399;font-size:1.25rem!important;padding-top:1.5rem}p.p.subtitle:first-child{padding-top:1rem}p.p.logo,span.p.logo{font-family:"Varela Round","PingFang SC","Microsoft YaHei",Helvetica,Arial,Helvetica,monospace}p.p.code,span.p.code{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace,monospace,courier,sans-serif}p.p.left,span.p.left{display:-webkit-box;display:-moz-box;display:block;text-align:left}p.p.center,span.p.center{display:-webkit-box;display:-moz-box;display:block;text-align:center}p.p.right,span.p.right{display:-webkit-box;display:-moz-box;display:block;text-align:right}p.p.small,span.p.small{font-size:.875rem}p.p.large,span.p.large{font-size:2.5rem;line-height:1.4}p.p.huge,span.p.huge{font-size:4rem;line-height:1.4}p.p.ultra,span.p.ultra{font-size:6rem;line-height:1.4}p.p.huge,p.p.large,p.p.small,p.p.ultra,span.p.huge,span.p.large,span.p.small,span.p.ultra{margin:0;padding:0}p.p.bold,span.p.bold{font-weight:700}p.p.h1,p.p.h2,span.p.h1,span.p.h2{padding-bottom:.2rem;font-weight:500}p.p.h1,span.p.h1{font-size:1.5rem;color:var(--color-h1);padding-top:2em}p.p.h2,span.p.h2{font-size:1.5rem;color:var(--color-h2);padding-top:2em;border-bottom:1px solid rgba(68,68,68,.1)}p.p.h3,span.p.h3{font-size:1.25rem;color:var(--color-h3);padding-top:2em}p.p.h4,span.p.h4{font-size:1.125rem;color:var(--color-h4);padding-top:2em}p.p.h5,span.p.h5{font-size:1rem;color:var(--color-h5);padding-top:1.5em}p.p.red,span.p.red{color:#fe5f58}p.p.yellow,span.p.yellow{color:#ffbd2b}p.p.green,span.p.green{color:#3dc550}p.p.cyan,span.p.cyan{color:#1bcdfc}p.p.blue,span.p.blue{color:#2196f3}p.p.purple,span.p.purple{color:#9c27b0}p.p.gray,span.p.gray{color:#999}.swiper-container{width:100%;border-radius:4px;-webkit-border-radius:4px;--gap-p:2rem}.swiper-container:not(.swiper-container-initialized){display:-webkit-box;display:-moz-box;display:none}div.swiper-slide{text-align:center;display:flex;display:flex;align-self:center;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;align-items:center;width:50%}div.swiper-slide img{border-radius:4px;-webkit-border-radius:4px}.swiper-container[width=max] div.swiper-slide{width:100%}.swiper-container[width=min] div.swiper-slide{width:25%}.swiper-button-next,.swiper-button-prev{padding:1rem .5rem;margin-top:-2rem!important;border-radius:4px;-webkit-border-radius:4px;background:rgba(255,255,255,.25);transition:background .2s ease-out;-webkit-transition:background .2s ease-out;-khtml-transition:background .2s ease-out;-moz-transition:background .2s ease-out;-o-transition:background .2s ease-out;-ms-transition:background .2s ease-out;--swiper-theme-color:#000!important}.swiper-button-next:after,.swiper-button-prev:after{font-size:1.2rem!important;font-weight:700!important}.swiper-button-next:hover,.swiper-button-prev:hover{background:#fff!important;--swiper-theme-color:#ff5722!important}.md .table{overflow:auto;margin-top:1em;margin-bottom:1em}.md .table table{display:-webkit-box;display:-moz-box;display:table;width:100%}div.tabs{display:-webkit-box;display:-moz-box;display:block;position:relative;margin-top:1em;margin-bottom:1em;border-radius:4px;-webkit-border-radius:4px;background:var(--color-card);border:1px solid rgba(68,68,68,.2);font-size:.9375rem}div.tabs .highlight,div.tabs details,div.tabs div.note,div.tabs ol,div.tabs p,div.tabs ul{margin-top:1em;margin-bottom:1em}div.tabs ul.nav-tabs{display:flex;display:flex;overflow-x:auto;white-space:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start;-khtml-justify-content:flex-start;-moz-justify-content:flex-start;-o-justify-content:flex-start;-ms-justify-content:flex-start;margin:0!important;padding:8px 8px 0 8px;background:var(--color-block);border-radius:4px 4px 0 0;-webkit-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:-webkit-box;display:-moz-box;display:block;cursor:pointer;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;padding:8px;text-align:center;font-size:.875rem;line-height:inherit;font-weight:700;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,.2);border-bottom:1px solid var(--color-card)}div.tabs .tab-content{border-top:1px solid rgba(68,68,68,.2);margin-top:-1px}div.tabs .tab-content .tab-pane{padding:16px}div.tabs .tab-content .tab-pane:not(.active){display:-webkit-box;display:-moz-box;display:none}div.tabs .tab-content .tab-pane.active{display:-webkit-box;display:-moz-box;display:block}div.tabs .tab-content .tab-pane>.highlight:first-child,div.tabs .tab-content .tab-pane>.note:first-child,div.tabs .tab-content .tab-pane>.tabs:first-child,div.tabs .tab-content .tab-pane>ol:first-child,div.tabs .tab-content .tab-pane>p:first-child,div.tabs .tab-content .tab-pane>ul:first-child{margin-top:0}div.tabs .tab-content .tab-pane>.highlight:last-child,div.tabs .tab-content .tab-pane>.note:last-child,div.tabs .tab-content .tab-pane>.tabs:last-child,div.tabs .tab-content .tab-pane>ol:last-child,div.tabs .tab-content .tab-pane>p:last-child,div.tabs .tab-content .tab-pane>ul:last-child{margin-bottom:0}.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;-webkit-border-radius:2px;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.article psw:hover{color:var(--color-p);background:0 0}.article kbd{border-radius:4px;-webkit-border-radius:4px;border:1px solid #d2d2d2;border-bottom-width:2px;background:#fafafa;padding-left:4px;padding-right:4px}div.timenode{position:relative}div.timenode:after,div.timenode:before{content:'';z-index:1;position:absolute;background:rgba(61,217,182,.5);width:2px;left:7px}div.timenode:before{top:0;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 .body,div.timenode .meta{max-width:calc(100% - 24px)}div.timenode .meta{position:relative;color:var(--color-meta);font-size:.875rem;line-height:32px;height:32px}div.timenode .meta:after,div.timenode .meta:before{content:'';position:absolute;top:8px;z-index:2}div.timenode .meta:before{background:rgba(61,217,182,.5);width:16px;height:16px;border-radius:8px;-webkit-border-radius:8px}div.timenode .meta:after{background:#3dd9b6;margin-left:2px;margin-top:2px;width:12px;height:12px;border-radius:6px;-webkit-border-radius:6px;transform:scale(.5);-webkit-transform:scale(.5);-khtml-transform:scale(.5);-moz-transform:scale(.5);-o-transform:scale(.5);-ms-transform:scale(.5);transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}div.timenode .meta p{font-weight:700;margin:0 0 0 24px}div.timenode .body{margin:4px 0 16px 24px;padding:16px;border-radius:8px;-webkit-border-radius:8px;background:var(--color-block);display:-webkit-box;display:-moz-box;display:inline-block}div.timenode .body:empty{display:-webkit-box;display:-moz-box;display:none}div.timenode .body>:first-child{margin-top:.25em}div.timenode .body>:last-child{margin-bottom:.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,.5)}div.timenode:hover .meta:after{background:#ff5722;transform:scale(1);-webkit-transform:scale(1);-khtml-transform:scale(1);-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1)}.article mjx-container{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace,monospace,courier,sans-serif;padding:16px 8px;border-radius:4px;-webkit-border-radius:4px;min-width:0!important}.article .has-jax,.article mjx-container[jax=CHTML][display=true]{overflow:auto hidden}.article mjx-container+br{display:-webkit-box;display:-moz-box;display:none}.fa-duotone.red,.fa-light.red,.fa-regular.red,.fa-solid.red,.fa-thin.red,.fa.red,.fad.red,.fal.red,.far.red,.fas.red,.iziToast>.iziToast-body .iziToast-icon.red{color:#f44336}.fa-duotone.pink,.fa-light.pink,.fa-regular.pink,.fa-solid.pink,.fa-thin.pink,.fa.pink,.fad.pink,.fal.pink,.far.pink,.fas.pink,.iziToast>.iziToast-body .iziToast-icon.pink{color:#e91e63}.fa-duotone.purple,.fa-light.purple,.fa-regular.purple,.fa-solid.purple,.fa-thin.purple,.fa.purple,.fad.purple,.fal.purple,.far.purple,.fas.purple,.iziToast>.iziToast-body .iziToast-icon.purple{color:#9c27b0}.fa-duotone.indigo,.fa-light.indigo,.fa-regular.indigo,.fa-solid.indigo,.fa-thin.indigo,.fa.indigo,.fad.indigo,.fal.indigo,.far.indigo,.fas.indigo,.iziToast>.iziToast-body .iziToast-icon.indigo{color:#3f51b5}.fa-duotone.light-blue,.fa-light.light-blue,.fa-regular.light-blue,.fa-solid.light-blue,.fa-thin.light-blue,.fa.light-blue,.fad.light-blue,.fal.light-blue,.far.light-blue,.fas.light-blue,.iziToast>.iziToast-body .iziToast-icon.light-blue{color:#4ba7ee}.fa-duotone.deep-blue,.fa-light.deep-blue,.fa-regular.deep-blue,.fa-solid.deep-blue,.fa-thin.deep-blue,.fa.deep-blue,.fad.deep-blue,.fal.deep-blue,.far.deep-blue,.fas.deep-blue,.iziToast>.iziToast-body .iziToast-icon.deep-blue{color:#3367d6}.fa-duotone.teal,.fa-light.teal,.fa-regular.teal,.fa-solid.teal,.fa-thin.teal,.fa.teal,.fad.teal,.fal.teal,.far.teal,.fas.teal,.iziToast>.iziToast-body .iziToast-icon.teal{color:#009688}.fa-duotone.light-green,.fa-light.light-green,.fa-regular.light-green,.fa-solid.light-green,.fa-thin.light-green,.fa.light-green,.fad.light-green,.fal.light-green,.far.light-green,.fas.light-green,.iziToast>.iziToast-body .iziToast-icon.light-green{color:#8bc34a}.fa-duotone.orange,.fa-light.orange,.fa-regular.orange,.fa-solid.orange,.fa-thin.orange,.fa.orange,.fad.orange,.fal.orange,.far.orange,.fas.orange,.iziToast>.iziToast-body .iziToast-icon.orange{color:#ff9800}.fa-duotone.deep-orange,.fa-light.deep-orange,.fa-regular.deep-orange,.fa-solid.deep-orange,.fa-thin.deep-orange,.fa.deep-orange,.fad.deep-orange,.fal.deep-orange,.far.deep-orange,.fas.deep-orange,.iziToast>.iziToast-body .iziToast-icon.deep-orange{color:#ff5722}.fa-duotone.brown,.fa-light.brown,.fa-regular.brown,.fa-solid.brown,.fa-thin.brown,.fa.brown,.fad.brown,.fal.brown,.far.brown,.fas.brown,.iziToast>.iziToast-body .iziToast-icon.brown{color:#795548}.fa-duotone.blue-grey,.fa-light.blue-grey,.fa-regular.blue-grey,.fa-solid.blue-grey,.fa-thin.blue-grey,.fa.blue-grey,.fad.blue-grey,.fal.blue-grey,.far.blue-grey,.fas.blue-grey,.iziToast>.iziToast-body .iziToast-icon.blue-grey{color:#607d8b}.fa-duotone.yellow,.fa-light.yellow,.fa-regular.yellow,.fa-solid.yellow,.fa-thin.yellow,.fa.yellow,.fad.yellow,.fal.yellow,.far.yellow,.fas.yellow,.iziToast>.iziToast-body .iziToast-icon.yellow{color:#fcec60}.fa-duotone.TURQUOISE,.fa-light.TURQUOISE,.fa-regular.TURQUOISE,.fa-solid.TURQUOISE,.fa-thin.TURQUOISE,.fa.TURQUOISE,.fad.TURQUOISE,.fal.TURQUOISE,.far.TURQUOISE,.fas.TURQUOISE,.iziToast>.iziToast-body .iziToast-icon.TURQUOISE{color:#1abc9c}.fa-duotone.EMERALD,.fa-light.EMERALD,.fa-regular.EMERALD,.fa-solid.EMERALD,.fa-thin.EMERALD,.fa.EMERALD,.fad.EMERALD,.fal.EMERALD,.far.EMERALD,.fas.EMERALD,.iziToast>.iziToast-body .iziToast-icon.EMERALD{color:#2ecc71}.fa-duotone.PETERRIVE,.fa-light.PETERRIVE,.fa-regular.PETERRIVE,.fa-solid.PETERRIVE,.fa-thin.PETERRIVE,.fa.PETERRIVE,.fad.PETERRIVE,.fal.PETERRIVE,.far.PETERRIVE,.fas.PETERRIVE,.iziToast>.iziToast-body .iziToast-icon.PETERRIVE{color:#3498db}.fa-duotone.AMETHYST,.fa-light.AMETHYST,.fa-regular.AMETHYST,.fa-solid.AMETHYST,.fa-thin.AMETHYST,.fa.AMETHYST,.fad.AMETHYST,.fal.AMETHYST,.far.AMETHYST,.fas.AMETHYST,.iziToast>.iziToast-body .iziToast-icon.AMETHYST{color:#9b59b6}.fa-duotone.WETASPHALT,.fa-light.WETASPHALT,.fa-regular.WETASPHALT,.fa-solid.WETASPHALT,.fa-thin.WETASPHALT,.fa.WETASPHALT,.fad.WETASPHALT,.fal.WETASPHALT,.far.WETASPHALT,.fas.WETASPHALT,.iziToast>.iziToast-body .iziToast-icon.WETASPHALT{color:#34495e}.fa-duotone.GREENSEA,.fa-light.GREENSEA,.fa-regular.GREENSEA,.fa-solid.GREENSEA,.fa-thin.GREENSEA,.fa.GREENSEA,.fad.GREENSEA,.fal.GREENSEA,.far.GREENSEA,.fas.GREENSEA,.iziToast>.iziToast-body .iziToast-icon.GREENSEA{color:#16a085}.fa-duotone.NEPHRITIS,.fa-light.NEPHRITIS,.fa-regular.NEPHRITIS,.fa-solid.NEPHRITIS,.fa-thin.NEPHRITIS,.fa.NEPHRITIS,.fad.NEPHRITIS,.fal.NEPHRITIS,.far.NEPHRITIS,.fas.NEPHRITIS,.iziToast>.iziToast-body .iziToast-icon.NEPHRITIS{color:#27ae60}.fa-duotone.BELIZEHOLE,.fa-light.BELIZEHOLE,.fa-regular.BELIZEHOLE,.fa-solid.BELIZEHOLE,.fa-thin.BELIZEHOLE,.fa.BELIZEHOLE,.fad.BELIZEHOLE,.fal.BELIZEHOLE,.far.BELIZEHOLE,.fas.BELIZEHOLE,.iziToast>.iziToast-body .iziToast-icon.BELIZEHOLE{color:#2980b9}.fa-duotone.WISTERIA,.fa-light.WISTERIA,.fa-regular.WISTERIA,.fa-solid.WISTERIA,.fa-thin.WISTERIA,.fa.WISTERIA,.fad.WISTERIA,.fal.WISTERIA,.far.WISTERIA,.fas.WISTERIA,.iziToast>.iziToast-body .iziToast-icon.WISTERIA{color:#8e44ad}.fa-duotone.MIDNIGHTBLUE,.fa-light.MIDNIGHTBLUE,.fa-regular.MIDNIGHTBLUE,.fa-solid.MIDNIGHTBLUE,.fa-thin.MIDNIGHTBLUE,.fa.MIDNIGHTBLUE,.fad.MIDNIGHTBLUE,.fal.MIDNIGHTBLUE,.far.MIDNIGHTBLUE,.fas.MIDNIGHTBLUE,.iziToast>.iziToast-body .iziToast-icon.MIDNIGHTBLUE{color:#2c3e50}.fa-duotone.SUNFLOWER,.fa-light.SUNFLOWER,.fa-regular.SUNFLOWER,.fa-solid.SUNFLOWER,.fa-thin.SUNFLOWER,.fa.SUNFLOWER,.fad.SUNFLOWER,.fal.SUNFLOWER,.far.SUNFLOWER,.fas.SUNFLOWER,.iziToast>.iziToast-body .iziToast-icon.SUNFLOWER{color:#f1c40f}.fa-duotone.CARROT,.fa-light.CARROT,.fa-regular.CARROT,.fa-solid.CARROT,.fa-thin.CARROT,.fa.CARROT,.fad.CARROT,.fal.CARROT,.far.CARROT,.fas.CARROT,.iziToast>.iziToast-body .iziToast-icon.CARROT{color:#e67e22}.fa-duotone.ALIZARIN,.fa-light.ALIZARIN,.fa-regular.ALIZARIN,.fa-solid.ALIZARIN,.fa-thin.ALIZARIN,.fa.ALIZARIN,.fad.ALIZARIN,.fal.ALIZARIN,.far.ALIZARIN,.fas.ALIZARIN,.iziToast>.iziToast-body .iziToast-icon.ALIZARIN{color:#e74c3c}.fa-duotone.CLOUDS,.fa-light.CLOUDS,.fa-regular.CLOUDS,.fa-solid.CLOUDS,.fa-thin.CLOUDS,.fa.CLOUDS,.fad.CLOUDS,.fal.CLOUDS,.far.CLOUDS,.fas.CLOUDS,.iziToast>.iziToast-body .iziToast-icon.CLOUDS{color:#ecf0f1}.fa-duotone.CONCRETE,.fa-light.CONCRETE,.fa-regular.CONCRETE,.fa-solid.CONCRETE,.fa-thin.CONCRETE,.fa.CONCRETE,.fad.CONCRETE,.fal.CONCRETE,.far.CONCRETE,.fas.CONCRETE,.iziToast>.iziToast-body .iziToast-icon.CONCRETE{color:#95a5a6}.fa-duotone.ORANGE,.fa-light.ORANGE,.fa-regular.ORANGE,.fa-solid.ORANGE,.fa-thin.ORANGE,.fa.ORANGE,.fad.ORANGE,.fal.ORANGE,.far.ORANGE,.fas.ORANGE,.iziToast>.iziToast-body .iziToast-icon.ORANGE{color:#f39c12}.fa-duotone.PUMPKIN,.fa-light.PUMPKIN,.fa-regular.PUMPKIN,.fa-solid.PUMPKIN,.fa-thin.PUMPKIN,.fa.PUMPKIN,.fad.PUMPKIN,.fal.PUMPKIN,.far.PUMPKIN,.fas.PUMPKIN,.iziToast>.iziToast-body .iziToast-icon.PUMPKIN{color:#d35400}.fa-duotone.POMEGRANATE,.fa-light.POMEGRANATE,.fa-regular.POMEGRANATE,.fa-solid.POMEGRANATE,.fa-thin.POMEGRANATE,.fa.POMEGRANATE,.fad.POMEGRANATE,.fal.POMEGRANATE,.far.POMEGRANATE,.fas.POMEGRANATE,.iziToast>.iziToast-body .iziToast-icon.POMEGRANATE{color:#c0392b}.fa-duotone.SILVER,.fa-light.SILVER,.fa-regular.SILVER,.fa-solid.SILVER,.fa-thin.SILVER,.fa.SILVER,.fad.SILVER,.fal.SILVER,.far.SILVER,.fas.SILVER,.iziToast>.iziToast-body .iziToast-icon.SILVER{color:#bdc3c7}.fa-duotone.ASBESTOS,.fa-light.ASBESTOS,.fa-regular.ASBESTOS,.fa-solid.ASBESTOS,.fa-thin.ASBESTOS,.fa.ASBESTOS,.fad.ASBESTOS,.fal.ASBESTOS,.far.ASBESTOS,.fas.ASBESTOS,.iziToast>.iziToast-body .iziToast-icon.ASBESTOS{color:#7f8c8d}.code-toolbar{position:relative}.btn-copy{z-index:1;display:-webkit-box;display:-moz-box;display:inline-block;cursor:pointer;border:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-appearance:none;font-family:Menlo,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace,monospace,courier,sans-serif;font-size:11px;font-weight:700;padding:4px 8px;color:var(--color-meta);background:var(--color-card);border-radius:3px;-webkit-border-radius:3px;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.1);position:absolute;top:5px;right:5px;opacity:0;-webkit-opacity:0;-moz-opacity:0;transition:all .28s ease;-webkit-transition:all .28s ease;-khtml-transition:all .28s ease;-moz-transition:all .28s ease;-o-transition:all .28s ease;-ms-transition:all .28s ease}.btn-copy>i{margin-right:4px}.btn-copy:hover{color:#ff5722;background:#ffeee8}.code-toolbar:hover .btn-copy{opacity:1;-webkit-opacity:1;-moz-opacity:1}pre:before{position:absolute;top:0;right:0;color:var(--color-meta);font-size:13px;padding:4px 8px}pre.language-md:before,pre.markdown:before{content:"md"}pre.language-yaml:before{content:"YAML"}pre.language-json:before{content:"JSON"}pre.language-html:before{content:"HTML"}pre.language-javascript:before,pre.language-js:before{content:"JS"}pre.language-css:before{content:"CSS"}pre.language-less:before{content:"Less"}pre.language-stylus:before{content:"Stylus"}pre.language-bash:before{content:"bash"}pre.language-shell:before{content:"shell"}pre.language-sh:before{content:"sh"}pre.language-ini:before{content:"ini"}pre.language-c:before{content:"C"}pre.language-cpp:before{content:"C++"}pre.language-objc:before,pre.language-objectivec:before{content:"Objective-C"}pre.language-swift:before{content:"Swift"}pre.language-java:before{content:"Java"}pre.language-python:before{content:"Python"}pre.language-php:before{content:"PHP"}pre.language-rust:before{content:"Rust"}pre.language-sql:before{content:"SQL"}pre.language-ruby:before{content:"Ruby"}pre.language-makefile:before{content:"Makefile"}pre.language-go:before{content:"Go"}pre.language-typescript:before{content:"TypeScript"}pre{position:relative;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}pre::-webkit-scrollbar{height:4px;width:4px}pre::-webkit-scrollbar-track-piece{background:0 0}pre::-webkit-scrollbar-thumb{background:#3dd9b6;cursor:pointer;border-radius:2px;-webkit-border-radius:2px}pre::-webkit-scrollbar-thumb:hover{background:#ff5722}.iziToast-texts{max-width:300px!important;min-width:200px!important}@media screen and (max-width:500px){.iziToast-texts{max-width:unset!important;min-width:unset!important}}.iziToast-title{margin-bottom:6px!important;font-size:1rem!important}.iziToast-message{word-break:break-all!important}@media screen and (max-width:500px){.l_header .list-v .aplayer,.l_header .list-v .aplayer-pic{border-radius:4px;-webkit-border-radius:4px;width:64px;height:64px}}.aplayer-container{display:flex;display:flex;justify-content:center;-webkit-justify-content:center;-khtml-justify-content:center;-moz-justify-content:center;-o-justify-content:center;-ms-justify-content:center;min-height:100px}.aplayer-container meting-js{max-width:100%}.aplayer{max-width:500px;border-radius:4px;-webkit-border-radius:4px;color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Menlo,Monaco,monospace,sans-serif}.aplayer .aplayer-list{text-align:left}@media screen and (max-width:500px){.aplayer{border-radius:8px;-webkit-border-radius:8px}}.l_header .aplayer-volume-wrap{display:-webkit-box;display:-moz-box;display:none!important}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body{left:-66px!important}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body:hover{left:0!important}@media (prefers-color-scheme:dark){:root{--color-mode:'dark'}:root:not([color-scheme]){--block-hover:#1c1c1c;--text-p1:#fff;--text-p3:#777;--card:#fff}:root:not([color-scheme]) .lazyload,:root:not([color-scheme]) fa,:root:not([color-scheme]) fa-duotone,:root:not([color-scheme]) fa-light,:root:not([color-scheme]) fa-regular,:root:not([color-scheme]) fa-solid,:root:not([color-scheme]) fa-thin,:root:not([color-scheme]) fad,:root:not([color-scheme]) fal,:root:not([color-scheme]) img,:root:not([color-scheme]) svg.iconfont{filter:brightness(70%)!important}:root:not([color-scheme]) .widget.blogger .content .social-wrapper a.social:hover{background:var(--color-card)}:root:not([color-scheme]) .widget>.content ul.entry a .badge,:root:not([color-scheme]) .widget>.content ul.popular-posts a .badge{color:unset!important}:root:not([color-scheme]) .content{color:var(--color-p)}:root:not([color-scheme]) .widget>.content a{color:var(--color-p)!important}:root:not([color-scheme]) .widget>.content a:hover{color:var(--color-list-hl)!important}:root:not([color-scheme]) .note{background:var(--color-block)!important}:root:not([color-scheme]) div.tabs ul.nav-tabs li.tab.active a{color:var(--color-p);background:var(--color-card)}:root:not([color-scheme]) kbd{background:var(--color-block)!important}:root:not([color-scheme]) .cover-wrapper.dock .menu .list-h a:hover,:root:not([color-scheme]) .cover-wrapper.featured .menu .list-h a:hover,:root:not([color-scheme]) .cover-wrapper.focus .menu .list-h a:hover{color:var(--color-text)!important}:root:not([color-scheme]) :not(.highlight)>table tr{background-color:var(--color-card)}:root:not([color-scheme]) :not(.highlight)>table th{background:var(--color-site-bg)}:root:not([color-scheme]) :not(.highlight) table td,:root:not([color-scheme]) :not(.highlight) table th{border-color:var(--color-site-bg)}:root:not([color-scheme]) :not(.highlight)>table tr:hover{background:var(--color-codeblock)}:root:not([color-scheme]) .timenode .highlight{border-color:var(--color-site-bg)!important}:root:not([color-scheme]) blockquote p{color:var(--color-p)}:root:not([color-scheme]) #archive-page .archive .all-tags ul li span{color:var(--color-text);background:#6f6f72}:root:not([color-scheme]) .btn-copy:hover{background:var(--color-site-body)}:root:not([color-scheme]) .aplayer{background:var(--color-site-bg)}:root:not([color-scheme]) .aplayer .aplayer-list ol li:hover{background:rgba(61,217,182,.2)}:root:not([color-scheme]) .aplayer .aplayer-list ol li.aplayer-list-light{background:var(--color-block)}:root:not([color-scheme]) .aplayer-info{background:var(--color-site-bg)!important}:root:not([color-scheme]) .aplayer .aplayer-lrc:before{background:linear-gradient(180deg,#282c34 0,rgba(255,255,255,0))}:root:not([color-scheme]) .aplayer .aplayer-lrc:after{background:linear-gradient(180deg,rgba(0,0,0,0) 0,rgba(33,33,33,.8))}:root:not([color-scheme]) .aplayer-pic{filter:brightness(70%)}:root:not([color-scheme]) .aplayer .aplayer-list ol li{border-top:1px solid var(--color-card)}:root:not([color-scheme]) .aplayer.aplayer-withlist .aplayer-info{border-bottom:1px solid var(--color-block)}:root:not([color-scheme]) .aplayer .aplayer-notice{background-color:var(--color-site-bg)!important}}[color-scheme=dark]{--block-hover:#1c1c1c;--text-p1:#fff;--text-p3:#777;--card:#fff}[color-scheme=dark] .lazyload,[color-scheme=dark] fa,[color-scheme=dark] fa-duotone,[color-scheme=dark] fa-light,[color-scheme=dark] fa-regular,[color-scheme=dark] fa-solid,[color-scheme=dark] fa-thin,[color-scheme=dark] fad,[color-scheme=dark] fal,[color-scheme=dark] img,[color-scheme=dark] svg.iconfont{filter:brightness(70%)!important}[color-scheme=dark] .widget.blogger .content .social-wrapper a.social:hover{background:var(--color-card)}[color-scheme=dark] .widget>.content ul.entry a .badge,[color-scheme=dark] .widget>.content ul.popular-posts a .badge{color:unset!important}[color-scheme=dark] .content{color:var(--color-p)}[color-scheme=dark] .widget>.content a{color:var(--color-p)!important}[color-scheme=dark] .widget>.content a:hover{color:var(--color-list-hl)!important}[color-scheme=dark] .note{background:var(--color-block)!important}[color-scheme=dark] div.tabs ul.nav-tabs li.tab.active a{color:var(--color-p);background:var(--color-card)}[color-scheme=dark] kbd{background:var(--color-block)!important}[color-scheme=dark] .cover-wrapper.dock .menu .list-h a:hover,[color-scheme=dark] .cover-wrapper.featured .menu .list-h a:hover,[color-scheme=dark] .cover-wrapper.focus .menu .list-h a:hover{color:var(--color-text)!important}[color-scheme=dark] :not(.highlight)>table tr{background-color:var(--color-card)}[color-scheme=dark] :not(.highlight)>table th{background:var(--color-site-bg)}[color-scheme=dark] :not(.highlight) table td,[color-scheme=dark] :not(.highlight) table th{border-color:var(--color-site-bg)}[color-scheme=dark] :not(.highlight)>table tr:hover{background:var(--color-codeblock)}[color-scheme=dark] .timenode .highlight{border-color:var(--color-site-bg)!important}[color-scheme=dark] blockquote p{color:var(--color-p)}[color-scheme=dark] #archive-page .archive .all-tags ul li span{color:var(--color-text);background:#6f6f72}[color-scheme=dark] .btn-copy:hover{background:var(--color-site-body)}[color-scheme=dark] .aplayer{background:var(--color-site-bg)}[color-scheme=dark] .aplayer .aplayer-list ol li:hover{background:rgba(61,217,182,.2)}[color-scheme=dark] .aplayer .aplayer-list ol li.aplayer-list-light{background:var(--color-block)}[color-scheme=dark] .aplayer-info{background:var(--color-site-bg)!important}[color-scheme=dark] .aplayer .aplayer-lrc:before{background:linear-gradient(180deg,#282c34 0,rgba(255,255,255,0))}[color-scheme=dark] .aplayer .aplayer-lrc:after{background:linear-gradient(180deg,rgba(0,0,0,0) 0,rgba(33,33,33,.8))}[color-scheme=dark] .aplayer-pic{filter:brightness(70%)}[color-scheme=dark] .aplayer .aplayer-list ol li{border-top:1px solid var(--color-card)}[color-scheme=dark] .aplayer.aplayer-withlist .aplayer-info{border-bottom:1px solid var(--color-block)}[color-scheme=dark] .aplayer .aplayer-notice{background-color:var(--color-site-bg)!important} +/*# sourceMappingURL=../maps/css/style.css.map */ diff --git a/demo/test-1/index.html b/demo/test-1/index.html new file mode 100644 index 0000000000..d409cbe9dc --- /dev/null +++ b/demo/test-1/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Volantis

Test Site For Development

Lorem ipsum dolor sit amet1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa3

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa4

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet3

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet4

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet5

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet6

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet7

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet8

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet9

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa2

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-10/index.html b/demo/test-10/index.html new file mode 100644 index 0000000000..76ed883be4 --- /dev/null +++ b/demo/test-10/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-11/index.html b/demo/test-11/index.html new file mode 100644 index 0000000000..4c307f6c62 --- /dev/null +++ b/demo/test-11/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-12/index.html b/demo/test-12/index.html new file mode 100644 index 0000000000..4b95992353 --- /dev/null +++ b/demo/test-12/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-13/index.html b/demo/test-13/index.html new file mode 100644 index 0000000000..24d7b2792f --- /dev/null +++ b/demo/test-13/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-14/index.html b/demo/test-14/index.html new file mode 100644 index 0000000000..9883d11e3f --- /dev/null +++ b/demo/test-14/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-15/index.html b/demo/test-15/index.html new file mode 100644 index 0000000000..3b7637e512 --- /dev/null +++ b/demo/test-15/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-2/index.html b/demo/test-2/index.html new file mode 100644 index 0000000000..8eb0189c13 --- /dev/null +++ b/demo/test-2/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-3/index.html b/demo/test-3/index.html new file mode 100644 index 0000000000..06d5b4ff77 --- /dev/null +++ b/demo/test-3/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-4/index.html b/demo/test-4/index.html new file mode 100644 index 0000000000..443c02d52e --- /dev/null +++ b/demo/test-4/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-5/index.html b/demo/test-5/index.html new file mode 100644 index 0000000000..19ef439db0 --- /dev/null +++ b/demo/test-5/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-6/index.html b/demo/test-6/index.html new file mode 100644 index 0000000000..4837735903 --- /dev/null +++ b/demo/test-6/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-7/index.html b/demo/test-7/index.html new file mode 100644 index 0000000000..08dacf0729 --- /dev/null +++ b/demo/test-7/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-8/index.html b/demo/test-8/index.html new file mode 100644 index 0000000000..52854628cf --- /dev/null +++ b/demo/test-8/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/demo/test-9/index.html b/demo/test-9/index.html new file mode 100644 index 0000000000..9d459ef596 --- /dev/null +++ b/demo/test-9/index.html @@ -0,0 +1,4 @@ +Lorem ipsum dolor sit amet - Volantis

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

tempora ipsa excepturi culpa

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 0000000000..0146cd7a3a --- /dev/null +++ b/examples/index.html @@ -0,0 +1,39 @@ +Sample blog - Volantis
Sample Blog

Team member's blog

Who uses Volantis




how,to,add,your,own,blog,link

Step 1: Create a new Issue Fill in and submit according to the format

{
"title": "",
"description": "",
"screenshot": "",
"url": "",
"avatar": "",
"version": "版本:^4.0"
}

In order to improve the image loading speed, it is recommended to optimize the image size:

  1. Open compressed image to upload your own screenshot, adjust the height of the image to 360px and download it.
  2. Upload the compressed picture to 去不图床 and use the picture link as the screenshot link.

Step 2: Refresh

Come back and refresh to take effect.

how to update my blog link

  • If the issue is created by yourself, you can modify it yourself.
  • If it was created by the administrator, please create a new one by yourself, and then ask the administrator to delete the old one.

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/faqs/index.html b/faqs/index.html new file mode 100644 index 0000000000..c1ac9ab643 --- /dev/null +++ b/faqs/index.html @@ -0,0 +1,10 @@ +FAQ - Volantis

Generally speaking, a brand new project using the default configuration isnormal without failure. If it is not available or the effect is quite different from the example, you can use the official Hexo blog for unit testing to apply this topic to check whether the style is normal, and compare the _config.yml file to troubleshoot problems.

Hexo official unit test project: https://github.com/hexojs/hexo-theme-unit-test


feedback issues to developers

How to update the theme

When using themes, try to fork the theme to your GitHub, then modify and use it. The advantage of this is that when the theme undergoes an important update, you can pull and merge the code as needed, so that your DIY theme can get BUG fixes or new features through the update.

If you don’t understand, please search for keywords yourself: fork update

practical tips

All the configuration that needs to be written in the theme configuration file can be written in the theme_config: of the site configuration file, after Hexo 5.0, it can also be written in the file _config.volantis.yml, see details Hexo official documents:

You can also directly view the wording of the site configuration file in the source code of this site: _config.volantis.yml

Unable to run local preview successfully

  • There may be no installation dependencies. Please follow the steps on the "Start" page to install and install the required dependencies.
  • If some third-party services are enabled, please check whether the installation of plug-ins is required in the documentation.
  • If the error message has lastIndex, you can try to find highlight in the blog root directory configuration file and set ʻauto_detecttofalse`.

Theme configuration modification does not take effect

Please confirm whether the document requires modification to the configuration file blog/_config.yml of the blog home directory or the theme configuration file blog/_config.volantis.yml.

Theme style modification does not take effect

If the cdn service is enabled in the theme configuration file, then the modification of the local style will not take effect, and the cdn service needs to be disabled.

The modification did not take effect

Requires hexo clean and then restarts hexo s

If you install the "Related Article Recommendations" plugin, you need to re-hexo s every time you modify the md file

The style is messy after turning off the CDN

  • Please go to the "Start" page of the document to check whether the necessary dependencies are installed.

Search is not available

  • Please go to the "Start" page of the document to check whether the necessary dependencies are installed.
  • Check the root directory configuration file for conflicts with search fields.
  • If the problem cannot be found in the above two steps, please download the sample source code for comparison.

Please check whether the link in the root directory configuration file is correct, such as:

blog/_config.yml
url: https://xaoxuu.com
root: /



tutorials and guides

Hexo official document | Valine official document

Please be sure to read the official documentation!

image

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/getting-started/index.html b/getting-started/index.html new file mode 100644 index 0000000000..cdf8c28596 --- /dev/null +++ b/getting-started/index.html @@ -0,0 +1 @@ +Volantis: A feature-rich and highly modular Hexo blog theme. Supports complex systems such as multi-person collaboration and wiki documents, and supports a large number of tag plugins. - Volantis


Volantis is a feature-rich and highly modular Hexo blog theme. Thanks to its powerful modularity, you can easily build a minimalist style blog, or you can build a large-scale comprehensive blog with multi-person collaboration and document modules based on the official website.

All Volantis users can create their own Issue according to the format to add their blog to the sample blog page of the official website.

Ready to work

Self-built blog requires certain relevant knowledge. Before you start, please must make sure you can use the markdown grammar, simple to master My git knowledge, and most importantly, know how to seek solutions when encountering difficulties:

  1. Scroll through and search documents
  2. Search whether there is a solution in issues
  3. Create a new issue and follow the requirements to describe the problem you encountered in detail

If you haven’t used Hexo before, don’t worry, you can read through the Hexo Chinese document. If you want to use it handily, it’s best to refer to the open source project provided by the team. The source code to build:

Demo source codeOfficial website source code

If you are updating from an old version or migrating with other themes, please make sure that the environment version is not too low, otherwise compatibility problems will occur.

Hexo: 4.2 ~ 5.x
hexo-cli: 3.1 ~ 4.x
node.js: 12.16 ~ latest # LTS version is recommended
npm: 6.13 ~ latest

Quick experience

If you already have the environment configuration conditions, you can enter the following line of code in the terminal, and you can try the experience after a while:

git clone https://github.com/volantis-x/demo.git && cd demo && npm i && hexo s

Download and install

Step 1/2: Modify the site configuration file

Find and modify in the blog/_config.yml file:

theme: volantis

Step 2/2: Download themes

Type in the terminal:

npm i hexo-theme-volantis
if you are a Mac user

Open the terminal in the blog path, download, install and apply the theme:

curl -s https://volantis.js.org/start | bash

This command will automatically detect and install the required environment, initialize the blog, then download, install and apply the theme.
Detailed usage of the script: #hexo.sh

Step 1/3: Modify the site configuration file

Find and modify in the blog/_config.yml file:

theme: volantis

Step 2/3: Download theme

If you have already upgraded to Hexo 5.0.2 and above, you can directly use the npm command to install:

npm i hexo-theme-volantis

For the old version, you need to download the theme source code to the themes/ folder:

git clone https://github.com/volantis-x/hexo-theme-volantis themes/volantis

If you cannot access GitHub, you can use the domestic mirror source:

git clone https://e.coding.net/volantis-x/p/hexo-theme-volantis.git themes/volantis

Step 3/3: Check and install dependencies

Install Hexo search dependencies:

npm i hexo-generator-search hexo-generator-json-content

Install the Stylus renderer:

npm i hexo-renderer-stylus

new version update

Please refer to update log to update, the following are the things to note after the update:

2020-09-26 3.0.0 -> 4.0.0

The configuration file of 4.0.0 has changed a lot. It is strongly recommended not to change the old configuration file.

  1. The configuration items in the original data file are no longer supported, please set in the configuration file.
  2. The theme configuration file has been redesigned and needs to be reconfigured "completely".
  3. Friends chain uses data files and supports issues tags to realize dynamic self-help friends chain.
  4. The original meta custom layout now only supports top_meta and bottom_meta inside the article.
  5. The layout of the article list page can only be customized within a limited range.
  6. The sidebar component now only supports the sidebar position; there is a dedicated component at the end of the article.
  7. If the lazy loading plugin is installed, you need to uninstall it and use the lazy loading built into the theme (which conflicts with the plugin).
  8. If you want to close the comments, you need to change it to comments: false.
  9. If you want to hide the meta tag at the top or bottom of the article, you need to set top_meta: false or bottom_meta: false.
  10. If you need to hide the title and the meta tag at the top at the same time, you can also change title: xxx to seo_title: xxx.
  11. The information of multiple authors is defined using a data file. You only need to write ʻauthor: xxx` in the article instead of repeating the author's information.
  12. Now only the pictures with the gallery tag support zooming.
  13. The friend link page layout: links is changed to layout: friends.

agreement

This theme adopts the MIT Open Source License Agreement, which is free forever and unlimited use.

MIT Open Source License Agreement

The authorized person has the right to use, copy, modify, merge, publish, distribute, sublicense and sell the software and copies of the software.
The licensee can modify the license terms as appropriate according to the needs of the program.
The software and all copies of the software must include a copyright notice and a license notice.

Configuration and use

User Exchange Area

This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

\ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000..ded49d6882 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +Volantis


Volantis is a functional and highly modular hexo blog theme. Thanks to its powerful modular features, you can easily build a minimalist style blog, or follow the example of the official website to build a large-scale comprehensive blog with multi person cooperation and document module.


Let's get started

Lorem ipsum dolor sit amet1

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

Demo

1 / 4

\ No newline at end of file diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000000..6230929436 --- /dev/null +++ b/js/app.js @@ -0,0 +1,2 @@ +document.addEventListener("DOMContentLoaded",(function(){volantis.requestAnimationFrame((()=>{VolantisApp.init(),VolantisApp.subscribe(),VolantisFancyBox.init(),highlightKeyWords.startFromURL(),locationHash()}))}));const locationHash=()=>{if(window.location.hash){let e=decodeURI(window.location.hash.split("#")[1]).replace(/\ /g,"-"),t=document.getElementById(e);t&&setTimeout((()=>{window.location.hash.startsWith("#fn")?volantis.scroll.to(t,{addTop:-volantis.dom.header.offsetHeight-5,behavior:"instant",observer:!0}):volantis.scroll.to(t,{addTop:5,behavior:"instant",observer:!0})}),1e3)}};Object.freeze(locationHash);const VolantisApp=(()=>{const e={};let t=80;e.init=()=>{volantis.dom.header&&(t=volantis.dom.header.clientHeight+16),window.onresize=()=>{document.documentElement.clientWidth<500?volantis.isMobile=1:volantis.isMobile=0,volantis.isMobile!=volantis.isMobileOld&&(e.setGlobalHeaderMenuEvent(),e.setHeader(),e.setHeaderSearch())},volantis.scroll.push(e.scrollEventCallBack,"scrollEventCallBack")},e.event=()=>{volantis.dom.$(document.getElementById("scroll-down"))?.on("click",(function(){e.scrolltoElement(volantis.dom.bodyAnchor)}));const t=document.querySelector("#l_side");if(t){t.querySelectorAll("section").length||document.querySelector("#l_main").classList.add("no_sidebar")}if(volantis.GLOBAL_CONFIG.sidebar.for_page.includes("webinfo")||volantis.GLOBAL_CONFIG.sidebar.for_post.includes("webinfo")){const t=volantis.GLOBAL_CONFIG.sidebar.webinfo.lastupd;document.getElementById("last-update-show")&&t.enable&&t.friendlyShow&&(document.getElementById("last-update-show").innerHTML=e.utilTimeAgo(volantis.GLOBAL_CONFIG.lastupdate))}if(document.getElementById("webinfo-runtime-count")){let e=new Date(volantis.GLOBAL_CONFIG.sidebar.webinfo.runtime.data),t=(new Date).getTime()-e.getTime(),o=Math.floor(t/864e5);document.getElementById("webinfo-runtime-count").innerHTML=`${o} ${volantis.GLOBAL_CONFIG.sidebar.webinfo.runtime.unit}`}document.body.oncopy=function(){e.messageCopyright()}},e.restData=()=>{t=volantis.dom.header?volantis.dom.header.clientHeight+16:80},e.setIsMobile=()=>{document.documentElement.clientWidth<500?(volantis.isMobile=1,volantis.isMobileOld=1):(volantis.isMobile=0,volantis.isMobileOld=0)},e.scrolltoElement=(e,o=t)=>{volantis.scroll.to(e,{top:e.getBoundingClientRect().top+document.documentElement.scrollTop-o})},e.scrollEventCallBack=()=>{const e=volantis.dom.bodyAnchor.offsetTop-t,o=volantis.scroll.getScrollTop();volantis.dom.topBtn&&(o>volantis.dom.bodyAnchor.offsetTop?(volantis.dom.topBtn.addClass("show"),volantis.scroll.del>0?volantis.dom.topBtn.removeClass("hl"):volantis.dom.topBtn.addClass("hl")):volantis.dom.topBtn.removeClass("show").removeClass("hl")),volantis.dom.header&&(o-e>-1?volantis.dom.header.addClass("show"):volantis.dom.header.removeClass("show")),pdata.ispage&&volantis.dom.wrapper&&(volantis.scroll.del>0&&o>100?volantis.dom.wrapper.addClass("sub"):volantis.scroll.del<0&&volantis.dom.wrapper.removeClass("sub")),volantis.isMobile&&(pdata.ispage&&volantis.dom.tocTarget&&volantis.dom.toc&&(volantis.dom.tocTarget.removeClass("active"),volantis.dom.toc.removeClass("active")),volantis.dom.mPhoneList&&volantis.dom.mPhoneList.forEach((function(e){volantis.dom.$(e).hide()})))},e.setScrollAnchor=()=>{volantis.dom.topBtn&&volantis.dom.bodyAnchor&&volantis.dom.topBtn.click((t=>{t.preventDefault(),t.stopPropagation(),e.scrolltoElement(volantis.dom.bodyAnchor),t.stopImmediatePropagation()}))},e.setHeader=()=>{pdata.ispage&&(volantis.dom.wrapper.find(".nav-sub .title").html(document.title.split(" - ")[0]),volantis.dom.comment=volantis.dom.$(document.getElementById("s-comment")),volantis.dom.commentTarget=volantis.dom.$(document.querySelector("#l_main article#comments")),volantis.dom.commentTarget?volantis.dom.comment.click((t=>{t.preventDefault(),t.stopPropagation(),volantis.cleanContentVisibility(),e.scrolltoElement(volantis.dom.commentTarget),t.stopImmediatePropagation()})):volantis.dom.comment.style.display="none",volantis.isMobile&&(volantis.dom.toc=volantis.dom.$(document.getElementById("s-toc")),volantis.dom.tocTarget=volantis.dom.$(document.querySelector("#l_side .toc-wrapper")),volantis.dom.tocTarget?(volantis.dom.toc.click((e=>{e.stopPropagation(),volantis.dom.tocTarget.toggleClass("active"),volantis.dom.toc.toggleClass("active")})),volantis.dom.$(document).click((function(e){e.stopPropagation(),volantis.dom.tocTarget&&volantis.dom.tocTarget.removeClass("active"),volantis.dom.toc.removeClass("active")}))):volantis.dom.toc&&(volantis.dom.toc.style.display="none")))},e.setHeaderMenuSelection=()=>{volantis.dom.headerMenu=volantis.dom.$(document.querySelectorAll("#l_header .navigation,#l_cover .navigation,#l_side .navigation")),volantis.dom.headerMenu.forEach((e=>{let t=volantis.dom.$(e).find("li a.active");t&&t.removeClass("active");let o=volantis.dom.$(e).find("div a.active");o&&o.removeClass("active")}));var e=location.pathname.replace(/\/|%|\./g,"");0==e.length&&(e="home");var t=e.match(/page\d{0,}$/g);t&&(t=t[0],e=e.split(t)[0]);var o=e.match(/index.html/);o&&(o=o[0],e=e.split(o)[0]),(e=e.replace(/(\[|\]|~|#|@)/g,"\\$1"))&&volantis.dom.headerMenu&&volantis.dom.headerMenu.forEach((t=>{let o=t.querySelector("[active-action=action-"+e+"]");o&&volantis.dom.$(o).addClass("active")}))},e.setGlobalHeaderMenuEvent=()=>{volantis.isMobile?document.querySelectorAll("#l_header .m-phone li").forEach((function(e){e.querySelector(".list-v")&&volantis.dom.$(e).click((function(e){e.stopPropagation(),e.currentTarget.parentElement.childNodes.forEach((function(e){"[object HTMLLIElement]"==Object.prototype.toString.call(e)&&e.childNodes.forEach((function(e){"[object HTMLUListElement]"==Object.prototype.toString.call(e)&&volantis.dom.$(e).hide()}))}));let t=e.currentTarget.children;for(let e=0;e a[href]").forEach((function(e){volantis.dom.$(e.parentElement).click((function(e){e.stopPropagation(),e.target.origin==e.target.baseURI&&document.querySelectorAll("#wrapper .m-pc .list-v").forEach((function(e){volantis.dom.$(e).hide()}))}),0)})),e.setPageHeaderMenuEvent()},e.setPageHeaderMenuEvent=()=>{volantis.isMobile&&volantis.dom.$(document).click((function(e){volantis.dom.mPhoneList.forEach((function(e){volantis.dom.$(e).hide()}))}))},e.setHeaderSearch=()=>{volantis.isMobile&&volantis.dom.switcher&&(volantis.dom.switcher.click((function(e){e.stopPropagation(),volantis.dom.header.toggleClass("z_search-open"),volantis.dom.switcher.toggleClass("active")})),volantis.dom.$(document).click((function(e){volantis.dom.header.removeClass("z_search-open"),volantis.dom.switcher.removeClass("active")})),volantis.dom.search.click((function(e){e.stopPropagation()})))},e.setTabs=()=>{let e=document.querySelectorAll("#l_main .tabs .nav-tabs");e&&e.forEach((function(e){e.querySelectorAll("a").forEach((function(e){volantis.dom.$(e).on("click",(e=>{e.preventDefault(),e.stopPropagation();const t=volantis.dom.$(e.target.parentElement.parentElement.parentElement);return t.find(".nav-tabs .active").removeClass("active"),volantis.dom.$(e.target.parentElement).addClass("active"),t.find(".tab-content .active").removeClass("active"),t.find(e.target.className).addClass("active"),!1}))}))}))},e.footnotes=()=>{let e=document.querySelectorAll("#l_main .footnote-backref, #l_main .footnote-ref > a");e.forEach((function(t,o){e[o].click=()=>{},volantis.dom.$(t).on("click",(e=>{e.stopPropagation(),e.preventDefault();let t=decodeURI(e.target.hash.split("#")[1]).replace(/\ /g,"-"),o=document.getElementById(t);o&&volantis.scroll.to(o,{addTop:-volantis.dom.header.offsetHeight-5,behavior:"instant"})}))}))},e.utilCopyCode=t=>{document.querySelectorAll(t).forEach((t=>{t.insertAdjacentHTML("beforebegin",'');const o=t.previousSibling;o.onclick=n=>{n.stopPropagation();const s=o.querySelector("i"),a=o.querySelector("span");t.focus();const i=new Range;i.selectNodeContents(t),document.getSelection().removeAllRanges(),document.getSelection().addRange(i);const l=document.getSelection().toString();e.utilWriteClipText(l).then((()=>{e.messageCopyright(),o.classList.add("copied"),s.classList.remove("fa-copy"),s.classList.add("fa-check-circle"),a.innerText="COPIED",setTimeout((()=>{s.classList.remove("fa-check-circle"),s.classList.add("fa-copy"),a.innerText="COPY"}),2e3)})).catch((e=>{VolantisApp.message("系统提示",e,{icon:"fa fa-exclamation-circle red"}),o.classList.add("copied-failed"),s.classList.remove("fa-copy"),s.classList.add("fa-exclamation-circle"),a.innerText="COPY FAILED",setTimeout((()=>{s.classList.remove("fa-exclamation-circle"),s.classList.add("fa-copy"),a.innerText="COPY"}))}))}}))},e.utilWriteClipText=e=>navigator.clipboard.writeText(e).then((()=>Promise.resolve())).catch((t=>{const o=document.createElement("textarea");o.setAttribute("readonly","readonly"),document.body.appendChild(o),o.innerHTML=e,o.select();try{let e=document.execCommand("copy");return document.body.removeChild(o),e&&"unsuccessful"!==e?Promise.resolve():Promise.reject("复制文本失败!")}catch(t){return document.body.removeChild(o),Promise.reject("当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作!")}})),e.utilTimeAgo=e=>{const t=6e4,o=36e5,n=24*o,s=(new Date).getTime()-e,a=s/t,i=s/o,l=s/n,r=s/6048e5,c=s/2592e6;if(s<0)result="";else if(c>=1&&c<7)result=" "+parseInt(c)+" 月前";else if(r>=1&&r<4)result=" "+parseInt(r)+" 周前";else if(l>=1&&l<7)result=" "+parseInt(l)+" 天前";else if(i>=1&&i<24)result=" "+parseInt(i)+" 小时前";else if(a>=1&&a<60)result=" "+parseInt(a)+" 分钟前";else if(s>=0&&s<=t)result="刚刚";else{const t=new Date;t.setTime(e);const o=t.getFullYear(),n=t.getMonth()+1<10?"0"+(t.getMonth()+1):t.getMonth()+1,s=t.getDate()<10?"0"+t.getDate():t.getDate();t.getHours()<10?t.getHours():t.getHours(),t.getMinutes()<10?t.getMinutes():t.getMinutes(),t.getSeconds()<10?t.getSeconds():t.getSeconds();result=o+"-"+n+"-"+s}return result},e.message=(e,t,o={},n=null)=>{function s(e,t,o,n){const{icon:s,time:a,position:i,transitionIn:l,transitionOut:r,messageColor:c,titleColor:d,backgroundColor:m,zindex:u,displayMode:g}=o;iziToast.show({layout:"2",icon:"Fontawesome",closeOnEscape:"true",displayMode:g||"replace",transitionIn:l||volantis.GLOBAL_CONFIG.plugins.message.transitionIn,transitionOut:r||volantis.GLOBAL_CONFIG.plugins.message.transitionOut,messageColor:c||volantis.GLOBAL_CONFIG.plugins.message.messageColor,titleColor:d||volantis.GLOBAL_CONFIG.plugins.message.titleColor,backgroundColor:m||volantis.GLOBAL_CONFIG.plugins.message.backgroundColor,zindex:u||volantis.GLOBAL_CONFIG.plugins.message.zindex,icon:s||volantis.GLOBAL_CONFIG.plugins.message.icon.default,timeout:a||volantis.GLOBAL_CONFIG.plugins.message.time.default,position:i||volantis.GLOBAL_CONFIG.plugins.message.position,title:e,message:t,onClosed:()=>{n&&n()}})}"undefined"==typeof iziToast?(volantis.css(volantis.GLOBAL_CONFIG.cdn.izitoast_css),volantis.js(volantis.GLOBAL_CONFIG.cdn.izitoast_js,(()=>{s(e,t,o,n)}))):s(e,t,o,n)},e.question=(e,t,o={},n=null,s=null,a=null)=>{function i(e,t,o,n,s,a){const{icon:i,time:l,position:r,transitionIn:c,transitionOut:d,messageColor:m,titleColor:u,backgroundColor:g,zindex:h}=o;iziToast.question({id:"question",icon:"Fontawesome",close:!1,overlay:!0,displayMode:"once",position:"center",messageColor:m||volantis.GLOBAL_CONFIG.plugins.message.messageColor,titleColor:u||volantis.GLOBAL_CONFIG.plugins.message.titleColor,backgroundColor:g||volantis.GLOBAL_CONFIG.plugins.message.backgroundColor,zindex:h||volantis.GLOBAL_CONFIG.plugins.message.zindex,icon:i||volantis.GLOBAL_CONFIG.plugins.message.icon.quection,timeout:l||volantis.GLOBAL_CONFIG.plugins.message.time.quection,title:e,message:t,buttons:[["",(e,t)=>{e.hide({transitionOut:d||"fadeOut"},t,"button"),n&&n(e,t)}],["",(e,t)=>{e.hide({transitionOut:d||"fadeOut"},t,"button"),s&&s(e,t)}]],onClosed:(e,t,o)=>{a&&a(e,t,o)}})}"undefined"==typeof iziToast?(volantis.css(volantis.GLOBAL_CONFIG.cdn.izitoast_css),volantis.js(volantis.GLOBAL_CONFIG.cdn.izitoast_js,(()=>{i(e,t,o,n,s,a)}))):i(e,t,o,n,s,a)},e.hideMessage=(e=null)=>{const t=document.querySelector(".iziToast");function o(e){iziToast.hide({},t),e&&e()}t?"undefined"==typeof iziToast?(volantis.css(volantis.GLOBAL_CONFIG.cdn.izitoast_css),volantis.js(volantis.GLOBAL_CONFIG.cdn.izitoast_js,(()=>{o(e)}))):o(e):e&&e()};let o=0;return e.messageCopyright=()=>{volantis.GLOBAL_CONFIG.plugins.message.enable&&volantis.GLOBAL_CONFIG.plugins.message.copyright.enable&&o<1&&(o++,VolantisApp.message(volantis.GLOBAL_CONFIG.plugins.message.copyright.title,volantis.GLOBAL_CONFIG.plugins.message.copyright.message,{icon:volantis.GLOBAL_CONFIG.plugins.message.copyright.icon,transitionIn:"flipInX",transitionOut:"flipOutX",displayMode:1}))},{init:()=>{e.init(),e.event()},subscribe:()=>{e.setIsMobile(),e.setHeader(),e.setHeaderMenuSelection(),e.setGlobalHeaderMenuEvent(),e.setHeaderSearch(),e.setScrollAnchor(),e.setTabs(),e.footnotes()},utilCopyCode:e.utilCopyCode,utilWriteClipText:e.utilWriteClipText,utilTimeAgo:e.utilTimeAgo,message:e.message,question:e.question,hideMessage:e.hideMessage,messageCopyright:e.messageCopyright,scrolltoElement:e.scrolltoElement}})();Object.freeze(VolantisApp);const VolantisFancyBox=(()=>{const e={loadFancyBox:e=>{volantis.css(volantis.GLOBAL_CONFIG.cdn.fancybox_css),volantis.js(volantis.GLOBAL_CONFIG.cdn.fancybox_js).then((()=>{e&&e()}))},init:(t=!0,o=e.groupBind)=>{!document.querySelector(".md .gallery img, .fancybox")&&t||("undefined"==typeof Fancybox?e.loadFancyBox(o):o())},elementHandling:(e,t)=>{document.querySelectorAll(e).forEach((e=>{if(e.hasAttribute("fancybox"))return;e.setAttribute("fancybox","");const o=document.createElement("a");o.setAttribute("href",e.src),o.setAttribute("data-caption",e.alt),o.setAttribute("data-fancybox",t),o.classList.add("fancybox"),o.append(e.cloneNode()),e.replaceWith(o)}))},bind:t=>{e.init(!1,(()=>{Fancybox.bind(t,{groupAll:!0,Hash:!1,hideScrollbar:!1,Thumbs:{autoStart:!1},caption:function(e,t,o){return o.$trigger.alt||null}})}))},groupBind:(e=null)=>{const t=new Set;document.querySelectorAll(".gallery").forEach((e=>{e.querySelector("img")&&t.add(e.getAttribute("data-group")||"default")})),e&&t.add(e);for(const e of t)Fancybox.unbind('[data-fancybox="'+e+'"]'),Fancybox.bind('[data-fancybox="'+e+'"]',{Hash:!1,hideScrollbar:!1,Thumbs:{autoStart:!1}})}};return{init:e.init,bind:e.bind,groupBind:(t,o="default")=>{try{e.elementHandling(t,o),e.init(!1,(()=>{e.groupBind(o)}))}catch(e){console.error(e)}}}})();Object.freeze(VolantisFancyBox);const highlightKeyWords=(()=>{let e={markNum:0,markNextId:-1,startFromURL:()=>{const t=decodeURI(new URL(location.href).searchParams.get("keyword")),o=t?t.split(" "):[],n=document.querySelector("#l_main");1==o.length&&"null"==o[0]||(e.start(o,n),e.scrollToFirstHighlightKeywordMark())},scrollToFirstHighlightKeywordMark:()=>{volantis.cleanContentVisibility(),e.scrollToNextHighlightKeywordMark("0")||volantis.requestAnimationFrame(e.scrollToFirstHighlightKeywordMark)},scrollToNextHighlightKeywordMark:t=>{let o=t||(e.markNextId+1)%e.markNum;e.markNextId=parseInt(o);let n=document.getElementById("keyword-mark-"+e.markNextId);return n||(e.markNextId=(e.markNextId+1)%e.markNum,n=document.getElementById("keyword-mark-"+e.markNextId)),n&&volantis.scroll.to(n,{addTop:-volantis.dom.header.offsetHeight-5,behavior:"instant"}),n},scrollToPrevHighlightKeywordMark:t=>{let o=t||(e.markNextId-1+e.markNum)%e.markNum;e.markNextId=parseInt(o);let n=document.getElementById("keyword-mark-"+e.markNextId);return n||(e.markNextId=(e.markNextId-1+e.markNum)%e.markNum,n=document.getElementById("keyword-mark-"+e.markNextId)),n&&volantis.scroll.to(n,{addTop:-volantis.dom.header.offsetHeight-5,behavior:"instant"}),n},start:(t,o)=>{if(e.markNum=0,!t.length||!o||1==t.length&&"null"==t[0])return;console.log(t);const n=document.createTreeWalker(o,NodeFilter.SHOW_TEXT,null),s=[];for(;n.nextNode();)n.currentNode.parentNode.matches("button, select, textarea")||s.push(n.currentNode);s.forEach((o=>{const[n]=e.getIndexByWord(t,o.nodeValue);if(!n.length)return;const s=e.mergeIntoSlice(0,o.nodeValue.length,n);e.highlightText(o,s,"keyword"),e.highlightStyle()}))},getIndexByWord:(e,t,o=!1)=>{const n=[],s=new Set;return e.forEach((e=>{const a=document.createElement("div");a.innerText=e;const i=(e=a.innerHTML).length;if(0===i)return;let l=0,r=-1;for(o||(t=t.toLowerCase(),e=e.toLowerCase());(r=t.indexOf(e,l))>-1;)n.push({position:r,word:e}),s.add(e),l=r+i})),n.sort(((e,t)=>e.position!==t.position?e.position-t.position:t.word.length-e.word.length)),[n,s]},mergeIntoSlice:(e,t,o)=>{let n=o[0],{position:s,word:a}=n;const i=[],l=new Set;for(;s+a.length<=t&&0!==o.length;){l.add(a),i.push({position:s,length:a.length});const e=s+a.length;for(o.shift();0!==o.length&&(n=o[0],s=n.position,a=n.word,e>s);)o.shift()}return{hits:i,start:e,end:t,count:l.size}},highlightText:(t,o,n)=>{const s=t.nodeValue;let a=o.start;const i=[];for(const{position:t,length:l}of o.hits){const o=document.createTextNode(s.substring(a,t));a=t+l;let r=document.createElement("mark");r.className=n,r=e.highlightStyle(r),r.appendChild(document.createTextNode(s.substr(t,l))),i.push(o,r)}t.nodeValue=s.substring(a,o.end),i.forEach((e=>{t.parentNode.insertBefore(e,t)}))},highlightStyle:t=>{if(t)return t.id="keyword-mark-"+e.markNum,e.markNum++,t.style.background="transparent",t.style["border-bottom"]="1px dashed #ff2a2a",t.style.color="#ff2a2a",t.style["font-weight"]="bold",t},cleanHighlightStyle:()=>{document.querySelectorAll(".keyword").forEach((e=>{e.style.background="transparent",e.style["border-bottom"]=null,e.style.color=null,e.style["font-weight"]=null}))}};return{start:(t,o)=>{e.start(t,o)},startFromURL:()=>{e.startFromURL()},scrollToNextHighlightKeywordMark:t=>{e.scrollToNextHighlightKeywordMark(t)},scrollToPrevHighlightKeywordMark:t=>{e.scrollToPrevHighlightKeywordMark(t)},cleanHighlightStyle:()=>{e.cleanHighlightStyle()}}})();Object.freeze(highlightKeyWords);const DOMController={visible:(e,t=!0)=>{e&&(e.style.display=!0===t?"block":"none")},remove:e=>{document.querySelectorAll(e).forEach((e=>{e.remove()}))},removeList:e=>{e.forEach((e=>{DOMController.remove(e)}))},setAttribute:(e,t,o)=>{document.querySelectorAll(e).forEach((e=>{e.setAttribute(t,o)}))},setAttributeList:e=>{e.forEach((e=>{DOMController.setAttribute(e[0],e[1],e[2])}))},setStyle:(e,t,o)=>{document.querySelectorAll(e).forEach((e=>{e.style[t]=o}))},setStyleList:e=>{e.forEach((e=>{DOMController.setStyle(e[0],e[1],e[2])}))},fadeIn:e=>{if(e)return e.style.visibility="visible",e.style.opacity=1,e.style.display="block",e.style.transition="all 0.5s linear",e},fadeOut:e=>{if(e)return e.style.visibility="hidden",e.style.opacity=0,e.style.display="none",e.style.transition="all 0.5s linear",e},fadeToggle:e=>{if(e)return e="hidden"==e.style.visibility?DOMController.fadeIn(e):DOMController.fadeOut(e)},fadeToggleList:e=>{e.forEach((e=>{DOMController.fadeToggle(e)}))},hasClass:(e,t)=>{if(e)return e.className.match(new RegExp("(\\s|^)"+t+"(\\s|$)"))},addClass:(e,t)=>{if(e)return e.classList.add(t),e},removeClass:(e,t)=>{if(e)return e.classList.remove(t),e},toggleClass:(e,t)=>{if(e)return DOMController.hasClass(e,t)?DOMController.removeClass(e,t):DOMController.addClass(e,t),e},toggleClassList:e=>{e.forEach((e=>{DOMController.toggleClass(e[0],e[1])}))}};Object.freeze(DOMController);const VolantisRequest={timeoutFetch:(e,t,o)=>{const n=new AbortController;o.signal?.addEventListener("abort",(()=>n.abort()));let s=fetch(e,{...o,signal:n.signal});if(t>0){const e=setTimeout((()=>n.abort()),t);s.finally((()=>{clearTimeout(e)}))}return s=s.catch((t=>{throw"AbortError"===(t||{}).name?new Error(`Fetch timeout: ${e}`):t})),s},Fetch:async(e,t,o=15e3)=>{const n=await VolantisRequest.timeoutFetch(e,o,t);if(!n.ok)throw new Error(`Fetch error: ${e} | ${n.status}`);let s=await n.json();if(!s.success)throw s;return s},POST:async(e,t)=>{const o={method:"POST"};if(t){const e=new FormData;Object.keys(t).forEach((o=>e.append(o,String(t[o])))),o.body=e}return(await VolantisRequest.Fetch(e,o)).data},Get:async(e,t)=>{await VolantisRequest.Fetch(e+(t?`?${new URLSearchParams(t)}`:""),{method:"GET"})}};Object.freeze(VolantisRequest); +//# sourceMappingURL=../maps/js/app.js.map diff --git a/js/plugins/aplayer.js b/js/plugins/aplayer.js new file mode 100644 index 0000000000..6f7ff5de2c --- /dev/null +++ b/js/plugins/aplayer.js @@ -0,0 +1,2 @@ +const RightMenuAplayer=(()=>{let e;const a={},l={checkAPlayer:()=>{void 0===e||void 0===a.player?l.setAPlayerObject():void 0===a.observer&&l.setAPlayerObserver()},setAPlayerObject:()=>{let e=document.querySelectorAll(".footer meting-js");0==e.length&&(e=document.querySelectorAll("meting-js")),a.player=void 0,e.forEach(((e,t)=>{e.meta.id==volantis.GLOBAL_CONFIG.plugins.aplayer.id&&e.aplayer&&void 0===a.player&&(a.player=e.aplayer,l.setAPlayerObserver(),l.updateTitle())}))},setAPlayerObserver:()=>{try{a.player.on("play",(function(e){l.updateAPlayerControllerStatus(e),a.status="play"})),a.player.on("pause",(function(e){l.updateAPlayerControllerStatus(e),a.status="pause"})),a.player.on("volumechange",(function(e){l.onUpdateAPlayerVolume(e)})),a.player.on("loadstart",(function(e){l.updateTitle(e)})),a.volumeBarWrap=document.getElementsByClassName("nav volume")[0].children[0],a.volumeBar=a.volumeBarWrap.children[0];const e=e=>{l.updateAPlayerVolume(e)},t=r=>{a.volumeBarWrap.classList.remove("aplayer-volume-bar-wrap-active"),document.removeEventListener("mouseup",t),document.removeEventListener("mousemove",e),l.updateAPlayerVolume(r)};a.volumeBarWrap.addEventListener("mousedown",(l=>{l.stopPropagation(),a.volumeBarWrap.classList.add("aplayer-volume-bar-wrap-active"),document.addEventListener("mousemove",e),document.addEventListener("mouseup",t)})),a.volumeBarWrap.addEventListener("click",(e=>{e.stopPropagation()})),l.updateAPlayerControllerStatus(),l.onUpdateAPlayerVolume(),a.observer=!0}catch(e){console.log(e),a.observer=void 0}},updateAPlayerVolume:e=>{let l=((e.clientX||e.changedTouches[0].clientX)-a.volumeBar.getBoundingClientRect().left)/a.volumeBar.clientWidth;l=Math.max(l,0),l=Math.min(l,1),a.player.volume(l)},onUpdateAPlayerVolume:()=>{try{a.volumeBar.children[0].style.width=100*a.player.audio.volume+"%"}catch(e){console.log(e)}},updateAPlayerControllerStatus:()=>{try{a.player.audio.paused?(e="pause",document.getElementsByClassName("nav toggle")[0].children[0].classList.add("fa-play"),document.getElementsByClassName("nav toggle")[0].children[0].classList.remove("fa-pause")):(e="play",document.getElementsByClassName("nav toggle")[0].children[0].classList.remove("fa-play"),document.getElementsByClassName("nav toggle")[0].children[0].classList.add("fa-pause"))}catch(e){console.log(e)}},aplayerToggle:()=>{l.checkAPlayer();try{a.player.toggle()}catch(e){console.log(e)}},aplayerBackward:()=>{l.checkAPlayer();try{a.player.skipBack(),a.player.play()}catch(e){console.log(e)}},aplayerForward:()=>{l.checkAPlayer();try{a.player.skipForward(),a.player.play()}catch(e){console.log(e)}},aplayerVolume:e=>{l.checkAPlayer();try{a.player.volume(e)}catch(e){console.log(e)}},updateTitle:()=>{l.checkAPlayer();try{const e=a.player.list.index,l=a.player.list.audios[e];document.getElementsByClassName("nav music-title")[0].innerHTML=l.title}catch(e){}}};return{checkAPlayer:l.checkAPlayer,aplayerBackward:l.aplayerBackward,aplayerToggle:l.aplayerToggle,aplayerForward:l.aplayerForward,APlayer:a}})();Object.freeze(RightMenuAplayer),volantis.requestAnimationFrame((()=>{RightMenuAplayer.checkAPlayer()})); +//# sourceMappingURL=../../maps/js/plugins/aplayer.js.map diff --git a/js/plugins/parallax.js b/js/plugins/parallax.js new file mode 100644 index 0000000000..da19544eb3 --- /dev/null +++ b/js/plugins/parallax.js @@ -0,0 +1,2 @@ +let Parallax={options:{}};Parallax.options.speed=.25,Parallax.options.zIndex=-100,Parallax.options.fade=1500,Parallax.slidein=()=>{let a=Parallax.mirrors[0].slider;Parallax.mirrors.length>=2&&(a=Parallax.mirrors[1].slider);var l=parseFloat(a.style.opacity);1!==l?Parallax.mirrors.length>=2?(l+=.1,a.style.opacity=l,setTimeout(Parallax.slidein,Parallax.options.fade/10)):a.style.opacity=1:Parallax.mirrors.length>=2&&(Parallax.mirrors[0].mirror.remove(),Parallax.mirrors.shift())},Parallax.start=()=>{let a=document.createElement("div");a.classList.add("parallax-mirror"),a.style.visibility="hidden",a.style.zIndex=Parallax.options.zIndex,a.style.position="fixed",a.style.top=0,a.style.left=0,a.style.overflow="hidden",Parallax.window.appendChild(a);let l=document.createElement("img");l.src=Parallax.options.src,l.alt="parallax",l.classList.add("parallax-slider"),l.style.opacity=0,a.appendChild(l),Parallax.mirrors||(Parallax.mirrors=[]);let o={};o.mirror=a,o.slider=l,Parallax.mirrors.push(o),Parallax.slidein(),l.addEventListener("load",(function(){Parallax.update()}),!1)},Parallax.init=()=>{function a(){Parallax.wH=document.documentElement.clientHeight,Parallax.wW=document.documentElement.clientWidth}function l(){var a;return window.pageYOffset?a=window.pageYOffset:document.compatMode&&"BackCompat"!=document.compatMode?a=document.documentElement.scrollTop:document.body&&(a=document.body.scrollTop),a}window.addEventListener("resize",(function(){a(),Parallax.update()}),!1),a();let o=-1;!function a(){const t=l();o!==t&&(o=t,function(){const a=l();Parallax.sT=Math.max(0,a),Parallax.sL=Math.max(0,document.body.scrollLeft),Parallax.overScroll=Math.min(a,0)}(),Parallax.update()),window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame,window.requestAnimationFrame(a)}()},Parallax.refreshItem=a=>{Parallax.options.aspectRatio=a.naturalWidth/(a.naturalHeight||1);const l=Parallax.options.aspectRatio||1;Parallax.options.boxWidth=Parallax.window.clientWidth,Parallax.options.boxHeight=Parallax.window.clientHeight,Parallax.options.boxOffsetTop=Parallax.window.scrollTop,Parallax.options.boxOffsetLeft=Parallax.window.scrollLeft,Parallax.options.boxOffsetBottom=Parallax.options.boxOffsetTop+Parallax.options.boxHeight;const o=Parallax.wH,t=Parallax.options.boxOffsetTop,r=Math.max(Parallax.options.boxOffsetTop+Parallax.options.boxHeight-o,0),i=Parallax.options.boxHeight+(t-r)*(1-Parallax.options.speed)|0,e=(Parallax.options.boxOffsetTop-t)*(1-Parallax.options.speed)|0;let s;Parallax.options.boxWidth{const o=Parallax.sT,t=Parallax.sL,r=o+Parallax.wH;Parallax.options.boxOffsetBottom>o&&Parallax.options.boxOffsetTop<=r?(Parallax.options.visibility="visible",Parallax.options.mirrorTop=Parallax.options.boxOffsetTop-o,Parallax.options.mirrorLeft=Parallax.options.boxOffsetLeft-t,Parallax.options.offsetTop=Parallax.options.offsetBaseTop-Parallax.options.mirrorTop*(1-Parallax.options.speed)):Parallax.options.visibility="hidden",a.style.transform="translate3d("+Parallax.options.mirrorLeft+"px, "+Parallax.options.mirrorTop+"px, 0px)",a.style.visibility=Parallax.options.visibility,a.style.height=Parallax.options.boxHeight+"px",a.style.width=Parallax.options.boxWidth+"px",l.style.transform="translate3d("+Parallax.options.offsetLeft+"px, "+Parallax.options.offsetTop+"px, 0px)",l.style.position="absolute",l.style.height=Parallax.options.imageHeight+"px",l.style.width=Parallax.options.imageWidth+"px",l.style.maxWidth="none"},Parallax.update=()=>{Parallax.mirrors&&Parallax.mirrors.forEach((a=>{Parallax.refreshItem(a.slider),Parallax.renderItem(a.mirror,a.slider)}))}; +//# sourceMappingURL=../../maps/js/plugins/parallax.js.map diff --git a/js/plugins/rightMenus.js b/js/plugins/rightMenus.js new file mode 100644 index 0000000000..7c8141649e --- /dev/null +++ b/js/plugins/rightMenus.js @@ -0,0 +1,2 @@ +const RightMenus={defaultEvent:["copyText","copyLink","copyPaste","copyAll","copyCut","copyImg","printMode","readMode"],defaultGroup:["navigation","inputBox","seletctText","elementCheck","elementImage","articlePage"],messageRightMenu:volantis.GLOBAL_CONFIG.plugins.message.enable&&volantis.GLOBAL_CONFIG.plugins.message.rightmenu.enable,corsAnywhere:volantis.GLOBAL_CONFIG.plugins.rightmenus.options.corsAnywhere,urlRegx:/^((https|http)?:\/\/)+[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,imgRegx:/\.(jpe?g|png|webp|svg|gif|jifi)(-|_|!|\?|\/)?.*$/,initialMenu:()=>{RightMenus.fun.init()},readClipboard:async()=>{let e;switch((await navigator.permissions.query({name:"clipboard-read"})).state){case"granted":case"prompt":e=await navigator.clipboard.readText();break;default:window.clipboardRead=!1}return e},writeClipText:e=>navigator.clipboard.writeText(e).then((()=>Promise.resolve())).catch((e=>Promise.reject(e))),writeClipImg:async(e,t,n)=>{const i=new Image;i.crossOrigin="Anonymous",i.addEventListener("load",(()=>{let e=document.createElement("canvas"),o=e.getContext("2d");e.width=i.width,e.height=i.height,o.drawImage(i,0,0),e.toBlob((e=>{navigator.clipboard.write([new ClipboardItem({"image/png":e})]).then((e=>{t(e)})).catch((e=>{n(e)}))}),"image/png")}),!1),i.src=`${e}?(lll¬ω¬)`},insertAtCaret:(e,t)=>{const n=e.selectionStart,i=e.selectionEnd;if(document.selection)e.focus(),document.selection.createRange().text=t,e.focus();else if(n||"0"==n){var o=e.scrollTop;e.value=e.value.substring(0,n)+t+e.value.substring(i,e.value.length),e.focus(),e.selectionStart=n+t.length,e.selectionEnd=n+t.length,e.scrollTop=o}else e.value+=t,e.focus()}};RightMenus.fun=(()=>{const e=volantis.GLOBAL_CONFIG.plugins.rightmenus,t={},n=document.getElementById("rightmenu-wrapper"),i=document.getElementById("rightmenu-content"),o=document.querySelectorAll("#rightmenu-content li.menuLoad-Content"),a=document.querySelectorAll("#rightmenu-content li, #rightmenu-content hr, #menuMusic"),l=document.getElementById("read_bkg"),s=document.getElementById("menuMusic"),r=document.querySelector("#menuMusic .backward"),c=document.querySelector("#menuMusic .toggle"),u=document.querySelector("#menuMusic .forward");let d={mouseEvent:null,isInputBox:!1,selectText:"",inputValue:"",isLink:!1,linkUrl:"",isMediaLink:!1,mediaLinkUrl:"",isImage:!1,isArticle:!1,pathName:"",isReadClipboard:!0,isShowMusic:!1,statusCheck:!1};const m=Object.assign({},d);return t.initEvent=()=>{t.elementAppend(),t.contextmenu(),t.menuEvent()},t.elementAppend=()=>{l&&l.parentNode.removeChild(l);const e=document.createElement("div");e.className="common_read_bkg common_read_hide",e.id="read_bkg",window.document.body.appendChild(e)},t.menuPosition=e=>{try{let o=e.clientX,a=e.clientY,l=document.documentElement.clientWidth||document.body.clientWidth,s=document.documentElement.clientHeight||document.body.clientHeight;n.style.display="block",t.menuControl(e);let r=i.offsetWidth,c=i.offsetHeight,u=o+r>l?o-r+10:o,d=a+c>s?a-c+10:a;d=a+c>s&&d{t.globalDataSet(n),s&&(s.style.display=d.isShowMusic?"block":"none"),o.forEach((t=>{t.style.display="none";const n=t.firstElementChild.nodeName,i=t.firstElementChild.getAttribute("data-group"),o=t.firstElementChild.getAttribute("data-event");if(d.statusCheck||d.isArticle)switch(i){case"inputBox":d.isInputBox&&(t.style.display="block","copyCut"!==o||d.selectText||(t.style.display="none"),"copyAll"!==o||d.inputValue||(t.style.display="none"),"copyPaste"!==o||d.isReadClipboard||(t.style.display="none"));break;case"seletctText":d.selectText&&(t.style.display="block");break;case"elementCheck":(d.isLink||d.isMediaLink)&&(t.style.display="block");break;case"elementImage":d.isImage&&(t.style.display="block");break;case"articlePage":d.isArticle&&(t.style.display="block");break;default:t.style.display="A"===n?d.isArticle&&!d.statusCheck&&e.options.articleShowLink?"block":"none":"block"}else("A"===n||RightMenus.defaultGroup.every((e=>i!==e)))&&(t.style.display="block")})),volantis.mouseEvent=n,volantis.rightmenu.method.handle.start();let i={item:null,hide:!0};a.forEach((e=>{if("HR"===e.nodeName){if(e.style.display="block",!i.item)return void(i.item=e);(i.hide||"hr"===i.item.nextElementSibling.nodeName)&&(i.item.style.display="none"),i.item=e,i.hide=!0}else"block"===e.style.display&&i.hide&&(i.hide=!1)})),i.item&&i.hide&&(i.item.style.display="none")},t.globalDataSet=t=>{d=Object.assign({},m),d.mouseEvent=t,d.selectText=window.getSelection().toString(),"input"!==t.target.tagName.toLowerCase()&&"textarea"!==t.target.tagName.toLowerCase()||(d.isInputBox=!0,d.inputValue=t.target.value),d.isInputBox&&!1===window.clipboardRead&&(d.isReadClipboard=!1),t.target.href&&RightMenus.urlRegx.test(t.target.href)&&(d.isLink=!0,d.linkUrl=t.target.href),t.target.currentSrc&&RightMenus.urlRegx.test(t.target.currentSrc)&&(d.isMediaLink=!0,d.mediaLinkUrl=t.target.currentSrc),d.isMediaLink&&RightMenus.imgRegx.test(d.mediaLinkUrl)&&(d.isImage=!0),document.querySelector("#post.article")&&(d.isArticle=!0,d.pathName=window.location.pathname),volantis.GLOBAL_CONFIG.plugins.aplayer?.enable&&"undefined"!=typeof RightMenuAplayer&&void 0!==RightMenuAplayer.APlayer.player&&(e.options.musicAlwaysShow||"play"===RightMenuAplayer.APlayer.status||"undefined"===RightMenuAplayer.APlayer.status)&&(d.isShowMusic=!0),(d.selectText||d.isInputBox||d.isLink||d.isMediaLink)&&(d.statusCheck=!0)},t.contextmenu=()=>{window.document.oncontextmenu=e=>e.ctrlKey||document.body.offsetWidth<=500?(t.hideMenu(),!0):t.menuPosition(e),n.oncontextmenu=e=>(e.stopPropagation(),e.preventDefault(),!1),window.removeEventListener("blur",t.hideMenu),window.addEventListener("blur",t.hideMenu),document.body.removeEventListener("click",t.hideMenu),document.body.addEventListener("click",t.hideMenu)},t.menuEvent=()=>{o.forEach((n=>{let i=n.firstElementChild.getAttribute("data-event");const o=n.firstElementChild.getAttribute("id"),a=n.firstElementChild.getAttribute("data-group");"A"!==n.firstElementChild.nodeName&&n.addEventListener("click",(()=>{try{RightMenus.defaultEvent.every((e=>i!==e))?"seletctText"===a?RightMenusFunction[o](d.selectText):"elementCheck"===a?RightMenusFunction[o](d.isLink?d.linkUrl:d.mediaLinkUrl):"elementImage"===a?RightMenusFunction[o](d.mediaLinkUrl):RightMenusFunction[o]():t[i]()}catch(t){"rightMenus"===volantis.GLOBAL_CONFIG.debug&&console.error({id:o,error:t,globalData:d,groupName:a,eventName:i}),RightMenus.messageRightMenu&&VolantisApp.message("错误提示",t,{icon:e.options.iconPrefix+" fa-exclamation-square red",time:"15000"})}}))})),u&&c&&u&&(r.onclick=e=>{e.preventDefault(),e.stopPropagation(),RightMenuAplayer.aplayerBackward()},c.onclick=e=>{e.preventDefault(),e.stopPropagation(),RightMenuAplayer.aplayerToggle()},u.onclick=e=>{e.preventDefault(),e.stopPropagation(),RightMenuAplayer.aplayerForward()})},t.hideMenu=()=>{n.style.display=null,n.style.left=null,n.style.top=null},t.menuNotic=()=>{const t="true"===localStorage.getItem("NoticeRightMenu");RightMenus.messageRightMenu&&!t&&VolantisApp.message("右键菜单","唤醒原系统菜单请使用:Ctrl + 右键",{icon:e.options.iconPrefix+" fa-exclamation-square red",displayMode:1,time:9e3},(()=>{localStorage.setItem("NoticeRightMenu","true")}))},t.copyText=()=>{VolantisApp.utilWriteClipText(d.selectText).then((()=>{RightMenus.messageRightMenu&&VolantisApp.messageCopyright()})).catch((t=>{RightMenus.messageRightMenu&&VolantisApp.message("系统提示",t,{icon:e.options.iconPrefix+" fa-exclamation-square red",displayMode:1,time:9e3})}))},t.copyLink=()=>{VolantisApp.utilWriteClipText(d.linkUrl||d.mediaLinkUrl).then((()=>{RightMenus.messageRightMenu&&VolantisApp.messageCopyright()})).catch((t=>{RightMenus.messageRightMenu&&VolantisApp.message("系统提示",t,{icon:e.options.iconPrefix+" fa-exclamation-square red",displayMode:1,time:9e3})}))},t.copyAll=()=>{d.mouseEvent.target.select()},t.copyPaste=async()=>{const e=await RightMenus.readClipboard()||"";RightMenus.messageRightMenu&&!1===window.clipboardRead?VolantisApp.message("系统提示","未授予剪切板读取权限!"):RightMenus.messageRightMenu&&""===e?VolantisApp.message("系统提示","仅支持复制文本内容!"):RightMenus.insertAtCaret(d.mouseEvent.target,e)},t.copyCut=()=>{const e=d.mouseEvent.target.selectionStart,n=d.mouseEvent.target.selectionEnd,i=d.inputValue;t.copyText(d.selectText),d.mouseEvent.target.value=i.substring(0,e)+i.substring(n,i.length),d.mouseEvent.target.selectionStart=e,d.mouseEvent.target.selectionEnd=e,d.mouseEvent.target.focus()},t.copyImg=()=>{volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice&&VolantisApp.message("系统提示","复制中,请等待。",{icon:e.options.iconPrefix+" fa-images"}),RightMenus.writeClipImg(d.mediaLinkUrl,(t=>{RightMenus.messageRightMenu&&(VolantisApp.hideMessage(),VolantisApp.message("系统提示","图片复制成功!",{icon:e.options.iconPrefix+" fa-images"}))}),(t=>{console.error(t),RightMenus.messageRightMenu&&(VolantisApp.hideMessage(),VolantisApp.message("系统提示","复制失败:"+t,{icon:e.options.iconPrefix+" fa-exclamation-square red",time:9e3}))}))},t.printMode=()=>{if(window.location.pathname===d.pathName)if(RightMenus.messageRightMenu){const e='是否打印当前页面?
建议打印时勾选背景图形
';VolantisApp.question("",e,{time:9e3},(()=>{t.printHtml()}))}else t.printHtml()},t.printHtml=()=>{volantis.isReadModel&&t.readMode(),DOMController.setAttribute("details","open","true"),DOMController.removeList([".cus-article-bkg",".iziToast-overlay",".iziToast-wrapper",".prev-next","footer","#l_header","#l_cover","#l_side","#comments","#s-top","#BKG","#rightmenu-wrapper",".nav-tabs",".parallax-mirror",".new-meta-item.share",".new-meta-box","button.btn-copy","iframe"]),DOMController.setStyleList([["body","backgroundColor","unset"],["#l_main, .copyright.license","width","100%"],["#post","boxShadow","none"],["#post","background","none"],["#post","padding","0"],["h1","textAlign","center"],["h1","fontWeight","600"],["h1","fontSize","2rem"],["h1","marginBottom","20px"],[".tab-pane","display","block"],[".tab-content","borderTop","none"],[".highlight>table pre","whiteSpace","pre-wrap"],[".highlight>table pre","wordBreak","break-all"],[".fancybox img","height","auto"],[".fancybox img","weight","auto"],[".copyright.license","margin","0"],[".copyright.license","padding","1.25em 20px"],["figure.highlight, .copyright.license","display","inline-block"]]),setTimeout((()=>{window.print(),document.body.innerHTML="",window.location.reload()}),50)},t.readMode=()=>{"function"==typeof ScrollReveal&&ScrollReveal().clean("#comments"),DOMController.setStyle("#l_header","opacity",0),DOMController.fadeToggleList([document.querySelector("#l_cover"),document.querySelector("footer"),document.querySelector("#s-top"),document.querySelector(".article-meta#bottom"),document.querySelector(".prev-next"),document.querySelector("#l_side"),document.querySelector("#comments")]),DOMController.toggleClassList([[document.querySelector("#l_main"),"common_read"],[document.querySelector("#l_main"),"common_read_main"],[document.querySelector("#l_body"),"common_read"],[document.querySelector("#safearea"),"common_read"],[document.querySelector("#read_bkg"),"common_read_hide"],[document.querySelector("h1"),"common_read_h1"],[document.querySelector("#post"),"post_read"],[document.querySelector("#l_cover"),"read_cover"],[document.querySelector(".widget.toc-wrapper"),"post_read"]]),DOMController.setStyle(".copyright.license","margin","15px 0"),volantis.isReadModel=void 0===volantis.isReadModel||!volantis.isReadModel,volantis.isReadModel?(RightMenus.messageRightMenu&&VolantisApp.message("系统提示","阅读模式已开启,您可以点击屏幕空白处退出。",{backgroundColor:"var(--color-read-post)",icon:e.options.iconPrefix+" fa-book-reader",displayMode:1,time:5e3}),document.querySelector("#l_body").removeEventListener("click",t.readMode),document.querySelector("#l_body").addEventListener("click",(e=>{DOMController.hasClass(e.target,"common_read")&&t.readMode()}))):(document.querySelector("#l_body").removeEventListener("click",t.readMode),document.querySelector("#post").removeEventListener("click",t.readMode),DOMController.setStyle(".prev-next","display","flex"),DOMController.setStyle(".copyright.license","margin","15px -40px"))},{init:t.initEvent,hideMenu:t.hideMenu,readMode:t.readMode}})(),Object.freeze(RightMenus),volantis.requestAnimationFrame((()=>{"loading"!==document.readyState?RightMenus.initialMenu():document.addEventListener("DOMContentLoaded",(function(){RightMenus.initialMenu()}))})); +//# sourceMappingURL=../../maps/js/plugins/rightMenus.js.map diff --git a/js/plugins/tags/contributors.js b/js/plugins/tags/contributors.js new file mode 100644 index 0000000000..c737ec9c55 --- /dev/null +++ b/js/plugins/tags/contributors.js @@ -0,0 +1,2 @@ +const ContributorsJS={requestAPI:(r,t,e)=>{let a=5;!function n(){return new Promise(((o,s)=>{let l=0,i=setTimeout((()=>{0===l&&(l=2,i=null,s("请求超时"),0==a&&e())}),5e3);fetch(r).then((function(r){if(2!==l&&(clearTimeout(i),o(r),i=null,l=1),r.ok)return r.json();throw new Error("Network response was not ok.")})).then((function(r){a=0,t(r)})).catch((function(r){a>0?(a-=1,setTimeout((()=>{n()}),5e3)):e()}))}))}()},layout:r=>{const t=r.el;ContributorsJS.requestAPI(r.api,(function(e){t.querySelector(".loading-wrap").remove();var a="";(e||[]).forEach(((t,e)=>{var n='"})),t.querySelector(".group-body").innerHTML=a}),(function(){try{t.querySelector(".loading-wrap svg").remove(),t.querySelector(".loading-wrap p").innerText("加载失败,请稍后重试。")}catch(r){}}))},start:()=>{const r=document.getElementsByClassName("contributorsjs-wrap");for(var t=0;t{let n=5;!function a(){return new Promise(((o,s)=>{let l=0,i=setTimeout((()=>{0===l&&(l=2,i=null,s("请求超时"),0==n&&r())}),5e3);fetch(e).then((function(e){if(2!==l&&(clearTimeout(i),o(e),i=null,l=1),e.ok)return e.json();throw new Error("Network response was not ok.")})).then((function(e){n=0,t(e)})).catch((function(e){n>0?(n-=1,setTimeout((()=>{a()}),5e3)):r()}))}))}()},layout:e=>{const t=e.el;FriendsJS.requestAPI(e.api,(function(r){t.querySelector(".loading-wrap").remove();const n=r.content;var a="";n.forEach(((t,r)=>{var n='"})),t.querySelector(".group-body").innerHTML=a}),(function(){try{t.querySelector(".loading-wrap svg").remove(),t.querySelector(".loading-wrap p").innerText("加载失败,请稍后重试。")}catch(e){}}))},start:()=>{const e=document.getElementsByClassName("friendsjs-wrap");for(var t=0;t{let n=5;!function a(){return new Promise(((o,s)=>{let i=0,l=setTimeout((()=>{0===i&&(i=2,l=null,s("请求超时"),0==n&&r())}),5e3);fetch(e).then((function(e){if(2!==i&&(clearTimeout(l),o(e),l=null,i=1),e.ok)return e.json();throw new Error("Network response was not ok.")})).then((function(e){n=0,t(e)})).catch((function(e){n>0?(n-=1,setTimeout((()=>{a()}),5e3)):r()}))}))}()},layout:e=>{const t=e.el;SitesJS.requestAPI(e.api,(function(r){t.querySelector(".loading-wrap").remove();const n=r.content;var a="";n.forEach(((t,r)=>{var n='"})),t.querySelector(".group-body").innerHTML=a}),(function(){try{t.querySelector(".loading-wrap svg").remove(),t.querySelector(".loading-wrap p").innerText("加载失败,请稍后重试。")}catch(e){}}))},start:e=>{const t=document.getElementsByClassName("sitesjs-wrap");for(var r=0;r{const e={};let t,a,i;return e.queryText=null,e.template='\n ',e.init=()=>{let t=document.createElement("div");t.innerHTML+=e.template,document.body.append(t),a=volantis.GLOBAL_CONFIG.search,a.appId&&a.apiKey&&a.indexName?(e.event(),e.setAlgolia()):(document.querySelector("#u-search main.modal-body").innerHTML="Algolia setting is invalid!",document.querySelector("#u-search main.modal-body").style.textAlign="center",document.querySelector("#u-search .modal").style.maxHeight="128px")},e.event=()=>{document.querySelector("#u-search-btn-close").addEventListener("click",e.close,!1),document.querySelector("#modal-overlay").addEventListener("click",e.close,!1),document.querySelectorAll(".u-search-form").forEach((t=>{t.addEventListener("submit",e.onSubmit,!1)})),document.querySelector("#algolia-search-input").addEventListener("input",(t=>{let a=t.target.querySelector(".ais-SearchBox-input");e.queryText=a?a.value:t.target.value}))},e.setAlgolia=()=>{t=instantsearch({indexName:a.indexName,searchClient:algoliasearch(a.appId,a.apiKey),searchFunction(e){e.state.query&&e.search()}});const n=instantsearch.widgets.configure({hitsPerPage:a.hitsPerPage}),s=instantsearch.widgets.searchBox({container:"#algolia-search-input",autofocus:!0,showReset:!1,showSubmit:!1,showLoadingIndicator:!1,searchAsYouType:a.searchAsYouType,placeholder:a.placeholder,templates:{input:"algolia-input"},queryHook(e,t){clearTimeout(i),i=setTimeout((()=>t(e)),500)}}),l=instantsearch.widgets.hits({container:"#algolia-hits",templates:{item(t){const a=e.queryText?`?keyword=${e.queryText}`:"",i=t.permalink?t.permalink:`${volantis.GLOBAL_CONFIG.root}${t.path}`,n=t._highlightResult,s=n.contentStripTruncate?e.cutContent(n.contentStripTruncate.value):n.contentStrip?e.cutContent(n.contentStrip.value):n.content?e.cutContent(n.content.value):"";return`\n \n ${n.title.value||"no-title"}\n ${s}\n `},empty:function(e){return`

${volantis.GLOBAL_CONFIG.languages.search.hits_empty.replace(/\$\{query}/,e.query)}

`}}}),r=instantsearch.widgets.stats({container:"#algolia-info > .algolia-stats",templates:{text:function(e){return`${volantis.GLOBAL_CONFIG.languages.search.hits_stats.replace(/\$\{hits}/,e.nbHits).replace(/\$\{time}/,e.processingTimeMS)}`}}}),o=instantsearch.widgets.poweredBy({container:"#algolia-info > .algolia-poweredBy",theme:"dark"===volantis.dark?.mode?"dark":"light"}),c=instantsearch.widgets.pagination({container:"#algolia-pagination",totalPages:5,templates:{first:'',last:'',previous:'',next:''}});t.addWidgets([n,s,l,r,o,c]),t.start()},e.setQueryText=i=>{e.queryText=i,t||e.init(),t?.setUiState({[a.indexName]:{query:i}})},e.search=()=>{document.querySelector("#u-search").style.display="block",document.addEventListener("keydown",(t=>{"Escape"===t.code&&e.close()}),{once:!0})},e.onSubmit=t=>{t.preventDefault();let a=t.target.querySelector(".u-search-input");e.setQueryText(a?.value?a.value:t.target.value),e.search()},e.cutContent=e=>{if(""===e)return"";const t=e.indexOf("");let a=t-30,i=t+120,n="",s="";return a<=0?(a=0,i=140):n="...",i>e.length?i=e.length:s="...",n+e.substring(a,i)+s},e.close=()=>{document.querySelector("#u-search").style.display="none"},{init:e.init,setQueryText:t=>{e.setQueryText(t)},search:e.search,close:e.close}})();Object.freeze(SearchService),SearchService.init(); +//# sourceMappingURL=../../maps/js/search/algolia.js.map diff --git a/js/search/hexo.js b/js/search/hexo.js new file mode 100644 index 0000000000..c5df9cc4a7 --- /dev/null +++ b/js/search/hexo.js @@ -0,0 +1,2 @@ +let SearchService=(()=>{const e={queryText:null,data:null,template:'\n',init:async()=>{let t=document.createElement("div");t.innerHTML+=e.template,document.body.append(t),document.querySelectorAll(".u-search-form").forEach((t=>{t.addEventListener("submit",e.onSubmit,!1)})),document.querySelector("#u-search-modal-input").addEventListener("input",e.onSubmit),document.querySelector("#u-search-btn-close").addEventListener("click",e.close,!1),document.querySelector("#modal-overlay").addEventListener("click",e.close,!1),e.data||(e.data=await e.fetchData())},onSubmit:t=>{t.preventDefault();let a=t.target.querySelector(".u-search-input");e.queryText=a?a.value:t.target.value,e.queryText&&e.search()},search:async()=>{document.querySelectorAll(".u-search-input").forEach((t=>{t.value=e.queryText})),document.querySelector("#u-search").style.display="block",e.data||(e.data=await e.fetchData());let t="";t+=e.buildResultList(e.data.pages),t+=e.buildResultList(e.data.posts),""===t&&(t=`

${volantis.GLOBAL_CONFIG.languages.search.hits_empty.replace(/\$\{query}/,e.queryText)}

`),document.querySelector("#u-search .modal-results").innerHTML=t,document.addEventListener("keydown",(function t(a){"Escape"===a.code&&(e.close(),document.removeEventListener("keydown",t))}))},close:()=>{document.querySelector("#u-search").style.display="none"},fetchData:()=>fetch(volantis.GLOBAL_CONFIG.search.dataPath).then((e=>e.text())).then((e=>JSON.parse(e))),buildResultList:t=>{let a="";return t.forEach((t=>{t.text&&(t.text=t.text.replace(/12345\d*/g,"")),!t.title&&t.text&&(t.title=t.text.trim().slice(0,15)),e.contentSearch(t)&&(a+=e.buildResult(t.permalink,t.title,t.digest))})),a},contentSearch:t=>{let a=t.title.trim().toLowerCase(),s=t.text.trim().toLowerCase(),r=e.queryText.trim().toLowerCase().split(/[-\s]+/),l=!1,n=-1,i=-1,c=-1;return a&&s&&r.forEach(((e,u)=>{if(n=a.indexOf(e),i=s.indexOf(e),n<0&&i<0?l=!1:(l=!0,i<0&&(i=0),0===u&&(c=i)),l){s=t.text.trim();let e=0,a=0;if(c>=0){e=Math.max(c-40,0),a=0===e?Math.min(200,s.length):Math.min(c+120,s.length);let l=s.substring(e,a);r.forEach((function(e){let t=new RegExp(e,"gi");l=l.replace(t,""+e+"")})),t.digest=l+"......"}else a=Math.min(200,s.length),t.digest=s.trim().substring(0,a)}})),l},buildResult:(t,a,s)=>{let r="";return r+="
  • ",r+="",r+=""+a+"",""!==s&&(r+=""+s+""),r+="",r+="
  • ",r},getUrlRelativePath:function(e){let t=e.split("//"),a=t[1].indexOf("/"),s=t[1].substring(a);return-1!=s.indexOf("?")&&(s=s.split("?")[0]),s}};return{init:()=>{e.init()},setQueryText:t=>{e.queryText=t},search:()=>{e.search()}}})();Object.freeze(SearchService),SearchService.init(); +//# sourceMappingURL=../../maps/js/search/hexo.js.map diff --git a/js/search/meilisearch.js b/js/search/meilisearch.js new file mode 100644 index 0000000000..84378e8e38 --- /dev/null +++ b/js/search/meilisearch.js @@ -0,0 +1,2 @@ +let SearchService=(()=>{const e={};let t,a,i;return e.queryText=null,e.template='\n ',e.init=()=>{let t=document.createElement("div");t.innerHTML+=e.template,document.body.append(t),a=volantis.GLOBAL_CONFIG.search,a.appId&&a.apiKey&&a.indexName?(e.event(),e.setAlgolia()):(document.querySelector("#u-search main.modal-body").innerHTML="Algolia setting is invalid!",document.querySelector("#u-search main.modal-body").style.textAlign="center",document.querySelector("#u-search .modal").style.maxHeight="128px")},e.event=()=>{document.querySelector("#u-search-btn-close").addEventListener("click",e.close,!1),document.querySelector("#modal-overlay").addEventListener("click",e.close,!1),document.querySelectorAll(".u-search-form").forEach((t=>{t.addEventListener("submit",e.onSubmit,!1)})),document.querySelector("#meilisearch-search-input").addEventListener("input",(t=>{let a=t.target.querySelector(".ais-SearchBox-input");e.queryText=a?a.value:t.target.value}))},e.setAlgolia=()=>{t=instantsearch({indexName:a.indexName,searchClient:instantMeiliSearch(a.appId,a.apiKey),searchFunction(e){e.state.query&&e.search()}});instantsearch.widgets.configure({hitsPerPage:a.hitsPerPage});const s=instantsearch.widgets.searchBox({container:"#meilisearch-search-input",autofocus:!0,showReset:!1,showSubmit:!1,showLoadingIndicator:!1,searchAsYouType:a.searchAsYouType,placeholder:a.placeholder,templates:{input:"meilisearch-input"},queryHook(e,t){clearTimeout(i),i=setTimeout((()=>t(e)),500)}}),l=instantsearch.widgets.hits({container:"#meilisearch-hits",templates:{item(t){const a=e.queryText?`?keyword=${e.queryText}`:"",i=t.permalink?t.permalink:`${volantis.GLOBAL_CONFIG.root}${t.path}`,s=t._highlightResult,l=e.cutContent(s.text.value);return`\n \n ${s.title.value||"no-title"}\n ${l}\n `},empty:function(e){return`

    ${volantis.GLOBAL_CONFIG.languages.search.hits_empty.replace(/\$\{query}/,e.query)}

    `}}}),n=instantsearch.widgets.stats({container:"#meilisearch-info > .meilisearch-stats",templates:{text:function(e){return`${volantis.GLOBAL_CONFIG.languages.search.hits_stats.replace(/\$\{hits}/,e.nbHits).replace(/\$\{time}/,e.processingTimeMS)}`}}});t.addWidgets([s,l,n]),t.start()},e.setQueryText=i=>{e.queryText=i,t||e.init(),t?.setUiState({[a.indexName]:{query:i}})},e.search=()=>{document.querySelector("#u-search").style.display="block",document.addEventListener("keydown",(t=>{"Escape"===t.code&&e.close()}),{once:!0})},e.onSubmit=t=>{t.preventDefault();let a=t.target.querySelector(".u-search-input");e.setQueryText(a?.value?a.value:t.target.value),e.search()},e.cutContent=e=>{if(""===e)return"";const t=e.indexOf("");let a=t-30,i=t+120,s="",l="";return a<=0?(a=0,i=140):s="...",i>e.length?i=e.length:l="...",s+e.substring(a,i)+l},e.close=()=>{document.querySelector("#u-search").style.display="none"},{init:e.init,setQueryText:t=>{e.setQueryText(t)},search:e.search,close:e.close}})();Object.freeze(SearchService),SearchService.init(); +//# sourceMappingURL=../../maps/js/search/meilisearch.js.map diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000000..cb497a0aca --- /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/maps/css/first.css.map b/maps/css/first.css.map new file mode 100644 index 0000000000..57676cc191 --- /dev/null +++ b/maps/css/first.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["css/first.css"],"names":[],"mappings":"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","file":"../../css/first.css","sourcesContent":["#safearea {\n display: none;\n}\n:root {\n --color-site-body: #f4f4f4;\n --color-site-bg: #f4f4f4;\n --color-site-inner: #fff;\n --color-site-footer: #666;\n --color-card: #fff;\n --color-text: #444;\n --color-block: #f6f6f6;\n --color-inlinecode: #c74f00;\n --color-codeblock: #fff7ea;\n --color-h1: #3a3a3a;\n --color-h2: #3a3a3a;\n --color-h3: #333;\n --color-h4: #444;\n --color-h5: #555;\n --color-h6: #666;\n --color-p: #444;\n --color-list: #666;\n --color-list-hl: #30ad91;\n --color-meta: #888;\n --color-read-bkg: #e0d8c8;\n --color-read-post: #f8f1e2;\n --color-copyright-bkg: #f5f5f5;\n}\n* {\n box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n outline: none;\n margin: 0;\n padding: 0;\n}\n*::-webkit-scrollbar {\n height: 4px;\n width: 4px;\n}\n*::-webkit-scrollbar-track-piece {\n background: transparent;\n}\n*::-webkit-scrollbar-thumb {\n background: #3dd9b6;\n cursor: pointer;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n*::-webkit-scrollbar-thumb:hover {\n background: #ff5722;\n}\nhtml {\n color: var(--color-text);\n width: 100%;\n height: 100%;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", Menlo, Monaco, monospace, sans-serif;\n font-size: 16px;\n}\nhtml >::-webkit-scrollbar {\n height: 4px;\n width: 4px;\n}\nhtml >::-webkit-scrollbar-track-piece {\n background: transparent;\n}\nhtml >::-webkit-scrollbar-thumb {\n background: #3dd9b6;\n cursor: pointer;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\nhtml >::-webkit-scrollbar-thumb:hover {\n background: #ff5722;\n}\nbody {\n background-color: var(--color-site-body);\n text-rendering: optimizelegibility;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n line-height: 1.6;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\nbody.modal-active {\n overflow: hidden;\n}\n@media screen and (max-width: 680px) {\n body.modal-active {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n}\na {\n color: #2092ec;\n cursor: pointer;\n text-decoration: none;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\na:hover {\n color: #ff5722;\n}\na:active,\na:hover {\n outline: 0;\n}\nul,\nol {\n padding-left: 0;\n}\nul li,\nol li {\n list-style: none;\n}\nheader {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\nimg {\n border: 0;\n background: none;\n max-width: 100%;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nhr {\n box-sizing: content-box;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n height: 0;\n border: 0;\n border-radius: 1px;\n -webkit-border-radius: 1px;\n border-bottom: 1px solid rgba(68,68,68,0.1);\n}\nbutton,\ninput {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n text-transform: none;\n -webkit-appearance: button;\n cursor: pointer;\n}\n@supports ((-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px))) {\n .blur {\n background: rgba(255,255,255,0.9) !important;\n -webkit-backdrop-filter: saturate(200%) blur(20px);\n backdrop-filter: saturate(200%) blur(20px);\n }\n}\n.shadow {\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n}\n.shadow.floatable {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.shadow.floatable:hover {\n 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);\n -webkit-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);\n}\n#l_cover {\n min-height: 64px;\n}\n.cover-wrapper {\n top: 0;\n left: 0;\n max-width: 100%;\n height: 100vh;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: nowrap;\n -webkit-flex-wrap: nowrap;\n -khtml-flex-wrap: nowrap;\n -moz-flex-wrap: nowrap;\n -o-flex-wrap: nowrap;\n -ms-flex-wrap: nowrap;\n flex-direction: column;\n align-items: center;\n align-self: center;\n align-content: center;\n color: var(--color-site-inner);\n padding: 0 16px;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n position: relative;\n overflow: hidden;\n margin-bottom: -100px;\n}\n.cover-wrapper .cover-body {\n z-index: 1;\n position: relative;\n width: 100%;\n height: 100%;\n}\n.cover-wrapper#full {\n height: calc(100vh + 100px);\n padding-bottom: 100px;\n}\n.cover-wrapper#half {\n max-height: 640px;\n min-height: 400px;\n height: calc(36vh - 64px + 200px);\n}\n.cover-wrapper #scroll-down {\n width: 100%;\n height: 64px;\n position: absolute;\n bottom: 100px;\n text-align: center;\n cursor: pointer;\n}\n.cover-wrapper #scroll-down .scroll-down-effects {\n color: #fff;\n font-size: 24px;\n line-height: 64px;\n position: absolute;\n width: 24px;\n left: calc(50% - 12px);\n text-shadow: 0 1px 2px rgba(0,0,0,0.1);\n animation: scroll-down-effect 1.5s infinite;\n -webkit-animation: scroll-down-effect 1.5s infinite;\n -khtml-animation: scroll-down-effect 1.5s infinite;\n -moz-animation: scroll-down-effect 1.5s infinite;\n -o-animation: scroll-down-effect 1.5s infinite;\n -ms-animation: scroll-down-effect 1.5s infinite;\n}\n@keyframes scroll-down-effect {\n 0% {\n top: 0;\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n 50% {\n top: -16px;\n opacity: 0.4;\n -webkit-opacity: 0.4;\n -moz-opacity: 0.4;\n }\n 100% {\n top: 0;\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n}\n.cover-wrapper .cover-body {\n margin-top: 64px;\n margin-bottom: 100px;\n}\n.cover-wrapper .cover-body,\n.cover-wrapper .cover-body .top,\n.cover-wrapper .cover-body .bottom {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n max-width: 100%;\n}\n.cover-wrapper .cover-body .bottom {\n margin-top: 32px;\n}\n.cover-wrapper .cover-body .title {\n font-family: \"Varela Round\", \"PingFang SC\", \"Microsoft YaHei\", Helvetica, Arial, Helvetica, monospace;\n font-size: 3.125rem;\n line-height: 1.2;\n text-shadow: 0 1px 2px rgba(0,0,0,0.1);\n}\n.cover-wrapper .cover-body .subtitle {\n font-size: 20px;\n}\n.cover-wrapper .cover-body .logo {\n max-height: 120px;\n max-width: calc(100% - 4 * 16px);\n}\n@media screen and (min-height: 1024px) {\n .cover-wrapper .cover-body .title {\n font-size: 3rem;\n }\n .cover-wrapper .cover-body .subtitle {\n font-size: 1.05rem;\n }\n .cover-wrapper .cover-body .logo {\n max-height: 150px;\n }\n}\n.cover-wrapper .cover-body .m_search {\n position: relative;\n max-width: calc(100% - 16px);\n width: 320px;\n vertical-align: middle;\n}\n.cover-wrapper .cover-body .m_search .form {\n position: relative;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n width: 100%;\n}\n.cover-wrapper .cover-body .m_search .icon,\n.cover-wrapper .cover-body .m_search .input {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.cover-wrapper .cover-body .m_search .icon {\n position: absolute;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n line-height: 2.5rem;\n width: 32px;\n top: 0;\n left: 5px;\n color: rgba(68,68,68,0.75);\n}\n.cover-wrapper .cover-body .m_search .input {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n height: 2.5rem;\n width: 100%;\n box-shadow: none;\n -webkit-box-shadow: none;\n box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n font-size: 0.875rem;\n -webkit-appearance: none;\n padding-left: 36px;\n border-radius: 1.4rem;\n -webkit-border-radius: 1.4rem;\n background: rgba(255,255,255,0.6);\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n border: none;\n color: var(--color-text);\n}\n@media screen and (max-width: 500px) {\n .cover-wrapper .cover-body .m_search .input {\n padding-left: 36px;\n }\n}\n.cover-wrapper .cover-body .m_search .input:hover {\n background: rgba(255,255,255,0.8);\n}\n.cover-wrapper .cover-body .m_search .input:focus {\n background: #fff;\n}\n.cover-wrapper .list-h {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-items: stretch;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n.cover-wrapper .list-h a {\n flex: 1 0;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n font-weight: 600;\n}\n.cover-wrapper .list-h a img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n margin: 4px;\n min-width: 40px;\n max-width: 44px;\n}\n@media screen and (max-width: 768px) {\n .cover-wrapper .list-h a img {\n min-width: 36px;\n max-width: 40px;\n }\n}\n@media screen and (max-width: 500px) {\n .cover-wrapper .list-h a img {\n margin: 2px 4px;\n min-width: 32px;\n max-width: 36px;\n }\n}\n@media screen and (max-width: 375px) {\n .cover-wrapper .list-h a img {\n min-width: 28px;\n max-width: 32px;\n }\n}\n.cover-wrapper {\n max-width: 100%;\n}\n.cover-wrapper.search .bottom .menu {\n margin-top: 16px;\n}\n.cover-wrapper.search .bottom .menu .list-h a {\n white-space: nowrap;\n flex-direction: row;\n align-items: baseline;\n padding: 2px;\n margin: 4px;\n color: var(--color-site-inner);\n opacity: 0.75;\n -webkit-opacity: 0.75;\n -moz-opacity: 0.75;\n text-shadow: 0 1px 2px rgba(0,0,0,0.05);\n border-bottom: 2px solid transparent;\n}\n.cover-wrapper.search .bottom .menu .list-h a i {\n margin-right: 4px;\n}\n.cover-wrapper.search .bottom .menu .list-h a p {\n font-size: 0.9375rem;\n}\n.cover-wrapper.search .bottom .menu .list-h a:hover,\n.cover-wrapper.search .bottom .menu .list-h a.active,\n.cover-wrapper.search .bottom .menu .list-h a:active {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n border-bottom: 2px solid var(--color-site-inner);\n}\n.cover-wrapper #parallax-window {\n position: absolute;\n width: 100%;\n height: 100%;\n background: transparent;\n}\n.parallax-mirror {\n animation-delay: 0s;\n animation-duration: 0.5s;\n animation-fill-mode: forwards;\n animation-timing-function: ease-out;\n animation-name: fadeIn;\n}\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n filter: blur(12px);\n }\n 100% {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n}\n@media (prefers-color-scheme: dark) {\n :root {\n --color-mode: 'dark';\n }\n :root:not([color-scheme]) {\n --color-site-body: #121212;\n --color-read-bkg: #1f1f1f;\n --color-read-post: #262626;\n --color-site-bg: #1f1f1f;\n --color-site-inner: rgba(238,238,238,0.871);\n --color-site-footer: rgba(170,170,170,0.871);\n --color-card: #262626;\n --color-text: rgba(238,238,238,0.871);\n --color-block: #434343;\n --color-codeblock: #1f1f1f;\n --color-inlinecode: #d56d28;\n --color-h1: rgba(255,255,255,0.871);\n --color-h2: rgba(255,255,255,0.871);\n --color-h3: rgba(255,255,255,0.6);\n --color-h4: rgba(255,255,255,0.6);\n --color-h5: rgba(255,255,255,0.6);\n --color-h6: rgba(255,255,255,0.6);\n --color-p: rgba(217,217,217,0.871);\n --color-list: rgba(217,217,217,0.871);\n --color-list-hl: #63e0c4;\n --color-meta: rgba(191,191,191,0.871);\n --color-link: rgba(191,191,191,0.871);\n --color-copyright-bkg: #21252b;\n }\n :root:not([color-scheme]) img {\n filter: brightness(70%) !important;\n }\n :root:not([color-scheme]) .blur {\n background: rgba(31,31,31,0.9) !important;\n }\n :root:not([color-scheme]) .white-box.blur {\n background: rgba(38,38,38,0.9) !important;\n }\n :root:not([color-scheme]) .nav-main .u-search-input {\n background: var(--color-card) !important;\n }\n :root:not([color-scheme]) #l_main .article .prev-next>a {\n background: var(--color-block) !important;\n }\n :root:not([color-scheme]) #l_main .article .prev-next>a:hover {\n background: var(--color-site-bg) !important;\n }\n :root:not([color-scheme]) .article blockquote {\n background: var(--color-block) !important;\n }\n :root:not([color-scheme]) .article-title a {\n color: var(--color-h1) !important;\n }\n :root:not([color-scheme]) details>summary {\n color: var(--color-p) !important;\n background: var(--color-site-bg) !important;\n }\n :root:not([color-scheme]) details {\n border: 1px solid var(--color-site-bg) !important;\n background: var(--color-site-bg) !important;\n }\n :root:not([color-scheme]) #u-search .modal,\n :root:not([color-scheme]) #u-search .modal-header,\n :root:not([color-scheme]) #u-search .modal-body {\n background: var(--color-card) !important;\n }\n :root:not([color-scheme]) #u-search .modal-body .modal-results .result:hover {\n background: var(--color-block) !important;\n }\n :root:not([color-scheme]) .u-search-input:hover {\n background: var(--color-block) !important;\n }\n :root:not([color-scheme]) .u-search-input:focus {\n background: var(--color-site-body) !important;\n }\n}\n[color-scheme='dark'] {\n --color-site-body: #121212;\n --color-read-bkg: #1f1f1f;\n --color-read-post: #262626;\n --color-site-bg: #1f1f1f;\n --color-site-inner: rgba(238,238,238,0.871);\n --color-site-footer: rgba(170,170,170,0.871);\n --color-card: #262626;\n --color-text: rgba(238,238,238,0.871);\n --color-block: #434343;\n --color-codeblock: #1f1f1f;\n --color-inlinecode: #d56d28;\n --color-h1: rgba(255,255,255,0.871);\n --color-h2: rgba(255,255,255,0.871);\n --color-h3: rgba(255,255,255,0.6);\n --color-h4: rgba(255,255,255,0.6);\n --color-h5: rgba(255,255,255,0.6);\n --color-h6: rgba(255,255,255,0.6);\n --color-p: rgba(217,217,217,0.871);\n --color-list: rgba(217,217,217,0.871);\n --color-list-hl: #63e0c4;\n --color-meta: rgba(191,191,191,0.871);\n --color-link: rgba(191,191,191,0.871);\n --color-copyright-bkg: #21252b;\n}\n[color-scheme='dark'] img {\n filter: brightness(70%) !important;\n}\n[color-scheme='dark'] .blur {\n background: rgba(31,31,31,0.9) !important;\n}\n[color-scheme='dark'] .white-box.blur {\n background: rgba(38,38,38,0.9) !important;\n}\n[color-scheme='dark'] .nav-main .u-search-input {\n background: var(--color-card) !important;\n}\n[color-scheme='dark'] #l_main .article .prev-next>a {\n background: var(--color-block) !important;\n}\n[color-scheme='dark'] #l_main .article .prev-next>a:hover {\n background: var(--color-site-bg) !important;\n}\n[color-scheme='dark'] .article blockquote {\n background: var(--color-block) !important;\n}\n[color-scheme='dark'] .article-title a {\n color: var(--color-h1) !important;\n}\n[color-scheme='dark'] details>summary {\n color: var(--color-p) !important;\n background: var(--color-site-bg) !important;\n}\n[color-scheme='dark'] details {\n border: 1px solid var(--color-site-bg) !important;\n background: var(--color-site-bg) !important;\n}\n[color-scheme='dark'] #u-search .modal,\n[color-scheme='dark'] #u-search .modal-header,\n[color-scheme='dark'] #u-search .modal-body {\n background: var(--color-card) !important;\n}\n[color-scheme='dark'] #u-search .modal-body .modal-results .result:hover {\n background: var(--color-block) !important;\n}\n[color-scheme='dark'] .u-search-input:hover {\n background: var(--color-block) !important;\n}\n[color-scheme='dark'] .u-search-input:focus {\n background: var(--color-site-body) !important;\n}\n@media screen and (max-width: 500px) {\n [color-scheme='dark'] .l_header .m_search {\n background: var(--color-site-bg) !important;\n }\n}\n@font-face {\n font-family: 'UbuntuMono';\n src: url(\"https://unpkg.com/volantis-static@0.0.1660614606622/media/fonts/UbuntuMono/UbuntuMono-Regular.ttf\");\n font-weight: 'normal';\n font-style: 'normal';\n font-display: swap;\n}\n@font-face {\n font-family: 'Varela Round';\n src: url(\"https://unpkg.com/volantis-static@0.0.1660614606622/media/fonts/VarelaRound/VarelaRound-Regular.ttf\");\n font-weight: 'normal';\n font-style: 'normal';\n font-display: swap;\n}\n.l_header {\n position: fixed;\n z-index: 1000;\n top: 0;\n width: 100%;\n height: 64px;\n background: var(--color-card);\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n}\n.l_header.auto {\n transition: opacity 0.4s ease;\n -webkit-transition: opacity 0.4s ease;\n -khtml-transition: opacity 0.4s ease;\n -moz-transition: opacity 0.4s ease;\n -o-transition: opacity 0.4s ease;\n -ms-transition: opacity 0.4s ease;\n visibility: hidden;\n}\n.l_header.auto.show {\n opacity: 1 !important;\n -webkit-opacity: 1 !important;\n -moz-opacity: 1 !important;\n visibility: visible;\n}\n.l_header .container {\n margin-left: 16px;\n margin-right: 16px;\n}\n.l_header #wrapper {\n height: 100%;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n.l_header #wrapper .nav-main,\n.l_header #wrapper .nav-sub {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: nowrap;\n -webkit-flex-wrap: nowrap;\n -khtml-flex-wrap: nowrap;\n -moz-flex-wrap: nowrap;\n -o-flex-wrap: nowrap;\n -ms-flex-wrap: nowrap;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n align-items: center;\n}\n.l_header #wrapper .nav-main {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.l_header #wrapper.sub .nav-main {\n transform: translateY(-64px);\n -webkit-transform: translateY(-64px);\n -khtml-transform: translateY(-64px);\n -moz-transform: translateY(-64px);\n -o-transform: translateY(-64px);\n -ms-transform: translateY(-64px);\n}\n.l_header #wrapper .nav-sub {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n height: 64px;\n width: calc(100% - 2 * 16px);\n position: absolute;\n}\n.l_header #wrapper .nav-sub ::-webkit-scrollbar {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n@media screen and (min-width: 2048px) {\n .l_header #wrapper .nav-sub {\n max-width: 55vw;\n margin: auto;\n }\n}\n.l_header #wrapper.sub .nav-sub {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n}\n.l_header #wrapper .title {\n position: relative;\n color: var(--color-text);\n padding-left: 24px;\n max-height: 64px;\n}\n.l_header #wrapper .nav-main .title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 0;\n line-height: 64px;\n padding: 0 24px;\n font-size: 1.25rem;\n font-family: \"Varela Round\", \"PingFang SC\", \"Microsoft YaHei\", Helvetica, Arial, Helvetica, monospace;\n}\n.l_header #wrapper .nav-main .title img {\n height: 64px;\n}\n.l_header .nav-sub {\n max-width: 1080px;\n margin: auto;\n}\n.l_header .nav-sub .title {\n font-weight: bold;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", Menlo, Monaco, monospace, sans-serif;\n line-height: 1.2;\n max-height: 64px;\n white-space: normal;\n flex-shrink: 1;\n}\n.l_header .switcher {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n line-height: 64px;\n align-items: center;\n}\n.l_header .switcher .s-toc {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n@media screen and (max-width: 768px) {\n .l_header .switcher .s-toc {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n }\n}\n.l_header .switcher >li {\n height: 48px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n margin: 2px;\n}\n@media screen and (max-width: 500px) {\n .l_header .switcher >li {\n margin: 0 1px;\n height: 48px;\n }\n}\n.l_header .switcher >li >a {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n width: 48px;\n height: 48px;\n padding: 0.85em 1.1em;\n border-radius: 100px;\n -webkit-border-radius: 100px;\n border: none;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n color: #3dd9b6;\n}\n.l_header .switcher >li >a:hover {\n border: none;\n}\n.l_header .switcher >li >a.active,\n.l_header .switcher >li >a:active {\n border: none;\n background: var(--color-site-bg);\n}\n@media screen and (max-width: 500px) {\n .l_header .switcher >li >a {\n width: 36px;\n height: 48px;\n }\n}\n.l_header .nav-sub .switcher {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n}\n.l_header .m_search {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n height: 64px;\n width: 240px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n@media screen and (max-width: 1024px) {\n .l_header .m_search {\n width: 44px;\n min-width: 44px;\n }\n .l_header .m_search input::-moz-placeholder {\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n }\n .l_header .m_search input::placeholder {\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n }\n .l_header .m_search:hover {\n width: 240px;\n }\n .l_header .m_search:hover input::-moz-placeholder {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n .l_header .m_search:hover input::placeholder {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n}\n@media screen and (min-width: 500px) {\n .l_header .m_search:hover .input {\n width: 100%;\n }\n .l_header .m_search:hover .input::-moz-placeholder {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n .l_header .m_search:hover .input::placeholder {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n}\n@media screen and (max-width: 500px) {\n .l_header .m_search {\n min-width: 0;\n }\n .l_header .m_search input::-moz-placeholder {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n .l_header .m_search input::placeholder {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n }\n}\n.l_header .m_search .form {\n position: relative;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n width: 100%;\n align-items: center;\n}\n.l_header .m_search .icon {\n position: absolute;\n width: 36px;\n left: 5px;\n color: var(--color-meta);\n}\n@media screen and (max-width: 500px) {\n .l_header .m_search .icon {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n }\n}\n.l_header .m_search .input {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n padding-top: 8px;\n padding-bottom: 8px;\n line-height: 1.3;\n width: 100%;\n color: var(--color-text);\n background: #fafafa;\n box-shadow: none;\n -webkit-box-shadow: none;\n box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n padding-left: 40px;\n font-size: 0.875rem;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n border: none;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n@media screen and (min-width: 500px) {\n .l_header .m_search .input:focus {\n box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);\n }\n}\n@media screen and (max-width: 500px) {\n .l_header .m_search .input {\n background: var(--color-block);\n padding-left: 8px;\n border: none;\n }\n .l_header .m_search .input:hover,\n .l_header .m_search .input:focus {\n border: none;\n }\n}\n@media (max-width: 500px) {\n .l_header .m_search {\n left: 0;\n width: 0;\n overflow: hidden;\n position: absolute;\n background: #fff;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n }\n .l_header .m_search .input {\n border-radius: 32px;\n -webkit-border-radius: 32px;\n margin-left: 16px;\n padding-left: 16px;\n }\n .l_header.z_search-open .m_search {\n width: 100%;\n }\n .l_header.z_search-open .m_search .input {\n width: calc(100% - 120px);\n }\n}\nul.m-pc >li>a {\n color: inherit;\n border-bottom: 2px solid transparent;\n}\nul.m-pc >li>a:active,\nul.m-pc >li>a.active {\n border-bottom: 2px solid #3dd9b6;\n}\nul.m-pc li:hover >ul.list-v,\nul.list-v li:hover >ul.list-v {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\nul.nav-list-h {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-items: stretch;\n}\nul.nav-list-h>li {\n position: relative;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n height: 100%;\n line-height: 2.4;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\nul.nav-list-h>li >a {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-weight: 600;\n}\nul.list-v {\n z-index: 1;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n position: absolute;\n background: var(--color-card);\n 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);\n -webkit-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);\n margin-top: -6px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n padding: 8px 0;\n}\nul.list-v.show {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\nul.list-v hr {\n margin-top: 8px;\n margin-bottom: 8px;\n}\nul.list-v >li {\n white-space: nowrap;\n word-break: keep-all;\n}\nul.list-v >li.header {\n font-size: 0.78125rem;\n font-weight: bold;\n line-height: 2em;\n color: var(--color-meta);\n margin: 8px 16px 4px;\n}\nul.list-v >li.header i {\n margin-right: 8px;\n}\nul.list-v >li ul {\n margin-left: 0;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n margin-top: -40px;\n}\nul.list-v .aplayer-container {\n min-height: 64px;\n padding: 6px 16px;\n}\nul.list-v >li>a {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n color: var(--color-list);\n font-size: 0.875rem;\n font-weight: bold;\n line-height: 36px;\n padding: 0 20px 0 16px;\n text-overflow: ellipsis;\n margin: 0 4px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n@media screen and (max-width: 1024px) {\n ul.list-v >li>a {\n line-height: 40px;\n }\n}\nul.list-v >li>a >i {\n margin-right: 8px;\n}\nul.list-v >li>a:active,\nul.list-v >li>a.active {\n color: var(--color-list-hl);\n}\nul.list-v >li>a:hover {\n color: var(--color-list-hl);\n background: var(--color-site-bg);\n}\n.l_header .menu >ul>li>a {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n padding: 0 8px;\n}\n.l_header .menu >ul>li>a >i {\n margin-right: 4px;\n}\n.l_header ul.nav-list-h>li {\n color: var(--color-list);\n line-height: 64px;\n}\n.l_header ul.nav-list-h>li >a {\n max-height: 64px;\n overflow: hidden;\n color: inherit;\n}\n.l_header ul.nav-list-h>li >a:active,\n.l_header ul.nav-list-h>li >a.active {\n color: #3dd9b6;\n}\n.l_header ul.nav-list-h>li:hover>a {\n color: var(--color-list-hl);\n}\n.l_header ul.nav-list-h>li i.music {\n animation: rotate-effect 1.5s linear infinite;\n -webkit-animation: rotate-effect 1.5s linear infinite;\n -khtml-animation: rotate-effect 1.5s linear infinite;\n -moz-animation: rotate-effect 1.5s linear infinite;\n -o-animation: rotate-effect 1.5s linear infinite;\n -ms-animation: rotate-effect 1.5s linear infinite;\n}\n@keyframes rotate-effect {\n 0% {\n transform: rotate(0);\n -webkit-transform: rotate(0);\n -khtml-transform: rotate(0);\n -moz-transform: rotate(0);\n -o-transform: rotate(0);\n -ms-transform: rotate(0);\n }\n 25% {\n transform: rotate(90deg);\n -webkit-transform: rotate(90deg);\n -khtml-transform: rotate(90deg);\n -moz-transform: rotate(90deg);\n -o-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n }\n 50% {\n transform: rotate(180deg);\n -webkit-transform: rotate(180deg);\n -khtml-transform: rotate(180deg);\n -moz-transform: rotate(180deg);\n -o-transform: rotate(180deg);\n -ms-transform: rotate(180deg);\n }\n 75% {\n transform: rotate(270deg);\n -webkit-transform: rotate(270deg);\n -khtml-transform: rotate(270deg);\n -moz-transform: rotate(270deg);\n -o-transform: rotate(270deg);\n -ms-transform: rotate(270deg);\n }\n 100% {\n transform: rotate(360deg);\n -webkit-transform: rotate(360deg);\n -khtml-transform: rotate(360deg);\n -moz-transform: rotate(360deg);\n -o-transform: rotate(360deg);\n -ms-transform: rotate(360deg);\n }\n}\n.menu-phone li ul.list-v {\n right: calc(100% - 0.5 * 16px);\n}\n.menu-phone li ul.list-v ul {\n right: calc(100% - 0.5 * 16px);\n}\n#wrapper {\n max-width: 1080px;\n margin: auto;\n}\n@media screen and (min-width: 2048px) {\n #wrapper {\n max-width: 55vw;\n }\n}\n#wrapper .menu {\n flex: 1 1;\n margin: 0 16px 0 0;\n}\n#wrapper .menu .list-v ul {\n left: calc(100% - 0.5 * 16px);\n}\n.menu-phone {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n margin-top: 16px;\n right: 8px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.menu-phone ul {\n right: calc(100% - 0.5 * 16px);\n}\n@media screen and (max-width: 500px) {\n .menu-phone {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n }\n}\n.l_header {\n max-width: 65vw;\n left: calc((100% - 65vw) * 0.5);\n border-bottom-left-radius: 8px;\n border-bottom-right-radius: 8px;\n}\n@media screen and (max-width: 2048px) {\n .l_header {\n max-width: 1112px;\n left: calc((100% - 1112px) * 0.5);\n }\n}\n@media screen and (max-width: 1112px) {\n .l_header {\n left: 0;\n border-radius: 0;\n -webkit-border-radius: 0;\n max-width: 100%;\n }\n}\n@media screen and (max-width: 500px) {\n .l_header .container {\n margin-left: 0;\n margin-right: 0;\n }\n .l_header #wrapper .nav-main .title {\n padding-left: 16px;\n padding-right: 16px;\n }\n .l_header #wrapper .nav-sub {\n width: 100%;\n }\n .l_header #wrapper .nav-sub .title {\n overflow-y: scroll;\n margin-top: 2px;\n padding: 8px 16px;\n }\n .l_header #wrapper .switcher {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n margin-right: 8px;\n }\n .l_header .menu {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n }\n}\n@media screen and (max-width: 500px) {\n .list-v li {\n max-width: 270px;\n }\n}\n#u-search {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 60px 20px;\n z-index: 1001;\n}\n@media screen and (max-width: 680px) {\n #u-search {\n padding: 0px;\n }\n}\n@media screen and (prefers-color-scheme: dark) and (max-width: 500px) {\n .l_header .m_search {\n background: var(--color-site-bg) !important;\n }\n}\n"]} \ No newline at end of file diff --git a/maps/css/style.css.map b/maps/css/style.css.map new file mode 100644 index 0000000000..6ea4196033 --- /dev/null +++ b/maps/css/style.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["css/style.css"],"names":[],"mappings":"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,CAAE,SAAS,CAAE,SAAS,CAAE,OAAO,CAAE,WAChG,QAAS,KAAK,IACd,cAAe,IACf,sBAAuB,IACvB,UAAW,YAGb,kBADA,gDAEE,SAAU,KAAK,OAEjB,0BACE,QAAS,YACT,QAAS,SACT,QAAS,KASX,gBACA,cAFA,gBADA,cAIA,aATA,QAGA,SACA,SAFA,SADA,SASA,4CACE,MAAO,QAST,iBACA,eAFA,iBADA,eAIA,cATA,SAGA,UACA,UAFA,UADA,UASA,6CACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,uBACA,qBAFA,uBADA,qBAIA,oBATA,eAGA,gBACA,gBAFA,gBADA,gBASA,mDACE,MAAO,QAST,sBACA,oBAFA,sBADA,oBAIA,mBATA,cAGA,eACA,eAFA,eADA,eASA,kDACE,MAAO,QAST,iBACA,eAFA,iBADA,eAIA,cATA,SAGA,UACA,UAFA,UADA,UASA,6CACE,MAAO,QAST,wBACA,sBAFA,wBADA,sBAIA,qBATA,gBAGA,iBACA,iBAFA,iBADA,iBASA,oDACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,wBACA,sBAFA,wBADA,sBAIA,qBATA,gBAGA,iBACA,iBAFA,iBADA,iBASA,oDACE,MAAO,QAST,kBACA,gBAFA,kBADA,gBAIA,eATA,UAGA,WACA,WAFA,WADA,WASA,8CACE,MAAO,QAST,sBACA,oBAFA,sBADA,oBAIA,mBATA,cAGA,eACA,eAFA,eADA,eASA,kDACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,sBACA,oBAFA,sBADA,oBAIA,mBATA,cAGA,eACA,eAFA,eADA,eASA,kDACE,MAAO,QAST,oBACA,kBAFA,oBADA,kBAIA,iBATA,YAGA,aACA,aAFA,aADA,aASA,gDACE,MAAO,QAST,sBACA,oBAFA,sBADA,oBAIA,mBATA,cAGA,eACA,eAFA,eADA,eASA,kDACE,MAAO,QAST,qBACA,mBAFA,qBADA,mBAIA,kBATA,aAGA,cACA,cAFA,cADA,cASA,iDACE,MAAO,QAST,uBACA,qBAFA,uBADA,qBAIA,oBATA,eAGA,gBACA,gBAFA,gBADA,gBASA,mDACE,MAAO,QAST,qBACA,mBAFA,qBADA,mBAIA,kBATA,aAGA,cACA,cAFA,cADA,cASA,iDACE,MAAO,QAST,sBACA,oBAFA,sBADA,oBAIA,mBATA,cAGA,eACA,eAFA,eADA,eASA,kDACE,MAAO,QAST,uBACA,qBAFA,uBADA,qBAIA,oBATA,eAGA,gBACA,gBAFA,gBADA,gBASA,mDACE,MAAO,QAST,qBACA,mBAFA,qBADA,mBAIA,kBATA,aAGA,cACA,cAFA,cADA,cASA,iDACE,MAAO,QAST,yBACA,uBAFA,yBADA,uBAIA,sBATA,iBAGA,kBACA,kBAFA,kBADA,kBASA,qDACE,MAAO,QAST,sBACA,oBAFA,sBADA,oBAIA,mBATA,cAGA,eACA,eAFA,eADA,eASA,kDACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,qBACA,mBAFA,qBADA,mBAIA,kBATA,aAGA,cACA,cAFA,cADA,cASA,iDACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,qBACA,mBAFA,qBADA,mBAIA,kBATA,aAGA,cACA,cAFA,cADA,cASA,iDACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA,gBATA,WAGA,YACA,YAFA,YADA,YASA,+CACE,MAAO,QAST,oBACA,kBAFA,oBADA,kBAIA,iBATA,YAGA,aACA,aAFA,aADA,aASA,gDACE,MAAO,QAST,wBACA,sBAFA,wBADA,sBAIA,qBATA,gBAGA,iBACA,iBAFA,iBADA,iBASA,oDACE,MAAO,QAST,mBACA,iBAFA,mBADA,iBAIA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","file":"../../css/style.css","sourcesContent":["#safearea {\n display: block;\n}\n:root {\n --block-hover: #ededed;\n --text-p1: #222;\n --text-p3: #777;\n --card: #fff;\n}\n::-moz-selection {\n background: rgba(33,150,243,0.2);\n}\n::selection {\n background: rgba(33,150,243,0.2);\n}\nh1 {\n font-size: 1.5rem;\n}\nh2 {\n font-size: 1.5rem;\n}\nh3 {\n font-size: 1.25rem;\n}\nh4 {\n font-size: 1.125rem;\n}\nh5 {\n font-size: 1rem;\n}\nh6 {\n font-size: 1rem;\n}\nh1,\nh2,\nh3,\nh4,\nh6 {\n font-weight: normal;\n}\na:not([href]) {\n cursor: default;\n}\npre {\n tab-size: 4;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n -webkit-tab-size: 4;\n}\n.clearfix {\n zoom: 1;\n}\n.clearfix:before,\n.clearfix:after {\n content: \" \";\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: table;\n}\n.clearfix:after {\n clear: both;\n}\n.hidden {\n text-indent: -9999px;\n visibility: hidden;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n.inner {\n position: relative;\n width: 80%;\n max-width: 710px;\n margin: 0 auto;\n}\n.vertical {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: table-cell;\n vertical-align: middle;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\narticle {\n overflow: hidden;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 50%;\n line-height: 1em;\n}\nsup {\n vertical-align: text-top;\n}\nsub {\n vertical-align: text-bottom;\n}\nfigure {\n margin: 1em 40px;\n}\npre {\n overflow: auto;\n}\nspan.dot,\nspan.sep {\n font-size: 0.9em;\n margin: 0 0.2rem;\n}\nspan.dot:before {\n content: '·';\n}\nspan.sep:before {\n content: '/';\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\noptgroup,\nselect,\ntextarea {\n color: inherit /* 1 */;\n font: inherit /* 2 */;\n margin: 0 /* 3 */;\n}\nselect {\n text-transform: none;\n}\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button /* 2 */;\n cursor: pointer /* 3 */;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box /* 1 */;\n -webkit-box-sizing: border-box /* 1 */;\n -moz-box-sizing: border-box /* 1 */;\n padding: 0 /* 2 */;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield /* 1 */;\n box-sizing: content-box;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0 /* 1 */;\n padding: 0 /* 2 */;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable:not([class]) {\n border-collapse: collapse;\n overflow: auto;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n max-width: 100%;\n vertical-align: text-top;\n}\ntable:not([class]) th {\n background-color: #f1f1f1;\n}\ntable:not([class]) td,\ntable:not([class]) th {\n padding: 8px 16px;\n border: 2px solid #f1f1f1;\n line-height: 1.5;\n font-size: 90%;\n}\ntable:not([class]) tr {\n word-break: keep-all;\n background-color: #fefefe;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\ntable:not([class]) tr:hover {\n background-color: #f1f1f1;\n}\ntd,\nth {\n padding: 0;\n}\narticle#arc,\narticle#cat,\narticle#tag {\n padding-top: 48px;\n padding-bottom: 48px;\n}\narticle#arc h2,\narticle#cat h2,\narticle#tag h2 {\n font-weight: 600;\n}\narticle#arc h2:first-child,\narticle#cat h2:first-child,\narticle#tag h2:first-child {\n margin-top: 0;\n}\narticle#arc {\n margin-bottom: 32px;\n padding-bottom: 64px;\n}\narticle#arc .timenode:before,\narticle#arc .timenode:after {\n margin-left: 12px;\n}\narticle#arc .timenode .meta {\n padding: 6px 0;\n line-height: 1.5;\n height: auto;\n max-width: 100%;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n font-size: 0.9375rem;\n font-weight: 500;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n color: var(--color-list);\n}\narticle#arc .timenode .meta:before {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\narticle#arc .timenode .meta:after {\n margin-left: 14px;\n}\narticle#arc .timenode .meta:hover {\n color: var(--color-p);\n background: var(--color-site-bg);\n}\narticle#arc .timenode .meta time {\n color: var(--color-meta);\n margin-left: 34px;\n margin-right: 4px;\n flex-shrink: 0;\n width: 60px;\n}\narticle#arc .timenode .meta i {\n line-height: 1.5;\n color: #ff5722;\n}\narticle#arc .timenode .meta i.red {\n color: #fe5f58;\n}\narticle#arc .timenode .meta i.green {\n color: #3dc550;\n}\narticle#arc .timenode .meta i.yellow {\n color: #ffbd2b;\n}\narticle#arc .timenode .meta i.blue {\n color: #1bcdfc;\n}\narticle#arc .timenode .meta i.theme {\n color: #3dd9b6;\n}\narticle#arc .timenode .meta i.accent {\n color: #ff5722;\n}\narticle#arc .timenode .meta i.orange {\n color: #ff5722;\n}\narticle#cat .all-cats a {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n padding: 8px 16px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n color: var(--color-list);\n font-size: 0.9375rem;\n font-weight: 500;\n}\narticle#cat .all-cats a:hover {\n color: var(--color-list-hl);\n background: var(--color-site-bg);\n}\narticle#cat .all-cats a.child {\n padding-left: 48px;\n}\narticle#tag .all-tags {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-items: flex-start;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n align-items: baseline;\n text-align: center;\n}\narticle#tag .all-tags ul {\n margin: 0 -8px;\n padding: 0;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n}\narticle#tag .all-tags ul li {\n list-style: none;\n margin: 8px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n overflow: hidden;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n position: relative;\n font-size: 0.9375rem;\n}\narticle#tag .all-tags ul li a {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n color: var(--color-list);\n padding: 4px 52px 4px 16px;\n background: var(--color-block);\n font-weight: 500;\n}\narticle#tag .all-tags ul li a:hover {\n background: #ff5722;\n color: #fff;\n}\narticle#tag .all-tags ul li span {\n color: var(--color-meta);\n background: var(--color-card);\n padding: 2px 8px;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n pointer-events: none;\n position: absolute;\n right: 2px;\n top: 2px;\n height: calc(100% - 4px);\n}\narticle#tag .all-tags ul li span:before {\n content: 'x';\n}\n.article {\n color: var(--color-p);\n word-wrap: break-word;\n}\n.article a {\n word-break: break-word;\n}\n.article h1.title,\n.article h2.title {\n left: 0;\n}\n.article h1.title:before,\n.article h2.title:before {\n content: none;\n}\n.article h1,\n.article h2 {\n padding-bottom: 0.2rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid rgba(68,68,68,0.1);\n}\n.article h1 {\n text-align: left;\n color: var(--color-h1);\n margin-top: 48px;\n}\n.article h2 {\n text-align: left;\n color: var(--color-h2);\n margin-top: 48px;\n}\n.article h3 {\n text-align: left;\n color: var(--color-h3);\n margin-top: 24px;\n}\n.article h4 {\n text-align: left;\n color: var(--color-h4);\n margin-top: 16px;\n}\n.article h5 {\n font-weight: bold;\n color: var(--color-h5);\n margin-top: 1em;\n}\n.article h6 {\n color: var(--color-h6);\n margin-top: 1em;\n}\n.article center,\n.article center p {\n text-align: center;\n}\n.article .aplayer {\n margin: 1em 0;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n width: 400px;\n max-width: 100%;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n color: #666;\n}\n.article p.small-img img,\n.article div.small-img img {\n width: auto;\n max-width: 100%;\n margin: 0;\n box-shadow: none;\n -webkit-box-shadow: none;\n}\n.article s {\n color: #8e8e8e;\n -webkit-text-decoration-color: #8e8e8e;\n text-decoration-color: #8e8e8e;\n}\n.article p {\n margin-top: 1em;\n margin-bottom: 1em;\n text-align: justify;\n max-width: 100%;\n line-height: inherit;\n}\n.article .subtitle h6 {\n color: rgba(68,68,68,0.9);\n}\n.article figure figcaption span {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n margin-right: 5px;\n}\n.article blockquote {\n background: var(--color-block);\n border-left: 4px solid #3dd9b6;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n.article blockquote {\n position: relative;\n width: 100%;\n padding: 16px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.article blockquote,\n.article blockquote p,\n.article blockquote ul,\n.article blockquote ol {\n text-align: left;\n word-wrap: normal;\n font-size: 0.9375rem;\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n.article blockquote footer {\n padding: 0;\n text-align: justify;\n color: inherit;\n font-style: italic;\n margin: 1em 0;\n}\n.article blockquote footer cite {\n color: var(--color-meta);\n margin-left: 1em;\n}\n.article blockquote footer cite::before {\n content: '----';\n padding: 0 0.3em;\n}\n.article blockquote.pullquote.right {\n border-left: none;\n border-right: 4px solid #3dd9b6;\n}\n.article blockquote.pullquote.right p {\n text-align: right;\n}\n.article pre {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n box-sizing: border-box;\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n margin-top: 1em;\n margin-bottom: 1em;\n overflow: auto;\n background: var(--color-codeblock);\n font-size: 0.8125rem;\n font-family: SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace, monospace, courier, sans-serif;\n border: 1px solid #ffebcb;\n padding: 16px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n.article pre >code:not([class]) {\n background: transparent;\n}\n.article div>pre {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n.article div>pre>code:not([class]) {\n padding: 0;\n margin: 0;\n background: transparent;\n color: rgba(68,68,68,0.9);\n}\n.article code {\n font-family: SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace, monospace, courier, sans-serif;\n}\n.article code:not([class]) {\n word-break: break-all;\n color: var(--color-inlinecode);\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n@media screen and (max-width: 500px) {\n .article ul,\n .article ol {\n font-size: 0.875rem;\n }\n .article figure {\n font-size: 13px;\n line-height: 1.5;\n }\n}\n.article .widget {\n background: transparent;\n margin: 1em 0;\n box-shadow: none;\n -webkit-box-shadow: none;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n cursor: auto;\n background: var(--color-block);\n padding: 8px 0;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n width: 100%;\n}\n.article .widget:hover {\n box-shadow: none;\n -webkit-box-shadow: none;\n}\n.article .widget:active {\n box-shadow: none;\n -webkit-box-shadow: none;\n}\n.article .widget header {\n padding: 4px 0.6em;\n padding-bottom: 0;\n}\n.article .widget header,\n.article .widget header a {\n color: rgba(68,68,68,0.85);\n}\n.article .widget.copyright,\n.article .widget.qrcode {\n background: none;\n padding: 0;\n}\n.article .widget.copyright header,\n.article .widget.qrcode header {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n.article .widget.copyright .content,\n.article .widget.qrcode .content {\n padding: 0;\n}\n.article .widget.list .content,\n.article .widget.related_posts .content {\n padding: 0 0.6em !important;\n}\n.article .widget.list .content a,\n.article .widget.related_posts .content a {\n color: #2092ec;\n}\n.article .widget.list .content a:hover,\n.article .widget.related_posts .content a:hover {\n color: #ff5722;\n}\n.article .widget .content {\n padding: 0 0.6em;\n margin: 0;\n}\n.article .widget .content ul {\n padding-left: 4px;\n margin-left: 16px;\n}\n.article .widget .content ul a {\n transition: all 0.1s ease;\n -webkit-transition: all 0.1s ease;\n -khtml-transition: all 0.1s ease;\n -moz-transition: all 0.1s ease;\n -o-transition: all 0.1s ease;\n -ms-transition: all 0.1s ease;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n border-left: none;\n padding: 0;\n padding-left: 4px;\n color: #2092ec;\n font-weight: normal;\n text-decoration: none;\n}\n.article .widget .content ul a:hover,\n.article .widget .content ul a.active,\n.article .widget .content ul a:active {\n border-left: none !important;\n background: none !important;\n}\n.article .widget .content ul a:hover {\n color: #ff5722;\n}\n.article .widget .content .list a .name {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n color: #2092ec;\n}\n.article .widget .content .list a:hover .name {\n color: #ff5722;\n}\n.article .widget.qrcode > .content {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n padding-left: 16px;\n padding-right: 16px;\n margin-bottom: 4px;\n}\n.article .widget.qrcode > .content>.fancybox,\n.article .widget.qrcode > .content>img {\n margin: 0 8px;\n}\n.article .widget.qrcode > .content img {\n margin-bottom: 4px;\n}\n.article .article_footer {\n margin-top: 64px;\n}\n.article .widget-blur {\n -webkit-backdrop-filter: none;\n backdrop-filter: none;\n}\n.md .footer {\n margin-top: 64px;\n}\n.md .footer >div {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n.md .footer .header {\n line-height: 1.75;\n padding-bottom: 8px;\n font-weight: 500;\n font-size: 0.875rem;\n color: var(--color-list);\n}\n.md .footer .header i {\n margin-right: 2px;\n}\n.md .footer .body ul,\n.md .footer .body ol {\n margin-top: 0;\n margin-bottom: 0;\n}\n.md .footer .references,\n.md .footer .related_posts {\n background: var(--color-block);\n border-radius: 4px;\n -webkit-border-radius: 4px;\n padding: 16px;\n}\n.md .footer .references .body a {\n font-size: 0.9375rem;\n font-weight: 500;\n}\n.md .footer .related_posts .body {\n margin: 4px;\n overflow: hidden;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n.md .footer .related_posts .body .vlts-rps {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n}\n.md .footer .related_posts .body .vlts-rps .item {\n flex-shrink: 0;\n width: 240px;\n}\n.md .footer .related_posts .body .vlts-rps .item+.item {\n margin-left: 16px;\n}\n.md .footer .related_posts .body .vlts-rps .item:hover img {\n filter: ;\n}\n.md .footer .related_posts .body .vlts-rps img {\n border-radius: 2px;\n -webkit-border-radius: 2px;\n width: 100%;\n height: 120px;\n -o-object-fit: cover;\n object-fit: cover;\n filter: ;\n}\n.md .footer .related_posts .body .vlts-rps span {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: justify;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n.md .footer .related_posts .body .vlts-rps .title {\n font-weight: 600;\n -webkit-line-clamp: 1;\n}\n.md .footer .related_posts .body .vlts-rps .excerpt {\n font-size: 0.875rem;\n color: var(--color-meta);\n -webkit-line-clamp: 3;\n}\n.md .footer .copyright blockquote p {\n font-size: 0.875rem;\n margin: 0.25em 0;\n}\n.md .footer .copyright blockquote p a {\n font-weight: 500;\n}\n.md .footer .donate {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n margin: 0 auto;\n}\n.md .footer .donate .imgs {\n display: inline-flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: inline-flex;\n margin: 0 auto;\n}\n.md .footer .donate .imgs .fancybox {\n margin: 8px;\n}\n.md .footer .donate .imgs img {\n width: 80px;\n}\narticle .readmore {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin-top: 24px;\n font-size: 0.875rem;\n}\n.copyright.license {\n background: var(--color-copyright-bkg);\n color: var(--color-meta);\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n font-size: 0.95rem;\n line-height: 1.2;\n margin: 15px -40px;\n overflow: hidden;\n padding: 1.25em 40px;\n position: relative;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n.copyright.license:after {\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg version='1.1' id='Capa_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 367.467 367.467' style='enable-background:new 0 0 367.467 367.467;' xml:space='preserve'%3E%3Cg%3E%3Cpath d='M183.73,0.018C82.427,0.018,0,82.404,0,183.733c0,101.289,82.427,183.716,183.73,183.716 c101.315,0,183.737-82.427,183.737-183.716C367.467,82.404,285.045,0.018,183.73,0.018z M183.73,326.518 c-78.743,0-142.798-64.052-142.798-142.784c0-78.766,64.055-142.817,142.798-142.817c78.752,0,142.807,64.052,142.807,142.817 C326.536,262.466,262.481,326.518,183.73,326.518z'/%3E%3Cpath d='M244.036,217.014c-11.737,20.141-33.562,32.635-56.956,32.635c-36.329,0-65.921-29.585-65.921-65.915 c0-36.36,29.592-65.955,65.921-65.955c23.395,0,45.219,12.54,56.956,32.641l1.517,2.627h44.28l-2.658-7.129 c-7.705-20.413-21.225-37.769-39.122-50.157c-17.942-12.42-39.017-19.009-60.973-19.009c-58.981,0-106.946,48.006-106.946,106.982 c0,58.98,47.965,106.941,106.946,106.941c21.956,0,43.03-6.567,60.973-19.006c17.897-12.391,31.417-29.741,39.122-50.154 l2.658-7.133h-44.28L244.036,217.014z'/%3E%3C/g%3E%3C/svg%3E\");\n content: \" \";\n opacity: 0.1;\n -webkit-opacity: 0.1;\n -moz-opacity: 0.1;\n height: 180px;\n right: -10px;\n top: -35px;\n width: 180px;\n position: absolute;\n}\n.copyright.license a {\n color: var(--color-meta);\n}\n.copyright.license a:hover {\n color: #ff5722;\n}\n.copyright.license .license-title,\n.copyright.license .license-meta-title {\n margin: 0 0 0.25rem;\n}\n.copyright.license .license-link,\n.copyright.license .license-meta-title {\n font-size: 0.8rem;\n}\n.copyright.license .license-title {\n font-weight: 700;\n}\n.copyright.license .license-link {\n margin-bottom: 1rem;\n}\n.copyright.license .license-meta {\n align-items: center;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n}\n.copyright.license .license-meta-item {\n margin: 0 2rem 1em 0;\n}\n.copyright.license .license-meta-text {\n margin: 0;\n}\n.copyright.license .license-meta-text a {\n border-bottom: 1px solid var(--color-meta);\n}\n.copyright.license .license-meta-text a:hover {\n border-bottom-color: #ff5722;\n}\n.recommended-article {\n overflow: hidden;\n}\n.recommended-article .recommended-article-header {\n margin-top: 8px;\n margin-left: 8px;\n margin-right: 0;\n}\n.recommended-article .recommended-article-group {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n overflow: hidden;\n}\n@media screen and (max-width: 768px) {\n .recommended-article .recommended-article-group {\n height: 190px;\n overflow: scroll;\n -ms-overflow-style: none;\n }\n .recommended-article .recommended-article-group::-webkit-scrollbar {\n width: 0 !important;\n }\n}\n.recommended-article .recommended-article-group .recommended-article-item {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-content: center;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n overflow: hidden;\n width: calc(100%/3 - 16px);\n max-height: 200px;\n margin-top: 8px;\n margin-left: 8px;\n margin-right: 0;\n}\n@media screen and (max-width: 768px) {\n .recommended-article .recommended-article-group .recommended-article-item {\n width: calc(100%/2 - 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .recommended-article .recommended-article-group .recommended-article-item {\n width: calc(100% - 16px);\n }\n}\n.recommended-article .recommended-article-group .recommended-article-item img {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n width: 100%;\n height: 150px;\n}\n.recommended-article .recommended-article-group .recommended-article-item span {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: justify;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n overflow: hidden;\n}\nfooter.footer {\n position: relative;\n padding: 40px 10px 120px 10px;\n width: 100%;\n color: var(--color-site-footer);\n margin: 0px auto;\n overflow: hidden;\n text-align: center;\n}\nfooter.footer,\nfooter.footer p {\n font-size: 0.8125rem;\n}\nfooter.footer .licenses {\n color: fade(, 50%);\n}\nfooter.footer .social-wrapper {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n margin: 4px 8px;\n}\nfooter.footer a {\n color: var(--color-site-footer);\n padding: 0;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\nfooter.footer a:hover {\n color: #ff5722;\n}\nfooter.footer a:not(.social):hover {\n text-decoration: underline;\n}\nfooter.footer a.social {\n position: relative;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n text-align: center;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n min-width: 36px;\n min-height: 36px;\n margin: 4px;\n opacity: 0.75;\n -webkit-opacity: 0.75;\n -moz-opacity: 0.75;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n font-size: 1rem;\n}\nfooter.footer a.social img {\n margin: 8px;\n height: 24px;\n}\nfooter.footer a.social:hover {\n color: #ff5722;\n background: rgba(255,87,34,0.1);\n}\nfooter.footer .copyright {\n margin-top: 16px;\n}\nfooter.footer .copyright p {\n font-size: 0.78125rem;\n}\n@media screen and (max-width: 768px) {\n footer.footer {\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n }\n}\n.article.l_friends .friends-group .friend-content {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n margin: -8px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n align-items: flex-start;\n line-height: 1.3;\n}\n.article.l_friends .friends-group .friend-content .friend-card {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n padding: 8px 0;\n margin: 8px;\n margin-top: calc(2.25 * 16px + 32px);\n color: var(--color-meta);\n background: var(--color-block);\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n align-content: flex-start;\n flex-direction: column;\n width: calc(100%/4 - 16px);\n}\n@media screen and (max-width: 1024px) {\n .article.l_friends .friends-group .friend-content .friend-card {\n width: calc(100%/4 - 16px);\n }\n}\n@media screen and (max-width: 768px) {\n .article.l_friends .friends-group .friend-content .friend-card {\n width: calc(100%/3 - 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .article.l_friends .friends-group .friend-content .friend-card {\n width: calc(100%/2 - 16px);\n }\n}\n.article.l_friends .friends-group .friend-content .friend-card:hover .friend-left .avatar {\n transform: scale(1.2) rotate(12deg);\n -webkit-transform: scale(1.2) rotate(12deg);\n -khtml-transform: scale(1.2) rotate(12deg);\n -moz-transform: scale(1.2) rotate(12deg);\n -o-transform: scale(1.2) rotate(12deg);\n -ms-transform: scale(1.2) rotate(12deg);\n 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);\n -webkit-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);\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-left {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-self: center;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-left .avatar {\n width: 64px;\n height: 64px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n margin: 16px 8px 4px 8px;\n margin-top: calc(-1.25 * 16px - 32px);\n border-radius: 100%;\n -webkit-border-radius: 100%;\n border: 2px solid #fff;\n background: #fff;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-right {\n margin: 4px 8px;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n text-align: center;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-right p {\n text-align: center;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-right .friend-tags-wrapper {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n margin-left: -2px;\n word-break: break-all;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-right p {\n margin: 0;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-right p.friend-name {\n font-size: 0.8125rem;\n padding-top: 4px;\n font-weight: bold;\n}\n.article.l_friends .friends-group .friend-content .friend-card .friend-right p.tags {\n font-size: 0.78125rem;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n background: none;\n word-wrap: break-word;\n padding-right: 4px;\n}\n.md img {\n position: relative;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n@media screen and (max-width: 500px) {\n .md img {\n box-shadow: none;\n -webkit-box-shadow: none;\n }\n}\n.md div>img,\n.md p>img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin: auto;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n@media screen and (max-width: 500px) {\n .md div>img,\n .md p>img {\n border-radius: 2px;\n -webkit-border-radius: 2px;\n }\n}\n.md span img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n margin: auto;\n}\n.md .img-wrap {\n margin: 1.5rem auto;\n text-align: center;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n overflow: hidden;\n}\n.md .img-wrap .img-bg {\n width: 100%;\n}\n.md .img-wrap .image-caption {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin: 0.75rem auto;\n font-size: 0.8125rem;\n color: var(--color-meta);\n}\n.md .img-wrap .image-caption:empty {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\nsvg.loading {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n position: absolute;\n color: var(--text-p3);\n width: 100%;\n height: 2rem;\n margin: auto;\n animation: spin infinite 2s;\n -webkit-animation: spin infinite 2s;\n -khtml-animation: spin infinite 2s;\n -moz-animation: spin infinite 2s;\n -o-animation: spin infinite 2s;\n -ms-animation: spin infinite 2s;\n animation-timing-function: linear;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n -khtml-transform: rotate(0deg);\n -moz-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n -ms-transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n -webkit-transform: rotate(360deg);\n -khtml-transform: rotate(360deg);\n -moz-transform: rotate(360deg);\n -o-transform: rotate(360deg);\n -ms-transform: rotate(360deg);\n }\n}\n#safearea {\n margin: 16px 16px 0;\n}\n#l_body {\n position: relative;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n#l_body div.loading {\n margin: 16px 0;\n width: 100%;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\n#l_body div.loading,\n#l_body div.loading p {\n text-align: center;\n}\n#l_body #s-top {\n transition: all 0.6s ease;\n -webkit-transition: all 0.6s ease;\n -khtml-transition: all 0.6s ease;\n -moz-transition: all 0.6s ease;\n -o-transition: all 0.6s ease;\n -ms-transition: all 0.6s ease;\n z-index: 50;\n position: fixed;\n width: 48px;\n height: 48px;\n line-height: 48px;\n border-radius: 100%;\n -webkit-border-radius: 100%;\n bottom: 32px;\n right: 32px;\n transform: translateY(100px) scale(0);\n -webkit-transform: translateY(100px) scale(0);\n -khtml-transform: translateY(100px) scale(0);\n -moz-transform: translateY(100px) scale(0);\n -o-transform: translateY(100px) scale(0);\n -ms-transform: translateY(100px) scale(0);\n transform-origin: bottom;\n -webkit-transform-origin: bottom;\n -khtml-transform-origin: bottom;\n -moz-transform-origin: bottom;\n -o-transform-origin: bottom;\n -ms-transform-origin: bottom;\n color: var(--color-text);\n}\n@media screen and (max-width: 768px) {\n #l_body #s-top {\n right: 16px;\n }\n}\n#l_body #s-top.show {\n transform: translateY(0) scale(1);\n -webkit-transform: translateY(0) scale(1);\n -khtml-transform: translateY(0) scale(1);\n -moz-transform: translateY(0) scale(1);\n -o-transform: translateY(0) scale(1);\n -ms-transform: translateY(0) scale(1);\n}\n#l_body #s-top.show.hl {\n background: #3dd9b6;\n color: #fff;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n}\n@media screen and (min-width: 768px) {\n #l_body #s-top:hover {\n transform: scale(1.2);\n -webkit-transform: scale(1.2);\n -khtml-transform: scale(1.2);\n -moz-transform: scale(1.2);\n -o-transform: scale(1.2);\n -ms-transform: scale(1.2);\n border-radius: 25%;\n -webkit-border-radius: 25%;\n background: #3dd9b6;\n color: #fff;\n 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);\n -webkit-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);\n }\n #l_body #s-top:hover.hl {\n 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);\n -webkit-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);\n }\n}\n#l_main {\n width: calc(100% - 1 * 240px);\n padding-right: 16px;\n float: left;\n}\n@media screen and (max-width: 768px) {\n #l_main {\n width: 100%;\n }\n}\n#l_main.no_sidebar {\n width: 100%;\n padding-right: 0;\n max-width: 840px;\n margin: auto;\n}\n@media screen and (min-width: 2048px) {\n #l_main.no_sidebar {\n max-width: calc(55vw - 240px);\n }\n}\n#l_main.no_sidebar ~#l_side {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n#l_main .post-list {\n position: relative;\n margin-bottom: 16px;\n column-gap: 16px;\n -webkit-column-gap: 16px;\n -moz-column-gap: 16px;\n}\n#l_main .post-list.multiple-columns {\n -moz-columns: 320px;\n columns: 320px;\n}\n#l_main .post-wrapper {\n column-break-inside: avoid;\n -moz-column-break-inside: avoid;\n break-inside: avoid-column;\n}\n#l_main .widget .content p,\n#l_main .widget .content ul,\n#l_main .widget .content ol,\n#l_main .widget .content table,\n#l_main .widget .content .tabs,\n#l_main .widget .content details {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n#l_main .widget .content .post {\n padding-top: 0;\n padding-bottom: 0;\n margin-top: 1em;\n margin-bottom: 1em;\n}\n#l_main .widget.grid .content .grid.fixed a {\n width: calc(100%/8 - 0 * 16px);\n}\n@media screen and (max-width: 1024px) {\n #l_main .widget.grid .content .grid.fixed a {\n width: calc(100%/7 - 0 * 16px);\n }\n}\n@media screen and (max-width: 768px) {\n #l_main .widget.grid .content .grid.fixed a {\n width: calc(100%/6 - 0 * 16px);\n }\n}\n@media screen and (max-width: 500px) {\n #l_main .widget.grid .content .grid.fixed a {\n width: calc(100%/5 - 0 * 16px);\n }\n}\n@media screen and (max-width: 425px) {\n #l_main .widget.grid .content .grid.fixed a {\n width: calc(100%/4 - 0 * 16px);\n }\n}\n@media screen and (max-width: 375px) {\n #l_main .widget.grid .content .grid.fixed a {\n width: calc(100%/3 - 0 * 16px);\n }\n}\n#l_main .post {\n position: relative;\n margin-bottom: 16px;\n padding: 24px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n}\n#l_main .post h1.title {\n font-size: 1.5rem;\n margin: 0;\n border-bottom: none;\n padding-bottom: 4px;\n border-bottom: none;\n}\n#l_main .post .article-meta {\n color: var(--color-meta);\n margin-bottom: 16px;\n line-height: normal;\n}\n#l_main .post .article-meta#top {\n margin-top: 16px;\n margin-bottom: 32px;\n}\n#l_main .post .article-meta#bottom {\n margin-top: 32px;\n margin-bottom: 8px;\n}\n#l_main .post .article-meta .aplayer,\n#l_main .post .article-meta .aplayer-pic,\n#l_main .post .article-meta .thumbnail {\n width: 48px;\n height: 48px;\n}\n#l_main .post .article-meta .aplayer,\n#l_main .post .article-meta .thumbnail {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n border-radius: 100%;\n -webkit-border-radius: 100%;\n float: right;\n margin: 2px;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n}\n#l_main .post .article-meta .aplayer:hover,\n#l_main .post .article-meta .thumbnail:hover {\n border-radius: 25%;\n -webkit-border-radius: 25%;\n transform: scale(1.1);\n -webkit-transform: scale(1.1);\n -khtml-transform: scale(1.1);\n -moz-transform: scale(1.1);\n -o-transform: scale(1.1);\n -ms-transform: scale(1.1);\n 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);\n -webkit-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);\n}\n@media screen and (max-width: 500px) {\n #l_main .post .article-meta .aplayer:hover,\n #l_main .post .article-meta .thumbnail:hover {\n border-radius: 100%;\n -webkit-border-radius: 100%;\n transform: scale(1);\n -webkit-transform: scale(1);\n -khtml-transform: scale(1);\n -moz-transform: scale(1);\n -o-transform: scale(1);\n -ms-transform: scale(1);\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n }\n}\n#l_main .post .article-meta .thumbnail {\n width: auto;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n box-shadow: none;\n -webkit-box-shadow: none;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n#l_main .post .article-meta .thumbnail:hover {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n transform: scale(1.1) rotate(4deg);\n -webkit-transform: scale(1.1) rotate(4deg);\n -khtml-transform: scale(1.1) rotate(4deg);\n -moz-transform: scale(1.1) rotate(4deg);\n -o-transform: scale(1.1) rotate(4deg);\n -ms-transform: scale(1.1) rotate(4deg);\n box-shadow: none;\n -webkit-box-shadow: none;\n}\n#l_main .post .article-meta .new-meta-box {\n transition: all 0.1s ease;\n -webkit-transition: all 0.1s ease;\n -khtml-transition: all 0.1s ease;\n -moz-transition: all 0.1s ease;\n -o-transition: all 0.1s ease;\n -ms-transition: all 0.1s ease;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n -webkit-font-smoothing: auto;\n -moz-osx-font-smoothing: auto;\n}\n#l_main .post .article-meta .new-meta-box,\n#l_main .post .article-meta .new-meta-box p,\n#l_main .post .article-meta .new-meta-box i {\n font-size: 0.8125rem;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item {\n color: var(--color-meta);\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-items: baseline;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n margin: 0 16px 0 0;\n padding: 8px 0;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item .notlink {\n cursor: default;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item .notlink:hover {\n color: var(--color-meta);\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item .notlink:hover p {\n color: var(--color-meta);\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item:last-child {\n margin-right: 0;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item img,\n#l_main .post .article-meta .new-meta-box .new-meta-item i {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item i {\n margin-right: 4px;\n border-radius: 0;\n -webkit-border-radius: 0;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item i.fa-hashtag {\n margin-right: 2px;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item p,\n#l_main .post .article-meta .new-meta-box .new-meta-item a {\n color: var(--color-meta);\n padding: 3px 0;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item a {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item a img {\n height: 16px;\n width: 16px;\n margin-right: 8px;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item a p {\n margin: 0;\n font-weight: normal;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item a:hover {\n color: #ff5722;\n}\n#l_main .post .article-meta .new-meta-box .new-meta-item a:hover p {\n color: #ff5722;\n}\n#l_main .post .article-meta .new-meta-box .author img,\n#l_main .post .article-meta .new-meta-box .author i {\n border-radius: 100%;\n -webkit-border-radius: 100%;\n}\n#l_main .post .article-meta .new-meta-box .author img {\n transform: translateY(-0.5px);\n -webkit-transform: translateY(-0.5px);\n -khtml-transform: translateY(-0.5px);\n -moz-transform: translateY(-0.5px);\n -o-transform: translateY(-0.5px);\n -ms-transform: translateY(-0.5px);\n}\n@media screen and (max-width: 500px) {\n #l_main .post .article-meta .new-meta-box .share {\n width: 100%;\n margin-top: 16px;\n background: var(--color-block);\n border-radius: 4px;\n -webkit-border-radius: 4px;\n }\n}\n#l_main .post .article-meta .new-meta-box .share-body {\n position: relative;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n margin: 0;\n padding: 0 2px;\n}\n#l_main .post .article-meta .new-meta-box .share-body a {\n padding: 0;\n margin: 0 1px;\n}\n#l_main .post .article-meta .new-meta-box .share-body a img {\n margin: 2px;\n height: 24px;\n width: auto;\n background: transparent;\n}\n@media screen and (max-width: 500px) {\n #l_main .post .article-meta .new-meta-box .share-body a img {\n height: 32px;\n margin: 8px;\n }\n}\n#l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n position: absolute;\n background: var(--color-card);\n border-radius: 8px;\n -webkit-border-radius: 8px;\n 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);\n -webkit-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);\n padding: 8px;\n left: 50%;\n top: -20px;\n transform: translate(-50%, -100%);\n -webkit-transform: translate(-50%, -100%);\n -khtml-transform: translate(-50%, -100%);\n -moz-transform: translate(-50%, -100%);\n -o-transform: translate(-50%, -100%);\n -ms-transform: translate(-50%, -100%);\n}\n#l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin: 0;\n padding: 0;\n height: 128px;\n width: 128px;\n min-width: 128px;\n}\n#l_main .post .article-meta .new-meta-box .share-body div.hoverbox:hover div.target {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n}\n@media screen and (max-width: 500px) {\n #l_main .post .article-meta .new-meta-box .share-body div.hoverbox div.target {\n position: absolute;\n }\n}\n#l_main .post span>img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n}\n#l_main .post a img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n}\n@media screen and (max-width: 768px) {\n #l_main {\n padding-right: 0;\n }\n}\n@media screen and (max-width: 768px) and (max-width: 500px) {\n #l_main {\n width: 100%;\n }\n}\n.body-wrapper {\n position: relative;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n width: 100%;\n max-width: 1080px;\n margin: 0 auto;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n align-items: stretch;\n}\n@media screen and (min-width: 2048px) {\n .body-wrapper {\n max-width: 55vw;\n }\n}\narticle#comments p[ct] {\n margin-top: 0;\n margin-bottom: 1em;\n font-size: 1.125rem;\n color: var(--color-text);\n font-weight: 600;\n}\narticle#comments p[cst] {\n margin-top: 1em;\n margin-bottom: 1em;\n font-size: 0.875rem;\n}\narticle#comments #load-btns,\narticle#comments #loading-comments {\n text-align: center;\n margin: 16px 0;\n}\narticle#comments #load-btns,\narticle#comments #loading-comments,\narticle#comments #load-btns a,\narticle#comments #loading-comments a,\narticle#comments #load-btns i,\narticle#comments #loading-comments i {\n line-height: 3em;\n}\narticle#comments #load-btns a.load-comments,\narticle#comments #loading-comments a.load-comments {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n cursor: pointer;\n background: #44d7b6;\n color: #fff;\n padding-left: 48px;\n padding-right: 48px;\n}\narticle#comments #load-btns a.load-comments:hover,\narticle#comments #loading-comments a.load-comments:hover {\n background: #ff5722;\n}\n.white-box {\n background: var(--color-card);\n}\nimg {\n max-width: 100%;\n}\nimg.lazyload:not(.placeholder) {\n transition: opacity 0.5s ease-out 0s;\n transition: filter 0.25s ease-out 0s;\n -webkit-transition: filter 0.25s ease-out 0s;\n -khtml-transition: filter 0.25s ease-out 0s;\n -moz-transition: filter 0.25s ease-out 0s;\n -o-transition: filter 0.25s ease-out 0s;\n -ms-transition: filter 0.25s ease-out 0s;\n}\nimg.lazyload:not(.placeholder):not(.loaded) {\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n}\nimg.lazyload:not(.placeholder).loaded {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n}\nimg.lazyload:not(.placeholder):not(.loaded) {\n filter: blur(8px);\n}\nimg.lazyload:not(.placeholder).loaded {\n filter: none;\n}\n.md >p {\n padding-top: 4px;\n}\n.md h1,\n.md h2,\n.md h3,\n.md h4,\n.md h5,\n.md h6 {\n position: relative;\n pointer-events: none;\n margin-top: 0;\n font-weight: 500;\n}\n.md h1 >a,\n.md h2 >a,\n.md h3 >a,\n.md h4 >a,\n.md h5 >a,\n.md h6 >a {\n color: inherit;\n pointer-events: auto;\n}\n.md h1 >a:hover,\n.md h2 >a:hover,\n.md h3 >a:hover,\n.md h4 >a:hover,\n.md h5 >a:hover,\n.md h6 >a:hover {\n color: #ff5722;\n}\n.md h1:before,\n.md h2:before,\n.md h3:before,\n.md h4:before,\n.md h5:before,\n.md h6:before {\n content: '';\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin-top: -48px;\n height: 96px;\n visibility: hidden;\n pointer-events: none;\n}\n.md h1:before,\n.md h2:before {\n margin-top: -32px;\n}\n.md .article-meta+h1,\n.md .article-meta+h2 {\n margin-top: -80px;\n}\n.md h3,\n.md h4,\n.md h5,\n.md h6 {\n margin-bottom: 1em;\n}\n.md h3:before {\n margin-top: -56px;\n}\n.md h4:before {\n margin-top: -64px;\n}\n.md h5 {\n font-weight: bold;\n}\n.md h2+h3:before {\n margin-top: -80px;\n}\n.md ul,\n.md ol {\n font-size: 0.9375rem;\n list-style: initial;\n padding-left: 8px;\n margin-left: 16px;\n margin-top: 1em;\n margin-bottom: 1em;\n}\n.md ul ul,\n.md ol ul,\n.md ul ol,\n.md ol ol {\n margin-top: 0;\n margin-bottom: 0;\n}\n.md ul li,\n.md ol li {\n margin-top: 0px;\n margin-bottom: 0px;\n}\n.md ul li li,\n.md ol li li {\n margin-top: 0;\n margin-bottom: 0;\n}\n.md ul li p,\n.md ol li p {\n margin-top: 4px;\n margin-bottom: 0;\n}\n.md ul.task-list,\n.md ol.task-list {\n padding-left: 0;\n margin-left: 4px;\n}\n.md ul.task-list li,\n.md ol.task-list li {\n list-style: none;\n}\n.md ul.task-list li input,\n.md ol.task-list li input {\n margin-right: 4px;\n}\n.md ul>li {\n list-style: initial;\n}\n.md ol>li {\n list-style: decimal;\n}\n.md .div-ori-link {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: center;\n margin: 4rem 0;\n}\n.md .ori-link {\n margin: auto;\n padding: 1em 3em;\n border: 1px solid #3dd9b6;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n color: #3dd9b6;\n font-weight: 500;\n}\n.md .ori-link:hover {\n color: #ff5722;\n border-color: #ff5722;\n}\n#l_main .prev-next {\n width: 100%;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n align-items: baseline;\n color: var(--color-meta);\n margin: 0;\n font-weight: 600;\n}\n#l_main .prev-next .prev {\n text-align: left;\n border-top-right-radius: 32px;\n border-bottom-right-radius: 32px;\n}\n#l_main .prev-next .next {\n text-align: right;\n border-top-left-radius: 32px;\n border-bottom-left-radius: 32px;\n}\n#l_main .prev-next p {\n margin: 16px;\n}\n#l_main .prev-next section {\n color: var(--color-meta);\n padding: 16px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n}\n#l_main .prev-next section:hover {\n color: #ff5722;\n}\n#l_main .article .prev-next {\n width: 100%;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n align-content: flex-start;\n margin-top: 8px;\n}\n#l_main .article .prev-next >a {\n width: 100%;\n padding: 8px;\n color: var(--color-meta);\n background: var(--color-block);\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n#l_main .article .prev-next >a:hover {\n background: #ffeee8;\n}\n#l_main .article .prev-next >a:hover p.title {\n color: #ff5722;\n}\n#l_main .article .prev-next >a p {\n margin: 8px 0.5rem;\n}\n#l_main .article .prev-next >a p.title {\n font-weight: 600;\n font-size: 1rem;\n}\n#l_main .article .prev-next >a p.title >i {\n width: 1rem;\n}\n#l_main .article .prev-next >a p.content {\n font-size: 0.875rem;\n font-weight: 400;\n text-align: justify;\n word-break: break-all;\n}\n#l_main .article .prev-next >a:only-child {\n margin-left: 0;\n margin-right: 0;\n}\n#l_main .article .prev-next .prev {\n margin-left: 0;\n margin-right: 8px;\n}\n#l_main .article .prev-next .prev p.title {\n text-align: left;\n}\n#l_main .article .prev-next .next {\n margin-left: 8px;\n margin-right: 0;\n}\n#l_main .article .prev-next .next p.title {\n text-align: right;\n}\n.article-title {\n font-weight: 500;\n margin-bottom: 12px;\n line-height: 1.4;\n}\n.article-title a {\n color: var(--color-h1);\n}\n.article-title a:hover {\n color: #ff5722;\n}\n.article-title[pin] {\n margin-right: 36px;\n}\n.article-desc {\n word-break: break-word;\n}\n.post-v3 {\n overflow: hidden;\n text-align: justify;\n}\n.post-v3 .md {\n color: var(--color-p);\n}\n.post-v3 .pin {\n position: absolute;\n width: 20px;\n height: 20px;\n border-radius: 20px;\n -webkit-border-radius: 20px;\n right: 24px;\n top: 24px;\n z-index: 1;\n pointer-events: none;\n}\n.meta-v3[line_style='solid'] {\n border-top: 1px solid rgba(68,68,68,0.1);\n}\n.meta-v3[line_style='dashed'] {\n border-top: 2px dashed rgba(68,68,68,0.1);\n}\n.meta-v3[line_style='dotted'] {\n border-top: 4px dotted rgba(68,68,68,0.1);\n}\n.meta-v3 {\n margin-top: 16px;\n padding-top: 12px;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n color: var(--color-meta);\n}\n.meta-v3 >div {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-items: center;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n.meta-v3 time {\n font-size: 0.875rem;\n}\n.meta-v3 .category-link {\n font-size: 0.875rem;\n color: var(--color-meta);\n -webkit-font-smoothing: auto;\n -moz-osx-font-smoothing: auto;\n}\n.meta-v3 .category-link:hover {\n color: #ff5722;\n}\n.meta-v3 .readmore {\n font-weight: bold;\n}\n.meta-v3 .avatar {\n line-height: 0;\n margin-right: 0.75em;\n}\n.meta-v3 .avatar img {\n width: 24px;\n height: 24px;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n border-radius: 12px;\n -webkit-border-radius: 12px;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.headimg-div {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin-left: -24px;\n margin-top: -24px;\n margin-bottom: 20px;\n width: calc(100% + 3 * 16px);\n}\n.headimg-div .headimg-a {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n overflow: hidden;\n height: 280px;\n}\n@media screen and (max-width: 768px) {\n .headimg-div .headimg-a {\n height: 250px;\n }\n}\n@media screen and (max-width: 500px) {\n .headimg-div .headimg-a {\n height: 220px;\n }\n}\n@media screen and (max-width: 425px) {\n .headimg-div .headimg-a {\n height: 190px;\n }\n}\n.headimg-div .headimg {\n -o-object-fit: cover;\n object-fit: cover;\n width: 100%;\n height: 100%;\n transition: transform 3s ease-out;\n -webkit-transition: transform 3s ease-out;\n -khtml-transition: transform 3s ease-out;\n -moz-transition: transform 3s ease-out;\n -o-transition: transform 3s ease-out;\n -ms-transition: transform 3s ease-out;\n}\n.headimg-div .headimg:hover {\n transform: scale(1.1);\n -webkit-transform: scale(1.1);\n -khtml-transform: scale(1.1);\n -moz-transform: scale(1.1);\n -o-transform: scale(1.1);\n -ms-transform: scale(1.1);\n}\n.headimg-div .headimg.lazyload:not(.placeholder) {\n transition: transform 3s ease-out, opacity 0.5s ease-out;\n -webkit-transition: transform 3s ease-out, opacity 0.5s ease-out;\n -khtml-transition: transform 3s ease-out, opacity 0.5s ease-out;\n -moz-transition: transform 3s ease-out, opacity 0.5s ease-out;\n -o-transition: transform 3s ease-out, opacity 0.5s ease-out;\n -ms-transition: transform 3s ease-out, opacity 0.5s ease-out;\n}\n.headimg-div .headimg.lazyload:not(.placeholder):not(.loaded) {\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n}\n.headimg-div .headimg.lazyload:not(.placeholder).loaded {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n}\n#u-search .modal {\n position: fixed;\n height: 80%;\n width: 100%;\n max-width: 640px;\n left: 50%;\n top: 0;\n margin: 64px 0px 0px -320px;\n background: var(--color-card);\n z-index: 3;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n overflow: hidden;\n}\n#u-search .modal .search-icon,\n#u-search .modal #resule-hits-empty {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 50%;\n text-align: center;\n transform: translate(-50%, -50%);\n -webkit-transform: translate(-50%, -50%);\n -khtml-transform: translate(-50%, -50%);\n -moz-transform: translate(-50%, -50%);\n -o-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n}\n#u-search .modal .search-icon i,\n#u-search .modal #resule-hits-empty i {\n font-size: 8em;\n color: #e8e8e8;\n margin-bottom: 10px;\n}\n@media screen and (max-width: 680px) {\n #u-search .modal {\n box-shadow: none;\n -webkit-box-shadow: none;\n max-width: none;\n top: 0;\n left: 0;\n margin: 0;\n height: 100%;\n border-radius: 0;\n -webkit-border-radius: 0;\n }\n}\n#u-search .modal .modal-header {\n position: relative;\n width: 100%;\n height: 64px;\n z-index: 3;\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n font-size: $fontsize;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n background: #fff;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n@media screen and (max-width: 680px) {\n #u-search .modal .modal-header {\n border-radius: 0;\n -webkit-border-radius: 0;\n padding: 0px;\n }\n}\n#u-search .modal .modal-header .btn-close {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n position: absolute;\n width: 55px;\n height: 64px;\n top: 0;\n right: 0;\n color: #3dd9b6;\n cursor: pointer;\n text-align: center;\n line-height: 64px;\n vertical-align: middle;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n z-index: 2;\n}\n#u-search .modal .modal-header .btn-close:hover {\n transform: rotate(90deg);\n -webkit-transform: rotate(90deg);\n -khtml-transform: rotate(90deg);\n -moz-transform: rotate(90deg);\n -o-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n}\n#u-search .modal .modal-header #u-search-modal-form {\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 2;\n}\n#u-search .modal .modal-header #u-search-modal-form input {\n color: var(--color-text);\n}\n#u-search .modal .modal-header #u-search-modal-form #u-search-modal-input {\n margin: 16px 50px;\n padding: 0 8px;\n width: calc(100% - 100px - 16px);\n line-height: 2rem;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n vertical-align: middle;\n border: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n box-shadow: none;\n -webkit-box-shadow: none;\n background: transparent;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n@media screen and (max-width: 680px) {\n #u-search .modal .modal-header #u-search-modal-form #u-search-modal-input {\n padding: 0;\n }\n}\n#u-search .modal .modal-header #u-search-modal-form #u-search-modal-input:focus {\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n}\n#u-search .modal .modal-header #u-search-modal-btn-submit {\n position: absolute;\n top: 0;\n left: 0;\n padding-left: 5px;\n padding-top: 2px;\n background: transparent;\n border: none;\n width: 50px;\n height: 64px;\n vertical-align: middle;\n color: #3dd9b6;\n z-index: 2;\n}\n#u-search .modal .modal-body {\n position: absolute;\n padding: 16px;\n width: 100%;\n height: calc(100% - 64px);\n top: 64px;\n left: 0;\n overflow-y: scroll;\n -webkit-overflow-scrolling: touch;\n background: var(--color-card);\n border-radius: 8px;\n -webkit-border-radius: 8px;\n}\n#u-search .modal .modal-body::-webkit-scrollbar {\n height: 4px;\n width: 4px;\n}\n#u-search .modal .modal-body::-webkit-scrollbar-track-piece {\n background: transparent;\n}\n#u-search .modal .modal-body::-webkit-scrollbar-thumb {\n background: #3dd9b6;\n cursor: pointer;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n#u-search .modal .modal-body::-webkit-scrollbar-thumb:hover {\n background: #ff5722;\n}\n#u-search .modal .modal-body .modal-results {\n list-style: none;\n}\n#u-search .modal .modal-body .modal-results .result {\n position: relative;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n padding: 16px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n}\n#u-search .modal .modal-body .modal-results .result b[mark] {\n color: #25be9c;\n text-decoration: underline;\n font-size: 120%;\n background-color: #ffe600;\n}\n#u-search .modal .modal-body .modal-results .result:hover {\n background: var(--color-site-bg);\n}\n#u-search .modal .modal-body .modal-results .result:hover .title {\n color: var(--color-list-hl);\n}\n#u-search .modal .modal-body .modal-results .result .title {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n max-width: 100%;\n color: var(--color-list);\n font-weight: bold;\n padding: 1px;\n margin-bottom: 2px;\n white-space: normal;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 1.125rem;\n}\n#u-search .modal .modal-body .modal-results .result .digest {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n white-space: inherit;\n overflow: hidden;\n word-break: break-all;\n text-overflow: ellipsis;\n font-size: 0.8125rem;\n color: var(--color-meta);\n}\n#u-search .modal .modal-body .modal-results .result .icon {\n position: absolute;\n top: 50%;\n right: 0;\n margin-top: -4px;\n font-size: 11px;\n color: var(--color-meta);\n}\n#u-search .modal-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.7);\n z-index: 1;\n}\n#l_side {\n width: 240px;\n float: right;\n position: relative;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n}\n@media screen and (max-width: 768px) {\n #l_side {\n width: 100%;\n }\n}\n#l_side .widget {\n overflow: hidden;\n}\n#l_side .widget.sticky {\n position: sticky;\n top: 80px;\n z-index: 1;\n}\n#l_side .widget >.content {\n max-height: 200vh;\n overflow: auto;\n text-align: justify;\n font-size: 0.875rem;\n max-width: 100%;\n}\n@media screen and (max-width: 768px) {\n #l_side .widget >.content {\n max-height: none;\n }\n}\n#l_side .widget >.content::-webkit-scrollbar {\n height: 4px;\n width: 4px;\n}\n#l_side .widget >.content::-webkit-scrollbar-track-piece {\n background: transparent;\n}\n#l_side .widget >.content::-webkit-scrollbar-thumb {\n background: #3dd9b6;\n cursor: pointer;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n#l_side .widget >.content::-webkit-scrollbar-thumb:hover {\n background: #ff5722;\n}\n.widget {\n z-index: 0;\n background: var(--color-card);\n margin-bottom: 16px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n width: 100%;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n.widget ul li,\n.widget ol li {\n margin-top: 0;\n margin-bottom: 0;\n}\n.widget.desktop {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\n@media screen and (max-width: 768px) {\n .widget {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none !important;\n }\n .widget.mobile {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block !important;\n }\n}\n.widget header {\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n padding: calc(16px - 2px);\n font-weight: bold;\n font-size: 0.875rem;\n padding-bottom: 0;\n}\n.widget header,\n.widget header a {\n color: var(--color-meta);\n}\n.widget header >a:hover {\n color: #ff5722;\n}\n.widget header span.name {\n margin-left: 8px;\n}\n.widget >.content {\n padding: 8px 0;\n}\n.widget >.content p {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n.widget >.content p:first-child {\n margin-top: 0.5em;\n}\n.widget >.content ul>li a {\n color: var(--color-meta);\n padding: 0 16px;\n padding-left: 12px;\n line-height: 2;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n align-content: center;\n border-left: 2px solid transparent;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.widget >.content ul.entry,\n.widget >.content ul.popular-posts {\n list-style: none;\n}\n.widget >.content ul.entry a,\n.widget >.content ul.popular-posts a {\n color: var(--color-list);\n}\n.widget >.content ul.entry a .name,\n.widget >.content ul.popular-posts a .name {\n flex: auto 0;\n}\n.widget >.content ul.entry a .badge,\n.widget >.content ul.popular-posts a .badge {\n flex: none 0;\n font-weight: normal;\n font-size: 0.875rem;\n color: rgba(68,68,68,0.7);\n}\n.widget >.content ul.entry a.active,\n.widget >.content ul.popular-posts a.active {\n border-left: 2px solid #3dd9b6;\n color: var(--color-list-hl);\n}\n.widget >.content ul.entry a.active .badge,\n.widget >.content ul.popular-posts a.active .badge {\n color: rgba(61,217,182,0.9);\n}\n.widget >.content ul.entry a.child,\n.widget >.content ul.popular-posts a.child {\n padding-left: 32px;\n}\n.widget >.content ul.entry a:hover,\n.widget >.content ul.popular-posts a:hover {\n border-left: 2px solid #3dd9b6;\n color: var(--color-list-hl);\n background: var(--color-site-bg);\n}\n.widget.blogger {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.widget.blogger .content {\n padding: 0;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n.widget.blogger .content >.avatar {\n align-self: center;\n overflow: hidden;\n position: relative;\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n line-height: 0;\n}\n.widget.blogger .content >.avatar.circle {\n border-radius: 100%;\n -webkit-border-radius: 100%;\n width: 128px;\n height: 128px;\n margin-top: 32px;\n margin-bottom: 1em;\n}\n.widget.blogger .content >.avatar.circle img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n -webkit-transform: translate(-50%, -50%);\n -khtml-transform: translate(-50%, -50%);\n -moz-transform: translate(-50%, -50%);\n -o-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n}\n@media screen and (max-width: 768px) {\n .widget.blogger .content >.avatar {\n width: 80px;\n height: 80px;\n border-radius: 100%;\n -webkit-border-radius: 100%;\n border: 2px solid #fff;\n }\n .widget.blogger .content >.avatar img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n -webkit-transform: translate(-50%, -50%);\n -khtml-transform: translate(-50%, -50%);\n -moz-transform: translate(-50%, -50%);\n -o-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n position: absolute;\n }\n}\n.widget.blogger .content .text :first-child {\n margin-top: 16px;\n}\n.widget.blogger .content h2 {\n text-align: center;\n font-weight: bold;\n margin: 8px;\n}\n@media screen and (max-width: 768px) {\n .widget.blogger .content h2 {\n margin: 8px;\n }\n}\n.widget.blogger .content p {\n text-align: center;\n font-weight: bold;\n margin: 8px 8px 0 8px;\n empty-cells: hide;\n}\n.widget.blogger .content .social-wrapper {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n margin: 4px 4px;\n}\n.widget.blogger .content .social-wrapper a {\n color: var(--color-meta);\n padding: 0;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.widget.blogger .content .social-wrapper a:hover {\n color: #ff5722;\n}\n.widget.blogger .content .social-wrapper a.social {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n margin: 4px;\n border-radius: 100px;\n -webkit-border-radius: 100px;\n}\n.widget.blogger .content .social-wrapper a.social:hover {\n background: #ebfbf7;\n color: #3dd9b6;\n}\n@media screen and (max-width: 768px) {\n .widget.blogger .content .social-wrapper {\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n }\n}\n@media screen and (max-width: 768px) {\n .widget.blogger {\n box-shadow: none;\n -webkit-box-shadow: none;\n background: transparent !important;\n margin-top: 32px;\n -webkit-backdrop-filter: none;\n backdrop-filter: none;\n color: var(--color-site-inner);\n }\n}\n.widget.text .content {\n padding: 4px 16px;\n}\n.widget.text .content,\n.widget.text .content p {\n font-size: 0.875rem;\n word-break: break-all;\n}\n.widget.text .content a {\n color: #2092ec;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.widget.text .content a:hover {\n color: #ff5722;\n}\n.widget.text .content a:active {\n color: #d93400;\n}\n.widget.list .content {\n padding: 8px 0;\n}\n.widget.list .content a {\n font-size: 0.875rem;\n font-weight: bold;\n line-height: 1.5;\n padding-top: 6px;\n padding-bottom: 6px;\n}\n.widget.list .content a img,\n.widget.list .content a i {\n margin-right: 4px;\n}\n.widget.list .content a i {\n margin-left: 1px;\n}\n.widget.list .content a img {\n vertical-align: middle;\n height: 20px;\n width: 20px;\n margin-bottom: 4px;\n}\n.widget.list .content a img#round {\n border-radius: 100%;\n -webkit-border-radius: 100%;\n}\n.widget.grid .content .grid {\n border: none;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n justify-content: space-around;\n -webkit-justify-content: space-around;\n -khtml-justify-content: space-around;\n -moz-justify-content: space-around;\n -o-justify-content: space-around;\n -ms-justify-content: space-around;\n padding: 4px 16px;\n}\n.widget.grid .content .grid a {\n text-align: center;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n margin: 0;\n padding: 4px 8px;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n align-items: center;\n font-size: 0.78125rem;\n font-weight: bold;\n color: rgba(68,68,68,0.7);\n line-height: 1.5;\n word-wrap: break-word;\n}\n.widget.grid .content .grid a i {\n margin-top: 0.3em;\n margin-bottom: 0.3em;\n font-size: 1.8em;\n}\n.widget.grid .content .grid a img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n vertical-align: middle;\n margin-bottom: 4px;\n}\n.widget.grid .content .grid a img#round {\n border-radius: 100%;\n -webkit-border-radius: 100%;\n}\n.widget.grid .content .grid a.active {\n color: var(--color-list-hl);\n background: var(--color-site-bg);\n}\n.widget.grid .content .grid a:hover {\n color: var(--color-list-hl);\n background: var(--color-site-bg);\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n.widget.grid .content .grid.fixed a {\n width: calc(100%/3 - 0 * 16px);\n}\n@media screen and (max-width: 768px) {\n .widget.grid .content .grid.fixed a {\n width: calc(100%/6 - 0 * 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .widget.grid .content .grid.fixed a {\n width: calc(100%/5 - 0 * 16px);\n }\n}\n@media screen and (max-width: 425px) {\n .widget.grid .content .grid.fixed a {\n width: calc(100%/4 - 0 * 16px);\n }\n}\n@media screen and (max-width: 375px) {\n .widget.grid .content .grid.fixed a {\n width: calc(100%/3 - 0 * 16px);\n }\n}\n.widget.tagcloud .content {\n text-align: justify;\n padding: 8px 16px;\n}\n.widget.tagcloud .content a {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n line-height: 1.2em;\n margin: 4px 0;\n border-bottom: 1px solid transparent;\n}\n.widget.tagcloud .content a:hover {\n color: #ff5722 !important;\n border-bottom: 1px solid #ff5722;\n}\n.widget.related_posts .content {\n font-weight: bold;\n}\n.widget.related_posts .content ul {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.widget.related_posts .content h3 {\n font-size: 0.875rem;\n font-weight: bold;\n margin: 0;\n}\n.widget.related_posts .content h3 a {\n line-height: inherit;\n padding-top: 4px;\n padding-bottom: 4px;\n}\n.widget.qrcode .content {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-items: center;\n justify-content: space-around;\n -webkit-justify-content: space-around;\n -khtml-justify-content: space-around;\n -moz-justify-content: space-around;\n -o-justify-content: space-around;\n -ms-justify-content: space-around;\n padding-left: 16px;\n padding-right: 16px;\n}\n.widget.qrcode .content,\n.widget.qrcode .content img {\n margin-bottom: 4px;\n}\n#l_side>.widget.page >.content {\n padding-top: 0;\n padding-left: 12px;\n padding-right: 12px;\n}\n.webinfo {\n padding: 0.2rem 1rem;\n}\n.webinfo .webinfo-item {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n padding: 4px 0 0;\n}\n.webinfo .webinfo-item div:first-child {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n}\n.webinfo .webinfo-item div:last-child {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n float: right;\n}\n.widget-last {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block !important;\n}\n.widget-last .item {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: space-between;\n -webkit-justify-content: space-between;\n -khtml-justify-content: space-between;\n -moz-justify-content: space-between;\n -o-justify-content: space-between;\n -ms-justify-content: space-between;\n font-size: 0.8rem;\n}\n.widget-last .item-title {\n width: 100%;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.widget-sticky {\n position: sticky;\n top: 80px;\n z-index: 10;\n}\n.bber-talk {\n padding: 0.2rem 1rem;\n}\n.bber-talk :hover {\n border-color: #49b1f5;\n box-shadow: none;\n -webkit-box-shadow: none;\n}\n.bber-talk a {\n color: var(--font-color);\n}\n.bber-talk .talk-list {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block !important;\n max-height: 25px;\n overflow: hidden;\n}\n.bber-talk .talk-list :hover {\n color: #49b1f5 !important;\n transition: all 0.2s ease-in-out;\n -webkit-transition: all 0.2s ease-in-out;\n -khtml-transition: all 0.2s ease-in-out;\n -moz-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n -ms-transition: all 0.2s ease-in-out;\n}\n.bber-talk .talk-list .item {\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 98%;\n overflow: hidden;\n}\n.snackbar-wrap {\n position: fixed;\n width: 100%;\n left: 0;\n bottom: 0;\n background: #3dd9b6;\n padding: 16px;\n z-index: 2;\n}\n.snackbar-content {\n max-width: 1080px;\n margin: 16px auto;\n}\n@media screen and (max-width: 1080px) {\n .snackbar-content {\n max-width: 100%;\n }\n}\n.snackbar-content p {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n color: #fff;\n}\n.snackbar-content .title {\n font-size: 1.5rem;\n font-weight: 600;\n}\n.snackbar-content .action {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n margin: 1.5rem -4px;\n}\n.snackbar-content .action a {\n margin: 4px;\n cursor: pointer;\n color: #fff;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n padding: 0.4em 2em;\n font-weight: 600;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n border: 1px solid #fff;\n}\n.snackbar-content .action a:hover {\n color: #3dd9b6;\n background: #fff;\n}\n.snackbar-wrap[theme='warning'] {\n background: #f7e751;\n}\n.snackbar-wrap[theme='warning'] .snackbar-content p {\n color: #000;\n}\n.snackbar-wrap[theme='warning'] .snackbar-content a {\n color: #000;\n border-color: #000;\n}\n.snackbar-wrap[theme='warning'] .snackbar-content a:hover {\n color: #f7e751;\n background: #000;\n}\n#l_side .toc-wrapper {\n z-index: 1;\n overflow: hidden;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n line-height: 1.6;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n#l_side .toc-wrapper header {\n position: sticky;\n width: 100%;\n top: 0;\n padding-bottom: 4px;\n}\n#l_side .toc-wrapper .content {\n max-height: calc(100vh - 144px);\n}\n#l_side .toc-wrapper .content a {\n border-left: 2px solid transparent;\n}\n#l_side .toc-wrapper .content a.active {\n color: var(--color-list-hl);\n border-left: 2px solid #3dd9b6;\n}\n#l_side .toc-wrapper .content a:hover {\n color: var(--color-list-hl);\n background: var(--color-site-bg);\n border-left: 2px solid #3dd9b6;\n}\n@media screen and (max-width: 768px) {\n #l_side .toc-wrapper {\n z-index: 1001;\n position: fixed;\n max-height: 1000px;\n width: auto;\n max-width: calc(100% - 2 * 16px);\n top: 48px;\n right: 16px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);\n border: 1px solid #e7e7e7;\n visibility: hidden;\n transform: scale(0, 0);\n -webkit-transform: scale(0, 0);\n -khtml-transform: scale(0, 0);\n -moz-transform: scale(0, 0);\n -o-transform: scale(0, 0);\n -ms-transform: scale(0, 0);\n transform-origin: right top;\n -webkit-transform-origin: right top;\n -khtml-transform-origin: right top;\n -moz-transform-origin: right top;\n -o-transform-origin: right top;\n -ms-transform-origin: right top;\n }\n #l_side .toc-wrapper.active {\n visibility: visible;\n transform: scale(1, 1);\n -webkit-transform: scale(1, 1);\n -khtml-transform: scale(1, 1);\n -moz-transform: scale(1, 1);\n -o-transform: scale(1, 1);\n -ms-transform: scale(1, 1);\n }\n}\n@media screen and (max-width: 375px) {\n #l_side .toc-wrapper {\n right: 0;\n }\n}\n#l_side .toc-wrapper a {\n padding-left: 8px;\n color: var(--color-meta);\n font-size: 0.875rem;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n}\n#l_side .toc-wrapper ul .toc-child a,\n#l_side .toc-wrapper ol .toc-child a {\n font-weight: normal;\n}\n#l_side .toc-wrapper ul .toc-item.toc-level-1 .toc-child a,\n#l_side .toc-wrapper ol .toc-item.toc-level-1 .toc-child a {\n padding-left: 12.8px;\n}\n#l_side .toc-wrapper ul .toc-item.toc-level-2 .toc-child a,\n#l_side .toc-wrapper ol .toc-item.toc-level-2 .toc-child a {\n padding-left: 25.6px;\n}\n#l_side .toc-wrapper ul .toc-item.toc-level-3 .toc-child a,\n#l_side .toc-wrapper ol .toc-item.toc-level-3 .toc-child a {\n padding-left: 38.4px;\n}\n#l_side .toc-wrapper ul .toc-item.toc-level-4 .toc-child a,\n#l_side .toc-wrapper ol .toc-item.toc-level-4 .toc-child a {\n padding-left: 51.2px;\n}\n#l_side .toc-wrapper ul .toc-item.toc-level-5 .toc-child a,\n#l_side .toc-wrapper ol .toc-item.toc-level-5 .toc-child a {\n padding-left: 64px;\n}\n#l_side .toc-wrapper ul .toc-item.toc-level-6 .toc-child a,\n#l_side .toc-wrapper ol .toc-item.toc-level-6 .toc-child a {\n padding-left: 76.8px;\n}\n#l_side .toc-wrapper ul li,\n#l_side .toc-wrapper ol li {\n width: auto;\n text-align: left;\n}\n#l_side .toc-wrapper ul li a,\n#l_side .toc-wrapper ol li a {\n padding: 0 8px 0 11px;\n font-weight: bold;\n width: 100%;\n}\n#l_side .toc-wrapper:empty {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n#l_side .toc-wrapper .toc-child {\n font-size: 1rem;\n overflow: hidden;\n transition: max-height 0.6s ease-in;\n -webkit-transition: max-height 0.6s ease-in;\n -khtml-transition: max-height 0.6s ease-in;\n -moz-transition: max-height 0.6s ease-in;\n -o-transition: max-height 0.6s ease-in;\n -ms-transition: max-height 0.6s ease-in;\n max-height: 0;\n}\n#l_side .toc-wrapper .toc-item.active>.toc-link {\n color: var(--color-list-hl);\n border-left: 2px solid #3dd9b6;\n}\n#l_side .toc-wrapper .toc-item.active>.toc-child {\n max-height: 1000px;\n}\n.md .video-wrap {\n margin: 1.5rem auto;\n}\n.article span.btn,\n.md span.btn {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n}\n.article span.btn a,\n.md span.btn a {\n text-decoration: none;\n border-bottom: none;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n padding: 3px 4px 2px 4px;\n margin: 2px;\n line-height: 1.1;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.article span.btn a i,\n.md span.btn a i {\n margin-right: 2px;\n}\n.article span.btn a:not([href]),\n.md span.btn a:not([href]) {\n opacity: 0.5;\n -webkit-opacity: 0.5;\n -moz-opacity: 0.5;\n}\n.article span.btn a:not([href]):hover,\n.md span.btn a:not([href]):hover {\n cursor: $not-allowed, not-allowed;\n}\n.article span.btn a,\n.md span.btn a,\n.article span.btn.regular a,\n.md span.btn.regular a {\n color: #44d7b6;\n border: 1px solid #44d7b6;\n}\n.article span.btn a:hover,\n.md span.btn a:hover,\n.article span.btn.regular a:hover,\n.md span.btn.regular a:hover {\n color: #ff5722;\n border-color: #ff5722;\n}\n.article span.btn a i,\n.md span.btn a i,\n.article span.btn.regular a i,\n.md span.btn.regular a i {\n margin-right: 4px;\n}\n.article span.btn.regular a,\n.md span.btn.regular a,\n.article span.btn.solid a,\n.md span.btn.solid a {\n padding: 8px 12px;\n}\n.article span.btn.solid a,\n.md span.btn.solid a {\n border: none;\n background: #44d7b6;\n color: #fff;\n}\n.article span.btn.solid a:hover,\n.md span.btn.solid a:hover {\n color: #fff;\n background: #ff5722;\n}\n.article span.btn.large a,\n.md span.btn.large a {\n font-size: 1rem;\n padding: 12px 36px;\n}\n.article span.btn.large a i,\n.md span.btn.large a i {\n margin-right: 8px;\n}\n.article span.btn.center,\n.md span.btn.center {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: center;\n}\n.article div.btns,\n.md div.btns {\n margin: 0 -8px;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-items: flex-start;\n overflow: visible;\n line-height: 1.8;\n}\n.article div.btns,\n.md div.btns,\n.article div.btns p,\n.md div.btns p,\n.article div.btns a,\n.md div.btns a {\n font-size: 0.8125rem;\n color: var(--color-p);\n}\n.article div.btns b,\n.md div.btns b {\n font-size: 0.875rem;\n}\n.article div.btns.wide>a,\n.md div.btns.wide>a {\n padding-left: 32px;\n padding-right: 32px;\n}\n.article div.btns.fill>a,\n.md div.btns.fill>a {\n flex-grow: 1;\n width: auto;\n}\n.article div.btns.around,\n.md div.btns.around {\n justify-content: space-around;\n -webkit-justify-content: space-around;\n -khtml-justify-content: space-around;\n -moz-justify-content: space-around;\n -o-justify-content: space-around;\n -ms-justify-content: space-around;\n}\n.article div.btns.center,\n.md div.btns.center {\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n}\n.article div.btns.grid2>a,\n.md div.btns.grid2>a {\n width: calc(100%/2 - 16px);\n}\n@media screen and (max-width: 1024px) {\n .article div.btns.grid2>a,\n .md div.btns.grid2>a {\n width: calc(100%/2 - 16px);\n }\n}\n@media screen and (max-width: 768px) {\n .article div.btns.grid2>a,\n .md div.btns.grid2>a {\n width: calc(100%/2 - 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .article div.btns.grid2>a,\n .md div.btns.grid2>a {\n width: calc(100%/1 - 16px);\n }\n}\n.article div.btns.grid3>a,\n.md div.btns.grid3>a {\n width: calc(100%/3 - 16px);\n}\n@media screen and (max-width: 1024px) {\n .article div.btns.grid3>a,\n .md div.btns.grid3>a {\n width: calc(100%/3 - 16px);\n }\n}\n@media screen and (max-width: 768px) {\n .article div.btns.grid3>a,\n .md div.btns.grid3>a {\n width: calc(100%/3 - 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .article div.btns.grid3>a,\n .md div.btns.grid3>a {\n width: calc(100%/1 - 16px);\n }\n}\n.article div.btns.grid4>a,\n.md div.btns.grid4>a {\n width: calc(100%/4 - 16px);\n}\n@media screen and (max-width: 1024px) {\n .article div.btns.grid4>a,\n .md div.btns.grid4>a {\n width: calc(100%/3 - 16px);\n }\n}\n@media screen and (max-width: 768px) {\n .article div.btns.grid4>a,\n .md div.btns.grid4>a {\n width: calc(100%/3 - 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .article div.btns.grid4>a,\n .md div.btns.grid4>a {\n width: calc(100%/2 - 16px);\n }\n}\n.article div.btns.grid5>a,\n.md div.btns.grid5>a {\n width: calc(100%/5 - 16px);\n}\n@media screen and (max-width: 1024px) {\n .article div.btns.grid5>a,\n .md div.btns.grid5>a {\n width: calc(100%/4 - 16px);\n }\n}\n@media screen and (max-width: 768px) {\n .article div.btns.grid5>a,\n .md div.btns.grid5>a {\n width: calc(100%/3 - 16px);\n }\n}\n@media screen and (max-width: 500px) {\n .article div.btns.grid5>a,\n .md div.btns.grid5>a {\n width: calc(100%/2 - 16px);\n }\n}\n.article div.btns a,\n.md div.btns a {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n text-decoration: none;\n border-bottom: none;\n margin: 8px;\n margin-top: calc(1.25 * 16px + 32px);\n min-width: 120px;\n font-weight: bold;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n align-content: center;\n align-items: center;\n flex-direction: column;\n padding: 8px;\n text-align: center;\n background: var(--color-block);\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n.article div.btns a>img:first-child,\n.md div.btns a>img:first-child,\n.article div.btns a>i:first-child,\n.md div.btns a>i:first-child {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n height: 64px;\n width: 64px;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n margin: 16px 8px 4px 8px;\n margin-top: calc(-1.25 * 16px - 32px);\n border: 2px solid var(--color-card);\n background: #fff;\n line-height: 60px;\n font-size: 28px;\n}\n.article div.btns a>img:first-child.auto,\n.md div.btns a>img:first-child.auto,\n.article div.btns a>i:first-child.auto,\n.md div.btns a>i:first-child.auto {\n width: auto;\n}\n.article div.btns a>i:first-child,\n.md div.btns a>i:first-child {\n color: #fff;\n background: #3dd9b6;\n}\n.article div.btns a p,\n.md div.btns a p,\n.article div.btns a b,\n.md div.btns a b {\n margin: 0.25em;\n font-weight: normal;\n line-height: 1.25;\n word-wrap: break-word;\n}\n.article div.btns a b,\n.md div.btns a b {\n font-weight: bold;\n line-height: 1.3;\n}\n.article div.btns a img,\n.md div.btns a img {\n margin: 0.4em auto;\n}\n.article div.btns a:not([href]),\n.md div.btns a:not([href]) {\n cursor: default;\n color: inherit;\n}\n.article div.btns a[href]:hover,\n.md div.btns a[href]:hover {\n background: rgba(255,87,34,0.15);\n}\n.article div.btns a[href]:hover,\n.md div.btns a[href]:hover,\n.article div.btns a[href]:hover b,\n.md div.btns a[href]:hover b {\n color: #ff5722;\n}\n.article div.btns a[href]:hover>img:first-child,\n.md div.btns a[href]:hover>img:first-child,\n.article div.btns a[href]:hover>i:first-child,\n.md div.btns a[href]:hover>i:first-child {\n transform: scale(1.1) translateY(-8px);\n -webkit-transform: scale(1.1) translateY(-8px);\n -khtml-transform: scale(1.1) translateY(-8px);\n -moz-transform: scale(1.1) translateY(-8px);\n -o-transform: scale(1.1) translateY(-8px);\n -ms-transform: scale(1.1) translateY(-8px);\n box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.1);\n}\n.article div.btns a[href]:hover>i:first-child,\n.md div.btns a[href]:hover>i:first-child {\n background: #ff5722;\n}\n.article div.btns.circle a>img:first-child,\n.md div.btns.circle a>img:first-child,\n.article div.btns.circle a>i:first-child,\n.md div.btns.circle a>i:first-child {\n border-radius: 32px;\n -webkit-border-radius: 32px;\n}\n.article div.btns.rounded a>img:first-child,\n.md div.btns.rounded a>img:first-child,\n.article div.btns.rounded a>i:first-child,\n.md div.btns.rounded a>i:first-child {\n border-radius: 16px;\n -webkit-border-radius: 16px;\n}\n.md .checkbox {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-items: center;\n margin-top: 1em;\n margin-bottom: 1em;\n/* Checkbox */\n/* Radio */\n/* Colors */\n}\n.md .checkbox+.checkbox {\n margin-top: -1em;\n}\n.md .checkbox input {\n transform: translate(0, -1px);\n -webkit-transform: translate(0, -1px);\n -khtml-transform: translate(0, -1px);\n -moz-transform: translate(0, -1px);\n -o-transform: translate(0, -1px);\n -ms-transform: translate(0, -1px);\n -webkit-appearance: none;\n -moz-appearance: none;\n -o-appearance: none;\n appearance: none;\n position: relative;\n height: 16px;\n width: 16px;\n transition: all 0.15s ease-out 0s;\n -webkit-transition: all 0.15s ease-out 0s;\n -khtml-transition: all 0.15s ease-out 0s;\n -moz-transition: all 0.15s ease-out 0s;\n -o-transition: all 0.15s ease-out 0s;\n -ms-transition: all 0.15s ease-out 0s;\n cursor: pointer;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n outline: none;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n flex-shrink: 0;\n margin-right: 8px;\n pointer-events: none;\n}\n.md .checkbox input[type=checkbox]:before,\n.md .checkbox input[type=checkbox]:after {\n position: absolute;\n content: \"\";\n background: #fff;\n}\n.md .checkbox input[type=checkbox]:before {\n left: 1px;\n top: 5px;\n width: 0px;\n height: 2px;\n transition: all 0.2s ease-in;\n -webkit-transition: all 0.2s ease-in;\n -khtml-transition: all 0.2s ease-in;\n -moz-transition: all 0.2s ease-in;\n -o-transition: all 0.2s ease-in;\n -ms-transition: all 0.2s ease-in;\n transform: rotate(45deg);\n -webkit-transform: rotate(45deg);\n -khtml-transform: rotate(45deg);\n -moz-transform: rotate(45deg);\n -o-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n -webkit-transform: rotate(45deg);\n -moz-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n -o-transform: rotate(45deg);\n}\n.md .checkbox input[type=checkbox]:after {\n right: 7px;\n bottom: 3px;\n width: 2px;\n height: 0px;\n transition: all 0.2s ease-out;\n -webkit-transition: all 0.2s ease-out;\n -khtml-transition: all 0.2s ease-out;\n -moz-transition: all 0.2s ease-out;\n -o-transition: all 0.2s ease-out;\n -ms-transition: all 0.2s ease-out;\n transform: rotate(40deg);\n -webkit-transform: rotate(40deg);\n -khtml-transform: rotate(40deg);\n -moz-transform: rotate(40deg);\n -o-transform: rotate(40deg);\n -ms-transform: rotate(40deg);\n -webkit-transform: rotate(40deg);\n -moz-transform: rotate(40deg);\n -ms-transform: rotate(40deg);\n -o-transform: rotate(40deg);\n transition-delay: 0.25s;\n -webkit-transition-delay: 0.25s;\n -khtml-transition-delay: 0.25s;\n -moz-transition-delay: 0.25s;\n -o-transition-delay: 0.25s;\n -ms-transition-delay: 0.25s;\n}\n.md .checkbox input[type=checkbox]:checked:before {\n left: 0px;\n top: 7px;\n width: 6px;\n height: 2px;\n}\n.md .checkbox input[type=checkbox]:checked:after {\n right: 3px;\n bottom: 1px;\n width: 2px;\n height: 10px;\n}\n.md .checkbox.minus input[type=checkbox]:before {\n transform: rotate(0);\n -webkit-transform: rotate(0);\n -khtml-transform: rotate(0);\n -moz-transform: rotate(0);\n -o-transform: rotate(0);\n -ms-transform: rotate(0);\n left: 1px;\n top: 5px;\n width: 0px;\n height: 2px;\n}\n.md .checkbox.minus input[type=checkbox]:after {\n transform: rotate(0);\n -webkit-transform: rotate(0);\n -khtml-transform: rotate(0);\n -moz-transform: rotate(0);\n -o-transform: rotate(0);\n -ms-transform: rotate(0);\n left: 1px;\n top: 5px;\n width: 0px;\n height: 2px;\n}\n.md .checkbox.minus input[type=checkbox]:checked:before {\n left: 1px;\n top: 5px;\n width: 10px;\n height: 2px;\n}\n.md .checkbox.minus input[type=checkbox]:checked:after {\n left: 1px;\n top: 5px;\n width: 10px;\n height: 2px;\n}\n.md .checkbox.plus input[type=checkbox]:before {\n transform: rotate(0);\n -webkit-transform: rotate(0);\n -khtml-transform: rotate(0);\n -moz-transform: rotate(0);\n -o-transform: rotate(0);\n -ms-transform: rotate(0);\n left: 1px;\n top: 5px;\n width: 0px;\n height: 2px;\n}\n.md .checkbox.plus input[type=checkbox]:after {\n transform: rotate(0);\n -webkit-transform: rotate(0);\n -khtml-transform: rotate(0);\n -moz-transform: rotate(0);\n -o-transform: rotate(0);\n -ms-transform: rotate(0);\n left: 5px;\n top: 1px;\n width: 2px;\n height: 0px;\n}\n.md .checkbox.plus input[type=checkbox]:checked:before {\n left: 1px;\n top: 5px;\n width: 10px;\n height: 2px;\n}\n.md .checkbox.plus input[type=checkbox]:checked:after {\n left: 5px;\n top: 1px;\n width: 2px;\n height: 10px;\n}\n.md .checkbox.times input[type=checkbox]:before {\n transform: rotate(45deg);\n -webkit-transform: rotate(45deg);\n -khtml-transform: rotate(45deg);\n -moz-transform: rotate(45deg);\n -o-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n left: 3px;\n top: 1px;\n width: 0px;\n height: 2px;\n}\n.md .checkbox.times input[type=checkbox]:after {\n transform: rotate(135deg);\n -webkit-transform: rotate(135deg);\n -khtml-transform: rotate(135deg);\n -moz-transform: rotate(135deg);\n -o-transform: rotate(135deg);\n -ms-transform: rotate(135deg);\n right: 3px;\n top: 1px;\n width: 0px;\n height: 2px;\n}\n.md .checkbox.times input[type=checkbox]:checked:before {\n left: 1px;\n top: 5px;\n width: 10px;\n height: 2px;\n}\n.md .checkbox.times input[type=checkbox]:checked:after {\n right: 1px;\n top: 5px;\n width: 10px;\n height: 2px;\n}\n.md .checkbox input[type=radio] {\n border-radius: 50%;\n -webkit-border-radius: 50%;\n}\n.md .checkbox input[type=radio]:before {\n content: \"\";\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n -webkit-border-radius: 50%;\n margin: 2px;\n transform: scale(0);\n -webkit-transform: scale(0);\n -khtml-transform: scale(0);\n -moz-transform: scale(0);\n -o-transform: scale(0);\n -ms-transform: scale(0);\n transition: all 0.25s ease-out;\n -webkit-transition: all 0.25s ease-out;\n -khtml-transition: all 0.25s ease-out;\n -moz-transition: all 0.25s ease-out;\n -o-transition: all 0.25s ease-out;\n -ms-transition: all 0.25s ease-out;\n}\n.md .checkbox input[type=radio]:checked:before {\n transform: scale(1);\n -webkit-transform: scale(1);\n -khtml-transform: scale(1);\n -moz-transform: scale(1);\n -o-transform: scale(1);\n -ms-transform: scale(1);\n}\n.md .checkbox input {\n border: 2px solid #3dd9b6;\n}\n.md .checkbox input[type=checkbox]:checked {\n background: #3dd9b6;\n}\n.md .checkbox input[type=radio]:checked:before {\n background: #3dd9b6;\n}\n.md .checkbox.red input {\n border-color: #fe5f58;\n}\n.md .checkbox.red input[type=checkbox]:checked {\n background: #fe5f58;\n}\n.md .checkbox.red input[type=radio]:checked:before {\n background: #fe5f58;\n}\n.md .checkbox.green input {\n border-color: #3dc550;\n}\n.md .checkbox.green input[type=checkbox]:checked {\n background: #3dc550;\n}\n.md .checkbox.green input[type=radio]:checked:before {\n background: #3dc550;\n}\n.md .checkbox.yellow input {\n border-color: #ffbd2b;\n}\n.md .checkbox.yellow input[type=checkbox]:checked {\n background: #ffbd2b;\n}\n.md .checkbox.yellow input[type=radio]:checked:before {\n background: #ffbd2b;\n}\n.md .checkbox.cyan input {\n border-color: #1bcdfc;\n}\n.md .checkbox.cyan input[type=checkbox]:checked {\n background: #1bcdfc;\n}\n.md .checkbox.cyan input[type=radio]:checked:before {\n background: #1bcdfc;\n}\n.md .checkbox.blue input {\n border-color: #2196f3;\n}\n.md .checkbox.blue input[type=checkbox]:checked {\n background: #2196f3;\n}\n.md .checkbox.blue input[type=radio]:checked:before {\n background: #2196f3;\n}\narticle .checkbox p {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\ndiv.dropmenu-wrapper {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n}\ndiv.dropmenu {\n position: relative;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n color: #2092ec;\n}\ndiv.dropmenu:hover {\n color: inherit;\n}\ndiv.dropmenu:hover >ul {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n left: 0;\n margin-left: 0;\n margin-top: 0px;\n}\ndiv.dropmenu ul>li {\n list-style: none;\n}\ndiv.dropmenu ul>li >a:hover {\n text-decoration: none !important;\n}\ndiv.dropmenu .list-v .list-v {\n left: calc(100% - 0.5 * 16px);\n}\ndiv.gallery {\n margin: 1em 0;\n overflow: hidden;\n}\ndiv.gallery+.gallery {\n margin-top: -1em;\n}\ndiv.gallery >.fancybox,\ndiv.gallery >p>.fancybox {\n margin: 1px;\n padding: 0;\n position: relative;\n}\ndiv.gallery >.fancybox a,\ndiv.gallery >p>.fancybox a {\n height: 100%;\n width: 100%;\n}\ndiv.gallery >.fancybox img,\ndiv.gallery >p>.fancybox img {\n -o-object-fit: cover;\n object-fit: cover;\n height: 100%;\n width: 100%;\n}\ndiv.gallery >.fancybox .image-caption,\ndiv.gallery >p>.fancybox .image-caption {\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n -khtml-transform: translateY(100%);\n -moz-transform: translateY(100%);\n -o-transform: translateY(100%);\n -ms-transform: translateY(100%);\n transition: all 0.3s ease;\n -webkit-transition: all 0.3s ease;\n -khtml-transition: all 0.3s ease;\n -moz-transition: all 0.3s ease;\n -o-transition: all 0.3s ease;\n -ms-transition: all 0.3s ease;\n pointer-events: none;\n position: absolute;\n width: 100%;\n bottom: 0;\n text-align: center;\n background: rgba(0,0,0,0.3);\n color: #fff;\n}\ndiv.gallery >.fancybox .image-caption:empty,\ndiv.gallery >p>.fancybox .image-caption:empty {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\ndiv.gallery >.fancybox:hover .image-caption,\ndiv.gallery >p>.fancybox:hover .image-caption {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n transform: translateY(0);\n -webkit-transform: translateY(0);\n -khtml-transform: translateY(0);\n -moz-transform: translateY(0);\n -o-transform: translateY(0);\n -ms-transform: translateY(0);\n}\ndiv.gallery,\ndiv.gallery >p {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n flex-wrap: nowrap;\n -webkit-flex-wrap: nowrap;\n -khtml-flex-wrap: nowrap;\n -moz-flex-wrap: nowrap;\n -o-flex-wrap: nowrap;\n -ms-flex-wrap: nowrap;\n padding: 0 !important;\n align-items: stretch;\n}\ndiv.gallery[col] {\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n}\ndiv.gallery[col='2']>.fancybox {\n width: calc(50% - 2 * 1px);\n}\ndiv.gallery[col='3']>.fancybox {\n width: calc(33.33% - 2 * 1px);\n}\ndiv.gallery[col='4']>.fancybox {\n width: calc(25% - 2 * 1px);\n}\ndiv.gallery[col='5']>.fancybox {\n width: calc(20% - 2 * 1px);\n}\ndiv.gallery[col='6']>.fancybox {\n width: calc(16.66% - 2 * 1px);\n}\ndiv.gallery[col='7']>.fancybox {\n width: calc(14.2857% - 2 * 1px);\n}\ndiv.gallery[col='8']>.fancybox {\n width: calc(12.5% - 2 * 1px);\n}\ndiv.gallery >p {\n margin: 0;\n}\ndiv.gallery.left,\ndiv.gallery.left>p {\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n}\ndiv.gallery.center,\ndiv.gallery.center>p {\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n}\ndiv.gallery.right,\ndiv.gallery.right>p {\n justify-content: flex-end;\n -webkit-justify-content: flex-end;\n -khtml-justify-content: flex-end;\n -moz-justify-content: flex-end;\n -o-justify-content: flex-end;\n -ms-justify-content: flex-end;\n}\ndiv.gallery.stretch,\ndiv.gallery.stretch>p {\n align-items: stretch;\n}\n.fancybox-container .fancybox-stage {\n cursor: zoom-out;\n}\ndiv.fancybox {\n margin-top: 1em;\n margin-bottom: 1em;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n flex-wrap: nowrap;\n -webkit-flex-wrap: nowrap;\n -khtml-flex-wrap: nowrap;\n -moz-flex-wrap: nowrap;\n -o-flex-wrap: nowrap;\n -ms-flex-wrap: nowrap;\n padding: 0 !important;\n overflow: hidden;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\n@media screen and (max-width: 500px) {\n div.fancybox {\n border-radius: 1px;\n -webkit-border-radius: 1px;\n }\n}\ndiv.fancybox a {\n line-height: 0;\n margin: 0 auto;\n align-items: stretch;\n}\ndiv.fancybox .gallery {\n overflow: hidden;\n}\ndiv.fancybox .image-caption {\n font-size: 0.8125rem;\n padding-top: 0.5em;\n padding-bottom: 1em;\n color: var(--color-meta);\n}\ndiv.fancybox .image-caption:empty {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\ndetails {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n padding: 16px;\n margin: 1em 0;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n background: var(--color-card);\n font-size: 0.9375rem;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n border: 1px solid var(--color-block);\n}\ndetails summary {\n cursor: pointer;\n padding: 16px;\n margin: -16px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n color: rgba(68,68,68,0.7);\n font-size: 0.875rem;\n font-weight: bold;\n position: relative;\n line-height: normal;\n}\ndetails summary > p,\ndetails summary > h1,\ndetails summary > h2,\ndetails summary > h3,\ndetails summary > h4,\ndetails summary > h5,\ndetails summary > h6 {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline;\n border-bottom: none !important;\n}\ndetails summary:hover {\n color: var(--color-p);\n}\ndetails summary:hover:after {\n position: absolute;\n content: '+';\n text-align: center;\n top: 50%;\n transform: translateY(-50%);\n -webkit-transform: translateY(-50%);\n -khtml-transform: translateY(-50%);\n -moz-transform: translateY(-50%);\n -o-transform: translateY(-50%);\n -ms-transform: translateY(-50%);\n right: 16px;\n}\ndetails >summary {\n background: var(--color-block);\n}\ndetails[blue] {\n border-color: #e8f4fd;\n}\ndetails[blue] >summary {\n background: #e8f4fd;\n}\ndetails[cyan] {\n border-color: #e8fafe;\n}\ndetails[cyan] >summary {\n background: #e8fafe;\n}\ndetails[green] {\n border-color: #ebf9ed;\n}\ndetails[green] >summary {\n background: #ebf9ed;\n}\ndetails[yellow] {\n border-color: #fff8e9;\n}\ndetails[yellow] >summary {\n background: #fff8e9;\n}\ndetails[red] {\n border-color: #feefee;\n}\ndetails[red] >summary {\n background: #feefee;\n}\ndetails[open] {\n border-color: rgba(68,68,68,0.2);\n}\ndetails[open] >summary {\n border-bottom: 1px solid rgba(68,68,68,0.2);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\ndetails[open][blue] {\n border-color: rgba(33,150,243,0.3);\n}\ndetails[open][blue] >summary {\n border-bottom-color: rgba(33,150,243,0.3);\n}\ndetails[open][cyan] {\n border-color: rgba(27,205,252,0.3);\n}\ndetails[open][cyan] >summary {\n border-bottom-color: rgba(27,205,252,0.3);\n}\ndetails[open][green] {\n border-color: rgba(61,197,80,0.3);\n}\ndetails[open][green] >summary {\n border-bottom-color: rgba(61,197,80,0.3);\n}\ndetails[open][yellow] {\n border-color: rgba(255,189,43,0.3);\n}\ndetails[open][yellow] >summary {\n border-bottom-color: rgba(255,189,43,0.3);\n}\ndetails[open][red] {\n border-color: rgba(254,95,88,0.3);\n}\ndetails[open][red] >summary {\n border-bottom-color: rgba(254,95,88,0.3);\n}\ndetails[open] >summary {\n color: #444;\n margin-bottom: 0;\n}\ndetails[open] >summary:hover:after {\n content: '-';\n}\ndetails[open] >div.content {\n padding: 16px;\n margin: -16px;\n margin-top: 0;\n}\ndetails[open] >div.content p>a:hover {\n text-decoration: underline;\n}\ndetails[open] >div.content > p:first-child,\ndetails[open] >div.content > .tabs:first-child,\ndetails[open] >div.content > ul:first-child,\ndetails[open] >div.content > ol:first-child,\ndetails[open] >div.content > .highlight:first-child,\ndetails[open] >div.content > .note:first-child,\ndetails[open] >div.content > details:first-child {\n margin-top: 0;\n}\ndetails[open] >div.content > p:last-child,\ndetails[open] >div.content > .tabs:last-child,\ndetails[open] >div.content > ul:last-child,\ndetails[open] >div.content > ol:last-child,\ndetails[open] >div.content > .highlight:last-child,\ndetails[open] >div.content > .note:last-child,\ndetails[open] >div.content > details:last-child {\n margin-bottom: 0;\n}\n.md .frame-wrap {\n position: relative;\n overflow: hidden;\n margin: 0 auto;\n max-width: 100%;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.md .frame-wrap img,\n.md .frame-wrap video {\n border-radius: 0;\n -webkit-border-radius: 0;\n}\n.md .frame-wrap .frame {\n z-index: 1;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n position: absolute;\n background-size: 100%;\n -webkit-background-size: 100%;\n -moz-background-size: 100%;\n background-repeat: no-repeat;\n overflow: hidden;\n}\n.md .img-wrap .frame-wrap[part] {\n height: auto;\n}\n.md .frame-wrap#iphone11 img,\n.md .frame-wrap#iphone11 video {\n width: 287px;\n margin-top: 19px;\n margin-bottom: 20px;\n}\n.md .frame-wrap#iphone11 .frame {\n background-image: url(\"https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@3/img/frame/iphone11.svg\");\n width: 329px;\n height: 658px;\n}\n.md .frame-wrap[part='top'] img,\n.md .frame-wrap[part='top'] video {\n margin-bottom: 0 !important;\n}\n.md .frame-wrap:not([part='bottom']) .frame {\n top: 0;\n}\n.md .frame-wrap[part='bottom'] img,\n.md .frame-wrap[part='bottom'] video {\n bottom: 0;\n margin-top: 0 !important;\n}\n.md .frame-wrap[part='bottom'] .frame {\n bottom: 0;\n}\n@media screen and (max-width: 500px) {\n .md .frame-wrap#iphone11 img,\n .md .frame-wrap#iphone11 video {\n width: 208px;\n margin-top: 13px;\n margin-bottom: 14px;\n }\n .md .frame-wrap#iphone11 .frame {\n width: 238px;\n height: 476px;\n }\n}\n.users-wrap {\n overflow: hidden;\n}\n.users-wrap .group-header {\n margin: 0 0 1rem;\n}\n.users-wrap .group-header p {\n margin: 0;\n font-size: 0.875rem;\n}\n.users-wrap .group-header p:first-child {\n font-size: 1.25rem;\n font-weight: 500;\n}\n.users-wrap .group-body {\n width: 100%;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n align-items: stretch;\n margin-bottom: 2rem;\n}\n.users-wrap .friendsjs-wrap {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\n.users-wrap .friendsjs-wrap .loading-wrap {\n min-height: 50px;\n margin: 2rem 0;\n text-align: center;\n}\n.users-wrap .user-card {\n flex-shrink: 1;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-items: stretch;\n width: 12.5%;\n}\n@media screen and (max-width: 980px) {\n .users-wrap .user-card {\n width: 14.28%;\n }\n}\n@media screen and (max-width: 900px) {\n .users-wrap .user-card {\n width: 16.66%;\n }\n}\n@media screen and (max-width: 820px) {\n .users-wrap .user-card {\n width: 20%;\n }\n}\n@media screen and (max-width: 768px) {\n .users-wrap .user-card {\n width: 16.66%;\n }\n}\n@media screen and (max-width: 500px) {\n .users-wrap .user-card {\n width: 25%;\n }\n}\n.users-wrap .user-card .card-link {\n margin: 0;\n width: 100%;\n color: var(--text-p1);\n font-size: 10px;\n font-weight: 500;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n flex-direction: column;\n align-items: center;\n text-align: center;\n line-height: 1.2;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n overflow: hidden;\n position: relative;\n padding: 1rem 0.5rem;\n}\n.users-wrap .user-card .card-link img {\n -o-object-fit: cover;\n object-fit: cover;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n width: 48px;\n height: 48px;\n background: var(--card);\n border-radius: 64px;\n -webkit-border-radius: 64px;\n margin: 0 0 0.5rem;\n}\n.users-wrap .user-card .card-link >img {\n transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n -webkit-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n -khtml-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n -moz-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n -o-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n -ms-transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;\n}\n.users-wrap .user-card .card-link:hover {\n background: var(--block-hover);\n}\n.users-wrap .user-card .card-link:hover img {\n transform: scale(1.2) rotate(8deg);\n -webkit-transform: scale(1.2) rotate(8deg);\n -khtml-transform: scale(1.2) rotate(8deg);\n -moz-transform: scale(1.2) rotate(8deg);\n -o-transform: scale(1.2) rotate(8deg);\n -ms-transform: scale(1.2) rotate(8deg);\n 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);\n -webkit-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);\n}\na.ghcard {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n line-height: 0;\n}\n.md .ghcard-group {\n column-count: 2;\n -webkit-column-count: 2;\n -moz-column-count: 2;\n column-gap: 0;\n -webkit-column-gap: 0;\n -moz-column-gap: 0;\n margin: 0 -8px;\n}\n.md .ghcard-group .ghcard {\n margin: 8px;\n}\n.md .img {\n -o-object-fit: contain;\n object-fit: contain;\n}\nimg.inline {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline !important;\n vertical-align: middle;\n transform: translateY(-4px);\n -webkit-transform: translateY(-4px);\n -khtml-transform: translateY(-4px);\n -moz-transform: translateY(-4px);\n -o-transform: translateY(-4px);\n -ms-transform: translateY(-4px);\n}\n.md .tag.link {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n.md .link-card {\n margin-right: 1em;\n background: var(--color-block);\n display: inline-flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n text-align: center;\n width: 361px;\n max-width: 100%;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n color: var(--color-p);\n border-radius: 8px;\n -webkit-border-radius: 8px;\n}\n@media screen and (max-width: 425px) {\n .md .link-card {\n max-width: 100%;\n width: 100%;\n }\n}\n.md .link-card:hover {\n 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);\n -webkit-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);\n}\n.md .link-card div.left,\n.md .link-card div.right {\n pointer-events: none;\n}\n.md .link-card div.left {\n width: 54px;\n height: 54px;\n margin: 12px;\n overflow: hidden;\n flex-shrink: 0;\n position: relative;\n}\n.md .link-card div.left i {\n font-size: 32px;\n line-height: 48px;\n margin-left: 4px;\n}\n.md .link-card div.left img {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n position: absolute;\n border-radius: 8px/4;\n -webkit-border-radius: 8px/4;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n -webkit-transform: translate(-50%, -50%);\n -khtml-transform: translate(-50%, -50%);\n -moz-transform: translate(-50%, -50%);\n -o-transform: translate(-50%, -50%);\n -ms-transform: translate(-50%, -50%);\n}\n.md .link-card div.right {\n overflow: hidden;\n margin-right: 16px;\n}\n.md .link-card p {\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.md .link-card p.text {\n font-weight: bold;\n}\n.md .link-card p.url {\n flex-shrink: 0;\n color: var(--color-meta);\n font-size: 0.8125rem;\n}\n.md .link-group {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 16px;\n}\n@media screen and (max-width: 850px) {\n .md .link-group {\n grid-template-columns: 1fr;\n }\n}\n.md .link-group .tag.link {\n margin: 0;\n}\n.md .link-group .link-card {\n width: 100%;\n}\naudio,\nvideo {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n max-width: 100%;\n}\nvideo {\n z-index: 1;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\nvideo:hover {\n box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24);\n -webkit-box-shadow: 0 4px 8px 0px rgba(0,0,0,0.24), 0 8px 16px 0px rgba(0,0,0,0.24);\n}\ndiv.video {\n line-height: 0;\n text-align: center;\n}\ndiv.videos {\n max-width: calc(100% + 2 * 4px);\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-wrap: wrap;\n -webkit-flex-wrap: wrap;\n -khtml-flex-wrap: wrap;\n -moz-flex-wrap: wrap;\n -o-flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n align-items: flex-end;\n margin: 1em -4px;\n}\ndiv.videos .video,\ndiv.videos iframe {\n width: 100%;\n margin: 4px;\n}\ndiv.videos iframe {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n width: 100%;\n min-height: 300px;\n}\ndiv.videos.left {\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n}\ndiv.videos.center {\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n}\ndiv.videos.right {\n justify-content: flex-end;\n -webkit-justify-content: flex-end;\n -khtml-justify-content: flex-end;\n -moz-justify-content: flex-end;\n -o-justify-content: flex-end;\n -ms-justify-content: flex-end;\n}\ndiv.videos.stretch {\n align-items: stretch;\n}\ndiv.videos[col='1'] .video,\ndiv.videos[col='1'] iframe {\n width: 100%;\n}\ndiv.videos[col='2'] .video,\ndiv.videos[col='2'] iframe {\n width: calc(50% - 2 * 4px);\n}\ndiv.videos[col='3'] .video,\ndiv.videos[col='3'] iframe {\n width: calc(33.33% - 2 * 4px);\n}\ndiv.videos[col='4'] .video,\ndiv.videos[col='4'] iframe {\n width: calc(25% - 2 * 4px);\n}\ndiv.note {\n position: relative;\n margin-top: 1em;\n margin-bottom: 1em;\n padding: 16px;\n padding-left: calc(16px + 16px);\n border-radius: 4px;\n -webkit-border-radius: 4px;\n font-size: 0.9375rem;\n background: var(--color-block);\n border-left: 4px solid #3dd9b6;\n}\ndiv.note h2,\ndiv.note h3,\ndiv.note h4,\ndiv.note h5,\ndiv.note h6 {\n margin-top: 3px;\n margin-bottom: 0;\n padding-top: 0 !important;\n border-bottom: initial;\n}\ndiv.note p,\ndiv.note ul,\ndiv.note ol,\ndiv.note blockquote,\ndiv.note img {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\ndiv.note .link-card {\n background: var(--color-card);\n}\ndiv.note::before {\n position: absolute;\n top: calc(50% - 24px * 0.5);\n left: 4px;\n width: 24px;\n height: 24px;\n text-align: center;\n font-weight: 600;\n line-height: 24px;\n vertical-align: middle;\n font-family: 'Font Awesome 6 Pro';\n}\ndiv.note::before {\n color: #3dd9b6;\n content: '\\f054';\n}\ndiv.note::before {\n content: '\\f054';\n}\ndiv.note.quote {\n background: #e8f4fd;\n border-color: #2196f3;\n}\ndiv.note.quote::before {\n color: #2196f3;\n content: '\\f10d';\n}\ndiv.note.info {\n background: #ebfbf7;\n border-color: #3dd9b6;\n}\ndiv.note.info::before {\n color: #3dd9b6;\n content: '\\f129';\n}\ndiv.note.success,\ndiv.note.done {\n background: #ebf9ed;\n border-color: #3dc550;\n}\ndiv.note.success::before,\ndiv.note.done::before {\n color: #3dc550;\n content: '\\f00c';\n}\ndiv.note.warning {\n background: #fff8e9;\n border-color: #ffbd2b;\n}\ndiv.note.warning::before {\n color: #ffbd2b;\n content: '\\f12a';\n}\ndiv.note.danger,\ndiv.note.error {\n background: #feefee;\n border-color: #fe5f58;\n}\ndiv.note.danger::before,\ndiv.note.error::before {\n color: #fe5f58;\n content: '\\f00d';\n}\ndiv.note.radiation::before {\n content: '\\f7b9';\n}\ndiv.note.bug::before {\n content: '\\f188';\n}\ndiv.note.idea::before {\n content: '\\f0eb';\n}\ndiv.note.link::before {\n content: '\\f0c1';\n}\ndiv.note.paperclip::before {\n content: '\\f0c6';\n}\ndiv.note.todo::before {\n content: '\\f0ae';\n}\ndiv.note.message::before {\n content: '\\f4ad';\n}\ndiv.note.guide::before {\n content: '\\f277';\n}\ndiv.note.download::before {\n content: '\\f019';\n}\ndiv.note.up::before {\n content: '\\f102';\n}\ndiv.note.undo::before {\n content: '\\f2ea';\n}\ndiv.note.play::before {\n content: '\\f144';\n}\ndiv.note.clear {\n background: none;\n border-color: none;\n}\ndiv.note.light {\n background: #f5f5f5;\n border-color: #a1a1a1;\n}\ndiv.note.light::before {\n color: #a1a1a1;\n}\ndiv.note.gray {\n background: #f5f5f5;\n border-color: #696969;\n}\ndiv.note.gray::before {\n color: #696969;\n}\ndiv.note.theme {\n background: #ebfbf7;\n border-color: #3dd9b6;\n}\ndiv.note.theme::before {\n color: #3dd9b6;\n}\ndiv.note.red {\n background: #feefee;\n border-color: #fe5f58;\n}\ndiv.note.red::before {\n color: #fe5f58;\n}\ndiv.note.yellow {\n background: #fff8e9;\n border-color: #ffbd2b;\n}\ndiv.note.yellow::before {\n color: #ffbd2b;\n}\ndiv.note.green {\n background: #ebf9ed;\n border-color: #3dc550;\n}\ndiv.note.green::before {\n color: #3dc550;\n}\ndiv.note.cyan {\n background: #e8fafe;\n border-color: #1bcdfc;\n}\ndiv.note.cyan::before {\n color: #1bcdfc;\n}\ndiv.note.blue {\n background: #e8f4fd;\n border-color: #2196f3;\n}\ndiv.note.blue::before {\n color: #2196f3;\n}\n.sites-wrap .group-header {\n margin: 0 0 1rem;\n}\n.sites-wrap .group-header p {\n margin: 0;\n font-size: 0.875rem;\n}\n.sites-wrap .group-header p:first-child {\n font-size: 1.25rem;\n font-weight: 500;\n}\n.sites-wrap .group-body {\n width: 100%;\n margin-bottom: 2rem;\n}\n.sites-wrap .sitesjs-wrap {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\n.sites-wrap .sitesjs-wrap .loading-wrap {\n min-height: 50px;\n margin: 2rem 0;\n text-align: center;\n}\n.sites-wrap .group-body {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: grid;\n grid-gap: 1rem 1rem;\n grid-template-columns: repeat(auto-fill, calc((100% - 3 * 1rem) / 4));\n margin-bottom: 2rem;\n}\n@media screen and (max-width: 1024px) {\n .sites-wrap .group-body {\n grid-template-columns: repeat(auto-fill, calc((100% - 2 * 1rem) / 3));\n }\n}\n@media screen and (max-width: 900px) {\n .sites-wrap .group-body {\n grid-template-columns: repeat(auto-fill, calc((100% - 1 * 1rem) / 2));\n }\n}\n@media screen and (max-width: 768px) {\n .sites-wrap .group-body {\n grid-template-columns: repeat(auto-fill, calc((100% - 2 * 1rem) / 3));\n }\n}\n@media screen and (max-width: 500px) {\n .sites-wrap .group-body {\n grid-template-columns: repeat(auto-fill, calc((100% - 1 * 1rem) / 2));\n }\n}\n.sites-wrap .group-body .site-card .card-link {\n width: 100%;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n flex-direction: column;\n}\n.sites-wrap .group-body .site-card .card-link >img {\n width: 100%;\n height: 120px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n -o-object-fit: cover;\n object-fit: cover;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.2);\n}\n@media screen and (max-width: 1024px) {\n .sites-wrap .group-body .site-card .card-link >img {\n height: 150px;\n }\n}\n@media screen and (max-width: 900px) {\n .sites-wrap .group-body .site-card .card-link >img {\n height: 180px;\n }\n}\n@media screen and (max-width: 768px) {\n .sites-wrap .group-body .site-card .card-link >img {\n height: 150px;\n }\n}\n.sites-wrap .group-body .site-card .card-link .info {\n margin-top: 0.5rem;\n line-height: 1.2;\n}\n.sites-wrap .group-body .site-card .card-link .info >img {\n width: 28px;\n height: 28px;\n border-radius: 28px;\n -webkit-border-radius: 28px;\n float: left;\n margin-right: 8px;\n margin-top: 2px;\n}\n.sites-wrap .group-body .site-card .card-link .info span {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\n.sites-wrap .group-body .site-card .card-link .info .title {\n font-weight: 500;\n color: var(--text-p1);\n font-size: 0.875rem;\n margin-top: 1px;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n -webkit-line-clamp: 1;\n}\n.sites-wrap .group-body .site-card .card-link .info .desc {\n font-size: 10px;\n margin-top: 2px;\n word-wrap: break-word;\n color: var(--text-p3);\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n -webkit-line-clamp: 2;\n}\n.sites-wrap .site-card .card-link >img {\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.sites-wrap .site-card .card-link:hover >img {\n 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);\n -webkit-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);\n}\np.p.subtitle {\n font-weight: bold;\n color: #3eb399;\n font-size: 1.25rem !important;\n padding-top: 1.5rem;\n}\np.p.subtitle:first-child {\n padding-top: 1rem;\n}\nspan.p.logo,\np.p.logo {\n font-family: \"Varela Round\", \"PingFang SC\", \"Microsoft YaHei\", Helvetica, Arial, Helvetica, monospace;\n}\nspan.p.code,\np.p.code {\n font-family: SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace, monospace, courier, sans-serif;\n}\nspan.p.left,\np.p.left {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: left;\n}\nspan.p.center,\np.p.center {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: center;\n}\nspan.p.right,\np.p.right {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n text-align: right;\n}\nspan.p.small,\np.p.small {\n font-size: 0.875rem;\n}\nspan.p.large,\np.p.large {\n font-size: 2.5rem;\n line-height: 1.4;\n}\nspan.p.huge,\np.p.huge {\n font-size: 4rem;\n line-height: 1.4;\n}\nspan.p.ultra,\np.p.ultra {\n font-size: 6rem;\n line-height: 1.4;\n}\nspan.p.small,\np.p.small,\nspan.p.large,\np.p.large,\nspan.p.huge,\np.p.huge,\nspan.p.ultra,\np.p.ultra {\n margin: 0;\n padding: 0;\n}\nspan.p.bold,\np.p.bold {\n font-weight: bold;\n}\nspan.p.h1,\np.p.h1,\nspan.p.h2,\np.p.h2 {\n padding-bottom: 0.2rem;\n font-weight: 500;\n}\nspan.p.h1,\np.p.h1 {\n font-size: 1.5rem;\n color: var(--color-h1);\n padding-top: 2em;\n}\nspan.p.h2,\np.p.h2 {\n font-size: 1.5rem;\n color: var(--color-h2);\n padding-top: 2em;\n border-bottom: 1px solid rgba(68,68,68,0.1);\n}\nspan.p.h3,\np.p.h3 {\n font-size: 1.25rem;\n color: var(--color-h3);\n padding-top: 2em;\n}\nspan.p.h4,\np.p.h4 {\n font-size: 1.125rem;\n color: var(--color-h4);\n padding-top: 2em;\n}\nspan.p.h5,\np.p.h5 {\n font-size: 1rem;\n color: var(--color-h5);\n padding-top: 1.5em;\n}\nspan.p.red,\np.p.red {\n color: #fe5f58;\n}\nspan.p.yellow,\np.p.yellow {\n color: #ffbd2b;\n}\nspan.p.green,\np.p.green {\n color: #3dc550;\n}\nspan.p.cyan,\np.p.cyan {\n color: #1bcdfc;\n}\nspan.p.blue,\np.p.blue {\n color: #2196f3;\n}\nspan.p.purple,\np.p.purple {\n color: #9c27b0;\n}\nspan.p.gray,\np.p.gray {\n color: #999;\n}\n.swiper-container {\n width: 100%;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n --gap-p: 2rem;\n}\n.swiper-container:not(.swiper-container-initialized) {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\ndiv.swiper-slide {\n text-align: center;\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n align-self: center;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n align-items: center;\n width: 50%;\n}\ndiv.swiper-slide img {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n}\n.swiper-container[width='max'] div.swiper-slide {\n width: 100%;\n}\n.swiper-container[width='min'] div.swiper-slide {\n width: 25%;\n}\n.swiper-button-prev,\n.swiper-button-next {\n padding: 1rem 0.5rem;\n margin-top: -2rem !important;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n background: rgba(255,255,255,0.25);\n transition: background 0.2s ease-out;\n -webkit-transition: background 0.2s ease-out;\n -khtml-transition: background 0.2s ease-out;\n -moz-transition: background 0.2s ease-out;\n -o-transition: background 0.2s ease-out;\n -ms-transition: background 0.2s ease-out;\n --swiper-theme-color: #000 !important;\n}\n.swiper-button-prev:after,\n.swiper-button-next:after {\n font-size: 1.2rem !important;\n font-weight: 700 !important;\n}\n.swiper-button-prev:hover,\n.swiper-button-next:hover {\n background: #fff !important;\n --swiper-theme-color: #ff5722 !important;\n}\n.md .table {\n overflow: auto;\n margin-top: 1em;\n margin-bottom: 1em;\n}\n.md .table table {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: table;\n width: 100%;\n}\ndiv.tabs {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n position: relative;\n margin-top: 1em;\n margin-bottom: 1em;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n background: var(--color-card);\n border: 1px solid rgba(68,68,68,0.2);\n font-size: 0.9375rem;\n}\ndiv.tabs .highlight,\ndiv.tabs p,\ndiv.tabs ul,\ndiv.tabs ol,\ndiv.tabs div.note,\ndiv.tabs details {\n margin-top: 1em;\n margin-bottom: 1em;\n}\ndiv.tabs ul.nav-tabs {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n overflow-x: auto;\n white-space: nowrap;\n justify-content: flex-start;\n -webkit-justify-content: flex-start;\n -khtml-justify-content: flex-start;\n -moz-justify-content: flex-start;\n -o-justify-content: flex-start;\n -ms-justify-content: flex-start;\n margin: 0 !important;\n padding: 8px 8px 0 8px;\n background: var(--color-block);\n border-radius: 4px 4px 0 0;\n -webkit-border-radius: 4px 4px 0 0;\n line-height: 1.5;\n}\ndiv.tabs ul.nav-tabs li.tab {\n list-style-type: none;\n margin-top: 0;\n margin-bottom: 0;\n}\ndiv.tabs ul.nav-tabs li.tab:last-child {\n padding-right: 16px;\n}\ndiv.tabs ul.nav-tabs li.tab a {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n cursor: pointer;\n border-radius: 4px 4px 0 0;\n -webkit-border-radius: 4px 4px 0 0;\n padding: 8px;\n text-align: center;\n font-size: 0.875rem;\n line-height: inherit;\n font-weight: bold;\n color: var(--color-meta);\n border: 1px solid transparent;\n}\ndiv.tabs ul.nav-tabs li.tab a:hover {\n color: var(--color-p);\n}\ndiv.tabs ul.nav-tabs li.tab a i {\n pointer-events: none;\n}\ndiv.tabs ul.nav-tabs li.tab.active a {\n cursor: default;\n color: var(--color-p);\n background: #fff;\n border: 1px solid rgba(68,68,68,0.2);\n border-bottom: 1px solid var(--color-card);\n}\ndiv.tabs .tab-content {\n border-top: 1px solid rgba(68,68,68,0.2);\n margin-top: -1px;\n}\ndiv.tabs .tab-content .tab-pane {\n padding: 16px;\n}\ndiv.tabs .tab-content .tab-pane:not(.active) {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\ndiv.tabs .tab-content .tab-pane.active {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: block;\n}\ndiv.tabs .tab-content .tab-pane > p:first-child,\ndiv.tabs .tab-content .tab-pane > .tabs:first-child,\ndiv.tabs .tab-content .tab-pane > ul:first-child,\ndiv.tabs .tab-content .tab-pane > ol:first-child,\ndiv.tabs .tab-content .tab-pane > .highlight:first-child,\ndiv.tabs .tab-content .tab-pane > .note:first-child {\n margin-top: 0;\n}\ndiv.tabs .tab-content .tab-pane > p:last-child,\ndiv.tabs .tab-content .tab-pane > .tabs:last-child,\ndiv.tabs .tab-content .tab-pane > ul:last-child,\ndiv.tabs .tab-content .tab-pane > ol:last-child,\ndiv.tabs .tab-content .tab-pane > .highlight:last-child,\ndiv.tabs .tab-content .tab-pane > .note:last-child {\n margin-bottom: 0;\n}\n.article del {\n color: #8e8e8e;\n -webkit-text-decoration-color: #8e8e8e;\n text-decoration-color: #8e8e8e;\n}\n.article u {\n color: var(--color-text);\n text-decoration: none;\n border-bottom: 1px solid #fe5f58;\n}\n.article emp {\n color: var(--color-text);\n border-bottom: 4px dotted #fe5f58;\n}\n.article wavy {\n color: var(--color-text);\n -webkit-text-decoration-style: wavy;\n text-decoration-style: wavy;\n -webkit-text-decoration-line: underline;\n text-decoration-line: underline;\n -webkit-text-decoration-color: #fe5f58;\n text-decoration-color: #fe5f58;\n}\n.article psw {\n color: transparent;\n background: #a1a1a1;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.article psw:hover {\n color: var(--color-p);\n background: none;\n}\n.article kbd {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n border: 1px solid #d2d2d2;\n border-bottom-width: 2px;\n background: #fafafa;\n padding-left: 4px;\n padding-right: 4px;\n}\ndiv.timenode {\n position: relative;\n}\ndiv.timenode:before,\ndiv.timenode:after {\n content: '';\n z-index: 1;\n position: absolute;\n background: rgba(61,217,182,0.5);\n width: 2px;\n left: 7px;\n}\ndiv.timenode:before {\n top: 0px;\n height: 6px;\n}\ndiv.timenode:after {\n top: 26px;\n height: calc(100% - 26px);\n}\ndiv.timenode:last-child:after {\n height: calc(100% - 26px - 16px);\n border-bottom-left-radius: 2px;\n border-bottom-right-radius: 2px;\n}\ndiv.timenode .meta,\ndiv.timenode .body {\n max-width: calc(100% - 24px);\n}\ndiv.timenode .meta {\n position: relative;\n color: var(--color-meta);\n font-size: 0.875rem;\n line-height: 32px;\n height: 32px;\n}\ndiv.timenode .meta:before,\ndiv.timenode .meta:after {\n content: '';\n position: absolute;\n top: 8px;\n z-index: 2;\n}\ndiv.timenode .meta:before {\n background: rgba(61,217,182,0.5);\n width: 16px;\n height: 16px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n}\ndiv.timenode .meta:after {\n background: #3dd9b6;\n margin-left: 2px;\n margin-top: 2px;\n width: 12px;\n height: 12px;\n border-radius: 6px;\n -webkit-border-radius: 6px;\n transform: scale(0.5);\n -webkit-transform: scale(0.5);\n -khtml-transform: scale(0.5);\n -moz-transform: scale(0.5);\n -o-transform: scale(0.5);\n -ms-transform: scale(0.5);\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\ndiv.timenode .meta p {\n font-weight: bold;\n margin: 0 0 0 24px;\n}\ndiv.timenode .body {\n margin: 4px 0 16px 24px;\n padding: 16px;\n border-radius: 8px;\n -webkit-border-radius: 8px;\n background: var(--color-block);\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n}\ndiv.timenode .body:empty {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\ndiv.timenode .body >*:first-child {\n margin-top: 0.25em;\n}\ndiv.timenode .body >*:last-child {\n margin-bottom: 0.25em;\n}\ndiv.timenode .body .highlight {\n border: 1px solid #e4e4e4;\n}\ndiv.timenode:hover .meta {\n color: var(--color-text);\n}\ndiv.timenode:hover .meta:before {\n background: rgba(255,87,34,0.5);\n}\ndiv.timenode:hover .meta:after {\n background: #ff5722;\n transform: scale(1);\n -webkit-transform: scale(1);\n -khtml-transform: scale(1);\n -moz-transform: scale(1);\n -o-transform: scale(1);\n -ms-transform: scale(1);\n}\n.article mjx-container {\n font-family: SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace, monospace, courier, sans-serif;\n padding: 16px 8px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n min-width: 0 !important;\n}\n.article mjx-container[jax=\"CHTML\"][display=\"true\"],\n.article .has-jax {\n overflow: auto hidden;\n}\n.article mjx-container + br {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none;\n}\n.fa.red,\n.fas.red,\n.far.red,\n.fad.red,\n.fal.red,\n.fa-solid.red,\n.fa-regular.red,\n.fa-duotone.red,\n.fa-light.red,\n.fa-thin.red,\n.iziToast>.iziToast-body .iziToast-icon.red {\n color: #f44336;\n}\n.fa.pink,\n.fas.pink,\n.far.pink,\n.fad.pink,\n.fal.pink,\n.fa-solid.pink,\n.fa-regular.pink,\n.fa-duotone.pink,\n.fa-light.pink,\n.fa-thin.pink,\n.iziToast>.iziToast-body .iziToast-icon.pink {\n color: #e91e63;\n}\n.fa.purple,\n.fas.purple,\n.far.purple,\n.fad.purple,\n.fal.purple,\n.fa-solid.purple,\n.fa-regular.purple,\n.fa-duotone.purple,\n.fa-light.purple,\n.fa-thin.purple,\n.iziToast>.iziToast-body .iziToast-icon.purple {\n color: #9c27b0;\n}\n.fa.indigo,\n.fas.indigo,\n.far.indigo,\n.fad.indigo,\n.fal.indigo,\n.fa-solid.indigo,\n.fa-regular.indigo,\n.fa-duotone.indigo,\n.fa-light.indigo,\n.fa-thin.indigo,\n.iziToast>.iziToast-body .iziToast-icon.indigo {\n color: #3f51b5;\n}\n.fa.light-blue,\n.fas.light-blue,\n.far.light-blue,\n.fad.light-blue,\n.fal.light-blue,\n.fa-solid.light-blue,\n.fa-regular.light-blue,\n.fa-duotone.light-blue,\n.fa-light.light-blue,\n.fa-thin.light-blue,\n.iziToast>.iziToast-body .iziToast-icon.light-blue {\n color: #4ba7ee;\n}\n.fa.deep-blue,\n.fas.deep-blue,\n.far.deep-blue,\n.fad.deep-blue,\n.fal.deep-blue,\n.fa-solid.deep-blue,\n.fa-regular.deep-blue,\n.fa-duotone.deep-blue,\n.fa-light.deep-blue,\n.fa-thin.deep-blue,\n.iziToast>.iziToast-body .iziToast-icon.deep-blue {\n color: #3367d6;\n}\n.fa.teal,\n.fas.teal,\n.far.teal,\n.fad.teal,\n.fal.teal,\n.fa-solid.teal,\n.fa-regular.teal,\n.fa-duotone.teal,\n.fa-light.teal,\n.fa-thin.teal,\n.iziToast>.iziToast-body .iziToast-icon.teal {\n color: #009688;\n}\n.fa.light-green,\n.fas.light-green,\n.far.light-green,\n.fad.light-green,\n.fal.light-green,\n.fa-solid.light-green,\n.fa-regular.light-green,\n.fa-duotone.light-green,\n.fa-light.light-green,\n.fa-thin.light-green,\n.iziToast>.iziToast-body .iziToast-icon.light-green {\n color: #8bc34a;\n}\n.fa.orange,\n.fas.orange,\n.far.orange,\n.fad.orange,\n.fal.orange,\n.fa-solid.orange,\n.fa-regular.orange,\n.fa-duotone.orange,\n.fa-light.orange,\n.fa-thin.orange,\n.iziToast>.iziToast-body .iziToast-icon.orange {\n color: #ff9800;\n}\n.fa.deep-orange,\n.fas.deep-orange,\n.far.deep-orange,\n.fad.deep-orange,\n.fal.deep-orange,\n.fa-solid.deep-orange,\n.fa-regular.deep-orange,\n.fa-duotone.deep-orange,\n.fa-light.deep-orange,\n.fa-thin.deep-orange,\n.iziToast>.iziToast-body .iziToast-icon.deep-orange {\n color: #ff5722;\n}\n.fa.brown,\n.fas.brown,\n.far.brown,\n.fad.brown,\n.fal.brown,\n.fa-solid.brown,\n.fa-regular.brown,\n.fa-duotone.brown,\n.fa-light.brown,\n.fa-thin.brown,\n.iziToast>.iziToast-body .iziToast-icon.brown {\n color: #795548;\n}\n.fa.blue-grey,\n.fas.blue-grey,\n.far.blue-grey,\n.fad.blue-grey,\n.fal.blue-grey,\n.fa-solid.blue-grey,\n.fa-regular.blue-grey,\n.fa-duotone.blue-grey,\n.fa-light.blue-grey,\n.fa-thin.blue-grey,\n.iziToast>.iziToast-body .iziToast-icon.blue-grey {\n color: #607d8b;\n}\n.fa.yellow,\n.fas.yellow,\n.far.yellow,\n.fad.yellow,\n.fal.yellow,\n.fa-solid.yellow,\n.fa-regular.yellow,\n.fa-duotone.yellow,\n.fa-light.yellow,\n.fa-thin.yellow,\n.iziToast>.iziToast-body .iziToast-icon.yellow {\n color: #fcec60;\n}\n.fa.TURQUOISE,\n.fas.TURQUOISE,\n.far.TURQUOISE,\n.fad.TURQUOISE,\n.fal.TURQUOISE,\n.fa-solid.TURQUOISE,\n.fa-regular.TURQUOISE,\n.fa-duotone.TURQUOISE,\n.fa-light.TURQUOISE,\n.fa-thin.TURQUOISE,\n.iziToast>.iziToast-body .iziToast-icon.TURQUOISE {\n color: #1abc9c;\n}\n.fa.EMERALD,\n.fas.EMERALD,\n.far.EMERALD,\n.fad.EMERALD,\n.fal.EMERALD,\n.fa-solid.EMERALD,\n.fa-regular.EMERALD,\n.fa-duotone.EMERALD,\n.fa-light.EMERALD,\n.fa-thin.EMERALD,\n.iziToast>.iziToast-body .iziToast-icon.EMERALD {\n color: #2ecc71;\n}\n.fa.PETERRIVE,\n.fas.PETERRIVE,\n.far.PETERRIVE,\n.fad.PETERRIVE,\n.fal.PETERRIVE,\n.fa-solid.PETERRIVE,\n.fa-regular.PETERRIVE,\n.fa-duotone.PETERRIVE,\n.fa-light.PETERRIVE,\n.fa-thin.PETERRIVE,\n.iziToast>.iziToast-body .iziToast-icon.PETERRIVE {\n color: #3498db;\n}\n.fa.AMETHYST,\n.fas.AMETHYST,\n.far.AMETHYST,\n.fad.AMETHYST,\n.fal.AMETHYST,\n.fa-solid.AMETHYST,\n.fa-regular.AMETHYST,\n.fa-duotone.AMETHYST,\n.fa-light.AMETHYST,\n.fa-thin.AMETHYST,\n.iziToast>.iziToast-body .iziToast-icon.AMETHYST {\n color: #9b59b6;\n}\n.fa.WETASPHALT,\n.fas.WETASPHALT,\n.far.WETASPHALT,\n.fad.WETASPHALT,\n.fal.WETASPHALT,\n.fa-solid.WETASPHALT,\n.fa-regular.WETASPHALT,\n.fa-duotone.WETASPHALT,\n.fa-light.WETASPHALT,\n.fa-thin.WETASPHALT,\n.iziToast>.iziToast-body .iziToast-icon.WETASPHALT {\n color: #34495e;\n}\n.fa.GREENSEA,\n.fas.GREENSEA,\n.far.GREENSEA,\n.fad.GREENSEA,\n.fal.GREENSEA,\n.fa-solid.GREENSEA,\n.fa-regular.GREENSEA,\n.fa-duotone.GREENSEA,\n.fa-light.GREENSEA,\n.fa-thin.GREENSEA,\n.iziToast>.iziToast-body .iziToast-icon.GREENSEA {\n color: #16a085;\n}\n.fa.NEPHRITIS,\n.fas.NEPHRITIS,\n.far.NEPHRITIS,\n.fad.NEPHRITIS,\n.fal.NEPHRITIS,\n.fa-solid.NEPHRITIS,\n.fa-regular.NEPHRITIS,\n.fa-duotone.NEPHRITIS,\n.fa-light.NEPHRITIS,\n.fa-thin.NEPHRITIS,\n.iziToast>.iziToast-body .iziToast-icon.NEPHRITIS {\n color: #27ae60;\n}\n.fa.BELIZEHOLE,\n.fas.BELIZEHOLE,\n.far.BELIZEHOLE,\n.fad.BELIZEHOLE,\n.fal.BELIZEHOLE,\n.fa-solid.BELIZEHOLE,\n.fa-regular.BELIZEHOLE,\n.fa-duotone.BELIZEHOLE,\n.fa-light.BELIZEHOLE,\n.fa-thin.BELIZEHOLE,\n.iziToast>.iziToast-body .iziToast-icon.BELIZEHOLE {\n color: #2980b9;\n}\n.fa.WISTERIA,\n.fas.WISTERIA,\n.far.WISTERIA,\n.fad.WISTERIA,\n.fal.WISTERIA,\n.fa-solid.WISTERIA,\n.fa-regular.WISTERIA,\n.fa-duotone.WISTERIA,\n.fa-light.WISTERIA,\n.fa-thin.WISTERIA,\n.iziToast>.iziToast-body .iziToast-icon.WISTERIA {\n color: #8e44ad;\n}\n.fa.MIDNIGHTBLUE,\n.fas.MIDNIGHTBLUE,\n.far.MIDNIGHTBLUE,\n.fad.MIDNIGHTBLUE,\n.fal.MIDNIGHTBLUE,\n.fa-solid.MIDNIGHTBLUE,\n.fa-regular.MIDNIGHTBLUE,\n.fa-duotone.MIDNIGHTBLUE,\n.fa-light.MIDNIGHTBLUE,\n.fa-thin.MIDNIGHTBLUE,\n.iziToast>.iziToast-body .iziToast-icon.MIDNIGHTBLUE {\n color: #2c3e50;\n}\n.fa.SUNFLOWER,\n.fas.SUNFLOWER,\n.far.SUNFLOWER,\n.fad.SUNFLOWER,\n.fal.SUNFLOWER,\n.fa-solid.SUNFLOWER,\n.fa-regular.SUNFLOWER,\n.fa-duotone.SUNFLOWER,\n.fa-light.SUNFLOWER,\n.fa-thin.SUNFLOWER,\n.iziToast>.iziToast-body .iziToast-icon.SUNFLOWER {\n color: #f1c40f;\n}\n.fa.CARROT,\n.fas.CARROT,\n.far.CARROT,\n.fad.CARROT,\n.fal.CARROT,\n.fa-solid.CARROT,\n.fa-regular.CARROT,\n.fa-duotone.CARROT,\n.fa-light.CARROT,\n.fa-thin.CARROT,\n.iziToast>.iziToast-body .iziToast-icon.CARROT {\n color: #e67e22;\n}\n.fa.ALIZARIN,\n.fas.ALIZARIN,\n.far.ALIZARIN,\n.fad.ALIZARIN,\n.fal.ALIZARIN,\n.fa-solid.ALIZARIN,\n.fa-regular.ALIZARIN,\n.fa-duotone.ALIZARIN,\n.fa-light.ALIZARIN,\n.fa-thin.ALIZARIN,\n.iziToast>.iziToast-body .iziToast-icon.ALIZARIN {\n color: #e74c3c;\n}\n.fa.CLOUDS,\n.fas.CLOUDS,\n.far.CLOUDS,\n.fad.CLOUDS,\n.fal.CLOUDS,\n.fa-solid.CLOUDS,\n.fa-regular.CLOUDS,\n.fa-duotone.CLOUDS,\n.fa-light.CLOUDS,\n.fa-thin.CLOUDS,\n.iziToast>.iziToast-body .iziToast-icon.CLOUDS {\n color: #ecf0f1;\n}\n.fa.CONCRETE,\n.fas.CONCRETE,\n.far.CONCRETE,\n.fad.CONCRETE,\n.fal.CONCRETE,\n.fa-solid.CONCRETE,\n.fa-regular.CONCRETE,\n.fa-duotone.CONCRETE,\n.fa-light.CONCRETE,\n.fa-thin.CONCRETE,\n.iziToast>.iziToast-body .iziToast-icon.CONCRETE {\n color: #95a5a6;\n}\n.fa.ORANGE,\n.fas.ORANGE,\n.far.ORANGE,\n.fad.ORANGE,\n.fal.ORANGE,\n.fa-solid.ORANGE,\n.fa-regular.ORANGE,\n.fa-duotone.ORANGE,\n.fa-light.ORANGE,\n.fa-thin.ORANGE,\n.iziToast>.iziToast-body .iziToast-icon.ORANGE {\n color: #f39c12;\n}\n.fa.PUMPKIN,\n.fas.PUMPKIN,\n.far.PUMPKIN,\n.fad.PUMPKIN,\n.fal.PUMPKIN,\n.fa-solid.PUMPKIN,\n.fa-regular.PUMPKIN,\n.fa-duotone.PUMPKIN,\n.fa-light.PUMPKIN,\n.fa-thin.PUMPKIN,\n.iziToast>.iziToast-body .iziToast-icon.PUMPKIN {\n color: #d35400;\n}\n.fa.POMEGRANATE,\n.fas.POMEGRANATE,\n.far.POMEGRANATE,\n.fad.POMEGRANATE,\n.fal.POMEGRANATE,\n.fa-solid.POMEGRANATE,\n.fa-regular.POMEGRANATE,\n.fa-duotone.POMEGRANATE,\n.fa-light.POMEGRANATE,\n.fa-thin.POMEGRANATE,\n.iziToast>.iziToast-body .iziToast-icon.POMEGRANATE {\n color: #c0392b;\n}\n.fa.SILVER,\n.fas.SILVER,\n.far.SILVER,\n.fad.SILVER,\n.fal.SILVER,\n.fa-solid.SILVER,\n.fa-regular.SILVER,\n.fa-duotone.SILVER,\n.fa-light.SILVER,\n.fa-thin.SILVER,\n.iziToast>.iziToast-body .iziToast-icon.SILVER {\n color: #bdc3c7;\n}\n.fa.ASBESTOS,\n.fas.ASBESTOS,\n.far.ASBESTOS,\n.fad.ASBESTOS,\n.fal.ASBESTOS,\n.fa-solid.ASBESTOS,\n.fa-regular.ASBESTOS,\n.fa-duotone.ASBESTOS,\n.fa-light.ASBESTOS,\n.fa-thin.ASBESTOS,\n.iziToast>.iziToast-body .iziToast-icon.ASBESTOS {\n color: #7f8c8d;\n}\n.code-toolbar {\n position: relative;\n}\n.btn-copy {\n z-index: 1;\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: inline-block;\n cursor: pointer;\n border: none;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -webkit-appearance: none;\n font-family: Menlo, SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace, monospace, courier, sans-serif;\n font-size: 11px;\n font-weight: bold;\n padding: 4px 8px;\n color: var(--color-meta);\n background: var(--color-card);\n border-radius: 3px;\n -webkit-border-radius: 3px;\n box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n -webkit-box-shadow: 0 1px 2px 0px rgba(0,0,0,0.1);\n position: absolute;\n top: 5px;\n right: 5px;\n opacity: 0;\n -webkit-opacity: 0;\n -moz-opacity: 0;\n transition: all 0.28s ease;\n -webkit-transition: all 0.28s ease;\n -khtml-transition: all 0.28s ease;\n -moz-transition: all 0.28s ease;\n -o-transition: all 0.28s ease;\n -ms-transition: all 0.28s ease;\n}\n.btn-copy >i {\n margin-right: 4px;\n}\n.btn-copy:hover {\n color: #ff5722;\n background: #ffeee8;\n}\n.code-toolbar:hover .btn-copy {\n opacity: 1;\n -webkit-opacity: 1;\n -moz-opacity: 1;\n}\npre:before {\n position: absolute;\n top: 0;\n right: 0;\n color: var(--color-meta);\n font-size: 13px;\n padding: 4px 8px;\n}\npre.language-md:before,\npre.markdown:before {\n content: \"md\";\n}\npre.language-yaml:before {\n content: \"YAML\";\n}\npre.language-json:before {\n content: \"JSON\";\n}\npre.language-html:before {\n content: \"HTML\";\n}\npre.language-js:before,\npre.language-javascript:before {\n content: \"JS\";\n}\npre.language-css:before {\n content: \"CSS\";\n}\npre.language-less:before {\n content: \"Less\";\n}\npre.language-stylus:before {\n content: \"Stylus\";\n}\npre.language-bash:before {\n content: \"bash\";\n}\npre.language-shell:before {\n content: \"shell\";\n}\npre.language-sh:before {\n content: \"sh\";\n}\npre.language-ini:before {\n content: \"ini\";\n}\npre.language-c:before {\n content: \"C\";\n}\npre.language-cpp:before {\n content: \"C++\";\n}\npre.language-objc:before,\npre.language-objectivec:before {\n content: \"Objective-C\";\n}\npre.language-swift:before {\n content: \"Swift\";\n}\npre.language-java:before {\n content: \"Java\";\n}\npre.language-python:before {\n content: \"Python\";\n}\npre.language-php:before {\n content: \"PHP\";\n}\npre.language-rust:before {\n content: \"Rust\";\n}\npre.language-sql:before {\n content: \"SQL\";\n}\npre.language-ruby:before {\n content: \"Ruby\";\n}\npre.language-makefile:before {\n content: \"Makefile\";\n}\npre.language-go:before {\n content: \"Go\";\n}\npre.language-typescript:before {\n content: \"TypeScript\";\n}\npre {\n position: relative;\n -webkit-font-smoothing: auto;\n -moz-osx-font-smoothing: auto;\n}\npre::-webkit-scrollbar {\n height: 4px;\n width: 4px;\n}\npre::-webkit-scrollbar-track-piece {\n background: transparent;\n}\npre::-webkit-scrollbar-thumb {\n background: #3dd9b6;\n cursor: pointer;\n border-radius: 2px;\n -webkit-border-radius: 2px;\n}\npre::-webkit-scrollbar-thumb:hover {\n background: #ff5722;\n}\n.iziToast-texts {\n max-width: 300px !important;\n min-width: 200px !important;\n}\n@media screen and (max-width: 500px) {\n .iziToast-texts {\n max-width: unset !important;\n min-width: unset !important;\n }\n}\n.iziToast-title {\n margin-bottom: 6px !important;\n font-size: 1rem !important;\n}\n.iziToast-message {\n word-break: break-all !important;\n}\n@media screen and (max-width: 500px) {\n .l_header .list-v .aplayer,\n .l_header .list-v .aplayer-pic {\n border-radius: 4px;\n -webkit-border-radius: 4px;\n width: 64px;\n height: 64px;\n }\n}\n.aplayer-container {\n display: flex /* NEW, Spec - Opera 12.1, Firefox 20+ */;\n display: flex;\n justify-content: center;\n -webkit-justify-content: center;\n -khtml-justify-content: center;\n -moz-justify-content: center;\n -o-justify-content: center;\n -ms-justify-content: center;\n min-height: 100px;\n}\n.aplayer-container meting-js {\n max-width: 100%;\n}\n.aplayer {\n max-width: 500px;\n border-radius: 4px;\n -webkit-border-radius: 4px;\n color: var(--color-text);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", Menlo, Monaco, monospace, sans-serif;\n}\n.aplayer .aplayer-list {\n text-align: left;\n}\n@media screen and (max-width: 500px) {\n .aplayer {\n border-radius: 8px;\n -webkit-border-radius: 8px;\n }\n}\n.l_header .aplayer-volume-wrap {\n display: -webkit-box /* OLD - iOS 6-, Safari 3.1-6 */;\n display: -moz-box /* OLD - Firefox 19- (buggy but mostly works) */;\n display: none !important;\n}\n.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body {\n left: -66px !important;\n}\n.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body:hover {\n left: 0px !important;\n}\n@media (prefers-color-scheme: dark) {\n :root {\n --color-mode: 'dark';\n }\n :root:not([color-scheme]) {\n --block-hover: #1c1c1c;\n --text-p1: #fff;\n --text-p3: #777;\n --card: #fff;\n }\n :root:not([color-scheme]) fa-solid,\n :root:not([color-scheme]) fa-regular,\n :root:not([color-scheme]) fa-duotone,\n :root:not([color-scheme]) fa-light,\n :root:not([color-scheme]) fa-thin,\n :root:not([color-scheme]) fal,\n :root:not([color-scheme]) fad,\n :root:not([color-scheme]) fa,\n :root:not([color-scheme]) svg.iconfont,\n :root:not([color-scheme]) img,\n :root:not([color-scheme]) .lazyload {\n filter: brightness(70%) !important;\n }\n :root:not([color-scheme]) .widget.blogger .content .social-wrapper a.social:hover {\n background: var(--color-card);\n }\n :root:not([color-scheme]) .widget >.content ul.entry a .badge,\n :root:not([color-scheme]) .widget >.content ul.popular-posts a .badge {\n color: unset !important;\n }\n :root:not([color-scheme]) .content {\n color: var(--color-p);\n }\n :root:not([color-scheme]) .widget >.content a {\n color: var(--color-p) !important;\n }\n :root:not([color-scheme]) .widget >.content a:hover {\n color: var(--color-list-hl) !important;\n }\n :root:not([color-scheme]) .note {\n background: var(--color-block) !important;\n }\n :root:not([color-scheme]) div.tabs ul.nav-tabs li.tab.active a {\n color: var(--color-p);\n background: var(--color-card);\n }\n :root:not([color-scheme]) kbd {\n background: var(--color-block) !important;\n }\n :root:not([color-scheme]) .cover-wrapper.dock .menu .list-h a:hover,\n :root:not([color-scheme]) .cover-wrapper.featured .menu .list-h a:hover,\n :root:not([color-scheme]) .cover-wrapper.focus .menu .list-h a:hover {\n color: var(--color-text) !important;\n }\n :root:not([color-scheme]) *:not(.highlight) >table tr {\n background-color: var(--color-card);\n }\n :root:not([color-scheme]) *:not(.highlight) >table th {\n background: var(--color-site-bg);\n }\n :root:not([color-scheme]) *:not(.highlight) table td,\n :root:not([color-scheme]) *:not(.highlight) table th {\n border-color: var(--color-site-bg);\n }\n :root:not([color-scheme]) *:not(.highlight) >table tr:hover {\n background: var(--color-codeblock);\n }\n :root:not([color-scheme]) .timenode .highlight {\n border-color: var(--color-site-bg) !important;\n }\n :root:not([color-scheme]) blockquote p {\n color: var(--color-p);\n }\n :root:not([color-scheme]) #archive-page .archive .all-tags ul li span {\n color: var(--color-text);\n background: #6f6f72;\n }\n :root:not([color-scheme]) .btn-copy:hover {\n background: var(--color-site-body);\n }\n :root:not([color-scheme]) .aplayer {\n background: var(--color-site-bg);\n }\n :root:not([color-scheme]) .aplayer .aplayer-list ol li:hover {\n background: rgba(61,217,182,0.2);\n }\n :root:not([color-scheme]) .aplayer .aplayer-list ol li.aplayer-list-light {\n background: var(--color-block);\n }\n :root:not([color-scheme]) .aplayer-info {\n background: var(--color-site-bg) !important;\n }\n :root:not([color-scheme]) .aplayer .aplayer-lrc:before {\n background: linear-gradient(180deg, #282c34 0, rgba(255,255,255,0));\n }\n :root:not([color-scheme]) .aplayer .aplayer-lrc:after {\n background: linear-gradient(180deg, rgba(0,0,0,0) 0, rgba(33,33,33,0.8));\n }\n :root:not([color-scheme]) .aplayer-pic {\n filter: brightness(70%);\n }\n :root:not([color-scheme]) .aplayer .aplayer-list ol li {\n border-top: 1px solid var(--color-card);\n }\n :root:not([color-scheme]) .aplayer.aplayer-withlist .aplayer-info {\n border-bottom: 1px solid var(--color-block);\n }\n :root:not([color-scheme]) .aplayer .aplayer-notice {\n background-color: var(--color-site-bg) !important;\n }\n}\n[color-scheme='dark'] {\n --block-hover: #1c1c1c;\n --text-p1: #fff;\n --text-p3: #777;\n --card: #fff;\n}\n[color-scheme='dark'] fa-solid,\n[color-scheme='dark'] fa-regular,\n[color-scheme='dark'] fa-duotone,\n[color-scheme='dark'] fa-light,\n[color-scheme='dark'] fa-thin,\n[color-scheme='dark'] fal,\n[color-scheme='dark'] fad,\n[color-scheme='dark'] fa,\n[color-scheme='dark'] svg.iconfont,\n[color-scheme='dark'] img,\n[color-scheme='dark'] .lazyload {\n filter: brightness(70%) !important;\n}\n[color-scheme='dark'] .widget.blogger .content .social-wrapper a.social:hover {\n background: var(--color-card);\n}\n[color-scheme='dark'] .widget >.content ul.entry a .badge,\n[color-scheme='dark'] .widget >.content ul.popular-posts a .badge {\n color: unset !important;\n}\n[color-scheme='dark'] .content {\n color: var(--color-p);\n}\n[color-scheme='dark'] .widget >.content a {\n color: var(--color-p) !important;\n}\n[color-scheme='dark'] .widget >.content a:hover {\n color: var(--color-list-hl) !important;\n}\n[color-scheme='dark'] .note {\n background: var(--color-block) !important;\n}\n[color-scheme='dark'] div.tabs ul.nav-tabs li.tab.active a {\n color: var(--color-p);\n background: var(--color-card);\n}\n[color-scheme='dark'] kbd {\n background: var(--color-block) !important;\n}\n[color-scheme='dark'] .cover-wrapper.dock .menu .list-h a:hover,\n[color-scheme='dark'] .cover-wrapper.featured .menu .list-h a:hover,\n[color-scheme='dark'] .cover-wrapper.focus .menu .list-h a:hover {\n color: var(--color-text) !important;\n}\n[color-scheme='dark'] *:not(.highlight) >table tr {\n background-color: var(--color-card);\n}\n[color-scheme='dark'] *:not(.highlight) >table th {\n background: var(--color-site-bg);\n}\n[color-scheme='dark'] *:not(.highlight) table td,\n[color-scheme='dark'] *:not(.highlight) table th {\n border-color: var(--color-site-bg);\n}\n[color-scheme='dark'] *:not(.highlight) >table tr:hover {\n background: var(--color-codeblock);\n}\n[color-scheme='dark'] .timenode .highlight {\n border-color: var(--color-site-bg) !important;\n}\n[color-scheme='dark'] blockquote p {\n color: var(--color-p);\n}\n[color-scheme='dark'] #archive-page .archive .all-tags ul li span {\n color: var(--color-text);\n background: #6f6f72;\n}\n[color-scheme='dark'] .btn-copy:hover {\n background: var(--color-site-body);\n}\n[color-scheme='dark'] .aplayer {\n background: var(--color-site-bg);\n}\n[color-scheme='dark'] .aplayer .aplayer-list ol li:hover {\n background: rgba(61,217,182,0.2);\n}\n[color-scheme='dark'] .aplayer .aplayer-list ol li.aplayer-list-light {\n background: var(--color-block);\n}\n[color-scheme='dark'] .aplayer-info {\n background: var(--color-site-bg) !important;\n}\n[color-scheme='dark'] .aplayer .aplayer-lrc:before {\n background: linear-gradient(180deg, #282c34 0, rgba(255,255,255,0));\n}\n[color-scheme='dark'] .aplayer .aplayer-lrc:after {\n background: linear-gradient(180deg, rgba(0,0,0,0) 0, rgba(33,33,33,0.8));\n}\n[color-scheme='dark'] .aplayer-pic {\n filter: brightness(70%);\n}\n[color-scheme='dark'] .aplayer .aplayer-list ol li {\n border-top: 1px solid var(--color-card);\n}\n[color-scheme='dark'] .aplayer.aplayer-withlist .aplayer-info {\n border-bottom: 1px solid var(--color-block);\n}\n[color-scheme='dark'] .aplayer .aplayer-notice {\n background-color: var(--color-site-bg) !important;\n}\n"]} \ No newline at end of file diff --git a/maps/js/app.js.map b/maps/js/app.js.map new file mode 100644 index 0000000000..0b70dfbfc0 --- /dev/null +++ b/maps/js/app.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../js/app.js","names":["document","addEventListener","volantis","requestAnimationFrame","VolantisApp","init","subscribe","VolantisFancyBox","highlightKeyWords","startFromURL","locationHash","window","location","hash","locationID","decodeURI","split","replace","target","getElementById","setTimeout","startsWith","scroll","to","addTop","dom","header","offsetHeight","behavior","observer","Object","freeze","fn","scrollCorrection","clientHeight","onresize","documentElement","clientWidth","isMobile","isMobileOld","setGlobalHeaderMenuEvent","setHeader","setHeaderSearch","push","scrollEventCallBack","event","$","on","scrolltoElement","bodyAnchor","sidebar","querySelector","querySelectorAll","length","classList","add","GLOBAL_CONFIG","for_page","includes","for_post","lastupd","webinfo","enable","friendlyShow","innerHTML","utilTimeAgo","lastupdate","BirthDay","Date","runtime","data","timeold","getTime","daysold","Math","floor","unit","body","oncopy","messageCopyright","restData","setIsMobile","elem","correction","top","getBoundingClientRect","scrollTop","showHeaderPoint","offsetTop","getScrollTop","topBtn","addClass","del","removeClass","pdata","ispage","wrapper","tocTarget","toc","mPhoneList","forEach","e","hide","setScrollAnchor","click","preventDefault","stopPropagation","stopImmediatePropagation","find","html","title","comment","commentTarget","cleanContentVisibility","style","display","toggleClass","setHeaderMenuSelection","headerMenu","element","li","div","idname","pathname","page","match","index","id","currentTarget","parentElement","childNodes","prototype","toString","call","array","children","show","origin","baseURI","setPageHeaderMenuEvent","switcher","search","setTabs","tabs","$tab","className","footnotes","ref","i","targetID","utilCopyCode","Selector","node","insertAdjacentHTML","_BtnCopy","previousSibling","onclick","_icon","_span","focus","range","Range","selectNodeContents","getSelection","removeAllRanges","addRange","str","utilWriteClipText","then","remove","innerText","catch","message","icon","navigator","clipboard","writeText","Promise","resolve","input","createElement","setAttribute","appendChild","select","result","execCommand","removeChild","reject","dateTimeStamp","minute","hour","day","diffValue","minC","hourC","dayC","weekC","monthC","parseInt","datetime","setTime","Nyear","getFullYear","Nmonth","getMonth","Ndate","getDate","getHours","getMinutes","getSeconds","option","done","tozashMessage","time","position","transitionIn","transitionOut","messageColor","titleColor","backgroundColor","zindex","displayMode","iziToast","layout","closeOnEscape","plugins","default","timeout","onClosed","css","cdn","izitoast_css","js","izitoast_js","question","success","cancel","tozashQuestion","close","overlay","quection","buttons","instance","toast","closedBy","hideMessage","messageCopyrightShow","copyright","fancybox_css","fancybox_js","checkMain","groupBind","Fancybox","loadFancyBox","selectors","name","$item","hasAttribute","$link","src","alt","append","cloneNode","replaceWith","bind","groupAll","Hash","hideScrollbar","Thumbs","autoStart","caption","fancybox","carousel","slide","$trigger","groupName","group","Set","ele","getAttribute","iterator","unbind","elementHandling","error","console","params","URL","href","searchParams","get","keywords","post","start","scrollToFirstHighlightKeywordMark","scrollToNextHighlightKeywordMark","markNextId","markNum","log","walk","createTreeWalker","NodeFilter","SHOW_TEXT","allNodes","nextNode","currentNode","parentNode","matches","indexOfNode","getIndexByWord","nodeValue","slice","mergeIntoSlice","highlightText","highlightStyle","words","text","caseSensitive","included","word","wordLen","startPosition","toLowerCase","indexOf","sort","left","right","end","item","hits","count","wordEnd","shift","size","val","createTextNode","substring","mark","substr","insertBefore","background","scrollToPrevHighlightKeywordMark","cleanHighlightStyle","DOMController","visible","type","param","removeList","list","attrName","attrValue","setAttributeList","setStyle","styleName","styleValue","setStyleList","fadeIn","visibility","opacity","transition","fadeOut","fadeToggle","fadeToggleList","hasClass","c","RegExp","toggleClassList","VolantisRequest","timeoutFetch","url","ms","requestInit","controller","AbortController","signal","abort","promise","fetch","timer","finally","clearTimeout","err","Error","Fetch","async","resp","ok","status","json","POST","method","formData","FormData","keys","key","String","Get","URLSearchParams"],"sources":["js/app.js"],"mappings":"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","sourcesContent":["document.addEventListener(\"DOMContentLoaded\", function () {\n volantis.requestAnimationFrame(() => {\n VolantisApp.init();\n VolantisApp.subscribe();\n VolantisFancyBox.init();\n highlightKeyWords.startFromURL();\n locationHash();\n });\n});\n\n/* 锚点定位 */\nconst locationHash = () => {\n if (window.location.hash) {\n let locationID = decodeURI(window.location.hash.split('#')[1]).replace(/\\ /g, '-');\n let target = document.getElementById(locationID);\n if (target) {\n setTimeout(() => {\n if (window.location.hash.startsWith('#fn')) { // hexo-reference https://github.com/volantis-x/hexo-theme-volantis/issues/647\n volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant', observer: true })\n } else {\n // 锚点中上半部有大片空白 高度大概是 volantis.dom.header.offsetHeight\n volantis.scroll.to(target, { addTop: 5, behavior: 'instant', observer: true })\n }\n }, 1000)\n }\n }\n}\nObject.freeze(locationHash);\n\n/* Main */\nconst VolantisApp = (() => {\n const fn = {},\n COPYHTML = '';\n let scrollCorrection = 80;\n\n fn.init = () => {\n if (volantis.dom.header) {\n scrollCorrection = volantis.dom.header.clientHeight + 16;\n }\n\n window.onresize = () => {\n if (document.documentElement.clientWidth < 500) {\n volantis.isMobile = 1;\n } else {\n volantis.isMobile = 0;\n }\n if (volantis.isMobile != volantis.isMobileOld) {\n fn.setGlobalHeaderMenuEvent();\n fn.setHeader();\n fn.setHeaderSearch();\n }\n }\n volantis.scroll.push(fn.scrollEventCallBack, \"scrollEventCallBack\")\n }\n\n fn.event = () => {\n volantis.dom.$(document.getElementById(\"scroll-down\"))?.on('click', function () {\n fn.scrolltoElement(volantis.dom.bodyAnchor);\n });\n\n // 如果 sidebar 为空,隐藏 sidebar。\n const sidebar = document.querySelector(\"#l_side\")\n if (sidebar) {\n const sectionList = sidebar.querySelectorAll(\"section\")\n if (!sectionList.length) {\n document.querySelector(\"#l_main\").classList.add(\"no_sidebar\")\n }\n }\n\n // 站点信息 最后活动日期\n if (volantis.GLOBAL_CONFIG.sidebar.for_page.includes('webinfo') || volantis.GLOBAL_CONFIG.sidebar.for_post.includes('webinfo')) {\n const lastupd = volantis.GLOBAL_CONFIG.sidebar.webinfo.lastupd;\n if (!!document.getElementById('last-update-show') && lastupd.enable && lastupd.friendlyShow) {\n document.getElementById('last-update-show').innerHTML = fn.utilTimeAgo(volantis.GLOBAL_CONFIG.lastupdate);\n }\n }\n\n // 站点信息 运行时间\n if (!!document.getElementById('webinfo-runtime-count')) {\n let BirthDay = new Date(volantis.GLOBAL_CONFIG.sidebar.webinfo.runtime.data);\n let timeold = (new Date().getTime() - BirthDay.getTime());\n let daysold = Math.floor(timeold / (24 * 60 * 60 * 1000));\n document.getElementById('webinfo-runtime-count').innerHTML = `${daysold} ${volantis.GLOBAL_CONFIG.sidebar.webinfo.runtime.unit}`;\n }\n\n // 消息提示 复制时弹出\n document.body.oncopy = function () {\n fn.messageCopyright()\n };\n }\n\n fn.restData = () => {\n scrollCorrection = volantis.dom.header ? volantis.dom.header.clientHeight + 16 : 80;\n }\n\n fn.setIsMobile = () => {\n if (document.documentElement.clientWidth < 500) {\n volantis.isMobile = 1;\n volantis.isMobileOld = 1;\n } else {\n volantis.isMobile = 0;\n volantis.isMobileOld = 0;\n }\n }\n\n // 校正页面定位(被导航栏挡住的区域)\n fn.scrolltoElement = (elem, correction = scrollCorrection) => {\n volantis.scroll.to(elem, {\n top: elem.getBoundingClientRect().top + document.documentElement.scrollTop - correction\n })\n }\n\n // 滚动事件回调们\n fn.scrollEventCallBack = () => {\n // 【移动端 PC】//////////////////////////////////////////////////////////////////////\n\n // 显示/隐藏 Header导航 topBtn 【移动端 PC】\n const showHeaderPoint = volantis.dom.bodyAnchor.offsetTop - scrollCorrection;\n const scrollTop = volantis.scroll.getScrollTop(); // 滚动条距离顶部的距离\n\n // topBtn\n if (volantis.dom.topBtn) {\n if (scrollTop > volantis.dom.bodyAnchor.offsetTop) {\n volantis.dom.topBtn.addClass('show');\n // 向上滚动高亮 topBtn\n if (volantis.scroll.del > 0) {\n volantis.dom.topBtn.removeClass('hl');\n } else {\n volantis.dom.topBtn.addClass('hl');\n }\n } else {\n volantis.dom.topBtn.removeClass('show').removeClass('hl');\n }\n }\n\n // Header导航\n if (volantis.dom.header) {\n if (scrollTop - showHeaderPoint > -1) {\n volantis.dom.header.addClass('show');\n } else {\n volantis.dom.header.removeClass('show');\n }\n }\n\n // 决定一二级导航栏的切换 【向上滚动切换为一级导航栏;向下滚动切换为二级导航栏】 【移动端 PC】\n if (pdata.ispage && volantis.dom.wrapper) {\n if (volantis.scroll.del > 0 && scrollTop > 100) { // 向下滚动\n volantis.dom.wrapper.addClass('sub'); // <---- 二级导航显示\n } else if (volantis.scroll.del < 0) { // 向上滚动\n volantis.dom.wrapper.removeClass('sub'); // <---- 取消二级导航显示 一级导航显示\n }\n }\n\n // 【移动端】//////////////////////////////////////////////////////////////////////\n if (volantis.isMobile) {\n // 【移动端】 页面滚动 隐藏 移动端toc目录按钮\n if (pdata.ispage && volantis.dom.tocTarget && volantis.dom.toc) {\n volantis.dom.tocTarget.removeClass('active');\n volantis.dom.toc.removeClass('active');\n }\n // 【移动端】 滚动时隐藏子菜单\n if (volantis.dom.mPhoneList) {\n volantis.dom.mPhoneList.forEach(function (e) {\n volantis.dom.$(e).hide();\n })\n }\n }\n }\n\n // 设置滚动锚点\n fn.setScrollAnchor = () => {\n // click topBtn 滚动至bodyAnchor 【移动端 PC】\n if (volantis.dom.topBtn && volantis.dom.bodyAnchor) {\n volantis.dom.topBtn.click(e => {\n e.preventDefault();\n e.stopPropagation();\n fn.scrolltoElement(volantis.dom.bodyAnchor);\n e.stopImmediatePropagation();\n });\n }\n\n }\n\n // 设置导航栏\n fn.setHeader = () => {\n // !!! 此处的Dom对象需要重载 !!!\n if (!pdata.ispage) return;\n\n // 填充二级导航文章标题 【移动端 PC】\n volantis.dom.wrapper.find('.nav-sub .title').html(document.title.split(\" - \")[0]);\n\n // ====== bind events to every btn =========\n // 评论按钮 【移动端 PC】\n volantis.dom.comment = volantis.dom.$(document.getElementById(\"s-comment\")); // 评论按钮 桌面端 移动端\n volantis.dom.commentTarget = volantis.dom.$(document.querySelector('#l_main article#comments')); // 评论区域\n if (volantis.dom.commentTarget) {\n volantis.dom.comment.click(e => { // 评论按钮点击后 跳转到评论区域\n e.preventDefault();\n e.stopPropagation();\n volantis.cleanContentVisibility();\n fn.scrolltoElement(volantis.dom.commentTarget);\n e.stopImmediatePropagation();\n });\n } else volantis.dom.comment.style.display = 'none'; // 关闭了评论,则隐藏评论按钮\n\n // 移动端toc目录按钮 【移动端】\n if (volantis.isMobile) {\n volantis.dom.toc = volantis.dom.$(document.getElementById(\"s-toc\")); // 目录按钮 仅移动端\n volantis.dom.tocTarget = volantis.dom.$(document.querySelector('#l_side .toc-wrapper')); // 侧边栏的目录列表\n if (volantis.dom.tocTarget) {\n // 点击移动端目录按钮 激活目录按钮 显示侧边栏的目录列表\n volantis.dom.toc.click((e) => {\n e.stopPropagation();\n volantis.dom.tocTarget.toggleClass('active');\n volantis.dom.toc.toggleClass('active');\n });\n // 点击空白 隐藏\n volantis.dom.$(document).click(function (e) {\n e.stopPropagation();\n if (volantis.dom.tocTarget) {\n volantis.dom.tocTarget.removeClass('active');\n }\n volantis.dom.toc.removeClass('active');\n });\n } else if (volantis.dom.toc) volantis.dom.toc.style.display = 'none'; // 隐藏toc目录按钮\n }\n }\n\n // 设置导航栏菜单选中状态 【移动端 PC】\n fn.setHeaderMenuSelection = () => {\n // !!! 此处的Dom对象需要重载 !!!\n volantis.dom.headerMenu = volantis.dom.$(document.querySelectorAll('#l_header .navigation,#l_cover .navigation,#l_side .navigation')); // 导航列表\n\n // 先把已经激活的取消激活\n volantis.dom.headerMenu.forEach(element => {\n let li = volantis.dom.$(element).find('li a.active')\n if (li)\n li.removeClass('active')\n let div = volantis.dom.$(element).find('div a.active')\n if (div)\n div.removeClass('active')\n });\n\n // replace '%' '/' '.'\n var idname = location.pathname.replace(/\\/|%|\\./g, '');\n if (idname.length == 0) {\n idname = 'home';\n }\n var page = idname.match(/page\\d{0,}$/g);\n if (page) {\n page = page[0];\n idname = idname.split(page)[0];\n }\n var index = idname.match(/index.html/);\n if (index) {\n index = index[0];\n idname = idname.split(index)[0];\n }\n // 转义字符如 [, ], ~, #, @\n idname = idname.replace(/(\\[|\\]|~|#|@)/g, '\\\\$1');\n if (idname && volantis.dom.headerMenu) {\n volantis.dom.headerMenu.forEach(element => {\n // idname 不能为数字开头, 加一个 action- 前缀\n let id = element.querySelector(\"[active-action=action-\" + idname + \"]\")\n if (id) {\n volantis.dom.$(id).addClass('active')\n }\n });\n }\n }\n\n // 设置全局事件\n fn.setGlobalHeaderMenuEvent = () => {\n if (volantis.isMobile) {\n // 【移动端】 关闭已经展开的子菜单 点击展开子菜单\n document.querySelectorAll('#l_header .m-phone li').forEach(function (e) {\n if (e.querySelector(\".list-v\")) {\n // 点击菜单\n volantis.dom.$(e).click(function (e) {\n e.stopPropagation();\n // 关闭已经展开的子菜单\n e.currentTarget.parentElement.childNodes.forEach(function (e) {\n if (Object.prototype.toString.call(e) == '[object HTMLLIElement]') {\n e.childNodes.forEach(function (e) {\n if (Object.prototype.toString.call(e) == '[object HTMLUListElement]') {\n volantis.dom.$(e).hide()\n }\n })\n }\n })\n // 点击展开子菜单\n let array = e.currentTarget.children\n for (let index = 0; index < array.length; index++) {\n const element = array[index];\n if (volantis.dom.$(element).title === 'menu') { // 移动端菜单栏异常\n volantis.dom.$(element).display = \"flex\" // https://github.com/volantis-x/hexo-theme-volantis/issues/706\n } else {\n volantis.dom.$(element).show()\n }\n }\n }, 0);\n }\n })\n } else {\n // 【PC端】 hover时展开子菜单,点击时[target.baseURI==origin时]隐藏子菜单? 现有逻辑大部分情况不隐藏子菜单\n document.querySelectorAll('#wrapper .m-pc li > a[href]').forEach(function (e) {\n volantis.dom.$(e.parentElement).click(function (e) {\n e.stopPropagation();\n if (e.target.origin == e.target.baseURI) {\n document.querySelectorAll('#wrapper .m-pc .list-v').forEach(function (e) {\n volantis.dom.$(e).hide(); // 大概率不会执行\n })\n }\n }, 0);\n })\n }\n fn.setPageHeaderMenuEvent();\n }\n\n // 【移动端】隐藏子菜单\n fn.setPageHeaderMenuEvent = () => {\n if (!volantis.isMobile) return\n // 【移动端】 点击空白处隐藏子菜单\n volantis.dom.$(document).click(function (e) {\n volantis.dom.mPhoneList.forEach(function (e) {\n volantis.dom.$(e).hide();\n })\n });\n }\n\n // 设置导航栏搜索框 【移动端】\n fn.setHeaderSearch = () => {\n if (!volantis.isMobile) return;\n if (!volantis.dom.switcher) return;\n // 点击移动端搜索按钮\n volantis.dom.switcher.click(function (e) {\n e.stopPropagation();\n volantis.dom.header.toggleClass('z_search-open'); // 激活移动端搜索框\n volantis.dom.switcher.toggleClass('active'); // 移动端搜索按钮\n });\n // 点击空白取消激活\n volantis.dom.$(document).click(function (e) {\n volantis.dom.header.removeClass('z_search-open');\n volantis.dom.switcher.removeClass('active');\n });\n // 移动端点击搜索框 停止事件传播\n volantis.dom.search.click(function (e) {\n e.stopPropagation();\n });\n }\n\n // 设置 tabs 标签 【移动端 PC】\n fn.setTabs = () => {\n let tabs = document.querySelectorAll('#l_main .tabs .nav-tabs')\n if (!tabs) return\n tabs.forEach(function (e) {\n e.querySelectorAll('a').forEach(function (e) {\n volantis.dom.$(e).on('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n const $tab = volantis.dom.$(e.target.parentElement.parentElement.parentElement);\n $tab.find('.nav-tabs .active').removeClass('active');\n volantis.dom.$(e.target.parentElement).addClass('active');\n $tab.find('.tab-content .active').removeClass('active');\n $tab.find(e.target.className).addClass('active');\n return false;\n });\n })\n })\n }\n\n // hexo-reference 页脚跳转 https://github.com/volantis-x/hexo-theme-volantis/issues/647\n fn.footnotes = () => {\n let ref = document.querySelectorAll('#l_main .footnote-backref, #l_main .footnote-ref > a');\n ref.forEach(function (e, i) {\n ref[i].click = () => { }; // 强制清空原 click 事件\n volantis.dom.$(e).on('click', (e) => {\n e.stopPropagation();\n e.preventDefault();\n let targetID = decodeURI(e.target.hash.split('#')[1]).replace(/\\ /g, '-');\n let target = document.getElementById(targetID);\n if (target) {\n volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })\n }\n });\n })\n }\n\n // 工具类:代码块复制\n fn.utilCopyCode = (Selector) => {\n document.querySelectorAll(Selector).forEach(node => {\n const test = node.insertAdjacentHTML(\"beforebegin\", COPYHTML);\n const _BtnCopy = node.previousSibling;\n _BtnCopy.onclick = e => {\n e.stopPropagation();\n const _icon = _BtnCopy.querySelector('i');\n const _span = _BtnCopy.querySelector('span');\n\n node.focus();\n const range = new Range();\n range.selectNodeContents(node);\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(range);\n\n const str = document.getSelection().toString();\n fn.utilWriteClipText(str).then(() => {\n fn.messageCopyright();\n _BtnCopy.classList.add('copied');\n _icon.classList.remove('fa-copy');\n _icon.classList.add('fa-check-circle');\n _span.innerText = \"COPIED\";\n setTimeout(() => {\n _icon.classList.remove('fa-check-circle');\n _icon.classList.add('fa-copy');\n _span.innerText = \"COPY\";\n }, 2000)\n }).catch(e => {\n VolantisApp.message('系统提示', e, {\n icon: 'fa fa-exclamation-circle red'\n });\n _BtnCopy.classList.add('copied-failed');\n _icon.classList.remove('fa-copy');\n _icon.classList.add('fa-exclamation-circle');\n _span.innerText = \"COPY FAILED\";\n setTimeout(() => {\n _icon.classList.remove('fa-exclamation-circle');\n _icon.classList.add('fa-copy');\n _span.innerText = \"COPY\";\n })\n })\n }\n });\n }\n\n // 工具类:复制字符串到剪切板\n fn.utilWriteClipText = (str) => {\n return navigator.clipboard\n .writeText(str)\n .then(() => {\n return Promise.resolve()\n })\n .catch(e => {\n const input = document.createElement('textarea');\n input.setAttribute('readonly', 'readonly');\n document.body.appendChild(input);\n input.innerHTML = str;\n input.select();\n try {\n let result = document.execCommand('copy')\n document.body.removeChild(input);\n if (!result || result === 'unsuccessful') {\n return Promise.reject('复制文本失败!')\n } else {\n return Promise.resolve()\n }\n } catch (e) {\n document.body.removeChild(input);\n return Promise.reject(\n '当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作!'\n )\n }\n })\n }\n\n // 工具类:返回时间间隔\n fn.utilTimeAgo = (dateTimeStamp) => {\n const minute = 1e3 * 60, hour = minute * 60, day = hour * 24, week = day * 7, month = day * 30;\n const now = new Date().getTime();\n const diffValue = now - dateTimeStamp;\n const minC = diffValue / minute,\n hourC = diffValue / hour,\n dayC = diffValue / day,\n weekC = diffValue / week,\n monthC = diffValue / month;\n if (diffValue < 0) {\n result = \"\"\n } else if (monthC >= 1 && monthC < 7) {\n result = \" \" + parseInt(monthC) + \" 月前\"\n } else if (weekC >= 1 && weekC < 4) {\n result = \" \" + parseInt(weekC) + \" 周前\"\n } else if (dayC >= 1 && dayC < 7) {\n result = \" \" + parseInt(dayC) + \" 天前\"\n } else if (hourC >= 1 && hourC < 24) {\n result = \" \" + parseInt(hourC) + \" 小时前\"\n } else if (minC >= 1 && minC < 60) {\n result = \" \" + parseInt(minC) + \" 分钟前\"\n } else if (diffValue >= 0 && diffValue <= minute) {\n result = \"刚刚\"\n } else {\n const datetime = new Date();\n datetime.setTime(dateTimeStamp);\n const Nyear = datetime.getFullYear();\n const Nmonth = datetime.getMonth() + 1 < 10 ? \"0\" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;\n const Ndate = datetime.getDate() < 10 ? \"0\" + datetime.getDate() : datetime.getDate();\n const Nhour = datetime.getHours() < 10 ? \"0\" + datetime.getHours() : datetime.getHours();\n const Nminute = datetime.getMinutes() < 10 ? \"0\" + datetime.getMinutes() : datetime.getMinutes();\n const Nsecond = datetime.getSeconds() < 10 ? \"0\" + datetime.getSeconds() : datetime.getSeconds();\n result = Nyear + \"-\" + Nmonth + \"-\" + Ndate\n }\n return result;\n }\n\n // 消息提示:标准\n fn.message = (title, message, option = {}, done = null) => {\n if (typeof iziToast === \"undefined\") {\n volantis.css(volantis.GLOBAL_CONFIG.cdn.izitoast_css)\n volantis.js(volantis.GLOBAL_CONFIG.cdn.izitoast_js, () => {\n tozashMessage(title, message, option, done);\n });\n } else {\n tozashMessage(title, message, option, done);\n }\n function tozashMessage(title, message, option, done) {\n const {\n icon,\n time,\n position,\n transitionIn,\n transitionOut,\n messageColor,\n titleColor,\n backgroundColor,\n zindex,\n displayMode\n } = option;\n iziToast.show({\n layout: '2',\n icon: 'Fontawesome',\n closeOnEscape: 'true',\n displayMode: displayMode || 'replace',\n transitionIn: transitionIn || volantis.GLOBAL_CONFIG.plugins.message.transitionIn,\n transitionOut: transitionOut || volantis.GLOBAL_CONFIG.plugins.message.transitionOut,\n messageColor: messageColor || volantis.GLOBAL_CONFIG.plugins.message.messageColor,\n titleColor: titleColor || volantis.GLOBAL_CONFIG.plugins.message.titleColor,\n backgroundColor: backgroundColor || volantis.GLOBAL_CONFIG.plugins.message.backgroundColor,\n zindex: zindex || volantis.GLOBAL_CONFIG.plugins.message.zindex,\n icon: icon || volantis.GLOBAL_CONFIG.plugins.message.icon.default,\n timeout: time || volantis.GLOBAL_CONFIG.plugins.message.time.default,\n position: position || volantis.GLOBAL_CONFIG.plugins.message.position,\n title: title,\n message: message,\n onClosed: () => {\n if (done) done();\n },\n });\n }\n }\n\n // 消息提示:询问\n fn.question = (title, message, option = {}, success = null, cancel = null, done = null) => {\n if (typeof iziToast === \"undefined\") {\n volantis.css(volantis.GLOBAL_CONFIG.cdn.izitoast_css)\n volantis.js(volantis.GLOBAL_CONFIG.cdn.izitoast_js, () => {\n tozashQuestion(title, message, option, success, cancel, done);\n });\n } else {\n tozashQuestion(title, message, option, success, cancel, done);\n }\n\n function tozashQuestion(title, message, option, success, cancel, done) {\n const {\n icon,\n time,\n position,\n transitionIn,\n transitionOut,\n messageColor,\n titleColor,\n backgroundColor,\n zindex\n } = option;\n iziToast.question({\n id: 'question',\n icon: 'Fontawesome',\n close: false,\n overlay: true,\n displayMode: 'once',\n position: 'center',\n messageColor: messageColor || volantis.GLOBAL_CONFIG.plugins.message.messageColor,\n titleColor: titleColor || volantis.GLOBAL_CONFIG.plugins.message.titleColor,\n backgroundColor: backgroundColor || volantis.GLOBAL_CONFIG.plugins.message.backgroundColor,\n zindex: zindex || volantis.GLOBAL_CONFIG.plugins.message.zindex,\n icon: icon || volantis.GLOBAL_CONFIG.plugins.message.icon.quection,\n timeout: time || volantis.GLOBAL_CONFIG.plugins.message.time.quection,\n title: title,\n message: message,\n buttons: [\n ['', (instance, toast) => {\n instance.hide({ transitionOut: transitionOut || 'fadeOut' }, toast, 'button');\n if (success) success(instance, toast)\n }],\n ['', (instance, toast) => {\n instance.hide({ transitionOut: transitionOut || 'fadeOut' }, toast, 'button');\n if (cancel) cancel(instance, toast)\n }]\n ],\n onClosed: (instance, toast, closedBy) => {\n if (done) done(instance, toast, closedBy);\n }\n });\n }\n }\n\n // 消息提示:隐藏\n fn.hideMessage = (done = null) => {\n const toast = document.querySelector('.iziToast');\n if (!toast) {\n if (done) done()\n return;\n }\n\n if (typeof iziToast === \"undefined\") {\n volantis.css(volantis.GLOBAL_CONFIG.cdn.izitoast_css)\n volantis.js(volantis.GLOBAL_CONFIG.cdn.izitoast_js, () => {\n hideMessage(done);\n });\n } else {\n hideMessage(done);\n }\n\n function hideMessage(done) {\n iziToast.hide({}, toast);\n if (done) done();\n }\n }\n\n // 消息提示:复制\n let messageCopyrightShow = 0;\n fn.messageCopyright = () => {\n // 消息提示 复制时弹出\n if (volantis.GLOBAL_CONFIG.plugins.message.enable\n && volantis.GLOBAL_CONFIG.plugins.message.copyright.enable\n && messageCopyrightShow < 1) {\n messageCopyrightShow++;\n VolantisApp.message(volantis.GLOBAL_CONFIG.plugins.message.copyright.title,\n volantis.GLOBAL_CONFIG.plugins.message.copyright.message, {\n icon: volantis.GLOBAL_CONFIG.plugins.message.copyright.icon,\n transitionIn: 'flipInX',\n transitionOut: 'flipOutX',\n displayMode: 1\n });\n }\n }\n\n return {\n init: () => {\n fn.init();\n fn.event();\n },\n subscribe: () => {\n fn.setIsMobile();\n fn.setHeader();\n fn.setHeaderMenuSelection();\n fn.setGlobalHeaderMenuEvent();\n fn.setHeaderSearch();\n fn.setScrollAnchor();\n fn.setTabs();\n fn.footnotes();\n },\n utilCopyCode: fn.utilCopyCode,\n utilWriteClipText: fn.utilWriteClipText,\n utilTimeAgo: fn.utilTimeAgo,\n message: fn.message,\n question: fn.question,\n hideMessage: fn.hideMessage,\n messageCopyright: fn.messageCopyright,\n scrolltoElement: fn.scrolltoElement\n }\n})()\nObject.freeze(VolantisApp);\n\n/* FancyBox */\nconst VolantisFancyBox = (() => {\n const fn = {};\n\n fn.loadFancyBox = (done) => {\n volantis.css(volantis.GLOBAL_CONFIG.cdn.fancybox_css);\n volantis.js(volantis.GLOBAL_CONFIG.cdn.fancybox_js).then(() => {\n if (done) done();\n })\n }\n\n /**\n * 加载及处理\n * \n * @param {*} checkMain 是否只处理文章区域的文章\n * @param {*} done FancyBox 加载完成后的动作,默认执行分组绑定\n * @returns \n */\n fn.init = (checkMain = true, done = fn.groupBind) => {\n if (!document.querySelector(\".md .gallery img, .fancybox\") && checkMain) return;\n if (typeof Fancybox === \"undefined\") {\n fn.loadFancyBox(done);\n } else {\n done();\n }\n }\n\n /**\n * 图片元素预处理\n * \n * @param {*} selectors 选择器\n * @param {*} name 分组\n */\n fn.elementHandling = (selectors, name) => {\n const nodeList = document.querySelectorAll(selectors);\n nodeList.forEach($item => {\n if ($item.hasAttribute('fancybox')) return;\n $item.setAttribute('fancybox', '');\n const $link = document.createElement('a');\n $link.setAttribute('href', $item.src);\n $link.setAttribute('data-caption', $item.alt);\n $link.setAttribute('data-fancybox', name);\n $link.classList.add('fancybox');\n $link.append($item.cloneNode());\n $item.replaceWith($link);\n })\n }\n\n /**\n * 原生绑定\n * \n * @param {*} selectors 选择器\n */\n fn.bind = (selectors) => {\n fn.init(false, () => {\n Fancybox.bind(selectors, {\n groupAll: true,\n Hash: false,\n hideScrollbar: false,\n Thumbs: {\n autoStart: false,\n },\n caption: function (fancybox, carousel, slide) {\n return slide.$trigger.alt || null\n }\n });\n });\n }\n\n /**\n * 分组绑定\n * \n * @param {*} groupName 分组名称\n */\n fn.groupBind = (groupName = null) => {\n const group = new Set();\n\n document.querySelectorAll(\".gallery\").forEach(ele => {\n if (ele.querySelector(\"img\")) {\n group.add(ele.getAttribute('data-group') || 'default');\n }\n })\n\n if (!!groupName) group.add(groupName);\n\n for (const iterator of group) {\n Fancybox.unbind('[data-fancybox=\"' + iterator + '\"]');\n Fancybox.bind('[data-fancybox=\"' + iterator + '\"]', {\n Hash: false,\n hideScrollbar: false,\n Thumbs: {\n autoStart: false,\n }\n });\n }\n }\n\n return {\n init: fn.init,\n bind: fn.bind,\n groupBind: (selectors, groupName = 'default') => {\n try {\n fn.elementHandling(selectors, groupName);\n fn.init(false, () => {\n fn.groupBind(groupName)\n });\n } catch (error) {\n console.error(error)\n }\n }\n }\n})()\nObject.freeze(VolantisFancyBox);\n\n// highlightKeyWords 与 搜索功能搭配 https://github.com/next-theme/hexo-theme-next/blob/eb194a7258058302baf59f02d4b80b6655338b01/source/js/third-party/search/local-search.js\n// Question: 锚点稳定性未知\n// ToDo: 查找模式\n// 0. (/////////要知道浏览器自带全页面查找功能 CTRL + F)\n// 1. 右键开启查找模式 / 导航栏菜单开启?? / CTRL + F ???\n// 2. 查找模式面板 (可拖动? or 固定?)\n// 3. keyword mark id 从 0 开始编号 查找下一处 highlightKeyWords.scrollToNextHighlightKeywordMark() 查找上一处 scrollToPrevHighlightKeywordMark() 循环查找(取模%)\n// 4. 可输入修改 查找关键词 keywords(type:list)\n// 5. 区分大小写 caseSensitive (/ 全字匹配?? / 正则匹配??)\n// 6. 在选定区域中查找 querySelector ??\n// 7. 关闭查找模式\n// 8. 搜索跳转 (URL 入口) 自动开启查找模式 调用 scrollToNextHighlightKeywordMark()\nconst highlightKeyWords = (() => {\n let fn = {}\n fn.markNum = 0\n fn.markNextId = -1\n fn.startFromURL = () => {\n const params = decodeURI(new URL(location.href).searchParams.get('keyword'));\n const keywords = params ? params.split(' ') : [];\n const post = document.querySelector('#l_main');\n if (keywords.length == 1 && keywords[0] == \"null\") {\n return;\n }\n fn.start(keywords, post); // 渲染耗时较长\n fn.scrollToFirstHighlightKeywordMark()\n }\n fn.scrollToFirstHighlightKeywordMark = () => {\n volantis.cleanContentVisibility();\n let target = fn.scrollToNextHighlightKeywordMark(\"0\");\n if (!target) {\n volantis.requestAnimationFrame(fn.scrollToFirstHighlightKeywordMark)\n }\n }\n fn.scrollToNextHighlightKeywordMark = (id) => {\n // Next Id\n let input = id || (fn.markNextId + 1) % fn.markNum;\n fn.markNextId = parseInt(input)\n let target = document.getElementById(\"keyword-mark-\" + fn.markNextId);\n if (!target) {\n fn.markNextId = (fn.markNextId + 1) % fn.markNum;\n target = document.getElementById(\"keyword-mark-\" + fn.markNextId);\n }\n if (target) {\n volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })\n }\n // Current target\n return target\n }\n fn.scrollToPrevHighlightKeywordMark = (id) => {\n // Prev Id\n let input = id || (fn.markNextId - 1 + fn.markNum) % fn.markNum;\n fn.markNextId = parseInt(input)\n let target = document.getElementById(\"keyword-mark-\" + fn.markNextId);\n if (!target) {\n fn.markNextId = (fn.markNextId - 1 + fn.markNum) % fn.markNum;\n target = document.getElementById(\"keyword-mark-\" + fn.markNextId);\n }\n if (target) {\n volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })\n }\n // Current target\n return target\n }\n fn.start = (keywords, querySelector) => {\n fn.markNum = 0\n if (!keywords.length || !querySelector || (keywords.length == 1 && keywords[0] == \"null\")) return;\n console.log(keywords);\n const walk = document.createTreeWalker(querySelector, NodeFilter.SHOW_TEXT, null);\n const allNodes = [];\n while (walk.nextNode()) {\n if (!walk.currentNode.parentNode.matches('button, select, textarea')) allNodes.push(walk.currentNode);\n }\n allNodes.forEach(node => {\n const [indexOfNode] = fn.getIndexByWord(keywords, node.nodeValue);\n if (!indexOfNode.length) return;\n const slice = fn.mergeIntoSlice(0, node.nodeValue.length, indexOfNode);\n fn.highlightText(node, slice, 'keyword');\n fn.highlightStyle()\n });\n }\n fn.getIndexByWord = (words, text, caseSensitive = false) => {\n const index = [];\n const included = new Set();\n words.forEach(word => {\n const div = document.createElement('div');\n div.innerText = word;\n word = div.innerHTML;\n\n const wordLen = word.length;\n if (wordLen === 0) return;\n let startPosition = 0;\n let position = -1;\n if (!caseSensitive) {\n text = text.toLowerCase();\n word = word.toLowerCase();\n }\n while ((position = text.indexOf(word, startPosition)) > -1) {\n index.push({ position, word });\n included.add(word);\n startPosition = position + wordLen;\n }\n });\n index.sort((left, right) => {\n if (left.position !== right.position) {\n return left.position - right.position;\n }\n return right.word.length - left.word.length;\n });\n return [index, included];\n };\n fn.mergeIntoSlice = (start, end, index) => {\n let item = index[0];\n let { position, word } = item;\n const hits = [];\n const count = new Set();\n while (position + word.length <= end && index.length !== 0) {\n count.add(word);\n hits.push({\n position,\n length: word.length\n });\n const wordEnd = position + word.length;\n\n index.shift();\n while (index.length !== 0) {\n item = index[0];\n position = item.position;\n word = item.word;\n if (wordEnd > position) {\n index.shift();\n } else {\n break;\n }\n }\n }\n return {\n hits,\n start,\n end,\n count: count.size\n };\n };\n fn.highlightText = (node, slice, className) => {\n const val = node.nodeValue;\n let index = slice.start;\n const children = [];\n for (const { position, length } of slice.hits) {\n const text = document.createTextNode(val.substring(index, position));\n index = position + length;\n let mark = document.createElement('mark');\n mark.className = className;\n mark = fn.highlightStyle(mark)\n mark.appendChild(document.createTextNode(val.substr(position, length)));\n children.push(text, mark);\n }\n node.nodeValue = val.substring(index, slice.end);\n children.forEach(element => {\n node.parentNode.insertBefore(element, node);\n });\n }\n fn.highlightStyle = (mark) => {\n if (!mark) return;\n mark.id = \"keyword-mark-\" + fn.markNum;\n fn.markNum++;\n mark.style.background = \"transparent\";\n mark.style[\"border-bottom\"] = \"1px dashed #ff2a2a\";\n mark.style[\"color\"] = \"#ff2a2a\";\n mark.style[\"font-weight\"] = \"bold\";\n return mark\n }\n fn.cleanHighlightStyle = () => {\n document.querySelectorAll(\".keyword\").forEach(mark => {\n mark.style.background = \"transparent\";\n mark.style[\"border-bottom\"] = null;\n mark.style[\"color\"] = null;\n mark.style[\"font-weight\"] = null;\n })\n }\n return {\n start: (keywords, querySelector) => {\n fn.start(keywords, querySelector)\n },\n startFromURL: () => {\n fn.startFromURL()\n },\n scrollToNextHighlightKeywordMark: (id) => {\n fn.scrollToNextHighlightKeywordMark(id)\n },\n scrollToPrevHighlightKeywordMark: (id) => {\n fn.scrollToPrevHighlightKeywordMark(id)\n },\n cleanHighlightStyle: () => {\n fn.cleanHighlightStyle()\n },\n }\n})()\nObject.freeze(highlightKeyWords);\n\n/* DOM 控制 */\nconst DOMController = {\n /**\n * 控制元素显隐\n */\n visible: (ele, type = true) => {\n if (ele) ele.style.display = type === true ? 'block' : 'none';\n },\n\n /**\n * 移除元素\n */\n remove: (param) => {\n const node = document.querySelectorAll(param);\n node.forEach(ele => {\n ele.remove();\n })\n },\n\n removeList: (list) => {\n list.forEach(param => {\n DOMController.remove(param)\n })\n },\n\n /**\n * 设置属性\n */\n setAttribute: (param, attrName, attrValue) => {\n const node = document.querySelectorAll(param);\n node.forEach(ele => {\n ele.setAttribute(attrName, attrValue)\n })\n },\n\n setAttributeList: (list) => {\n list.forEach(item => {\n DOMController.setAttribute(item[0], item[1], item[2])\n })\n },\n\n /**\n * 设置样式\n */\n setStyle: (param, styleName, styleValue) => {\n const node = document.querySelectorAll(param);\n node.forEach(ele => {\n ele.style[styleName] = styleValue;\n })\n },\n\n setStyleList: (list) => {\n list.forEach(item => {\n DOMController.setStyle(item[0], item[1], item[2])\n })\n },\n\n fadeIn: (e) => {\n if (!e) return;\n e.style.visibility = \"visible\";\n e.style.opacity = 1;\n e.style.display = \"block\";\n e.style.transition = \"all 0.5s linear\";\n return e\n },\n\n fadeOut: (e) => {\n if (!e) return;\n e.style.visibility = \"hidden\";\n e.style.opacity = 0;\n e.style.display = \"none\";\n e.style.transition = \"all 0.5s linear\";\n return e\n },\n\n fadeToggle: (e) => {\n if (!e) return;\n if (e.style.visibility == \"hidden\") {\n e = DOMController.fadeIn(e)\n } else {\n e = DOMController.fadeOut(e)\n }\n return e\n },\n\n fadeToggleList: (list) => {\n list.forEach(param => {\n DOMController.fadeToggle(param)\n })\n },\n\n hasClass: (e, c) => {\n if (!e) return;\n return e.className.match(new RegExp('(\\\\s|^)' + c + '(\\\\s|$)'));\n },\n\n addClass: (e, c) => {\n if (!e) return;\n e.classList.add(c);\n return e\n },\n\n removeClass: (e, c) => {\n if (!e) return;\n e.classList.remove(c);\n return e\n },\n\n toggleClass: (e, c) => {\n if (!e) return;\n if (DOMController.hasClass(e, c)) {\n DOMController.removeClass(e, c)\n } else {\n DOMController.addClass(e, c)\n }\n return e\n },\n\n toggleClassList: (list) => {\n list.forEach(item => {\n DOMController.toggleClass(item[0], item[1])\n })\n }\n}\nObject.freeze(DOMController);\n\nconst VolantisRequest = {\n timeoutFetch: (url, ms, requestInit) => {\n const controller = new AbortController()\n requestInit.signal?.addEventListener('abort', () => controller.abort())\n let promise = fetch(url, { ...requestInit, signal: controller.signal })\n if (ms > 0) {\n const timer = setTimeout(() => controller.abort(), ms)\n promise.finally(() => { clearTimeout(timer) })\n }\n promise = promise.catch((err) => {\n throw ((err || {}).name === 'AbortError') ? new Error(`Fetch timeout: ${url}`) : err\n })\n return promise\n },\n\n Fetch: async (url, requestInit, timeout = 15000) => {\n const resp = await VolantisRequest.timeoutFetch(url, timeout, requestInit);\n if (!resp.ok) throw new Error(`Fetch error: ${url} | ${resp.status}`);\n let json = await resp.json()\n if (!json.success) throw json\n return json\n },\n\n POST: async (url, data) => {\n const requestInit = {\n method: 'POST',\n }\n if (data) {\n const formData = new FormData();\n Object.keys(data).forEach(key => formData.append(key, String(data[key])))\n requestInit.body = formData;\n }\n const json = await VolantisRequest.Fetch(url, requestInit)\n return json.data;\n },\n\n Get: async (url, data) => {\n const json = await VolantisRequest.Fetch(url + (data ? (`?${new URLSearchParams(data)}`) : ''), {\n method: 'GET'\n })\n }\n}\nObject.freeze(VolantisRequest);\n"]} \ No newline at end of file diff --git a/maps/js/plugins/aplayer.js.map b/maps/js/plugins/aplayer.js.map new file mode 100644 index 0000000000..fae98bb4e1 --- /dev/null +++ b/maps/js/plugins/aplayer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../js/plugins/aplayer.js","names":["RightMenuAplayer","playStatus","APlayer","fn","undefined","player","setAPlayerObject","observer","setAPlayerObserver","meting","document","querySelectorAll","length","forEach","item","index","meta","id","volantis","GLOBAL_CONFIG","plugins","aplayer","updateTitle","on","e","updateAPlayerControllerStatus","status","onUpdateAPlayerVolume","volumeBarWrap","getElementsByClassName","children","volumeBar","thumbMove","updateAPlayerVolume","thumbUp","classList","remove","removeEventListener","addEventListener","event","stopPropagation","add","error","console","log","percentage","clientX","changedTouches","getBoundingClientRect","left","clientWidth","Math","max","min","volume","style","width","audio","paused","checkAPlayer","toggle","skipBack","play","skipForward","percent","list","obj","audios","innerHTML","title","aplayerBackward","aplayerToggle","aplayerForward","Object","freeze","requestAnimationFrame"],"sources":["js/plugins/aplayer.js"],"mappings":"AAGA,MAAMA,iBAAmB,MACvB,IAAIC,EACJ,MAAMC,EAAU,CAAC,EACXC,EAAK,CAEXA,aAAkB,UACGC,IAAfH,QAA+CG,IAAnBF,EAAQG,OACtCF,EAAGG,wBAC2BF,IAArBF,EAAQK,UACjBJ,EAAGK,oBACL,EAIFL,iBAAsB,KACpB,IAAIM,EAASC,SAASC,iBAAiB,qBAClB,GAAjBF,EAAOG,SACTH,EAASC,SAASC,iBAAiB,cAErCT,EAAQG,YAASD,EACjBK,EAAOI,SAAQ,CAACC,EAAMC,KAChBD,EAAKE,KAAKC,IAAMC,SAASC,cAAcC,QAAQC,QAAQJ,IAAMH,EAAKO,cAA8BjB,IAAnBF,EAAQG,SACvFH,EAAQG,OAASS,EAAKO,QACtBlB,EAAGK,qBACHL,EAAGmB,cACL,GACA,EAIJnB,mBAAwB,KACtB,IACED,EAAQG,OAAOkB,GAAG,QAAQ,SAAUC,GAClCrB,EAAGsB,8BAA8BD,GACjCtB,EAAQwB,OAAS,MACnB,IACAxB,EAAQG,OAAOkB,GAAG,SAAS,SAAUC,GACnCrB,EAAGsB,8BAA8BD,GACjCtB,EAAQwB,OAAS,OACnB,IACAxB,EAAQG,OAAOkB,GAAG,gBAAgB,SAAUC,GAC1CrB,EAAGwB,sBAAsBH,EAC3B,IACAtB,EAAQG,OAAOkB,GAAG,aAAa,SAAUC,GACvCrB,EAAGmB,YAAYE,EACjB,IAGAtB,EAAQ0B,cAAgBlB,SAASmB,uBAAuB,cAAc,GAAGC,SAAS,GAClF5B,EAAQ6B,UAAY7B,EAAQ0B,cAAcE,SAAS,GAEnD,MAAME,EAAaR,IACjBrB,EAAG8B,oBAAoBT,EAAE,EAGrBU,EAAWV,IACftB,EAAQ0B,cAAcO,UAAUC,OAAO,kCACvC1B,SAAS2B,oBAAoB,UAAWH,GACxCxB,SAAS2B,oBAAoB,YAAaL,GAC1C7B,EAAG8B,oBAAoBT,EAAE,EAG3BtB,EAAQ0B,cAAcU,iBAAiB,aAAcC,IACnDA,EAAMC,kBACNtC,EAAQ0B,cAAcO,UAAUM,IAAI,kCACpC/B,SAAS4B,iBAAiB,YAAaN,GACvCtB,SAAS4B,iBAAiB,UAAWJ,EAAQ,IAG/ChC,EAAQ0B,cAAcU,iBAAiB,SAAUC,IAC/CA,EAAMC,iBAAiB,IAGzBrC,EAAGsB,gCACHtB,EAAGwB,wBACHzB,EAAQK,UAAW,CACrB,CAAE,MAAOmC,GACPC,QAAQC,IAAIF,GACZxC,EAAQK,cAAWH,CACrB,GAGFD,oBAA0BqB,IACxB,IAAIqB,IAAerB,EAAEsB,SAAWtB,EAAEuB,eAAe,GAAGD,SAClD5C,EAAQ6B,UAAUiB,wBAAwBC,MAAQ/C,EAAQ6B,UAAUmB,YACtEL,EAAaM,KAAKC,IAAIP,EAAY,GAClCA,EAAaM,KAAKE,IAAIR,EAAY,GAClC3C,EAAQG,OAAOiD,OAAOT,EAAW,EAGnC1C,sBAA2B,KACzB,IACED,EAAQ6B,UAAUD,SAAS,GAAGyB,MAAMC,MAAsC,IAA9BtD,EAAQG,OAAOoD,MAAMH,OAAe,GAClF,CAAE,MAAOZ,GACPC,QAAQC,IAAIF,EACd,GAIFvC,8BAAmC,KACjC,IACMD,EAAQG,OAAOoD,MAAMC,QACvBzD,EAAa,QACbS,SAASmB,uBAAuB,cAAc,GAAGC,SAAS,GAAGK,UAAUM,IAAI,WAC3E/B,SAASmB,uBAAuB,cAAc,GAAGC,SAAS,GAAGK,UAAUC,OAAO,cAE9EnC,EAAa,OACbS,SAASmB,uBAAuB,cAAc,GAAGC,SAAS,GAAGK,UAAUC,OAAO,WAC9E1B,SAASmB,uBAAuB,cAAc,GAAGC,SAAS,GAAGK,UAAUM,IAAI,YAE/E,CAAE,MAAOC,GACPC,QAAQC,IAAIF,EACd,GAIFvC,cAAmB,KACjBA,EAAGwD,eACH,IACEzD,EAAQG,OAAOuD,QACjB,CAAE,MAAOlB,GACPC,QAAQC,IAAIF,EACd,GAIFvC,gBAAqB,KACnBA,EAAGwD,eACH,IACEzD,EAAQG,OAAOwD,WACf3D,EAAQG,OAAOyD,MACjB,CAAE,MAAOpB,GACPC,QAAQC,IAAIF,EACd,GAIFvC,eAAoB,KAClBA,EAAGwD,eACH,IACEzD,EAAQG,OAAO0D,cACf7D,EAAQG,OAAOyD,MACjB,CAAE,MAAOpB,GACPC,QAAQC,IAAIF,EACd,GAIFvC,cAAoB6D,IAClB7D,EAAGwD,eACH,IACEzD,EAAQG,OAAOiD,OAAOU,EACxB,CAAE,MAAOtB,GACPC,QAAQC,IAAIF,EACd,GAIFvC,YAAiB,KACfA,EAAGwD,eACH,IACE,MAAM5C,EAAQb,EAAQG,OAAO4D,KAAKlD,MAC5BmD,EAAMhE,EAAQG,OAAO4D,KAAKE,OAAOpD,GACvCL,SAASmB,uBAAuB,mBAAmB,GAAGuC,UAAYF,EAAIG,KACxE,CAAE,MAAO3B,GAET,IAGF,MAAO,CACLiB,aAAcxD,EAAGwD,aACjBW,gBAAiBnE,EAAGmE,gBACpBC,cAAepE,EAAGoE,cAClBC,eAAgBrE,EAAGqE,eACnBtE,QAASA,EAEZ,EAhLwB,GAkLzBuE,OAAOC,OAAO1E,kBAEdkB,SAASyD,uBAAsB,KAC7B3E,iBAAiB2D,cAAc","sourcesContent":["/**\n * 右键音乐\n * */\nconst RightMenuAplayer = (() => {\n let playStatus; // 播放器状态\n const APlayer = {}; // 右键音乐所控制的播放器\n const fn = {};\n\n fn.checkAPlayer = () => {\n if (playStatus === undefined || APlayer.player === undefined) {\n fn.setAPlayerObject();\n } else if (APlayer.observer === undefined) {\n fn.setAPlayerObserver();\n }\n }\n\n // 设置全局播放器所对应的 aplyer 对象\n fn.setAPlayerObject = () => {\n let meting = document.querySelectorAll('.footer meting-js');\n if (meting.length == 0) {\n meting = document.querySelectorAll('meting-js');\n }\n APlayer.player = undefined;\n meting.forEach((item, index) => {\n if (item.meta.id == volantis.GLOBAL_CONFIG.plugins.aplayer.id && item.aplayer && APlayer.player === undefined) {\n APlayer.player = item.aplayer;\n fn.setAPlayerObserver();\n fn.updateTitle();\n }\n });\n }\n\n // 事件监听\n fn.setAPlayerObserver = () => {\n try {\n APlayer.player.on('play', function (e) {\n fn.updateAPlayerControllerStatus(e);\n APlayer.status = 'play';\n });\n APlayer.player.on('pause', function (e) {\n fn.updateAPlayerControllerStatus(e);\n APlayer.status = 'pause';\n });\n APlayer.player.on('volumechange', function (e) {\n fn.onUpdateAPlayerVolume(e);\n });\n APlayer.player.on('loadstart', function (e) {\n fn.updateTitle(e);\n });\n\n // 监听音量手势\n APlayer.volumeBarWrap = document.getElementsByClassName('nav volume')[0].children[0];\n APlayer.volumeBar = APlayer.volumeBarWrap.children[0];\n\n const thumbMove = (e) => {\n fn.updateAPlayerVolume(e);\n };\n\n const thumbUp = (e) => {\n APlayer.volumeBarWrap.classList.remove('aplayer-volume-bar-wrap-active');\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n fn.updateAPlayerVolume(e);\n };\n\n APlayer.volumeBarWrap.addEventListener('mousedown', (event) => {\n event.stopPropagation();\n APlayer.volumeBarWrap.classList.add('aplayer-volume-bar-wrap-active');\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n\n APlayer.volumeBarWrap.addEventListener('click', (event) => {\n event.stopPropagation();\n });\n\n fn.updateAPlayerControllerStatus();\n fn.onUpdateAPlayerVolume();\n APlayer.observer = true;\n } catch (error) {\n console.log(error);\n APlayer.observer = undefined;\n }\n }\n\n fn.updateAPlayerVolume = (e) => {\n let percentage = ((e.clientX || e.changedTouches[0].clientX) -\n APlayer.volumeBar.getBoundingClientRect().left) / APlayer.volumeBar.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n APlayer.player.volume(percentage);\n }\n\n fn.onUpdateAPlayerVolume = () => {\n try {\n APlayer.volumeBar.children[0].style.width = APlayer.player.audio.volume * 100 + '%';\n } catch (error) {\n console.log(error);\n }\n }\n\n // 更新控制器状态\n fn.updateAPlayerControllerStatus = () => {\n try {\n if (APlayer.player.audio.paused) {\n playStatus = 'pause';\n document.getElementsByClassName('nav toggle')[0].children[0].classList.add('fa-play');\n document.getElementsByClassName('nav toggle')[0].children[0].classList.remove('fa-pause');\n } else {\n playStatus = 'play';\n document.getElementsByClassName('nav toggle')[0].children[0].classList.remove('fa-play');\n document.getElementsByClassName('nav toggle')[0].children[0].classList.add('fa-pause');\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n // 播放/暂停\n fn.aplayerToggle = () => {\n fn.checkAPlayer();\n try {\n APlayer.player.toggle();\n } catch (error) {\n console.log(error);\n }\n }\n\n // 上一曲\n fn.aplayerBackward = () => {\n fn.checkAPlayer();\n try {\n APlayer.player.skipBack();\n APlayer.player.play();\n } catch (error) {\n console.log(error);\n }\n }\n\n // 下一曲\n fn.aplayerForward = () => {\n fn.checkAPlayer();\n try {\n APlayer.player.skipForward();\n APlayer.player.play();\n } catch (error) {\n console.log(error);\n }\n }\n\n // 调节音量\n fn.aplayerVolume = (percent) => {\n fn.checkAPlayer();\n try {\n APlayer.player.volume(percent);\n } catch (error) {\n console.log(error);\n }\n }\n\n // 更新音乐标题\n fn.updateTitle = () => {\n fn.checkAPlayer();\n try {\n const index = APlayer.player.list.index;\n const obj = APlayer.player.list.audios[index];\n document.getElementsByClassName('nav music-title')[0].innerHTML = obj.title;\n } catch (error) {\n //console.log(error);\n }\n }\n\n return {\n checkAPlayer: fn.checkAPlayer,\n aplayerBackward: fn.aplayerBackward,\n aplayerToggle: fn.aplayerToggle,\n aplayerForward: fn.aplayerForward,\n APlayer: APlayer\n }\n})()\n\nObject.freeze(RightMenuAplayer);\n\nvolantis.requestAnimationFrame(() => {\n RightMenuAplayer.checkAPlayer();\n});\n"]} \ No newline at end of file diff --git a/maps/js/plugins/parallax.js.map b/maps/js/plugins/parallax.js.map new file mode 100644 index 0000000000..d4e2447d81 --- /dev/null +++ b/maps/js/plugins/parallax.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../js/plugins/parallax.js","names":["Parallax","options","speed","zIndex","fade","slidein","slider","mirrors","length","opac","parseFloat","style","opacity","setTimeout","mirror","remove","shift","start","document","createElement","classList","add","visibility","position","top","left","overflow","window","appendChild","src","alt","mirrorItem","push","addEventListener","update","init","loadDimensions","wH","documentElement","clientHeight","wW","clientWidth","getScrollTop","scrollPos","pageYOffset","compatMode","scrollTop","body","lastPosition","loop","yoffset","winScrollTop","sT","Math","max","sL","scrollLeft","overScroll","min","loadScrollPosition","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","refreshItem","aspectRatio","naturalWidth","naturalHeight","aspect","boxWidth","boxHeight","boxOffsetTop","boxOffsetLeft","boxOffsetBottom","winHeight","maxOffset","minOffset","imageHeightMin","imageOffsetMin","margin","imageWidth","imageHeight","offsetBaseTop","offsetLeft","renderItem","scrollBottom","mirrorTop","mirrorLeft","offsetTop","transform","height","width","maxWidth","forEach","e"],"sources":["js/plugins/parallax.js"],"mappings":"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","sourcesContent":["let Parallax = {};\nParallax.options = {};\nParallax.options.speed = 0.25;\nParallax.options.zIndex = -100;\nParallax.options.fade = 1500;\nParallax.slidein = () => {\n let slider = Parallax.mirrors[0].slider;\n if (Parallax.mirrors.length >= 2) {\n slider = Parallax.mirrors[1].slider;\n }\n var opac = parseFloat(slider.style.opacity);\n if (opac !== 1) {\n if (Parallax.mirrors.length >= 2) {\n opac = opac + 0.1;\n slider.style.opacity = opac;\n setTimeout(Parallax.slidein, Parallax.options.fade / 10);\n }else{\n slider.style.opacity = 1;\n }\n } else {\n if (Parallax.mirrors.length >= 2) {\n Parallax.mirrors[0].mirror.remove();\n Parallax.mirrors.shift();\n }\n }\n};\nParallax.start = () => {\n let mirror = document.createElement(\"div\");\n mirror.classList.add(\"parallax-mirror\");\n mirror.style.visibility = \"hidden\";\n mirror.style.zIndex = Parallax.options.zIndex;\n mirror.style.position = \"fixed\";\n mirror.style.top = 0;\n mirror.style.left = 0;\n mirror.style.overflow = \"hidden\";\n Parallax.window.appendChild(mirror);\n let slider = document.createElement(\"img\");\n slider.src = Parallax.options.src;\n slider.alt = \"parallax\";\n slider.classList.add(\"parallax-slider\");\n slider.style.opacity = 0;\n mirror.appendChild(slider);\n if (!Parallax.mirrors) {\n Parallax.mirrors = [];\n }\n let mirrorItem = {};\n mirrorItem.mirror = mirror;\n mirrorItem.slider = slider;\n Parallax.mirrors.push(mirrorItem);\n Parallax.slidein();\n slider.addEventListener(\n \"load\",\n function () {\n Parallax.update();\n },\n false\n );\n};\nParallax.init = () => {\n function loadDimensions() {\n Parallax.wH = document.documentElement.clientHeight;\n Parallax.wW = document.documentElement.clientWidth;\n }\n function getScrollTop() {\n var scrollPos;\n if (window.pageYOffset) {\n scrollPos = window.pageYOffset;\n } else if (document.compatMode && document.compatMode != \"BackCompat\") {\n scrollPos = document.documentElement.scrollTop;\n } else if (document.body) {\n scrollPos = document.body.scrollTop;\n }\n return scrollPos;\n }\n function loadScrollPosition() {\n const winScrollTop = getScrollTop();\n Parallax.sT = Math.max(0, winScrollTop);\n Parallax.sL = Math.max(0, document.body.scrollLeft);\n Parallax.overScroll = Math.min(winScrollTop, 0);\n }\n window.addEventListener(\n \"resize\",\n function () {\n loadDimensions();\n Parallax.update();\n },\n false\n );\n loadDimensions();\n let lastPosition = -1;\n (function loop() {\n const yoffset = getScrollTop();\n if (lastPosition !== yoffset) {\n lastPosition = yoffset;\n loadScrollPosition();\n Parallax.update();\n }\n window.requestAnimationFrame =\n window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame;\n window.requestAnimationFrame(loop);\n })();\n};\n\nParallax.refreshItem = (slider) => {\n Parallax.options.aspectRatio =\n slider.naturalWidth / (slider.naturalHeight || 1);\n const aspect = Parallax.options.aspectRatio || 1;\n Parallax.options.boxWidth = Parallax.window.clientWidth;\n Parallax.options.boxHeight = Parallax.window.clientHeight;\n Parallax.options.boxOffsetTop = Parallax.window.scrollTop;\n Parallax.options.boxOffsetLeft = Parallax.window.scrollLeft;\n Parallax.options.boxOffsetBottom =\n Parallax.options.boxOffsetTop + Parallax.options.boxHeight;\n const winHeight = Parallax.wH;\n const maxOffset = Parallax.options.boxOffsetTop;\n const minOffset = Math.max(\n Parallax.options.boxOffsetTop + Parallax.options.boxHeight - winHeight,\n 0\n );\n const imageHeightMin =\n (Parallax.options.boxHeight +\n (maxOffset - minOffset) * (1 - Parallax.options.speed)) |\n 0;\n const imageOffsetMin =\n ((Parallax.options.boxOffsetTop - maxOffset) *\n (1 - Parallax.options.speed)) |\n 0;\n let margin;\n if (Parallax.options.boxWidth < imageHeightMin * aspect) {\n Parallax.options.imageWidth = (imageHeightMin * aspect) | 0;\n Parallax.options.imageHeight = imageHeightMin;\n Parallax.options.offsetBaseTop = imageOffsetMin;\n margin = Parallax.options.imageWidth - Parallax.options.boxWidth;\n Parallax.options.offsetLeft = (-margin / 2) | 0;\n } else {\n Parallax.options.imageWidth = Parallax.options.boxWidth;\n Parallax.options.imageHeight = (Parallax.options.boxWidth / aspect) | 0;\n Parallax.options.offsetLeft = 0;\n margin = Parallax.options.imageHeight - imageHeightMin;\n Parallax.options.offsetBaseTop = (imageOffsetMin - margin / 2) | 0;\n }\n};\nParallax.renderItem = (mirror, slider) => {\n const scrollTop = Parallax.sT;\n const scrollLeft = Parallax.sL;\n const scrollBottom = scrollTop + Parallax.wH;\n if (\n Parallax.options.boxOffsetBottom > scrollTop &&\n Parallax.options.boxOffsetTop <= scrollBottom\n ) {\n Parallax.options.visibility = \"visible\";\n Parallax.options.mirrorTop = Parallax.options.boxOffsetTop - scrollTop;\n Parallax.options.mirrorLeft = Parallax.options.boxOffsetLeft - scrollLeft;\n Parallax.options.offsetTop =\n Parallax.options.offsetBaseTop -\n Parallax.options.mirrorTop * (1 - Parallax.options.speed);\n } else {\n Parallax.options.visibility = \"hidden\";\n }\n mirror.style.transform =\n \"translate3d(\" +\n Parallax.options.mirrorLeft +\n \"px, \" +\n Parallax.options.mirrorTop +\n \"px, 0px)\";\n mirror.style.visibility = Parallax.options.visibility;\n mirror.style.height = Parallax.options.boxHeight + \"px\";\n mirror.style.width = Parallax.options.boxWidth + \"px\";\n\n slider.style.transform =\n \"translate3d(\" +\n Parallax.options.offsetLeft +\n \"px, \" +\n Parallax.options.offsetTop +\n \"px, 0px)\";\n slider.style.position = \"absolute\";\n slider.style.height = Parallax.options.imageHeight + \"px\";\n slider.style.width = Parallax.options.imageWidth + \"px\";\n slider.style.maxWidth = \"none\";\n};\nParallax.update = () => {\n if (!Parallax.mirrors) {\n return\n }\n Parallax.mirrors.forEach((e) => {\n Parallax.refreshItem(e.slider);\n Parallax.renderItem(e.mirror, e.slider);\n });\n};\n"]} \ No newline at end of file diff --git a/maps/js/plugins/rightMenus.js.map b/maps/js/plugins/rightMenus.js.map new file mode 100644 index 0000000000..0e8ae7f324 --- /dev/null +++ b/maps/js/plugins/rightMenus.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../js/plugins/rightMenus.js","names":["RightMenus","defaultEvent","defaultGroup","messageRightMenu","volantis","GLOBAL_CONFIG","plugins","message","enable","rightmenu","corsAnywhere","rightmenus","options","urlRegx","imgRegx","initialMenu","fun","init","readClipboard","async","clipboardText","navigator","permissions","query","name","state","clipboard","readText","window","clipboardRead","writeClipText","text","writeText","then","Promise","resolve","catch","err","reject","writeClipImg","link","success","error","image","Image","crossOrigin","addEventListener","canvas","document","createElement","context","getContext","width","height","drawImage","toBlob","blob","write","ClipboardItem","e","src","insertAtCaret","elemt","value","startPos","selectionStart","endPos","selectionEnd","selection","focus","createRange","scrollTop","substring","length","rightMenuConfig","fn","_rightMenuWrapper","getElementById","_rightMenuContent","_rightMenuList","querySelectorAll","_rightMenuListWithHr","_readBkg","_menuMusic","_backward","querySelector","_toggle","_forward","globalData","mouseEvent","isInputBox","selectText","inputValue","isLink","linkUrl","isMediaLink","mediaLinkUrl","isImage","isArticle","pathName","isReadClipboard","isShowMusic","statusCheck","globalDataBackup","Object","assign","initEvent","elementAppend","contextmenu","menuEvent","parentNode","removeChild","readBkg","className","id","body","appendChild","menuPosition","event","mouseClientX","clientX","mouseClientY","clientY","screenWidth","documentElement","clientWidth","screenHeight","clientHeight","style","display","menuControl","menuWidth","offsetWidth","menuHeight","offsetHeight","showLeft","showTop","left","top","notice","menuNotic","console","hideMenu","globalDataSet","forEach","item","nodeName","firstElementChild","groupName","getAttribute","itemEvent","articleShowLink","every","method","handle","start","elementHrItem","hide","nextElementSibling","getSelection","toString","target","tagName","toLowerCase","href","test","currentSrc","location","pathname","aplayer","RightMenuAplayer","undefined","APlayer","player","musicAlwaysShow","status","oncontextmenu","ctrlKey","stopPropagation","preventDefault","removeEventListener","eventName","RightMenusFunction","debug","VolantisApp","icon","iconPrefix","time","onclick","aplayerBackward","aplayerToggle","aplayerForward","NoticeRightMenu","localStorage","getItem","displayMode","setItem","copyText","utilWriteClipText","messageCopyright","copyLink","copyAll","select","copyPaste","result","copyCut","statrPos","inputStr","copyImg","hideMessage","printMode","question","printHtml","isReadModel","readMode","DOMController","setAttribute","removeList","setStyleList","setTimeout","print","innerHTML","reload","ScrollReveal","clean","setStyle","fadeToggleList","toggleClassList","backgroundColor","hasClass","freeze","requestAnimationFrame","readyState"],"sources":["js/plugins/rightMenus.js"],"mappings":"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","sourcesContent":["\nconst RightMenus = {\n defaultEvent: ['copyText', 'copyLink', 'copyPaste', 'copyAll', 'copyCut', 'copyImg', 'printMode', 'readMode'],\n defaultGroup: ['navigation', 'inputBox', 'seletctText', 'elementCheck', 'elementImage', 'articlePage'],\n messageRightMenu: volantis.GLOBAL_CONFIG.plugins.message.enable && volantis.GLOBAL_CONFIG.plugins.message.rightmenu.enable,\n corsAnywhere: volantis.GLOBAL_CONFIG.plugins.rightmenus.options.corsAnywhere,\n urlRegx: /^((https|http)?:\\/\\/)+[A-Za-z0-9]+\\.[A-Za-z0-9]+[\\/=\\?%\\-&_~`@[\\]\\':+!]*([^<>\\\"\\\"])*$/,\n imgRegx: /\\.(jpe?g|png|webp|svg|gif|jifi)(-|_|!|\\?|\\/)?.*$/,\n\n /**\n * 加载右键菜单\n */\n initialMenu: () => {\n RightMenus.fun.init();\n },\n\n /**\n * 读取剪切板\n * @returns text\n */\n readClipboard: async () => {\n let clipboardText;\n const result = await navigator.permissions.query({ name: 'clipboard-read' });\n switch (result.state) {\n case 'granted':\n case 'prompt':\n clipboardText = await navigator.clipboard.readText()\n break;\n default:\n window.clipboardRead = false;\n break;\n }\n return clipboardText;\n },\n\n /**\n * 写入文本到剪切板\n * @param {String} text\n */\n writeClipText: text => {\n return navigator.clipboard\n .writeText(text)\n .then(() => {\n return Promise.resolve()\n })\n .catch(err => {\n return Promise.reject(err)\n })\n },\n\n /**\n * 写入图片到剪切板\n * @param {*} link\n * @param {*} success\n * @param {*} error\n */\n writeClipImg: async (link, success, error) => {\n const image = new Image;\n image.crossOrigin = \"Anonymous\";\n image.addEventListener('load', () => {\n let canvas = document.createElement(\"canvas\");\n let context = canvas.getContext(\"2d\");\n canvas.width = image.width;\n canvas.height = image.height;\n context.drawImage(image, 0, 0);\n canvas.toBlob(blob => {\n navigator.clipboard.write([\n new ClipboardItem({ 'image/png': blob })\n ]).then(e => {\n success(e)\n }).catch(e => {\n error(e)\n })\n }, 'image/png')\n }, false)\n image.src = `${link}?(lll¬ω¬)`;\n },\n\n /**\n * 粘贴文本到剪切板\n * @param {*} elemt\n * @param {*} value\n */\n insertAtCaret: (elemt, value) => {\n const startPos = elemt.selectionStart,\n endPos = elemt.selectionEnd;\n if (document.selection) {\n elemt.focus();\n var sel = document.selection.createRange();\n sel.text = value;\n elemt.focus();\n } else {\n if (startPos || startPos == '0') {\n var scrollTop = elemt.scrollTop;\n elemt.value = elemt.value.substring(0, startPos) + value + elemt.value.substring(endPos, elemt.value.length);\n elemt.focus();\n elemt.selectionStart = startPos + value.length;\n elemt.selectionEnd = startPos + value.length;\n elemt.scrollTop = scrollTop;\n } else {\n elemt.value += value;\n elemt.focus();\n }\n }\n }\n}\n\n/**\n * 事件处理区域\n */\nRightMenus.fun = (() => {\n const rightMenuConfig = volantis.GLOBAL_CONFIG.plugins.rightmenus;\n\n const\n fn = {},\n _rightMenuWrapper = document.getElementById('rightmenu-wrapper'),\n _rightMenuContent = document.getElementById('rightmenu-content'),\n _rightMenuList = document.querySelectorAll('#rightmenu-content li.menuLoad-Content'),\n _rightMenuListWithHr = document.querySelectorAll('#rightmenu-content li, #rightmenu-content hr, #menuMusic'),\n _readBkg = document.getElementById('read_bkg'),\n _menuMusic = document.getElementById('menuMusic'),\n _backward = document.querySelector('#menuMusic .backward'),\n _toggle = document.querySelector('#menuMusic .toggle'),\n _forward = document.querySelector('#menuMusic .forward');\n\n // 公共数据\n let globalData = {\n mouseEvent: null,\n isInputBox: false,\n selectText: '',\n inputValue: '',\n isLink: false,\n linkUrl: '',\n isMediaLink: false,\n mediaLinkUrl: '',\n isImage: false,\n isArticle: false,\n pathName: '',\n isReadClipboard: true,\n isShowMusic: false,\n statusCheck: false\n }\n const globalDataBackup = Object.assign({}, globalData);\n\n /**\n * 初始化监听事件处理\n */\n fn.initEvent = () => {\n fn.elementAppend();\n fn.contextmenu();\n fn.menuEvent();\n }\n\n /**\n * 预置元素设定\n */\n fn.elementAppend = () => {\n // 阅读模式\n if (_readBkg) _readBkg.parentNode.removeChild(_readBkg);\n const readBkg = document.createElement(\"div\");\n readBkg.className = \"common_read_bkg common_read_hide\";\n readBkg.id = \"read_bkg\";\n window.document.body.appendChild(readBkg);\n }\n\n /**\n * 右键菜单位置设定\n * @param {*} event\n */\n fn.menuPosition = (event) => {\n try {\n let mouseClientX = event.clientX;\n let mouseClientY = event.clientY;\n let screenWidth = document.documentElement.clientWidth || document.body.clientWidth;\n let screenHeight = document.documentElement.clientHeight || document.body.clientHeight;\n\n _rightMenuWrapper.style.display = 'block';\n fn.menuControl(event);\n\n let menuWidth = _rightMenuContent.offsetWidth;\n let menuHeight = _rightMenuContent.offsetHeight;\n let showLeft = mouseClientX + menuWidth > screenWidth ? mouseClientX - menuWidth + 10 : mouseClientX;\n let showTop = mouseClientY + menuHeight > screenHeight ? mouseClientY - menuHeight + 10 : mouseClientY;\n showTop = mouseClientY + menuHeight > screenHeight && showTop < menuHeight && mouseClientY < menuHeight ?\n showTop + (screenHeight - menuHeight - showTop - 10) : showTop;\n _rightMenuWrapper.style.left = `${showLeft}px`;\n _rightMenuWrapper.style.top = `${showTop}px`;\n if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) fn.menuNotic();\n } catch (error) {\n console.error(error);\n fn.hideMenu();\n return true;\n }\n return false;\n }\n\n /**\n * 菜单项控制\n * @param {*} event\n */\n fn.menuControl = (event) => {\n fn.globalDataSet(event);\n if (!!_menuMusic) _menuMusic.style.display = globalData.isShowMusic ? 'block' : 'none';\n _rightMenuList.forEach(item => {\n item.style.display = 'none';\n const nodeName = item.firstElementChild.nodeName;\n const groupName = item.firstElementChild.getAttribute('data-group');\n const itemEvent = item.firstElementChild.getAttribute('data-event');\n if (globalData.statusCheck || globalData.isArticle) {\n switch (groupName) {\n case 'inputBox':\n if (globalData.isInputBox) {\n item.style.display = 'block';\n if (itemEvent === 'copyCut' && !globalData.selectText) item.style.display = 'none';\n if (itemEvent === 'copyAll' && !globalData.inputValue) item.style.display = 'none';\n if (itemEvent === 'copyPaste' && !globalData.isReadClipboard) item.style.display = 'none';\n }\n break;\n case 'seletctText':\n if (!!globalData.selectText) item.style.display = 'block';\n break;\n case 'elementCheck':\n if (globalData.isLink || globalData.isMediaLink) item.style.display = 'block';\n break;\n case 'elementImage':\n if (globalData.isImage) item.style.display = 'block';\n break;\n case 'articlePage':\n if (globalData.isArticle) item.style.display = 'block';\n break;\n default:\n item.style.display = nodeName === 'A'\n ? globalData.isArticle && !globalData.statusCheck && rightMenuConfig.options.articleShowLink\n ? 'block'\n : 'none'\n : 'block';\n break;\n }\n } else if (nodeName === 'A' || RightMenus.defaultGroup.every(item => { return groupName !== item })) {\n item.style.display = 'block';\n }\n })\n\n // 执行外部事件\n volantis.mouseEvent = event;\n volantis.rightmenu.method.handle.start()\n\n // 过滤 HR 元素\n let elementHrItem = { item: null, hide: true };\n _rightMenuListWithHr.forEach((item) => {\n if (item.nodeName === \"HR\") {\n item.style.display = 'block';\n if (!elementHrItem.item) {\n elementHrItem.item = item;\n return;\n }\n if (elementHrItem.hide || elementHrItem.item.nextElementSibling.nodeName === \"hr\") {\n elementHrItem.item.style.display = 'none';\n }\n elementHrItem.item = item;\n elementHrItem.hide = true;\n } else {\n if (item.style.display === 'block' && elementHrItem.hide) {\n elementHrItem.hide = false;\n }\n }\n })\n if (!!elementHrItem.item && elementHrItem.hide) elementHrItem.item.style.display = 'none';\n }\n\n /**\n * 元素状态判断/全局数据设置\n * @param {*} event\n */\n fn.globalDataSet = (event) => {\n globalData = Object.assign({}, globalDataBackup);\n globalData.mouseEvent = event;\n globalData.selectText = window.getSelection().toString();\n\n // 判断是否为输入框\n if (event.target.tagName.toLowerCase() === 'input' || event.target.tagName.toLowerCase() === 'textarea') {\n globalData.isInputBox = true;\n globalData.inputValue = event.target.value;\n }\n\n // 判断是否允许读取剪切板\n if (globalData.isInputBox && window.clipboardRead === false) {\n globalData.isReadClipboard = false;\n }\n\n // 判断是否包含链接\n if (!!event.target.href && RightMenus.urlRegx.test(event.target.href)) {\n globalData.isLink = true;\n globalData.linkUrl = event.target.href;\n }\n\n // 判断是否包含媒体链接\n if (!!event.target.currentSrc && RightMenus.urlRegx.test(event.target.currentSrc)) {\n globalData.isMediaLink = true;\n globalData.mediaLinkUrl = event.target.currentSrc;\n }\n\n // 判断是否为图片地址\n if (globalData.isMediaLink && RightMenus.imgRegx.test(globalData.mediaLinkUrl)) {\n globalData.isImage = true;\n }\n\n // 判断是否为文章页面\n if (!!(document.querySelector('#post.article') || null)) {\n globalData.isArticle = true;\n globalData.pathName = window.location.pathname;\n }\n\n // 判断是否显示音乐控制器\n if (volantis.GLOBAL_CONFIG.plugins.aplayer?.enable\n && typeof RightMenuAplayer !== 'undefined'\n && RightMenuAplayer.APlayer.player !== undefined) {\n if (rightMenuConfig.options.musicAlwaysShow\n || RightMenuAplayer.APlayer.status === 'play'\n || RightMenuAplayer.APlayer.status === 'undefined') {\n globalData.isShowMusic = true;\n }\n }\n\n // 设定校验状态\n if (!!globalData.selectText || globalData.isInputBox || globalData.isLink || globalData.isMediaLink) {\n globalData.statusCheck = true;\n }\n }\n\n /**\n * 全局右键监听函数\n */\n fn.contextmenu = () => {\n window.document.oncontextmenu = (event) => {\n if (event.ctrlKey || document.body.offsetWidth <= 500) {\n fn.hideMenu();\n return true;\n }\n return fn.menuPosition(event);\n }\n\n _rightMenuWrapper.oncontextmenu = (event) => {\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n\n window.removeEventListener('blur', fn.hideMenu);\n window.addEventListener('blur', fn.hideMenu);\n document.body.removeEventListener('click', fn.hideMenu);\n document.body.addEventListener('click', fn.hideMenu);\n }\n\n /**\n * 菜单项事件处理函数\n */\n fn.menuEvent = () => {\n _rightMenuList.forEach(item => {\n let eventName = item.firstElementChild.getAttribute('data-event');\n const id = item.firstElementChild.getAttribute('id');\n const groupName = item.firstElementChild.getAttribute('data-group');\n if (item.firstElementChild.nodeName === \"A\") return;\n item.addEventListener('click', () => {\n try {\n if (RightMenus.defaultEvent.every(item => { return eventName !== item })) {\n if (groupName === 'seletctText') {\n RightMenusFunction[id](globalData.selectText)\n } else if (groupName === 'elementCheck') {\n RightMenusFunction[id](globalData.isLink ? globalData.linkUrl : globalData.mediaLinkUrl)\n } else if (groupName === 'elementImage') {\n RightMenusFunction[id](globalData.mediaLinkUrl)\n } else {\n RightMenusFunction[id]()\n }\n } else {\n fn[eventName]()\n }\n } catch (error) {\n if (volantis.GLOBAL_CONFIG.debug === \"rightMenus\") {\n console.error({\n id: id,\n error: error,\n globalData: globalData,\n groupName: groupName,\n eventName: eventName\n });\n }\n if (RightMenus.messageRightMenu) {\n VolantisApp.message('错误提示', error, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n time: '15000'\n });\n }\n }\n })\n })\n\n if (_forward && _toggle && _forward) {\n _backward.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n RightMenuAplayer.aplayerBackward();\n }\n _toggle.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n RightMenuAplayer.aplayerToggle();\n }\n _forward.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n RightMenuAplayer.aplayerForward();\n }\n }\n }\n\n /**\n * 隐藏菜单显示\n */\n fn.hideMenu = () => {\n _rightMenuWrapper.style.display = null;\n _rightMenuWrapper.style.left = null;\n _rightMenuWrapper.style.top = null;\n }\n\n /**\n * 右键菜单覆盖提示\n */\n fn.menuNotic = () => {\n const NoticeRightMenu = localStorage.getItem('NoticeRightMenu') === 'true';\n if (RightMenus.messageRightMenu && !NoticeRightMenu)\n VolantisApp.message('右键菜单', '唤醒原系统菜单请使用:Ctrl + 右键', {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n displayMode: 1,\n time: 9000\n }, () => {\n localStorage.setItem('NoticeRightMenu', 'true')\n });\n }\n\n fn.copyText = () => {\n VolantisApp.utilWriteClipText(globalData.selectText)\n .then(() => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.messageCopyright();\n }\n }).catch(e => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.message('系统提示', e, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n displayMode: 1,\n time: 9000\n });\n }\n })\n }\n\n fn.copyLink = () => {\n VolantisApp.utilWriteClipText(globalData.linkUrl || globalData.mediaLinkUrl)\n .then(() => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.messageCopyright();\n }\n }).catch(e => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.message('系统提示', e, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n displayMode: 1,\n time: 9000\n });\n }\n })\n }\n\n fn.copyAll = () => {\n globalData.mouseEvent.target.select();\n }\n\n fn.copyPaste = async () => {\n const result = await RightMenus.readClipboard() || '';\n if (RightMenus.messageRightMenu && window.clipboardRead === false) {\n VolantisApp.message('系统提示', '未授予剪切板读取权限!');\n } else if (RightMenus.messageRightMenu && result === '') {\n VolantisApp.message('系统提示', '仅支持复制文本内容!');\n } else {\n RightMenus.insertAtCaret(globalData.mouseEvent.target, result);\n }\n }\n\n fn.copyCut = () => {\n const statrPos = globalData.mouseEvent.target.selectionStart;\n const endPos = globalData.mouseEvent.target.selectionEnd;\n const inputStr = globalData.inputValue;\n fn.copyText(globalData.selectText);\n globalData.mouseEvent.target.value = inputStr.substring(0, statrPos) + inputStr.substring(endPos, inputStr.length);\n globalData.mouseEvent.target.selectionStart = statrPos;\n globalData.mouseEvent.target.selectionEnd = statrPos;\n globalData.mouseEvent.target.focus();\n }\n\n fn.copyImg = () => {\n if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) {\n VolantisApp.message('系统提示', '复制中,请等待。', {\n icon: rightMenuConfig.options.iconPrefix + ' fa-images'\n })\n }\n RightMenus.writeClipImg(globalData.mediaLinkUrl, e => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.hideMessage();\n VolantisApp.message('系统提示', '图片复制成功!', {\n icon: rightMenuConfig.options.iconPrefix + ' fa-images'\n });\n }\n }, (e) => {\n console.error(e);\n if (RightMenus.messageRightMenu) {\n VolantisApp.hideMessage();\n VolantisApp.message('系统提示', '复制失败:' + e, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n time: 9000\n });\n }\n })\n }\n\n fn.printMode = () => {\n if (window.location.pathname === globalData.pathName) {\n if (RightMenus.messageRightMenu) {\n const message = '是否打印当前页面?
    建议打印时勾选背景图形
    '\n VolantisApp.question('', message, { time: 9000 }, () => { fn.printHtml() })\n } else {\n fn.printHtml()\n }\n }\n }\n\n fn.printHtml = () => {\n if (volantis.isReadModel) fn.readMode();\n DOMController.setAttribute('details', 'open', 'true');\n DOMController.removeList([\n '.cus-article-bkg', '.iziToast-overlay', '.iziToast-wrapper', '.prev-next',\n 'footer', '#l_header', '#l_cover', '#l_side', '#comments', '#s-top', '#BKG',\n '#rightmenu-wrapper', '.nav-tabs', '.parallax-mirror', '.new-meta-item.share', \n '.new-meta-box', 'button.btn-copy', 'iframe'\n ]);\n DOMController.setStyleList([\n ['body', 'backgroundColor', 'unset'], ['#l_main, .copyright.license', 'width', '100%'], \n ['#post', 'boxShadow', 'none'], ['#post', 'background', 'none'], ['#post', 'padding', '0'], \n ['h1', 'textAlign', 'center'], ['h1', 'fontWeight', '600'], ['h1', 'fontSize', '2rem'], ['h1', 'marginBottom', '20px'], \n ['.tab-pane', 'display', 'block'], ['.tab-content', 'borderTop', 'none'], ['.highlight>table pre', 'whiteSpace', 'pre-wrap'], \n ['.highlight>table pre', 'wordBreak', 'break-all'], ['.fancybox img', 'height', 'auto'], ['.fancybox img', 'weight', 'auto'], \n ['.copyright.license', 'margin', '0'], ['.copyright.license', 'padding', '1.25em 20px'], \n ['figure.highlight, .copyright.license', 'display', 'inline-block'], \n ]);\n setTimeout(() => {\n window.print();\n document.body.innerHTML = '';\n window.location.reload();\n }, 50);\n }\n\n fn.readMode = () => {\n if (typeof ScrollReveal === 'function') ScrollReveal().clean('#comments');\n DOMController.setStyle('#l_header', 'opacity', 0);\n DOMController.fadeToggleList([\n document.querySelector('#l_cover'), document.querySelector('footer'),\n document.querySelector('#s-top'), document.querySelector('.article-meta#bottom'),\n document.querySelector('.prev-next'), document.querySelector('#l_side'),\n document.querySelector('#comments'), \n ]);\n DOMController.toggleClassList([\n [document.querySelector('#l_main'), 'common_read'], [document.querySelector('#l_main'), 'common_read_main'],\n [document.querySelector('#l_body'), 'common_read'], [document.querySelector('#safearea'), 'common_read'],\n [document.querySelector('#read_bkg'), 'common_read_hide'], \n [document.querySelector('h1'), 'common_read_h1'], [document.querySelector('#post'), 'post_read'],\n [document.querySelector('#l_cover'), 'read_cover'], [document.querySelector('.widget.toc-wrapper'), 'post_read']\n ]);\n DOMController.setStyle('.copyright.license', 'margin', '15px 0');\n volantis.isReadModel = volantis.isReadModel === undefined ? true : !volantis.isReadModel;\n if (volantis.isReadModel) {\n if (RightMenus.messageRightMenu) VolantisApp.message('系统提示', '阅读模式已开启,您可以点击屏幕空白处退出。', {\n backgroundColor: 'var(--color-read-post)',\n icon: rightMenuConfig.options.iconPrefix + ' fa-book-reader',\n displayMode: 1,\n time: 5000\n });\n document.querySelector('#l_body').removeEventListener('click', fn.readMode);\n document.querySelector('#l_body').addEventListener('click', (event) => {\n if (DOMController.hasClass(event.target, 'common_read')) {\n fn.readMode();\n }\n });\n } else {\n document.querySelector('#l_body').removeEventListener('click', fn.readMode);\n document.querySelector('#post').removeEventListener('click', fn.readMode);\n DOMController.setStyle('.prev-next', 'display', 'flex');\n DOMController.setStyle('.copyright.license', 'margin', '15px -40px');\n }\n }\n\n return {\n init: fn.initEvent,\n hideMenu: fn.hideMenu,\n readMode: fn.readMode\n }\n})()\n\nObject.freeze(RightMenus);\nvolantis.requestAnimationFrame(() => {\n if (document.readyState !== 'loading') {\n RightMenus.initialMenu();\n } else {\n document.addEventListener(\"DOMContentLoaded\", function () {\n RightMenus.initialMenu();\n })\n }\n});\n"]} \ No newline at end of file diff --git a/maps/js/plugins/tags/contributors.js.map b/maps/js/plugins/tags/contributors.js.map new file mode 100644 index 0000000000..94685cf037 --- /dev/null +++ b/maps/js/plugins/tags/contributors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../../js/plugins/tags/contributors.js","names":["ContributorsJS","requestAPI","url","callback","timeout","retryTimes","request","Promise","resolve","reject","status","timer","setTimeout","fetch","then","response","clearTimeout","ok","json","Error","data","catch","error","layout","cfg","el","api","querySelector","remove","cellALL","forEach","item","i","user","html_url","login","avatar_url","avatar","innerHTML","innerText","e","start","els","document","getElementsByClassName","length","getAttribute","Object","class","volantis","GLOBAL_CONFIG","default"],"sources":["js/plugins/tags/contributors.js"],"mappings":"AAAA,MAAMA,eAAiB,CACrBC,WAAY,CAACC,EAAKC,EAAUC,KAC1B,IAAIC,EAAa,GAEjB,SAASC,IACP,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IAAIC,EAAS,EACTC,EAAQC,YAAW,KACN,IAAXF,IACFA,EAAS,EACTC,EAAQ,KACRF,EAAO,QACW,GAAdJ,GACFD,IAEJ,GACC,KACHS,MAAMX,GAAKY,MAAK,SAAUC,GAOxB,GANe,IAAXL,IACFM,aAAaL,GACbH,EAAQO,GACRJ,EAAQ,KACRD,EAAS,GAEPK,EAASE,GACX,OAAOF,EAASG,OAElB,MAAM,IAAIC,MAAM,+BAClB,IAAGL,MAAK,SAAUM,GAChBf,EAAa,EACbF,EAASiB,EACX,IAAGC,OAAM,SAAUC,GACbjB,EAAa,GACfA,GAAc,EACdO,YAAW,KACTN,GAAS,GACR,MAEHF,GAEJ,GAAE,GAEN,CACAE,EAAS,EAEXiB,OAASC,IACP,MAAMC,EAAKD,EAAIC,GACfzB,eAAeC,WAAWuB,EAAIE,KAAK,SAAUN,GAC3CK,EAAGE,cAAc,iBAAiBC,SAClC,IAAIC,EAAU,IACbT,GAAQ,IAAIU,SAAQ,CAACC,EAAMC,KAC1B,IAAIC,EAAO,0BACXA,GAAQ,0EACRA,GAAQ,UAAYF,EAAKG,SAAW,KACpCD,GAAQ,aAAeF,EAAKI,MAAQ,WAAaJ,EAAKK,YAAcZ,EAAIa,QAAU,oCAClFJ,GAAQ,2BAA6BF,EAAKI,MAAQ,gBAClDF,GAAQ,OAERJ,GADAI,GAAQ,QACO,IAEjBR,EAAGE,cAAc,eAAeW,UAAYT,CAC9C,IAAG,WACD,IACEJ,EAAGE,cAAc,qBAAqBC,SACtCH,EAAGE,cAAc,mBAAmBY,UAAU,cAChD,CAAE,MAAOC,GAAK,CAChB,GAAE,EAEJC,MAAO,KACL,MAAMC,EAAMC,SAASC,uBAAuB,uBAC5C,IAAK,IAAIZ,EAAI,EAAGA,EAAIU,EAAIG,OAAQb,IAAK,CACnC,MAAMP,EAAKiB,EAAIV,GACTN,EAAMD,EAAGqB,aAAa,OAC5B,GAAW,MAAPpB,EAAJ,CAGA,IAAIF,EAAM,IAAIuB,OACdvB,EAAIC,GAAKA,EACTD,EAAIE,IAAMA,EACVF,EAAIwB,MAAQvB,EAAGqB,aAAa,SAC5BtB,EAAIa,OAASY,SAASC,cAAcC,QAAQd,OAC5CrC,eAAeuB,OAAOC,EANtB,CAOF,IAMJxB,eAAeyC","sourcesContent":["const ContributorsJS = {\n requestAPI: (url, callback, timeout) => {\n let retryTimes = 5;\n\n function request() {\n return new Promise((resolve, reject) => {\n let status = 0; // 0 等待 1 完成 2 超时\n let timer = setTimeout(() => {\n if (status === 0) {\n status = 2;\n timer = null;\n reject('请求超时');\n if (retryTimes == 0) {\n timeout();\n }\n }\n }, 5000);\n fetch(url).then(function (response) {\n if (status !== 2) {\n clearTimeout(timer);\n resolve(response);\n timer = null;\n status = 1;\n }\n if (response.ok) {\n return response.json();\n }\n throw new Error('Network response was not ok.');\n }).then(function (data) {\n retryTimes = 0;\n callback(data);\n }).catch(function (error) {\n if (retryTimes > 0) {\n retryTimes -= 1;\n setTimeout(() => {\n request();\n }, 5000);\n } else {\n timeout();\n }\n });\n });\n }\n request();\n },\n layout: (cfg) => {\n const el = cfg.el;\n ContributorsJS.requestAPI(cfg.api, function (data) {\n el.querySelector('.loading-wrap').remove();\n var cellALL = \"\";\n (data || []).forEach((item, i) => {\n var user = '';\n cellALL += user;\n });\n el.querySelector('.group-body').innerHTML = cellALL;\n }, function () {\n try {\n el.querySelector('.loading-wrap svg').remove();\n el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');\n } catch (e) { }\n });\n },\n start: () => {\n const els = document.getElementsByClassName('contributorsjs-wrap');\n for (var i = 0; i < els.length; i++) {\n const el = els[i];\n const api = el.getAttribute('api');\n if (api == null) {\n continue;\n }\n var cfg = new Object();\n cfg.el = el;\n cfg.api = api;\n cfg.class = el.getAttribute('class');\n cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar;\n ContributorsJS.layout(cfg);\n }\n }\n}\n\n\n\nContributorsJS.start();"]} \ No newline at end of file diff --git a/maps/js/plugins/tags/friends.js.map b/maps/js/plugins/tags/friends.js.map new file mode 100644 index 0000000000..8e0b96f079 --- /dev/null +++ b/maps/js/plugins/tags/friends.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../../js/plugins/tags/friends.js","names":["FriendsJS","requestAPI","url","callback","timeout","retryTimes","request","Promise","resolve","reject","status","timer","setTimeout","fetch","then","response","clearTimeout","ok","json","Error","data","catch","error","layout","cfg","el","api","querySelector","remove","arr","content","cellALL","forEach","item","i","user","title","avatar","innerHTML","innerText","e","start","els","document","getElementsByClassName","length","getAttribute","Object","class","volantis","GLOBAL_CONFIG","default"],"sources":["js/plugins/tags/friends.js"],"mappings":"AAAA,MAAMA,UAAY,CAChBC,WAAY,CAACC,EAAKC,EAAUC,KAC1B,IAAIC,EAAa,GAEjB,SAASC,IACP,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IAAIC,EAAS,EACTC,EAAQC,YAAW,KACN,IAAXF,IACFA,EAAS,EACTC,EAAQ,KACRF,EAAO,QACW,GAAdJ,GACFD,IAEJ,GACC,KACHS,MAAMX,GAAKY,MAAK,SAAUC,GAOxB,GANe,IAAXL,IACFM,aAAaL,GACbH,EAAQO,GACRJ,EAAQ,KACRD,EAAS,GAEPK,EAASE,GACX,OAAOF,EAASG,OAElB,MAAM,IAAIC,MAAM,+BAClB,IAAGL,MAAK,SAAUM,GAChBf,EAAa,EACbF,EAASiB,EACX,IAAGC,OAAM,SAAUC,GACbjB,EAAa,GACfA,GAAc,EACdO,YAAW,KACTN,GAAS,GACR,MAEHF,GAEJ,GAAE,GAEN,CACAE,EAAS,EAEXiB,OAASC,IACP,MAAMC,EAAKD,EAAIC,GACfzB,UAAUC,WAAWuB,EAAIE,KAAK,SAAUN,GACtCK,EAAGE,cAAc,iBAAiBC,SAClC,MAAMC,EAAMT,EAAKU,QACjB,IAAIC,EAAU,GACdF,EAAIG,SAAQ,CAACC,EAAMC,KACjB,IAAIC,EAAO,0BACXA,GAAQ,0EACRA,GAAQ,UAAYF,EAAK/B,IAAM,KAC/BiC,GAAQ,aAAeF,EAAKG,MAAQ,WAAaH,EAAKI,QAAUb,EAAIa,QAAU,oCAC9EF,GAAQ,2BAA6BF,EAAKG,MAAQ,gBAClDD,GAAQ,OAERJ,GADAI,GAAQ,QACO,IAEjBV,EAAGE,cAAc,eAAeW,UAAYP,CAC9C,IAAG,WACD,IACEN,EAAGE,cAAc,qBAAqBC,SACtCH,EAAGE,cAAc,mBAAmBY,UAAU,cAChD,CAAE,MAAOC,GAAK,CAChB,GAAE,EAEJC,MAAO,KACL,MAAMC,EAAMC,SAASC,uBAAuB,kBAC5C,IAAK,IAAIV,EAAI,EAAGA,EAAIQ,EAAIG,OAAQX,IAAK,CACnC,MAAMT,EAAKiB,EAAIR,GACTR,EAAMD,EAAGqB,aAAa,OAC5B,GAAW,MAAPpB,EAAJ,CAGA,IAAIF,EAAM,IAAIuB,OACdvB,EAAIC,GAAKA,EACTD,EAAIE,IAAMA,EACVF,EAAIwB,MAAQvB,EAAGqB,aAAa,SAC5BtB,EAAIa,OAASY,SAASC,cAAcC,QAAQd,OAC5CrC,UAAUuB,OAAOC,EANjB,CAOF,IAMJxB,UAAUyC","sourcesContent":["const FriendsJS = {\n requestAPI: (url, callback, timeout) => {\n let retryTimes = 5;\n\n function request() {\n return new Promise((resolve, reject) => {\n let status = 0; // 0 等待 1 完成 2 超时\n let timer = setTimeout(() => {\n if (status === 0) {\n status = 2;\n timer = null;\n reject('请求超时');\n if (retryTimes == 0) {\n timeout();\n }\n }\n }, 5000);\n fetch(url).then(function (response) {\n if (status !== 2) {\n clearTimeout(timer);\n resolve(response);\n timer = null;\n status = 1;\n }\n if (response.ok) {\n return response.json();\n }\n throw new Error('Network response was not ok.');\n }).then(function (data) {\n retryTimes = 0;\n callback(data);\n }).catch(function (error) {\n if (retryTimes > 0) {\n retryTimes -= 1;\n setTimeout(() => {\n request();\n }, 5000);\n } else {\n timeout();\n }\n });\n });\n }\n request();\n },\n layout: (cfg) => {\n const el = cfg.el;\n FriendsJS.requestAPI(cfg.api, function (data) {\n el.querySelector('.loading-wrap').remove();\n const arr = data.content;\n var cellALL = \"\";\n arr.forEach((item, i) => {\n var user = '';\n cellALL += user;\n });\n el.querySelector('.group-body').innerHTML = cellALL;\n }, function () {\n try {\n el.querySelector('.loading-wrap svg').remove();\n el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');\n } catch (e) { }\n });\n },\n start: () => {\n const els = document.getElementsByClassName('friendsjs-wrap');\n for (var i = 0; i < els.length; i++) {\n const el = els[i];\n const api = el.getAttribute('api');\n if (api == null) {\n continue;\n }\n var cfg = new Object();\n cfg.el = el;\n cfg.api = api;\n cfg.class = el.getAttribute('class');\n cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar;\n FriendsJS.layout(cfg);\n }\n }\n}\n\n\n\nFriendsJS.start();"]} \ No newline at end of file diff --git a/maps/js/plugins/tags/sites.js.map b/maps/js/plugins/tags/sites.js.map new file mode 100644 index 0000000000..958a2350a9 --- /dev/null +++ b/maps/js/plugins/tags/sites.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../../js/plugins/tags/sites.js","names":["SitesJS","requestAPI","url","callback","timeout","retryTimes","request","Promise","resolve","reject","status","timer","setTimeout","fetch","then","response","clearTimeout","ok","json","Error","data","catch","error","layout","cfg","el","api","querySelector","remove","arr","content","cellALL","forEach","item","i","cell","title","screenshot","avatar","description","innerHTML","innerText","e","start","els","document","getElementsByClassName","length","getAttribute","Object","class","volantis","GLOBAL_CONFIG","default","link","cover"],"sources":["js/plugins/tags/sites.js"],"mappings":"AAAA,MAAMA,QAAU,CACdC,WAAY,CAACC,EAAKC,EAAUC,KAC1B,IAAIC,EAAa,GAEjB,SAASC,IACP,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IAAIC,EAAS,EACTC,EAAQC,YAAW,KACN,IAAXF,IACFA,EAAS,EACTC,EAAQ,KACRF,EAAO,QACW,GAAdJ,GACFD,IAEJ,GACC,KACHS,MAAMX,GAAKY,MAAK,SAAUC,GAOxB,GANe,IAAXL,IACFM,aAAaL,GACbH,EAAQO,GACRJ,EAAQ,KACRD,EAAS,GAEPK,EAASE,GACX,OAAOF,EAASG,OAElB,MAAM,IAAIC,MAAM,+BAClB,IAAGL,MAAK,SAAUM,GAChBf,EAAa,EACbF,EAASiB,EACX,IAAGC,OAAM,SAAUC,GACbjB,EAAa,GACfA,GAAc,EACdO,YAAW,KACTN,GAAS,GACR,MAEHF,GAEJ,GAAE,GAEN,CACAE,EAAS,EAEXiB,OAASC,IACP,MAAMC,EAAKD,EAAIC,GACfzB,QAAQC,WAAWuB,EAAIE,KAAK,SAAUN,GACpCK,EAAGE,cAAc,iBAAiBC,SAClC,MAAMC,EAAMT,EAAKU,QACjB,IAAIC,EAAU,GACdF,EAAIG,SAAQ,CAACC,EAAMC,KACjB,IAAIC,EAAO,0BACXA,GAAQ,iFAAmFF,EAAK/B,IAAM,KACtGiC,GAAQ,aAAeF,EAAKG,MAAQ,WAAaH,EAAKI,YAAe,iDAAmDJ,EAAK/B,KAAQ,oCACrIiC,GAAQ,qBACRA,GAAQ,aAAeF,EAAKG,MAAQ,WAAaH,EAAKK,QAAUd,EAAIc,QAAU,qCAC9EH,GAAQ,uBAAyBF,EAAKG,MAAQ,UAC9CD,GAAQ,uBAAyBF,EAAKM,aAAeN,EAAK/B,KAAO,UACjEiC,GAAQ,SACRA,GAAQ,OAERJ,GADAI,GAAQ,QACO,IAEjBV,EAAGE,cAAc,eAAea,UAAYT,CAC9C,IAAG,WACD,IACEN,EAAGE,cAAc,qBAAqBC,SACtCH,EAAGE,cAAc,mBAAmBc,UAAU,cAChD,CAAE,MAAOC,GAAK,CAChB,GAAE,EAEJC,MAAQnB,IACN,MAAMoB,EAAMC,SAASC,uBAAuB,gBAC5C,IAAK,IAAIZ,EAAI,EAAGA,EAAIU,EAAIG,OAAQb,IAAK,CACnC,MAAMT,EAAKmB,EAAIV,GACTR,EAAMD,EAAGuB,aAAa,OAC5B,GAAW,MAAPtB,GAGAF,EAAM,IAAIyB,QACVC,MAAQzB,EAAGuB,aAAa,SAC5BxB,EAAIC,GAAKA,EACTD,EAAIE,IAAMA,EACVF,EAAIc,OAASa,SAASC,cAAcC,QAAQC,KAC5C9B,EAAIa,WAAac,SAASC,cAAcC,QAAQE,MAChDvD,QAAQuB,OAAOC,EACjB,IAKJxB,QAAQ2C","sourcesContent":["const SitesJS = {\n requestAPI: (url, callback, timeout) => {\n let retryTimes = 5;\n\n function request() {\n return new Promise((resolve, reject) => {\n let status = 0; // 0 等待 1 完成 2 超时\n let timer = setTimeout(() => {\n if (status === 0) {\n status = 2;\n timer = null;\n reject('请求超时');\n if (retryTimes == 0) {\n timeout();\n }\n }\n }, 5000);\n fetch(url).then(function (response) {\n if (status !== 2) {\n clearTimeout(timer);\n resolve(response);\n timer = null;\n status = 1;\n }\n if (response.ok) {\n return response.json();\n }\n throw new Error('Network response was not ok.');\n }).then(function (data) {\n retryTimes = 0;\n callback(data);\n }).catch(function (error) {\n if (retryTimes > 0) {\n retryTimes -= 1;\n setTimeout(() => {\n request();\n }, 5000);\n } else {\n timeout();\n }\n });\n });\n }\n request();\n },\n layout: (cfg) => {\n const el = cfg.el;\n SitesJS.requestAPI(cfg.api, function (data) {\n el.querySelector('.loading-wrap').remove();\n const arr = data.content;\n var cellALL = \"\";\n arr.forEach((item, i) => {\n var cell = '';\n cellALL += cell;\n });\n el.querySelector('.group-body').innerHTML = cellALL;\n }, function () {\n try {\n el.querySelector('.loading-wrap svg').remove();\n el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');\n } catch (e) { }\n });\n },\n start: (cfg) => {\n const els = document.getElementsByClassName('sitesjs-wrap');\n for (var i = 0; i < els.length; i++) {\n const el = els[i];\n const api = el.getAttribute('api');\n if (api == null) {\n continue;\n }\n var cfg = new Object();\n cfg.class = el.getAttribute('class');\n cfg.el = el;\n cfg.api = api;\n cfg.avatar = volantis.GLOBAL_CONFIG.default.link;\n cfg.screenshot = volantis.GLOBAL_CONFIG.default.cover;\n SitesJS.layout(cfg);\n }\n }\n}\n\n\nSitesJS.start();"]} \ No newline at end of file diff --git a/maps/js/search/algolia.js.map b/maps/js/search/algolia.js.map new file mode 100644 index 0000000000..dc80bef602 --- /dev/null +++ b/maps/js/search/algolia.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../js/search/algolia.js","names":["SearchService","fn","search","algolia","timerId","queryText","template","init","div","document","createElement","innerHTML","body","append","volantis","GLOBAL_CONFIG","appId","apiKey","indexName","event","setAlgolia","querySelector","style","textAlign","maxHeight","addEventListener","close","querySelectorAll","forEach","e","onSubmit","input","target","value","instantsearch","searchClient","algoliasearch","searchFunction","helper","state","query","configure","widgets","hitsPerPage","searchBox","container","autofocus","showReset","showSubmit","showLoadingIndicator","searchAsYouType","placeholder","templates","queryHook","refine","clearTimeout","setTimeout","hits","item","data","keyword","link","permalink","root","path","result","_highlightResult","content","contentStripTruncate","cutContent","contentStrip","title","empty","languages","hits_empty","replace","stats","text","hits_stats","nbHits","processingTimeMS","powerBy","poweredBy","theme","dark","mode","pagination","totalPages","first","last","previous","next","addWidgets","start","setQueryText","setUiState","display","code","once","preventDefault","firstOccur","indexOf","end","pre","post","length","substring","matchContent","Object","freeze"],"sources":["js/search/algolia.js"],"mappings":"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","sourcesContent":["let SearchService = (() => {\n const fn = {};\n let search, algolia, timerId; \n fn.queryText = null;\n fn.template = `
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n `;\n\n fn.init = () => {\n let div = document.createElement(\"div\");\n div.innerHTML += fn.template;\n document.body.append(div);\n\n algolia = volantis.GLOBAL_CONFIG.search;\n if (algolia.appId && algolia.apiKey && algolia.indexName) {\n fn.event();\n fn.setAlgolia();\n } else {\n document.querySelector('#u-search main.modal-body').innerHTML = 'Algolia setting is invalid!';\n document.querySelector('#u-search main.modal-body').style.textAlign = 'center';\n document.querySelector('#u-search .modal').style.maxHeight = '128px';\n }\n }\n\n fn.event = () => {\n document\n .querySelector(\"#u-search-btn-close\")\n .addEventListener(\"click\", fn.close, false);\n document\n .querySelector(\"#modal-overlay\")\n .addEventListener(\"click\", fn.close, false);\n document.querySelectorAll(\".u-search-form\").forEach((e) => {\n e.addEventListener(\"submit\", fn.onSubmit, false);\n });\n document.querySelector(\"#algolia-search-input\").addEventListener(\"input\", event => {\n let input = event.target.querySelector(\".ais-SearchBox-input\");\n if (input) {\n fn.queryText = input.value;\n } else {\n fn.queryText = event.target.value;\n }\n })\n }\n\n fn.setAlgolia = () => {\n search = instantsearch({\n indexName: algolia.indexName,\n searchClient: algoliasearch(algolia.appId, algolia.apiKey),\n searchFunction(helper) {\n helper.state.query && helper.search()\n },\n })\n\n const configure = instantsearch.widgets.configure({\n hitsPerPage: algolia.hitsPerPage\n })\n\n const searchBox = instantsearch.widgets.searchBox({\n container: '#algolia-search-input',\n autofocus: true,\n showReset: false,\n showSubmit: false,\n showLoadingIndicator: false,\n searchAsYouType: algolia.searchAsYouType,\n placeholder: algolia.placeholder,\n templates: {\n input: 'algolia-input'\n },\n queryHook(query, refine) {\n clearTimeout(timerId)\n timerId = setTimeout(() => refine(query), 500)\n }\n })\n\n const hits = instantsearch.widgets.hits({\n container: '#algolia-hits',\n templates: {\n item(data) {\n const keyword = !!fn.queryText ? `?keyword=${fn.queryText}` : ''\n const link = data.permalink ? data.permalink : `${volantis.GLOBAL_CONFIG.root}${data.path}`\n const result = data._highlightResult\n const content = result.contentStripTruncate\n ? fn.cutContent(result.contentStripTruncate.value)\n : result.contentStrip\n ? fn.cutContent(result.contentStrip.value)\n : result.content\n ? fn.cutContent(result.content.value)\n : ''\n return `\n \n ${result.title.value || 'no-title'}\n ${content}\n `\n },\n empty: function (data) {\n return (\n `

    ${volantis.GLOBAL_CONFIG.languages.search.hits_empty.replace(/\\$\\{query}/, data.query)}

    `\n )\n }\n }\n })\n\n const stats = instantsearch.widgets.stats({\n container: '#algolia-info > .algolia-stats',\n templates: {\n text: function (data) {\n const stats = volantis.GLOBAL_CONFIG.languages.search.hits_stats\n .replace(/\\$\\{hits}/, data.nbHits)\n .replace(/\\$\\{time}/, data.processingTimeMS)\n return (\n `${stats}`\n )\n }\n }\n })\n\n const powerBy = instantsearch.widgets.poweredBy({\n container: '#algolia-info > .algolia-poweredBy',\n theme: volantis.dark?.mode === 'dark' ? 'dark' : 'light'\n })\n\n const pagination = instantsearch.widgets.pagination({\n container: '#algolia-pagination',\n totalPages: 5,\n templates: {\n first: '',\n last: '',\n previous: '',\n next: ''\n }\n })\n\n search.addWidgets([configure, searchBox, hits, stats, powerBy, pagination])\n\n search.start()\n\n }\n\n fn.setQueryText = queryText => {\n fn.queryText = queryText;\n if (!search) {\n fn.init()\n }\n search?.setUiState({\n [algolia.indexName]: {\n query: queryText\n }\n })\n }\n\n fn.search = () => {\n document.querySelector(\"#u-search\").style.display = \"block\";\n document.addEventListener(\"keydown\", event => {\n if (event.code === \"Escape\") {\n fn.close();\n }\n }, { once: true })\n }\n\n fn.onSubmit = (event) => {\n event.preventDefault();\n let input = event.target.querySelector(\".u-search-input\");\n fn.setQueryText(input?.value ? input.value : event.target.value)\n fn.search();\n };\n\n fn.cutContent = content => {\n if (content === '') return ''\n\n const firstOccur = content.indexOf('')\n\n let start = firstOccur - 30\n let end = firstOccur + 120\n let pre = ''\n let post = ''\n\n if (start <= 0) {\n start = 0\n end = 140\n } else {\n pre = '...'\n }\n\n if (end > content.length) {\n end = content.length\n } else {\n post = '...'\n }\n\n let matchContent = pre + content.substring(start, end) + post\n return matchContent\n }\n\n fn.close = () => {\n document.querySelector(\"#u-search\").style.display = \"none\";\n };\n\n return {\n init: fn.init,\n setQueryText: queryText => {\n fn.setQueryText(queryText);\n },\n search: fn.search,\n close: fn.close\n }\n})()\n\nObject.freeze(SearchService);\n\nSearchService.init();\n"]} \ No newline at end of file diff --git a/maps/js/search/hexo.js.map b/maps/js/search/hexo.js.map new file mode 100644 index 0000000000..46c0c4810c --- /dev/null +++ b/maps/js/search/hexo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../js/search/hexo.js","names":["SearchService","fn","async","div","document","createElement","innerHTML","template","body","append","querySelectorAll","forEach","e","addEventListener","onSubmit","querySelector","close","data","fetchData","event","preventDefault","input","target","queryText","value","search","style","display","results","buildResultList","pages","posts","volantis","GLOBAL_CONFIG","languages","hits_empty","replace","f","code","removeEventListener","fetch","dataPath","then","response","text","res","JSON","parse","html","post","title","trim","slice","contentSearch","buildResult","permalink","digest","post_title","toLowerCase","post_content","keywords","split","foundMatch","index_title","index_content","first_occur","word","index","indexOf","start","end","Math","max","min","length","match_content","substring","keyword","regS","RegExp","url","getUrlRelativePath","arrUrl","relUrl","init","setQueryText","Object","freeze"],"sources":["js/search/hexo.js"],"mappings":"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","sourcesContent":["let SearchService = (() => {\n const fn = {};\n fn.queryText = null;\n fn.data = null;\n fn.template = `
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
      \n
      \n
      \n
      \n
      \n`;\n fn.init = async () => {\n let div = document.createElement(\"div\");\n div.innerHTML += fn.template;\n document.body.append(div);\n document.querySelectorAll(\".u-search-form\").forEach((e) => {\n e.addEventListener(\"submit\", fn.onSubmit, false);\n });\n let uSearchModalInput = document.querySelector(\"#u-search-modal-input\");\n uSearchModalInput.addEventListener(\"input\", fn.onSubmit);\n document\n .querySelector(\"#u-search-btn-close\")\n .addEventListener(\"click\", fn.close, false);\n document\n .querySelector(\"#modal-overlay\")\n .addEventListener(\"click\", fn.close, false);\n if (!fn.data) {\n fn.data = await fn.fetchData();\n }\n };\n fn.onSubmit = (event) => {\n event.preventDefault();\n let input = event.target.querySelector(\".u-search-input\");\n if (input) {\n fn.queryText = input.value;\n } else {\n fn.queryText = event.target.value;\n }\n\n if (fn.queryText) {\n fn.search();\n }\n };\n fn.search = async () => {\n document.querySelectorAll(\".u-search-input\").forEach((e) => {\n e.value = fn.queryText;\n });\n document.querySelector(\"#u-search\").style.display = \"block\";\n if (!fn.data) {\n fn.data = await fn.fetchData();\n }\n let results = \"\";\n results += fn.buildResultList(fn.data.pages);\n results += fn.buildResultList(fn.data.posts);\n if (results === \"\") {\n results = `

      ${volantis.GLOBAL_CONFIG.languages.search.hits_empty.replace(/\\$\\{query}/, fn.queryText)}

      `\n }\n document.querySelector(\"#u-search .modal-results\").innerHTML = results;\n document.addEventListener(\"keydown\", function f(event) {\n if (event.code === \"Escape\") {\n fn.close();\n document.removeEventListener(\"keydown\", f);\n }\n });\n };\n fn.close = () => {\n document.querySelector(\"#u-search\").style.display = \"none\";\n };\n fn.fetchData = () => {\n return fetch(volantis.GLOBAL_CONFIG.search.dataPath)\n .then((response) => response.text())\n .then((res) => {\n const data = JSON.parse(res);\n // console.log(data);\n return data;\n });\n };\n fn.buildResultList = (data) => {\n let html = \"\";\n data.forEach((post) => {\n if (post.text) {\n post.text = post.text.replace(/12345\\d*/g, \"\") // 简易移除代码行号\n }\n if (!post.title && post.text) {\n post.title = post.text.trim().slice(0, 15)\n }\n if (fn.contentSearch(post)) {\n html += fn.buildResult(post.permalink, post.title, post.digest);\n }\n });\n return html;\n };\n fn.contentSearch = (post) => {\n let post_title = post.title.trim().toLowerCase();\n let post_content = post.text.trim().toLowerCase();\n let keywords = fn.queryText\n .trim()\n .toLowerCase()\n .split(/[-\\s]+/);\n let foundMatch = false;\n let index_title = -1;\n let index_content = -1;\n let first_occur = -1;\n if (post_title && post_content) {\n keywords.forEach((word, index) => {\n index_title = post_title.indexOf(word);\n index_content = post_content.indexOf(word);\n if (index_title < 0 && index_content < 0) {\n foundMatch = false;\n } else {\n foundMatch = true;\n if (index_content < 0) {\n index_content = 0;\n }\n if (index === 0) {\n first_occur = index_content;\n }\n }\n if (foundMatch) {\n post_content = post.text.trim();\n let start = 0;\n let end = 0;\n if (first_occur >= 0) {\n start = Math.max(first_occur - 40, 0);\n end =\n start === 0\n ? Math.min(200, post_content.length)\n : Math.min(first_occur + 120, post_content.length);\n let match_content = post_content.substring(start, end);\n keywords.forEach(function (keyword) {\n let regS = new RegExp(keyword, \"gi\");\n match_content = match_content.replace(\n regS,\n \"\" + keyword + \"\"\n );\n });\n post.digest = match_content + \"......\";\n } else {\n end = Math.min(200, post_content.length);\n post.digest = post_content.trim().substring(0, end);\n }\n }\n });\n }\n return foundMatch;\n };\n fn.buildResult = (url, title, digest) => {\n let result = fn.getUrlRelativePath(url);\n let html = \"\";\n html += \"
    • \";\n html +=\n \"\";\n html += \"\" + title + \"\";\n if (digest !== \"\") html += \"\" + digest + \"\";\n html += \"\";\n html += \"
    • \";\n return html;\n };\n fn.getUrlRelativePath = function (url) {\n let arrUrl = url.split(\"//\");\n let start = arrUrl[1].indexOf(\"/\");\n let relUrl = arrUrl[1].substring(start);\n if (relUrl.indexOf(\"?\") != -1) {\n relUrl = relUrl.split(\"?\")[0];\n }\n return relUrl;\n };\n return {\n init: () => {\n fn.init();\n },\n setQueryText: (queryText) => {\n fn.queryText = queryText;\n },\n search: () => {\n fn.search();\n },\n };\n})();\nObject.freeze(SearchService);\n\nSearchService.init();\n"]} \ No newline at end of file diff --git a/maps/js/search/meilisearch.js.map b/maps/js/search/meilisearch.js.map new file mode 100644 index 0000000000..bdf9bbd328 --- /dev/null +++ b/maps/js/search/meilisearch.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../../../js/search/meilisearch.js","names":["SearchService","fn","search","meilisearch","timerId","queryText","template","init","div","document","createElement","innerHTML","body","append","volantis","GLOBAL_CONFIG","appId","apiKey","indexName","event","setAlgolia","querySelector","style","textAlign","maxHeight","addEventListener","close","querySelectorAll","forEach","e","onSubmit","input","target","value","instantsearch","searchClient","instantMeiliSearch","searchFunction","helper","state","query","widgets","configure","hitsPerPage","searchBox","container","autofocus","showReset","showSubmit","showLoadingIndicator","searchAsYouType","placeholder","templates","queryHook","refine","clearTimeout","setTimeout","hits","item","data","keyword","link","permalink","root","path","result","_highlightResult","content","cutContent","text","title","empty","languages","hits_empty","replace","stats","hits_stats","nbHits","processingTimeMS","addWidgets","start","setQueryText","setUiState","display","code","once","preventDefault","firstOccur","indexOf","end","pre","post","length","substring","matchContent","Object","freeze"],"sources":["js/search/meilisearch.js"],"mappings":"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","sourcesContent":["let SearchService = (() => {\n const fn = {};\n let search, meilisearch, timerId; \n fn.queryText = null;\n fn.template = `
      \n
      \n
      \n \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n \n \n
      \n
      \n
      \n
      \n
      \n
      \n `;\n\n fn.init = () => {\n let div = document.createElement(\"div\");\n div.innerHTML += fn.template;\n document.body.append(div);\n\n meilisearch = volantis.GLOBAL_CONFIG.search;\n if (meilisearch.appId && meilisearch.apiKey && meilisearch.indexName) {\n fn.event();\n fn.setAlgolia();\n } else {\n document.querySelector('#u-search main.modal-body').innerHTML = 'Algolia setting is invalid!';\n document.querySelector('#u-search main.modal-body').style.textAlign = 'center';\n document.querySelector('#u-search .modal').style.maxHeight = '128px';\n }\n }\n\n fn.event = () => {\n document\n .querySelector(\"#u-search-btn-close\")\n .addEventListener(\"click\", fn.close, false);\n document\n .querySelector(\"#modal-overlay\")\n .addEventListener(\"click\", fn.close, false);\n document.querySelectorAll(\".u-search-form\").forEach((e) => {\n e.addEventListener(\"submit\", fn.onSubmit, false);\n });\n document.querySelector(\"#meilisearch-search-input\").addEventListener(\"input\", event => {\n let input = event.target.querySelector(\".ais-SearchBox-input\");\n if (input) {\n fn.queryText = input.value;\n } else {\n fn.queryText = event.target.value;\n }\n })\n }\n\n fn.setAlgolia = () => {\n search = instantsearch({\n indexName: meilisearch.indexName,\n searchClient: instantMeiliSearch(meilisearch.appId, meilisearch.apiKey),\n searchFunction(helper) {\n helper.state.query && helper.search()\n },\n })\n\n const configure = instantsearch.widgets.configure({\n hitsPerPage: meilisearch.hitsPerPage\n })\n\n const searchBox = instantsearch.widgets.searchBox({\n container: '#meilisearch-search-input',\n autofocus: true,\n showReset: false,\n showSubmit: false,\n showLoadingIndicator: false,\n searchAsYouType: meilisearch.searchAsYouType,\n placeholder: meilisearch.placeholder,\n templates: {\n input: 'meilisearch-input'\n },\n queryHook(query, refine) {\n clearTimeout(timerId)\n timerId = setTimeout(() => refine(query), 500)\n }\n })\n\n const hits = instantsearch.widgets.hits({\n container: '#meilisearch-hits',\n templates: {\n item(data) {\n const keyword = !!fn.queryText ? `?keyword=${fn.queryText}` : ''\n const link = data.permalink ? data.permalink : `${volantis.GLOBAL_CONFIG.root}${data.path}`\n const result = data._highlightResult\n const content = fn.cutContent(result.text.value)\n return `\n \n ${result.title.value || 'no-title'}\n ${content}\n `\n },\n empty: function (data) {\n return (\n `

      ${volantis.GLOBAL_CONFIG.languages.search.hits_empty.replace(/\\$\\{query}/, data.query)}

      `\n )\n }\n }\n })\n\n const stats = instantsearch.widgets.stats({\n container: '#meilisearch-info > .meilisearch-stats',\n templates: {\n text: function (data) {\n const stats = volantis.GLOBAL_CONFIG.languages.search.hits_stats\n .replace(/\\$\\{hits}/, data.nbHits)\n .replace(/\\$\\{time}/, data.processingTimeMS)\n return (\n `${stats}`\n )\n }\n }\n })\n\n search.addWidgets([searchBox, hits, stats])\n\n search.start()\n\n }\n\n fn.setQueryText = queryText => {\n fn.queryText = queryText;\n if (!search) {\n fn.init()\n }\n search?.setUiState({\n [meilisearch.indexName]: {\n query: queryText\n }\n })\n }\n\n fn.search = () => {\n document.querySelector(\"#u-search\").style.display = \"block\";\n document.addEventListener(\"keydown\", event => {\n if (event.code === \"Escape\") {\n fn.close();\n }\n }, { once: true })\n }\n\n fn.onSubmit = (event) => {\n event.preventDefault();\n let input = event.target.querySelector(\".u-search-input\");\n fn.setQueryText(input?.value ? input.value : event.target.value)\n fn.search();\n };\n\n fn.cutContent = content => {\n if (content === '') return ''\n\n const firstOccur = content.indexOf('')\n\n let start = firstOccur - 30\n let end = firstOccur + 120\n let pre = ''\n let post = ''\n\n if (start <= 0) {\n start = 0\n end = 140\n } else {\n pre = '...'\n }\n\n if (end > content.length) {\n end = content.length\n } else {\n post = '...'\n }\n\n let matchContent = pre + content.substring(start, end) + post\n return matchContent\n }\n\n fn.close = () => {\n document.querySelector(\"#u-search\").style.display = \"none\";\n };\n\n return {\n init: fn.init,\n setQueryText: queryText => {\n fn.setQueryText(queryText);\n },\n search: fn.search,\n close: fn.close\n }\n})()\n\nObject.freeze(SearchService);\n\nSearchService.init();\n"]} \ No newline at end of file diff --git a/maps/sw.js.map b/maps/sw.js.map new file mode 100644 index 0000000000..78e0066621 --- /dev/null +++ b/maps/sw.js.map @@ -0,0 +1 @@ +{"version":3,"file":"../sw.js","names":["importScripts","workbox","setConfig","modulePathPrefix","core","precaching","routing","strategies","expiration","cacheableResponse","backgroundSync","CacheFirst","NetworkFirst","NetworkOnly","StaleWhileRevalidate","ExpirationPlugin","CacheableResponsePlugin","cacheSuffixVersion","maxEntries","self","addEventListener","event","waitUntil","caches","keys","then","Promise","all","map","key","includes","delete","setCacheNameDetails","prefix","suffix","skipWaiting","clientsClaim","cleanupOutdatedCaches","precacheAndRoute","url","revision","registerRoute","cacheName","fetchOptions","mode","credentials","plugins","maxAgeSeconds","purgeOnQuotaError","setDefaultHandler","networkTimeoutSeconds"],"sources":["sw.js"],"mappings":"AAAAA,cAAc,wEAEdC,QAAQC,UAAU,CACdC,iBAAkB,4DAGtB,MAAMC,KAAEA,KAAIC,WAAEA,WAAUC,QAAEA,QAAOC,WAAEA,WAAUC,WAAEA,WAAUC,kBAAEA,kBAAiBC,eAAEA,gBAAmBT,SAC3FU,WAAEA,WAAUC,aAAEA,aAAYC,YAAEA,YAAWC,qBAAEA,sBAAyBP,YAClEQ,iBAAEA,kBAAqBP,YACvBQ,wBAAEA,yBAA4BP,kBAE9BQ,mBAAqB,UACvBC,WAAa,IAEjBC,KAAKC,iBAAiB,YAAaC,IAC/BA,EAAMC,UACFC,OAAOC,OAAOC,MAAMD,GACTE,QAAQC,IAAIH,EAAKI,KAAKC,IACzB,IAAKA,EAAIC,SAPE,WAO4B,OAAOP,OAAOQ,OAAOF,EAAI,OAG3E,IAILzB,KAAK4B,oBAAoB,CACrBC,OAAQ,WACRC,OAhBuB,YAmB3B9B,KAAK+B,cACL/B,KAAKgC,eACL/B,WAAWgC,wBAMXhC,WAAWiC,iBACP,CACI,CAAEC,IAAK,iBAAkBC,SAAU,MACnC,CAAED,IAAK,iBAAkBC,SAAU,MACnC,CAAED,IAAK,aAAcC,SAAU,QAavClC,QAAQmC,cACJ,uBACA,IAAI9B,WAAW,CACX+B,UAAW,0BACXC,aAAc,CACVC,KAAM,OACNC,YAAa,QAEjBC,QAAS,CACL,IAAI/B,iBAAiB,CACjBgC,cAAe,OACfC,mBAAmB,QAOnC1C,QAAQmC,cACJ,wBACA,IAAI9B,WAAW,CACX+B,UAAW,0BACXC,aAAc,CACVC,KAAM,OACNC,YAAa,QAEjBC,QAAS,CACL,IAAI/B,iBAAiB,CACjBgC,cAAe,OACfC,mBAAmB,QAWnC1C,QAAQmC,cACJ,iBACA,IAAI5B,aAMRP,QAAQmC,cAEJ,+DACA,IAAI3B,sBAORR,QAAQmC,cAEJ,eAEA,IAAI3B,sBAORR,QAAQmC,cACJ,SACA,IAAI3B,sBAORR,QAAQ2C,kBACJ,IAAIrC,aAAa,CACbsC,sBAAuB","sourcesContent":["importScripts('https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/workbox-sw.js');\n\nworkbox.setConfig({\n modulePathPrefix: 'https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/'\n});\n\nconst { core, precaching, routing, strategies, expiration, cacheableResponse, backgroundSync } = workbox;\nconst { CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate } = strategies;\nconst { ExpirationPlugin } = expiration;\nconst { CacheableResponsePlugin } = cacheableResponse;\n\nconst cacheSuffixVersion = '-000010', // 缓存版本号 极端重要,修改静态文件后发布网页一定要修改缓存版本号\n maxEntries = 100;\n\nself.addEventListener('activate', (event) => {\n event.waitUntil(\n caches.keys().then((keys) => {\n return Promise.all(keys.map((key) => {\n if (!key.includes(cacheSuffixVersion)) return caches.delete(key);\n }));\n })\n );\n});\n\n\ncore.setCacheNameDetails({\n prefix: 'volantis', // 极端重要 自己拟定一个名字\n suffix: cacheSuffixVersion\n});\n\ncore.skipWaiting();\ncore.clientsClaim();\nprecaching.cleanupOutdatedCaches();\n\n/*\n * Precache\n * - Static Assets\n */\nprecaching.precacheAndRoute( // 极端重要 定义首次缓存的静态文件\n [\n { url: '/css/first.css', revision: null },\n { url: '/css/style.css', revision: null },\n { url: '/js/app.js', revision: null },\n ],\n);\n\n/*\n * Cache File From CDN\n *\n * Method: CacheFirst\n * cacheName: static-immutable\n * cacheTime: 30d\n */\n\n// cdn.jsdelivr.net - cors enabled\nrouting.registerRoute(\n /.*cdn\\.jsdelivr\\.net/,\n new CacheFirst({\n cacheName: 'static-immutable' + cacheSuffixVersion,\n fetchOptions: {\n mode: 'cors',\n credentials: 'omit'\n },\n plugins: [\n new ExpirationPlugin({\n maxAgeSeconds: 30 * 24 * 60 * 60,\n purgeOnQuotaError: true\n })\n ]\n })\n);\n\n// m7.music.126.net - cors enabled\nrouting.registerRoute(\n /.*m7\\.music\\.126\\.net/,\n new CacheFirst({\n cacheName: 'static-immutable' + cacheSuffixVersion,\n fetchOptions: {\n mode: 'cors',\n credentials: 'omit'\n },\n plugins: [\n new ExpirationPlugin({\n maxAgeSeconds: 30 * 24 * 60 * 60,\n purgeOnQuotaError: true\n })\n ]\n })\n);\n\n/*\n * No Cache\n *\n * Method: networkOnly\n */\nrouting.registerRoute(\n /.*baidu\\.com.*/,\n new NetworkOnly()\n);\n/*\n * Others img fonts\n * Method: staleWhileRevalidate\n */\nrouting.registerRoute(\n // Cache image fonts files\n /.*\\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/,\n new StaleWhileRevalidate()\n);\n\n/*\n * Static Assets\n * Method: staleWhileRevalidate\n */\nrouting.registerRoute(\n // Cache CSS files\n /.*\\.(css|js)/,\n // Use cache but update in the background ASAP\n new StaleWhileRevalidate()\n);\n\n/*\n * sw.js - Revalidate every time\n * staleWhileRevalidate\n */\nrouting.registerRoute(\n '/sw.js', // 本文件名\n new StaleWhileRevalidate()\n);\n\n/*\n * Default - Serve as it is\n * networkFirst\n */\nrouting.setDefaultHandler(\n new NetworkFirst({\n networkTimeoutSeconds: 3\n })\n);\n"]} \ No newline at end of file diff --git a/news/2017-10-24/index.html b/news/2017-10-24/index.html new file mode 100644 index 0000000000..6ec189d150 --- /dev/null +++ b/news/2017-10-24/index.html @@ -0,0 +1 @@ +Volantis for Hexo - Volantis


      Volantis is a functional and highly modular hexo blog theme. Thanks to its powerful modular features, you can easily build a minimalist style blog, or follow the example of the official website to build a large-scale comprehensive blog with multi person cooperation and document module.


      Let's get started

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/news/2020-02-19/index.html b/news/2020-02-19/index.html new file mode 100644 index 0000000000..265a88f1cd --- /dev/null +++ b/news/2020-02-19/index.html @@ -0,0 +1 @@ +版本命名规范化 - Volantis

      主版本号.子版本号.修订版本号

      主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:

      • 主版本号: 较大改动、框架调整或重构
      • 子版本号: 较小或局部的功能性更新
      • 修订版本号: 修复BUG或无关紧要的细节调整

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/news/2020-02-20/index.html b/news/2020-02-20/index.html new file mode 100644 index 0000000000..8ef4c783e2 --- /dev/null +++ b/news/2020-02-20/index.html @@ -0,0 +1 @@ +已关闭评论区 - Volantis

      使用 GitHub Issue

      由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。
      为了精准高效解决问题,请前往 GitHub Issue

      遇到问题怎么办

      1. 确定已经查阅文档找不到相关内容。
      2. 前往「常见问题」页面,查看是否有解决方案。
      3. 访问在线示例,查看是否具有相同第问题。
        3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。
        3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
      4. 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/news/2020-02-21/index.html b/news/2020-02-21/index.html new file mode 100644 index 0000000000..f4976a9c75 --- /dev/null +++ b/news/2020-02-21/index.html @@ -0,0 +1 @@ +主题文档网页更新并开源 - Volantis

      主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。

      现在使用的文档页面源码是: volantis-docs

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/news/2020-02-22/index.html b/news/2020-02-22/index.html new file mode 100644 index 0000000000..4f6bae1a5d --- /dev/null +++ b/news/2020-02-22/index.html @@ -0,0 +1 @@ +主题更名为「Volantis」 - Volantis

      主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/news/2020-02-25/index.html b/news/2020-02-25/index.html new file mode 100644 index 0000000000..557c453af2 --- /dev/null +++ b/news/2020-02-25/index.html @@ -0,0 +1 @@ +新增 pjax 开发分支 - Volantis

      由于功能未完全兼容,如果想率先使用,尽量不要改主题配置文件。

      • 不能使用封面
      • mathjax
      • 有折叠框的页面,折叠框打开之后目录高亮位置不对应
      • 很多未知问题

      感谢 @inkss 发布的这篇教程 《Hexo 博客部署 Pjax 局部刷新》
      当所有兼容性问题解决或妥协之后,pjax 分支会合并入 master。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file 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 0000000000..16e8c3644e --- /dev/null +++ b/news/2020-03-06-2.0-beta/index.html @@ -0,0 +1,11 @@ +新版本「2.0」测试版发布 - Volantis
      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

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file 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 0000000000..7b396a30e6 --- /dev/null +++ b/news/2020-03-10-2.0/index.html @@ -0,0 +1,25 @@ +新版本「2.0」正式版发布 - Volantis

      本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:

      1. 卸载 less

        npm uninstall hexo-renderer-less --save
      2. 安装 stylus

        npm install hexo-renderer-stylus --save

      新功能

      导航栏

      导航栏获得了史诗级的增强,可以设置N级子菜单。考虑到实用性,不太建议使用过多或者过深的菜单(超出屏幕的部分无法被看到)。

      样式设置

      现在可以在主题配置文件中设置更多的样式:

      • 最大布局宽度
      • 导航栏高度、特效(阴影、毛玻璃、鼠标hover时浮起)
      • 卡片特效(阴影、毛玻璃、鼠标hover时浮起)
      • 代码框是否显示语言
      • 标题和正文文本布局(靠左、靠右、居中)
      • 正文字体
      • 代码字体
      • 各部分颜色

      封面

      封面可以在主题配置文件中设置在首页、归档页面、其它页面默认是否显示。
      封面中可以同时显示logo图片、标题、副标题了。

      小部件

      grid小部件可以设置 fixed: true 来固定网格宽度(适合文字长短不一的场景)。

      其它

      可以设置「评论」的标题和副标题。
      可以创建多种颜色的折叠框。
      友链增加分组描述。

      功能调整与优化

      样式渲染器

      使用 stylus 重写了所有样式,无需安装less插件了。相较于1.7.4css文件体积缩小了19.75%

      主题配置文件

      • 主题配置文件经过了较大改动,使得层级结构更加清晰。
      • 优化了二维码(微信)分享的使用体验

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/news/2020-04-04/index.html b/news/2020-04-04/index.html new file mode 100644 index 0000000000..0868e43b2b --- /dev/null +++ b/news/2020-04-04/index.html @@ -0,0 +1,14 @@ +关于主题与文档的更新 - Volantis

      由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。

      • 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。
      • 当主题稳定后会提供英文文档。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/page-settings/body/index.html b/page-settings/body/index.html new file mode 100644 index 0000000000..9e02f27c65 --- /dev/null +++ b/page-settings/body/index.html @@ -0,0 +1 @@ +Volantis: page custom layout - Volantis

      Show mini music player

      The mini music player is displayed on the right side of the title. The supported fields are: 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
      ---

      see the actual effect: #contributors

      Show meta tags

      The date, category, update date, tags, sharing, etc. at the top and bottom of the article are meta tags.

      front-matter
      ---
      top_meta: false
      bottom_meta: false
      ---

      If a page has no title, top_meta will not be displayed, like 404, about pages can be completely hidden:

      front-matter
      ---
      seo_title: About
      top_meta: false
      bottom_meta: false
      ---

      Thumbnails are shown on the right

      front-matter
      ---
      thumbnail: https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png
      ---

      The thumbnail is only displayed on the article list and article page, not on the archive page.

      The icon is displayed on the right side of the title

      front-matter
      ---
      icons: [fas fa-fire red, fas fa-star green]
      ---

      The icon is only displayed on the archive page and can be used to mark popular articles.

      you can set the color of the icon through red / blue / green / yellow / orange / theme / accent

      Do you want to show cover

      If a page needs a cover, you can write it like this:

      front-matter
      ---
      cover: true
      ---

      Show sidebar

      By freely setting the sidebar card to delete the redundant information of the corresponding page, increase the weight of valuable information in the page.

      If a page does not require a sidebar, you can write:

      front-matter
      ---
      sidebar: []
      ---

      If a certain page wants to display certain sidebars, just write:

      front-matter
      ---
      sidebar: [grid, toc, tags] # Place any sidebar widgets you want to display
      ---

      Close comment

      front-matter
      ---
      comments: false
      ---

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/page-settings/front-matter/index.html b/page-settings/front-matter/index.html new file mode 100644 index 0000000000..6f40e6eb68 --- /dev/null +++ b/page-settings/front-matter/index.html @@ -0,0 +1 @@ +Volantis: front-matter - Volantis

      front-matter

      The front-matter is the area at the top of the file separated by ---, used to specify the variables of individual files. For more information, please refer to Hexo official document: #front-matter

      FieldMeaningValue TypeDefault Value
      layoutLayout templateString-
      titlePage titleString-
      seo_titlePage titleStringpage.title
      short_titlePage title (displayed in the group list)Stringpage.title
      dateCreation timeDateFile creation time
      updatedUpdate dateDateFile modification time
      linkExternal article URLString-
      musicInternal music controls[Object]-
      robotsrobotsString-
      keywordsPage keywordsString-
      descriptionPage description, abstractString-
      coverWhether to show the coverBooltrue
      top_metaWhether to display the meta information at the top of the article or pageBooltrue
      bottom_metaWhether to display the meta information at the bottom of the article or pageBooltrue
      sidebarPage sidebarBool, Arraytheme.layout.*.sidebar
      bodyPage body elementsArraytheme.layout.on_page.body
      mathjaxWhether to render formulasBool, Stringfalse
      thumbnailThumbnailStringfalse
      iconsiconsArray[]
      pinwhether to topBoolfalse

      Fields unique to layout:post:

      | Field | Meaning | Value Type | Default Value |
      | :----------------- | :------------ | :------------- |: ------ |
      | author | Article author | [Object] | config.author |
      | categories | Categories | String, Array |-|
      | tags | Tags | String, Array |-|
      | toc | Whether to generate a directory | Bool | true |

      author

      | Field | Meaning | Value Type | Default Value |
      | :----------------- | :------------ | :------------- |: ------ |
      | name | Author name | String | config.author |
      | avatar | Avatar | String | config.avatar |
      | url | Link | String | config.url |

      music

      | Field | Must | Value Type |
      | :----------------- | :------------ | :--------------- - |
      | server | yes | netease, tencent, kugou, xiami, baidu |
      | type | yes | song, playlist, album, search, artist |
      | id | yes | song id / playlist id / album id / search keyword |

      Top article

      Set the following values ​​in front-matter:

      front-matter
      pin: true

      Article classification

      Multiple categories have two relationships, one is hierarchy (equivalent to folders), and the other is juxtaposition (equivalent to tags).

      Multi-level classification:

      front-matter
      ---
      categories: [category A, category B]
      ---

      or

      front-matter
      ---
      categories:
      -Category A
      -Category B
      ---

      Parallel classification

      front-matter
      categories:
      -[Category A]
      -[Category B]

      Multi-level + parallel classification

      front-matter
      categories:
      -[Category A, Category B]
      -[Category C, Category D]

      Article Summary

      Insert <!-- more --> in the article, the previous part is the abstract.

      source code of an article
      ---
      title: xxx
      date: 2020-02-21
      ---

      This is a summary

      <!-- more -->

      This is the text

      Note: <!-- more --> There must be blank lines before and after <!-- more -->

      Set article author

      With support for multi-author jointly maintain a blog, so you can set up a separate authors:

      front-matter
      ---
      author:
      name: Author
      avatar: https://img.vim-cn.com/a1/d53c11fb5d4fd69529bc805d385fe818feb3f6.png
      url: https://baidu.com
      ---

      Import external articles

      Using link, with customized article author information, you can display external articles or URLs in the article list, for example:

      front-matter
      ---
      layout: post
      date: 2017-07-05
      title: [] How to build an independent blog based on Hexo
      categories: [Dev, Hexo]
      tags:
      -Hexo
      author:
      name: xaoxuu
      avatar: https://gcore.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)

      Top

      For any article or page, set pin: true to put it on the top page.

      front-matter
      ---
      pin: true
      ---

      This will cause a small problem: the number of post cards on the homepage is more than the set value. If you have obsessive-compulsive disorder and want the number of each page to be the same, you can install a plug-in to achieve it, see: [#421](https://github.com/ volantis-x/hexo-theme-volantis/issues/421)

      Do not archive

      Articles stored in the _posts folder will generally appear on the archive page. If a post does not want to appear on the archive page:

      front-matter
      ---
      archive: false
      ---

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/page-settings/layout/index.html b/page-settings/layout/index.html new file mode 100644 index 0000000000..3e275b2146 --- /dev/null +++ b/page-settings/layout/index.html @@ -0,0 +1 @@ +Volantis: page layout template - Volantis

      Layout template

      ValueMeaning
      pageIndependent page
      postArticle page
      docsDocumentation page
      categoryCategory page
      tagTag page
      friendsFriends link page
      listList page

      page & post & docs

      These three types of pages are the same, but have the following subtle differences:

      • When the post article has a title, scroll down the web page, the navigation bar will move up and out of the screen to display the article title, but page and docs will not.
      • post At the end of the article, up to four modules can be displayed: "Reference", "Related Article", "Copyright Mark", and "Reward".
      • At most one module of "reference" can be displayed at the end of the docs article.

      Except that the archive page is automatically generated, other independent pages need to be created manually.

      Archive page

      The archive page is automatically generated and has been generated during initialization. The path is as follows:

      blog/_config.yml
      # Directory
      archive_dir: archives

      About page

      Create file if not exists: source/about/index.md
      ---
      layout: docs
      seo_title: About
      bottom_meta: false
      sidebar: []
      valine:
      placeholder: What do you want to tell me?
      ---

      Write about yourself below

      Category page

      Create file if not exists: source/categories/index.md
      ---
      layout: category
      index: true
      title: All categories
      ---

      Tag page

      Create file if not exists: source/tags/index.md
      ---
      layout: tag
      index: true
      title: all tags
      ---

      List page

      Create file if not exists: source/mylist/index.md
      ---
      layout: list
      group: mylist
      index: true
      ---

      The result is to filter out all articles that contain group: mylist in the front-matter section.

      Create page file

      Create file if not exists: source/friends/index.md
      ---
      layout: friends # required
      title: My friends # Optional, this is the title of the friend link page
      ---

      Write the content above the friend chain here.

      <!-- more -->

      Here you can write text notes at the bottom of the friend chain page, such as your own friend chain specifications, examples, etc.

      Choose a layout

      Find the following in the theme configuration file:

      pages:
      # Friends link page configuration
      friends:
      layout_scheme: traditional # simple: simple layout, traditional: traditional layout, sites: website card layout

      Three layout schemes are currently provided:

      • simple: Simple layout, only avatar and title.
      • traditional: Traditional layout, the style of the old version of Volantis.
      • sites: site card layout, which is the new style of website card tags added in Volantis 4.x.

      Set data source

      The data source of Friends Chain is written in the following path, if not, please create it yourself:

      blog/source/_data/friends.yml

      The content format is:

      blog/source/_data/friends.yml
      -group: # Group title
      description: # Group description
      items:
      -title: # name
      avatar: # Avatar
      url: # link
      screenshot: # Screenshot
      keywords: # Keywords
      description: # description
      -title: # name
      avatar: # Avatar
      url: # link
      screenshot: # Screenshot
      keywords: # Keywords
      description: # description

      Different layout methods will use some fields. Generally speaking, title, ʻavatar and ʻurl are all required. These data are converted into HTML tags and inserted into the <!-- more --> part of the friend link page.

      Use the issues tag to get JSON data from issues to parse and generate HTML to fill in the page. The usage is as follows:

      {% issues sites | api=https://api.github.com/repos/xaoxuu/friends/issues?sort=updated&state=open&page=1&per_page=100&labels=active %}

      In this way, the way to add a friend chain becomes: the other party raises an Issue, reviews it by yourself, then adds the ʻactive` tag, and then refreshes the webpage to take effect. It is also very convenient to update the content of the friend chain. The creator of the issue has the right to modify and close it.

      Create a new GitHub or Gitee repository and create the Issues template as follows:

      {
      "title": "",
      "screenshot": "",
      "url": "",
      "avatar": "",
      "description": "",
      "keywords": ""
      }

      For details on how to use the issues tag, see this article:

      suggest

      • Both can be used at the same time. It is recommended to open the issues friend chain to everyone, and save it to the static friend chain if you contact yourself frequently.
      • The actual speed and stability of the GitHub API is not as good as Gitee. If you pursue stability, it is recommended to use Gitee.

      404 page

      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: Please leave a message and tell me which page you want to visit is not found
      ---

      {% p logo center huge, 404 %}
      {% p center bold, sorry, the page you visited does not exist %}
      {% p center small, the address may be entered incorrectly or the address has been deleted %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/page-settings/math/index.html b/page-settings/math/index.html new file mode 100644 index 0000000000..17cc08c5d8 --- /dev/null +++ b/page-settings/math/index.html @@ -0,0 +1 @@ +Volantis: rendering formula - Volantis

      The default is not to render. If there is a formula in the article, it needs to be set to enable in front-matter. Even if it is turned on, the article list will not be rendered. Please be careful not to write the formula at the beginning of the article.

      example.md:
      ---
      title: Rendering formula (MathJax)
      date: 2020-02-23
      mathjax: true # false: do not render, true: render
      ---

      Add a descriptive text

      <!-- more -->

      $$t+1=2$$

      $$
      \mbox{accumulation factor}=\begin{cases}
      1+ni & \mbox{simple interest}\\\\
      (1+i)^n & \mbox{compound interest}
      \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}
      $$
      View formula rendering effect

      $$t+1=2$$

      $$
      \mbox{accumulation factor}=\begin{cases}
      1+ni & \mbox{simple interest}\\
      (1+i)^n & \mbox{compound interest}
      \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}
      $$

      If the formula still cannot be rendered correctly, you can read this article by @MicDZ:

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/page-sitemap.xml b/page-sitemap.xml new file mode 100644 index 0000000000..26fdd152cc --- /dev/null +++ b/page-sitemap.xml @@ -0,0 +1,480 @@ + + + + + https://volantis.js.org/ + daily + 1 + + + + + + https://volantis.js.org/v4/advanced-settings/ + 2023-12-26T01:42:16.922Z + weekly + 0.8 + + + + + + https://volantis.js.org/v4/getting-started/ + 2023-12-26T01:42:16.922Z + weekly + 0.8 + + + + + + https://volantis.js.org/v4/page-settings/ + 2023-12-26T01:42:16.922Z + weekly + 0.8 + + + + + + https://volantis.js.org/v4/site-settings/ + 2023-12-26T01:42:16.922Z + weekly + 0.8 + + + + + + https://volantis.js.org/v4/tag-plugins/ + 2023-12-26T01:42:16.922Z + weekly + 0.8 + + + + + + https://volantis.js.org/v4/theme-settings/ + 2023-12-26T01:42:16.922Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/frame/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/gallery/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/ghcard/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/image/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/inlineimage/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/link/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/issues/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/note/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/noteblock/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/p/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/radio/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/site/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/tab/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/span/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/text/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/timeline/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/video/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/comments/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/configuration/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/cover/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/footer/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/layout/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/navbar/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/plugins/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/search/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/sidebar/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/theme-settings/style/ + 2023-12-26T01:42:16.918Z + weekly + 0.8 + + + + + + https://volantis.js.org/advanced-settings/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/contributors/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/examples/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/faqs/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/getting-started/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/blog/categories/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/blog/tags/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/page-settings/body/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/page-settings/front-matter/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/page-settings/layout/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/page-settings/math/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/site-settings/configuration/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/aplayer/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/audio/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/button/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/checkbox/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/folding/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + + https://volantis.js.org/tag-plugins/dropmenu/ + 2023-12-26T01:42:16.914Z + weekly + 0.8 + + + + + diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000000..9e11e1818a --- /dev/null +++ b/page/2/index.html @@ -0,0 +1 @@ +Volantis

      Lorem ipsum dolor sit amet

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Demo

      Lorem ipsum dolor sit amet

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Demo

      Lorem ipsum dolor sit amet

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Demo

      Lorem ipsum dolor sit amet

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Demo

      Lorem ipsum dolor sit amet

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quasi quo, tempora ipsa excepturi culpa quis possimus nisi, sed at hic assumenda. Quaerat possimus voluptas veritatis laboriosam minus inventore tempore similique!

      Demo

      由于主题目前仍处于青少年阶段,更新迭代速度比较快,所以不会保留旧版本的文档,如果需要查看旧版本的文档,请下载主题文档的源码,回退到旧版本,本地运行查看。

      • 计划 2.x 的最后一个版本的文档会保留至 5.0 发布时,即最终会同时维护3个大版本的文档。
      • 当主题稳定后会提供英文文档。

      本次更新内容非常多,主要升级了导航栏、使用新的语言重写了全部样式。旧版本 Volantis 用户,请您卸载掉旧的样式渲染插件,并安装新的:

      1. 卸载 less

        npm uninstall hexo-renderer-less --save
      2. 安装 stylus

        npm install hexo-renderer-stylus --save

      Beta6
      • 导航栏N级菜单支持分割线和小标题,详见我的个人博客。

      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。


      \ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000000..864c2404c6 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1 @@ +Volantis

      主题原名「Material X」,最初由「Material-Flow」改编,现已完全没有材质化设计的影子了。风格偏向简约风技术类博客,最大的特点是自由。现更名为「Volantis」,取自权力的游戏地名。

      主题经过几年迭代,现已高度模块化和可定制化,功能相对完善,适合用作文档。原来的 文档主题 将不再维护和更新。

      现在使用的文档页面源码是: volantis-docs

      使用 GitHub Issue

      由于 Valine 匿名评论不适合追踪和解决问题,因此决定暂时关闭评论区。
      为了精准高效解决问题,请前往 GitHub Issue

      遇到问题怎么办

      1. 确定已经查阅文档找不到相关内容。
      2. 前往「常见问题」页面,查看是否有解决方案。
      3. 访问在线示例,查看是否具有相同第问题。
        3.1. 如果在线示例表示正常,则说明自己配置有误,检查开发环境、主题配置是否正确。如果检查不出问题,提Issue询问。
        3.2. 如果在线示例也存在相同问题,则说明存在BUG,请提Issue反馈。
      4. 如果在线示例没有相关内容,下载示例博客源码,修改运行本地预览,进行第3步判断操作。

      主版本号.子版本号.修订版本号

      主题从2017年至今,已经经历了相当多的大版本迭代和数不尽的小版本更新,但是版本号的更新一直没有遵循规范。从下次更新开始,将遵循下述的规范:

      • 主版本号: 较大改动、框架调整或重构
      • 子版本号: 较小或局部的功能性更新
      • 修订版本号: 修复BUG或无关紧要的细节调整

      Make sure all the code blocks highlighted correctly. All the code samples are come from the demo of https://highlightjs.org

      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.

      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.


      \ No newline at end of file diff --git a/page/4/index.html b/page/4/index.html new file mode 100644 index 0000000000..4619dfd2d5 --- /dev/null +++ b/page/4/index.html @@ -0,0 +1 @@ +Volantis

      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.

      David LevithanWide Awake

      Quote from Twitter

      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

      alert('Hello World!');

      With caption

      Array.map
      array.map(callback[, thisArg])

      With caption and URL

      .compactUnderscore.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).

      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.

      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.

      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)

      1. List Item 1
      2. List Item 2
      3. 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 1Table Header 2Table Header 3
      Division 1Division 2Division 3
      Division 1Division 2Division 3
      Division 1Division 2Division 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.


      \ No newline at end of file diff --git a/post-sitemap.xml b/post-sitemap.xml new file mode 100644 index 0000000000..b53a95df80 --- /dev/null +++ b/post-sitemap.xml @@ -0,0 +1,348 @@ + + + + + https://volantis.js.org/ + daily + 1 + + + + + https://volantis.js.org/demo/test-1/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-10/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-11/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-12/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-13/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-14/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-15/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-2/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-3/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-4/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-5/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-6/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-7/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-8/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/demo/test-9/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2017-10-24/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-02-19/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-02-21/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-02-20/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-02-22/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-02-25/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-03-06-2.0-beta/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-03-10-2.0/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/news/2020-04-04/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/2020-03-06-test-url/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/code-highlight/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/elements/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/excerpts/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/gallery-post/ + 2023-12-26T01:42:16.914Z + 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/hello-world/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/link-post-without-title/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/images/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/link-post/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/long-title/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/markdown/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/no-title/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/tag-plugins/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + https://volantis.js.org/test/%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6/ + 2023-12-26T01:42:16.914Z + 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/ + 2023-12-26T01:42:16.914Z + weekly + 0.6 + + + + + diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000000..ef09be2a42 --- /dev/null +++ b/robots.txt @@ -0,0 +1,2 @@ +User-Agent: * +Allow: /sitemap.xml \ No newline at end of file diff --git a/site-settings/configuration/index.html b/site-settings/configuration/index.html new file mode 100644 index 0000000000..e5555d073d --- /dev/null +++ b/site-settings/configuration/index.html @@ -0,0 +1 @@ +Volantis: Modify site configuration file - Volantis

      The _config.yml file in the blog root directory is usually responsible for site-related configuration and third-party npm plugin-related configuration.

      Site title

      blog/_config.yml
      # Site title
      title: my blog

      Website icon

      blog/_config.yml
      # Website icons, more sizes and other icons, please use the import method to batch import
      favicon: https://gcore.jsdelivr.net/gh/xaoxuu/assets@master/favicon/favicon.ico

      Multi-language settings

      blog/_config.yml
      language:
      -zh-CN
      -en
      -zh-HK
      -zh-TW

      Corresponding translation file path: themes/volantis/languages/

      Use Import to import external files

      Volantis users can add various tags to head and body without modifying the theme file. meta and link correspond to the <meta> and <link> tags in the head. script can import js code at the end of body.

      blog/_config.yml
      import:
      meta:
      -<meta name="msapplication-TileColor" content="#ffffff">
      -<meta name="msapplication-config" content="https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon. png">
      -<link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32 .png">
      -<link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16 .png">
      -<link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      -<link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5 ">
      -<link rel="shortcut icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
      script:
      -<script></script>

      More

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000000..21cf366de6 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,16 @@ + + + + + + https://volantis.js.org/post-sitemap.xml + 2023-12-26T01:42:16.914Z + + + + https://volantis.js.org/page-sitemap.xml + 2023-12-26T01:42:16.922Z + + + + diff --git a/sitemap.xsl b/sitemap.xsl new file mode 100644 index 0000000000..a2c4214e5a --- /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. +

      + + + + + + + + + + + + + + + + + + +
      SitemapLast Modified
      + + + + + +
      +
      + +

      + This XML Sitemap contains + URLs. +

      +

      + ↑ Sitemap Index +

      + + + + + + + + + + + + + + + + + + + + + + + +
      URLPrioImagesCh. Freq.Last Mod.
      + + + + + + + + + + + + + + +
      +
      +
      + + + + + +
      +
      diff --git a/start b/start new file mode 100644 index 0000000000..cd31cfb118 --- /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/sw.js b/sw.js new file mode 100644 index 0000000000..2e4931107b --- /dev/null +++ b/sw.js @@ -0,0 +1,2 @@ +importScripts("https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/workbox-sw.js"),workbox.setConfig({modulePathPrefix:"https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.3/workbox/"});const{core:core,precaching:precaching,routing:routing,strategies:strategies,expiration:expiration,cacheableResponse:cacheableResponse,backgroundSync:backgroundSync}=workbox,{CacheFirst:CacheFirst,NetworkFirst:NetworkFirst,NetworkOnly:NetworkOnly,StaleWhileRevalidate:StaleWhileRevalidate}=strategies,{ExpirationPlugin:ExpirationPlugin}=expiration,{CacheableResponsePlugin:CacheableResponsePlugin}=cacheableResponse,cacheSuffixVersion="-000010",maxEntries=100;self.addEventListener("activate",(e=>{e.waitUntil(caches.keys().then((e=>Promise.all(e.map((e=>{if(!e.includes("-000010"))return caches.delete(e)}))))))})),core.setCacheNameDetails({prefix:"volantis",suffix:"-000010"}),core.skipWaiting(),core.clientsClaim(),precaching.cleanupOutdatedCaches(),precaching.precacheAndRoute([{url:"/css/first.css",revision:null},{url:"/css/style.css",revision:null},{url:"/js/app.js",revision:null}]),routing.registerRoute(/.*cdn\.jsdelivr\.net/,new CacheFirst({cacheName:"static-immutable-000010",fetchOptions:{mode:"cors",credentials:"omit"},plugins:[new ExpirationPlugin({maxAgeSeconds:2592e3,purgeOnQuotaError:!0})]})),routing.registerRoute(/.*m7\.music\.126\.net/,new CacheFirst({cacheName:"static-immutable-000010",fetchOptions:{mode:"cors",credentials:"omit"},plugins:[new ExpirationPlugin({maxAgeSeconds:2592e3,purgeOnQuotaError:!0})]})),routing.registerRoute(/.*baidu\.com.*/,new NetworkOnly),routing.registerRoute(/.*\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/,new StaleWhileRevalidate),routing.registerRoute(/.*\.(css|js)/,new StaleWhileRevalidate),routing.registerRoute("/sw.js",new StaleWhileRevalidate),routing.setDefaultHandler(new NetworkFirst({networkTimeoutSeconds:3})); +//# sourceMappingURL=maps/sw.js.map diff --git a/tag-plugins/aplayer/index.html b/tag-plugins/aplayer/index.html new file mode 100644 index 0000000000..e18927732d --- /dev/null +++ b/tag-plugins/aplayer/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      \ No newline at end of file diff --git a/tag-plugins/audio/index.html b/tag-plugins/audio/index.html new file mode 100644 index 0000000000..34ce8d117d --- /dev/null +++ b/tag-plugins/audio/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      \ No newline at end of file diff --git a/tag-plugins/button/index.html b/tag-plugins/button/index.html new file mode 100644 index 0000000000..58484b4b0c --- /dev/null +++ b/tag-plugins/button/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      the label of this page will be refactored soon

      Basic button

      Please upgrade your Volantis to version 2.4 and above.

      {% btn style parameters (optional), title, link, icon (optional) %}

      optional parameters can be omitted

      style parameter

      regular, large, center

      icon

      The one with fa- in the first or second parameter is recognized as an icon.

      inline button

      button without any parameters is suitable to be integrated into the paragraph.

      hollow button

      sample blog sample blog

      sample blog sample blog

      Centered:

      get started

      solid button

      sample blog sample blog

      sample blog sample blog

      Centered:

      get started

      Rich Text Button

      Please upgrade your Volantis to version 2.3 and above.

      {% btns style parameter %}
      {% cell title, link, picture or icon %}
      {% cell title, link, picture or icon %}
      {% endbtns %}

      The style parameter position can write the picture style, layout method, multiple style parameters are separated by spaces.

      rounded corner style

      The default is square

      rounded, circle

      layout method

      The default is automatic width, which is suitable for situations where there is only one or two in the field of view.

      ParametersMeaning
      wideWider buttons
      fillFill the layout, automatically fill at least one line, and will wrap if there is more.
      centerCentered, with fixed spacing between buttons.
      aroundCentered and scattered
      grid2The same width is up to 2 columns, and the narrower screen will reduce the number of columns appropriately.
      grid3The same width is up to 3 columns, and the narrower screen will reduce the number of columns appropriately.
      grid4Up to 4 columns with equal width, narrower screen will reduce the number of columns appropriately.
      grid5The same width is up to 5 columns. The narrower screen will reduce the number of columns appropriately.

      add text style

      You can add <b>title</b> and <p>description text</p> in the container

      If you need to display a group of links containing avatars like "team members":

      Or buttons with icons:

      Circular icon + title + description + picture + grid 5 columns + center

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/checkbox/index.html b/tag-plugins/checkbox/index.html new file mode 100644 index 0000000000..12b2c07ecb --- /dev/null +++ b/tag-plugins/checkbox/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in 2.6 version
      {% checkbox style parameter (optional), text (support simple md) %}

      Demo effect

      plain text test

      supports simple markdown syntax

      support custom color

      green + default selected

      yellow + default selected

      cyan + default selected

      blue + default selected

      increase

      reduce

      cross

      Source code of the above example

      example:
      {% checkbox plain text test %}
      {% checkbox checked, supports simple [markdown](https://guides.github.com/features/mastering-markdown/) syntax %}
      {% checkbox red, support custom color %}
      {% checkbox green checked, green + default selected %}
      {% checkbox yellow checked, yellow + default selected %}
      {% checkbox cyan checked, cyan + default selected %}
      {% checkbox blue checked, blue + default selected %}
      {% checkbox plus green checked, increase %}
      {% checkbox minus yellow checked, reduce %}
      {% checkbox times red checked, cross %}

      Supportable parameters

      colour

      red, yellow, green, cyan, blue

      Style

      plus, minus, times

      Selected state

      checked

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/dropmenu/index.html b/tag-plugins/dropmenu/index.html new file mode 100644 index 0000000000..8907bbbfca --- /dev/null +++ b/tag-plugins/dropmenu/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      the label of this page will be refactored soon

      Please upgrade your Volantis to version 3.0 and above.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/folding/index.html b/tag-plugins/folding/index.html new file mode 100644 index 0000000000..9b4e59c277 --- /dev/null +++ b/tag-plugins/folding/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in version 2.3
      {% folding parameter (optional), title %}
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)
      {% endfolding %}

      Demo effect

      View image test

      view the folding box opened by default

      This is a folding box that is opened by default.

      view code test
      {% folding green, view code test %}

      View code test

      {% endfolding %}
      view list test

      -haha
      -hehe

      view nested tests
      view nested test 2
      View nested test 3

      hahaha

      Source code of the above example

      example:
      {% folding View image test %}

      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)

      {% endfolding %}

      {% folding cyan open, view the folding box opened by default %}

      This is a folding box that opens by default.

      {% endfolding %}

      {% folding green, view code test %}

      {% endfolding %}

      {% folding yellow, view list test %}

      -haha
      -hehe

      {% endfolding %}

      {% folding red, view nested tests %}

      {% folding blue, view nested test 2 %}

      {% folding View nested test 3 %}

      hahaha <span><img src='https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/tieba/%E6%BB%91%E7%A8%BD.png' style='height :24px'></span>

      {% endfolding %}

      {% endfolding %}

      {% endfolding %}

      Supportable parameters

      The color and status can be filled in the parameter position, and multiple parameters are separated by spaces.

      colour

      blue, cyan, green, yellow, red

      Status

      Fill in the status with ʻopen` to represent the default open.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/frame/index.html b/tag-plugins/frame/index.html new file mode 100644 index 0000000000..6a9e120c66 --- /dev/null +++ b/tag-plugins/frame/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      This is a label that can put pictures or videos into the device frame, which can be used to display screenshots and screen recordings more elegantly.

      This plugin was last updated in version 4.0
      {% frame frame name | img=picture link | alt=picture description (optional) | part=top/bottom (optional) %}
      {% frame frame name | video=video link | part=top/bottom (optional) %}

      {% 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 %}

      In this example, both ʻimgandvideo` appear at the same time, then it is a video with a cover, and the video cover will be displayed before the video is loaded.

      Device Framework

      Currently supported are:

      iphone11

      If you have the following other equipment frame diagrams (svg), welcome PR compatibility.

      android, ipad, macbook, watch

      Tailoring

      Set part=top or part=bottom to display the upper or lower part, otherwise the complete frame and the pictures/videos in it will be displayed.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/gallery/index.html b/tag-plugins/gallery/index.html new file mode 100644 index 0000000000..cd9f5906b6 --- /dev/null +++ b/tag-plugins/gallery/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      The Gallery tag is a tag for a set of picture application scenarios.

      This plugin was last updated in version 3.0
      {% gallery parameter, number of columns %}
      ![Picture description](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)
      {% endgallery %}

      Demo effect

      One picture per line

      Multiple pictures in one line (no line break)

      Multiple lines and multiple pictures (2-8 pictures per line)

      Source code of the above example

      One picture per line

      example.md:
      {% gallery %}
      ![Picture description](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)
      {% endgallery %}

      Multiple pictures in one line (no line break)

      example.md:
      {% gallery %}
      ![Picture description](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)
      ![Picture description](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)
      ![Picture description](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg)
      {% endgallery %}

      Multiple lines and multiple pictures (2-8 pictures per line)

      example.md:
      {% gallery stretch, 4 %}
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)
      {% endgallery %}

      Supportable parameters

      Alignment direction

      left, center, right

      Zoom

      stretch

      Number of columns

      Write the number of columns directly after the comma, and support 2 to 8 columns. After setting the number of columns, it is the "multi-line and multi-image" layout. At this time, the image is aligned to the left by default. In order to avoid different sizes of pictures, it is recommended to use stretch to enlarge and fill the pictures.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/ghcard/index.html b/tag-plugins/ghcard/index.html new file mode 100644 index 0000000000..85dceaeb79 --- /dev/null +++ b/tag-plugins/ghcard/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in version 4.0
      {% ghcard username, other parameters (optional) %}
      {% ghcard username/warehouse, other parameters (optional) %}

      User Information Card

      The source code of the above example:

      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 %} |

      Warehouse Information Card

      The source code of the above example:

      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 %} |

      More parameter options

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/image/index.html b/tag-plugins/image/index.html new file mode 100644 index 0000000000..998d978a10 --- /dev/null +++ b/tag-plugins/image/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      The Image tag is a tag for a single picture application scenario, supporting picture description text and specified width.

      This plugin was last updated in version 4.0
      {% image link, width=width (optional), height=height (optional), alt=description (optional), bg=placeholder color (optional) %}

      Demo effect

      Add description:

      The way back to the dormitory after class every day
      The way back to the dormitory after class every day

      Specify width:

      image

      Specify the width and add a description:

      The way back to the dormitory after class every day
      The way back to the dormitory after class every day

      Set the background color of the placeholder:

      Optimize the look and feel of browsing in different widths
      Optimize the look and feel of browsing in different widths

      Source code of the above example

      example:
      Add description:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, alt=The way back to the dormitory after class every day, there is no story. %}

      Specify width:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px %}

      Specify the width and add a description:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, alt=The way back to the dormitory after class every day, there is no story. %}

      Set the placeholder background color:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, bg=#1D0C04, alt=Optimize the look and feel of browsing with different widths %}

      Supportable parameters

      Picture width and height

      example:
      width=300px, height=32px

      image description

      example:
      alt=picture description

      Placeholder background color

      example:
      bg=#f2f2f2

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/index.html b/tag-plugins/index.html new file mode 100644 index 0000000000..e0c6005b58 --- /dev/null +++ b/tag-plugins/index.html @@ -0,0 +1 @@ +Volantis: Built-in tag plugin - Volantis

      Volantis dedicated label

      Text class

      Container Class

      Multimedia

      Data collection class

      Hexo General Tags

      Use <!-- more --> in the article, then the text before <!-- more --> will be regarded as an abstract. Only this part of the text will appear on the homepage, and it will also appear in the main text. For details, see Hexo official documentation:

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/inlineimage/index.html b/tag-plugins/inlineimage/index.html new file mode 100644 index 0000000000..63484a0dd9 --- /dev/null +++ b/tag-plugins/inlineimage/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      Inlineimage tag is a kind of inline image tag, which can be used to insert emoticons in the middle of a paragraph.

      This plugin was last updated in version 4.0
      {% inlineimage image link, height=height (optional) %}

      Demo effect

      This is a passage from .

      This is another paragraph of .

      Source code of the above example

      example:
      This is a passage from {% inlineimage https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %}.

      This is another paragraph of {% inlineimage https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %}.

      Supportable parameters

      Height

      height=20px

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/issues/index.html b/tag-plugins/issues/index.html new file mode 100644 index 0000000000..93f9caaab2 --- /dev/null +++ b/tag-plugins/issues/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in version 4.0
      {% issues type | api=url | group=key:value1,value2(optional) %}

      Types of

      According to different requirements, the content of issues will be parsed into different HTML tags. The currently supported types are:

      -timeline: parsed into timeline tags, the title of the issue corresponds to the time of the timeline, and the content of the issue corresponds to the content of the timeline.
      -sites: parsed into sites tag, need JSON code block:

      {
      "title": "",
      "screenshot": "",
      "url": "",
      "avatar": "",
      "description": "",
      "keywords": ""
      }

      API

      Pass a URL that can be transferred, for example:

      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

      Group

      The issues of the site type are not grouped by default. If you need to group, you can specify the grouping basis "key", and the grouping whitelist "value1" "value2", etc., for example:

      group=version:v4,v3,v2

      The function of this parameter is to filter out the data that contains "version": "v4" or "version": "v3" or "version": "v2" in JSON and display them in groups.

      Example

      timeline

      {% 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 %}

      Corresponding warehouse link:

      Friends chain

      {% 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 %}

      The labels=active parameter in the above example can control the default issue not to be displayed, and it will only be displayed after the ʻactive` label is added after the self-review. The warehouse link corresponding to the above example:

      Group

      This is the data of the "Sample Blog" page of the theme's official website:

      {% 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 %}

      The warehouse link corresponding to the above example:

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/link/index.html b/tag-plugins/link/index.html new file mode 100644 index 0000000000..72f1804e35 --- /dev/null +++ b/tag-plugins/link/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      \ No newline at end of file diff --git a/tag-plugins/note/index.html b/tag-plugins/note/index.html new file mode 100644 index 0000000000..4af44431b0 --- /dev/null +++ b/tag-plugins/note/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      NoteBlock is an enhanced version of Blockquote, with icons displayed on the left and colors can be customized. Note is a simple way of writing NoteBlock.

      was last updated in version 2.3
      {% note style parameter, text content %}

      Demo effect

      Classic usage

      you can set the default style in the configuration file to provide the most convenient way to write a simple sentence.

      note quote is suitable for quoting a paragraph

      note info default theme color

      note warning default yellow

      note error/danger default red

      note done/success default green

      More icons

      These are the default styles, you can add colors manually:

      note radiation default style

      note radiation yellow can add color

      note bug red indicate some failures that still exist

      note paperclip blue place some attachment links

      note todo to-do items

      note guide clear can add a section of guide

      note download can place download link

      note message gray A piece of message

      note up can explain how to update

      note undo light can explain how to cancel or roll back

      Source code of the above example

      example:
      ### Classic usage

      {% note, you can set the default style in the configuration file to provide the most convenient way to write a simple sentence. %}
      {% note quote, note quote is suitable for quoting a paragraph %}
      {% note info, note info default theme color, suitable for neutral information %}
      {% note warning, note warning default yellow, suitable for warning information %}
      {% note danger, note error/danger default red, suitable for dangerous information %}
      {% note success, note done/success default green, information suitable for correct operation %}

      ### More icons

      These are the default styles, you can add colors manually:

      {% note radiation, note radiation default style %}
      {% note radiation yellow, note radiation yellow can add color %}
      {% note bug red, note bug red indicate some failures that still exist %}
      {% note link green, note link green can place some links %}
      {% note paperclip blue, note paperclip blue place some attachment links %}
      {% note todo, note todo todo %}
      {% note guide clear, note guide clear can add a section of guide %}
      {% note download, note download can place download link %}
      {% note message gray, note message gray A piece of message %}
      {% note up, note up can explain how to update %}
      {% note undo light, note undo light can explain how to cancel or roll back %}

      Supportable parameters

      The position of style parameters can be written with icons and colors. Multiple style parameters are separated by spaces.

      icon

      color
      quote, info, warning, done/success, error/danger
      gray, color can also be specified
      radiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo

      colour

      specify color
      clear, light, gray, red, yellow, green, cyan, blue

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/noteblock/index.html b/tag-plugins/noteblock/index.html new file mode 100644 index 0000000000..14eb96ca19 --- /dev/null +++ b/tag-plugins/noteblock/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      NoteBlock is an enhanced version of Blockquote, with icons displayed on the left and colors can be customized. Note is a simple way of writing NoteBlock.

      was last updated in version 4.0
      {% noteblock style parameter (optional), title (optional) %}
      Text paragraph
      {% endnoteblock %}

      Demo effect

      Some complicated structures can be placed in the block, and nesting is supported.

      title (optional)

      Windows 10 is not designed for everyone, but for everyone

      Nested test: Please sit down and relax, I'm doing everything for you...

      Folding test: Click to see more

      don't say we haven't warned you

      We all have troubles

      Source code of the above example

      example:
      {% noteblock, title (optional) %}

      Windows 10 is not designed for everyone, but for everyone

      {% noteblock done %}
      Nested test: Please sit down and relax, I'm helping you with everything...
      {% endnoteblock %}

      {% folding yellow, Folding test: click to see more %}

      {% note warning, don't say we haven't warned you %}
      {% noteblock bug red %}
      We all have troubles
      {% endnoteblock %}

      {% endfolding %}
      {% endnoteblock %}

      Supportable parameters

      The position of style parameters can be written with icons and colors. Multiple style parameters are separated by spaces.

      icon

      color
      quote, info, warning, done/success, error/danger
      gray, color can also be specified
      radiation, bug, idea, link, paperclip, todo, message, guide, download, up, undo

      colour

      specify color
      clear, light, gray, red, yellow, green, cyan, blue

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/p/index.html b/tag-plugins/p/index.html new file mode 100644 index 0000000000..dacbc11613 --- /dev/null +++ b/tag-plugins/p/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      This plugin was last updated in version 2.5
      {% p style parameter, text content %}

      Demo effect

      Colored text

      It is convenient to insert labels of various colors in a paragraph, including:

      red

      ,

      yellow

      ,

      green

      ,

      cyan

      ,

      blue

      ,

      gray

      .

      Oversized text

      The title part of the document "start" page is oversized text.

      A Wonderful Theme for Hexo

      Source code of the above example

      example:
      ### Colored text

      It is convenient to insert labels of various colors in a paragraph, including: {% p red, red%}, {% p yellow, yellow%}, {% p green, green%}, {% p cyan, cyan%}, {% p blue, blue%}, {% p gray, gray%}.

      ### Oversized text

      The title part of the document "start" page is oversized text.

      {% p center logo large, Volantis %}
      {% p center small, A Wonderful Theme for Hexo %}

      Supportable parameters

      The style parameter position can write color, size, and alignment direction, and multiple style parameters are separated by spaces.

      Font

      logo, code

      colour

      red, yellow, green, cyan, blue, gray

      Size

      small, h4, h3, h2, h1, large, huge, ultra

      Alignment direction

      left, center, right

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/radio/index.html b/tag-plugins/radio/index.html new file mode 100644 index 0000000000..ec14e4d8a5 --- /dev/null +++ b/tag-plugins/radio/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in 2.6 version
      {% checkbox style parameter (optional), text (support simple md) %}

      Demo effect

      plain text test

      supports simple markdown syntax

      support custom color

      green

      yellow

      cyan

      blue

      Source code of the above example

      example:
      {% radio plain text test %}
      {% radio checked, supports simple [markdown](https://guides.github.com/features/mastering-markdown/) syntax %}
      {% radio red, support custom color %}
      {% radio green, green %}
      {% radio yellow, yellow %}
      {% radio cyan, cyan %}
      {% radio blue, blue %}

      Supportable parameters

      colour

      red, yellow, green, cyan, blue

      Selected state

      checked

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/site/index.html b/tag-plugins/site/index.html new file mode 100644 index 0000000000..d3c9bd7e3a --- /dev/null +++ b/tag-plugins/site/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in version 4.0
      {% sitegroup %}
      {% site title, url=link, screenshot=screenshot link, avatar=avatar link (optional), description=description (optional) %}
      {% site title, url=link, screenshot=screenshot link, avatar=avatar link (optional), description=description (optional) %}
      {% endsitegroup %}

      Demo effect

      {% sitegroup %}
      {% site xaoxuu, url=https://xaoxuu.com, screenshot=https://i.loli.net/2020/08/21/VuSwWZ1xAeUHEBC.jpg, avatar=https://gcore.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://gcore.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://gcore.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://gcore.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 %}

      Source code of the above example

      example:
      {% sitegroup %}
      {% site xaoxuu, url=https://xaoxuu.com, screenshot=https://i.loli.net/2020/08/21/VuSwWZ1xAeUHEBC.jpg, avatar=https://gcore.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://gcore.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://gcore.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://gcore.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 %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/span/index.html b/tag-plugins/span/index.html new file mode 100644 index 0000000000..2168b3f6f5 --- /dev/null +++ b/tag-plugins/span/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      This plugin was last updated in version 2.5
      {% span style parameter, text content %}

      Demo effect

      Colored text

      It is convenient to insert tags of various colors in a paragraph, including: red, yellow, green, cyan, blue, gray.

      Oversized text

      The title part of the document "start" page is oversized text.

      A Wonderful Theme for Hexo

      Source code of the above example

      example:
      ### Colored text

      It is convenient to insert tags of various colors in a paragraph, including: {% span red, red%}, {% span yellow, yellow%}, {% span green, green%}, {% span cyan, cyan%}, {% span blue, blue%}, {% span gray, gray%}.

      ### Oversized text

      The title part of the document "start" page is oversized text.

      {% span center logo large, Volantis %}
      {% span center small, A Wonderful Theme for Hexo %}

      Supportable parameters

      The style parameter position can write color, size and alignment direction, and multiple style parameters are separated by spaces.

      Font

      logo, code

      colour

      red, yellow, green, cyan, blue, gray

      Size

      small, h4, h3, h2, h1, large, huge, ultra

      Alignment direction

      left, center, right

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/tab/index.html b/tag-plugins/tab/index.html new file mode 100644 index 0000000000..143ec94022 --- /dev/null +++ b/tag-plugins/tab/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      This plugin is ported from NexT #tabs

      was last updated to version 2.1
      {% tabs unique ID in the page %}
      <!-- tab column 1 -->
      content
      <!-- endtab -->
      <!-- tab column 2 -->
      content
      <!-- endtab -->
      {% endtabs %}

      Demo effect

      Source code of the above example

      example:
      {% tabs tab-id %}

      <!-- tab column 1 -->

      . . .

      <!-- endtab -->

      <!-- tab column 2 -->

      ! ! !

      <!-- endtab -->

      {% endtabs %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/text/index.html b/tag-plugins/text/index.html new file mode 100644 index 0000000000..d4504706b5 --- /dev/null +++ b/tag-plugins/text/index.html @@ -0,0 +1 @@ +Volantis: - Volantis

      Here are some text style tags:


      Text with underline

      example.md:
      Text with {% u underline %}

      Text withemphasis

      example.md:
      Text with {% emp emphasis %}

      Text with

      example.md:
      Text with {% wavy %}

      Text with strikethrough

      example.md:
      Text with {% del strikethrough %}

      Keyboard style text command + D

      example.md:
      Keyboard style text {% kbd command %} + {% kbd D %}

      Password style text:There is no verification code here

      example.md:
      Password style text: {% psw There is no verification code here %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/timeline/index.html b/tag-plugins/timeline/index.html new file mode 100644 index 0000000000..ae7c8a78ee --- /dev/null +++ b/tag-plugins/timeline/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      was last updated in version 3.0
      {% timeline title (optional) %}

      {% timenode time node (title) %}

      Text content

      {% endtimenode %}

      {% timenode time node (title) %}

      Text content

      {% endtimenode %}

      {% endtimeline %}

      Demo effect

      2020-07-24 2.6.6 -> 3.0

      1. If there is a hexo-lazyload-image plugin, you need to delete and reinstall the latest version, set lazyload.isSPA: true.
      2. The 2.x version of css and js are not applicable to the 3.x version. If you use ʻuse_cdn: true`, you need to delete them.
      3. The fancybox tag of the 2.x version was renamed to gallery in the 3.x version.
      4. In the 2.x version, the top top: true is changed to pin: true, and it is also applicable to the page of layout: page.
      5. If you use the hexo-offline plug-in, it is recommended to uninstall it. The pjax service is enabled by default in version 3.0.

      2020-05-15 2.6.3 -> 2.6.6

      No additional processing is required.

      2020-04-20 2.6.2 -> 2.6.3

      1. Search globally for seotitle and replace with seo_title.
      2. The index rule of the group component has changed. In the article using the group component, the component name corresponding to group: group_name must be group_name.
      3. The list name of the group component first displays the article's short_title followed by title.

      Source code of the above example

      example:
      {% timeline %}

      {% timenode 2020-07-24 [2.6.6 -> 3.0](https://github.com/volantis-x/hexo-theme-volantis/releases) %}

      1. If there is a `hexo-lazyload-image` plugin, you need to delete and reinstall the latest version, set `lazyload.isSPA: true`.
      2. The 2.x version of css and js are not applicable to the 3.x version. If you use ʻuse_cdn: true`, you need to delete them.
      3. The 2.x version of the fancybox label was renamed to gallery in the 3.x version.
      4. In the 2.x version, the top `top: true` is changed to `pin: true`, and it is also applicable to the page of `layout: page`.
      5. If the `hexo-offline` plug-in is used, it is recommended to uninstall it. The pjax service is enabled by default in version 3.0.

      {% endtimenode %}

      {% timenode 2020-05-15 [2.6.3 -> 2.6.6](https://github.com/volantis-x/hexo-theme-volantis/releases/tag/2.6.6) %}

      No additional processing is required.

      {% 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. Search globally for `seotitle` and replace with `seo_title`.
      2. The indexing rules of the group component have changed. In articles using the group component, the component name corresponding to `group: group_name` must be `group_name`.
      2. The list name of the group component first displays the `short_title` of the article followed by `title`.

      {% endtimenode %}

      {% endtimeline %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tag-plugins/video/index.html b/tag-plugins/video/index.html new file mode 100644 index 0000000000..76eda8ebeb --- /dev/null +++ b/tag-plugins/video/index.html @@ -0,0 +1 @@ +Volantis: - Volantis
      This plugin was last updated in version 2.3
      {% video video link %}

      Demo effect

      100% width

      50% width

      25% width

      Source code of the above example

      100% width

      example.md:
      {% video https://github.com/volantis-x/volantis-docs/releases/download/assets/IMG_0341.mov %}

      50% width

      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% width

      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 %}

      Supportable parameters

      Alignment direction

      left, center, right

      Number of columns

      Write the number of columns directly after the comma, and support 1 to 4 columns.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/tags/bar/index.html b/tags/bar/index.html new file mode 100644 index 0000000000..c378df318c --- /dev/null +++ b/tags/bar/index.html @@ -0,0 +1 @@ +Tag: Bar - 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.

      \ No newline at end of file diff --git a/tags/foo/index.html b/tags/foo/index.html new file mode 100644 index 0000000000..d4c9cb567b --- /dev/null +++ b/tags/foo/index.html @@ -0,0 +1 @@ +Tag: Foo - 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.

      \ No newline at end of file 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 0000000000..2ff8481c75 --- /dev/null +++ b/test/2020-03-06-test-url/index.html @@ -0,0 +1 @@ +测试「文章内链接作文本的话无法生成静态文件」 - Volantis

      5、测试Tomcat是否配置成功:打开浏览器,输入在地址栏中输入: http://localhost:8080 的运行结果如下图即为即为配置成功!(因为Tomcat已经在运行再次打开会报错)

      相关 Issue: #164

      结论:存在这篇文章的情况下能够成功 deploy ,说明这不是主题的 BUG。

      markdwon 解析插件为 hexo-renderer-marked 时此插件默认会自动识别 URL ,且原文链接前后没有空格,所以链接前后增加一个空格或者在根目录配置文件中设置 autolink: false 都可以避免 deploy 报错。
      插件:hexo-renderer-marked

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/code-highlight/index.html b/test/code-highlight/index.html new file mode 100644 index 0000000000..ce46597ae4 --- /dev/null +++ b/test/code-highlight/index.html @@ -0,0 +1 @@ +Code Highlight Style test - Volantis

      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_authorization
      def somefunc(param1='', param2=0):
      r'''A docstring'''
      if param1 > param2: # interesting
      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>
      <!-- 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");

      -- Initials
      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
      // 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 class
      class Greeter
      def initialize(name)
      @name = name.capitalize
      end

      def salute
      puts "Hello #{@name}!"
      end
      end

      g = Greeter.new("world")
      g.salute
      # Makefile

      BUILDDIR = _build
      EXTRAS ?= $(BUILDDIR)/extras

      .PHONY: main clean

      main:
      @echo "Building main facility..."
      build_main $(BUILDDIR)

      clean:
      rm -rf $(BUILDDIR)/*
      package main

      import "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

      ###### CONFIG
      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 :"
      }
      ; boilerplate
      [package]
      name = "some_name"
      authors = ["Author"]
      description = "This is \
      a description"

      [[lib]]
      name = ${NAME}
      default = True
      auto = no
      counter = 1_000

      长文本测试

      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }
      #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;
      }

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/elements/index.html b/test/elements/index.html new file mode 100644 index 0000000000..4ae7029ddd --- /dev/null +++ b/test/elements/index.html @@ -0,0 +1 @@ +Elements - Volantis

      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)

      1. List Item 1
      2. List Item 2
      3. 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 1Table Header 2Table Header 3
      Division 1Division 2Division 3
      Division 1Division 2Division 3
      Division 1Division 2Division 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.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/excerpts/index.html b/test/excerpts/index.html new file mode 100644 index 0000000000..860224a767 --- /dev/null +++ b/test/excerpts/index.html @@ -0,0 +1 @@ +Excerpts - Volantis

      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.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/gallery-post/index.html b/test/gallery-post/index.html new file mode 100644 index 0000000000..18011335d6 --- /dev/null +++ b/test/gallery-post/index.html @@ -0,0 +1 @@ +Gallery Post - Volantis

      This post contains 4 photos:

      • Widescreen wallpaper
      • Portrait photo
      • Dual widescreen wallpaper
      • Small photo

      All photos should be displayed properly.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/hello-world/index.html b/test/hello-world/index.html new file mode 100644 index 0000000000..cc47a5dd2f --- /dev/null +++ b/test/hello-world/index.html @@ -0,0 +1 @@ +Hello World - Volantis

      Welcome to Hexo! This is your very first post. Check documentation to learn how to use.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/images/index.html b/test/images/index.html new file mode 100644 index 0000000000..5959f57795 --- /dev/null +++ b/test/images/index.html @@ -0,0 +1 @@ +Images - Volantis

      This is a image test post.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/link-post-without-title/index.html b/test/link-post-without-title/index.html new file mode 100644 index 0000000000..13e2651684 --- /dev/null +++ b/test/link-post-without-title/index.html @@ -0,0 +1 @@ +Volantis

      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.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/link-post/index.html b/test/link-post/index.html new file mode 100644 index 0000000000..10ce61c2c9 --- /dev/null +++ b/test/link-post/index.html @@ -0,0 +1 @@ +Link Post - Volantis

      This is a link post. Clicking on the link should open Google in a new tab or window.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/long-title/index.html b/test/long-title/index.html new file mode 100644 index 0000000000..2b773dd90f --- /dev/null +++ b/test/long-title/index.html @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam justo turpis, tincidunt ac convallis id. - Volantis

      This post has a long title. Make sure the title displayed right.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/markdown/index.html b/test/markdown/index.html new file mode 100644 index 0000000000..b58cbf109e --- /dev/null +++ b/test/markdown/index.html @@ -0,0 +1,3 @@ +Markdown Style test - 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.


      Headers

      # 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 item
      2. Another item
      * Unordered sub-list.
      1. Actual numbers don't matter, just that it's a number
      1. Ordered sub-list
      4. 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.
      1. First ordered list item
      2. Another item
      • Unordered sub-list.
      1. Actual numbers don't matter, just that it's a number

      2. Ordered sub-list

      3. 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>
      +
      [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://gcore.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:

      alt text

      Reference-style:
      alt text

      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|
      ASCIIHTML
      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 |
      TablesAreCool
      col 3 isright-aligned
      col 2 iscentered
      zebra stripesare 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
      MarkdownLessPretty
      Stillrendersnicely
      123

      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.

      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)

      IMAGE ALT TEXT HERE

      Pure markdown version:

      IMAGE ALT TEXT HERE

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/no-title/index.html b/test/no-title/index.html new file mode 100644 index 0000000000..22f5ad7385 --- /dev/null +++ b/test/no-title/index.html @@ -0,0 +1 @@ +Volantis

      This post doesn't have a title. Make sure it's accessible.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/test/tag-plugins/index.html b/test/tag-plugins/index.html new file mode 100644 index 0000000000..83599d1ff7 --- /dev/null +++ b/test/tag-plugins/index.html @@ -0,0 +1 @@ +Tag Plugins - Volantis

      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.

      David LevithanWide Awake

      Quote from Twitter

      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

      alert('Hello World!');

      With caption

      Array.map
      array.map(callback[, thisArg])

      With caption and URL

      .compactUnderscore.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).

      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.

      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.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file 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 0000000000..e691d49c01 --- /dev/null +++ "b/test/\344\270\255\346\226\207\346\270\254\350\251\246/index.html" @@ -0,0 +1 @@ +中文測試 - Volantis

      This is a Chinese test post.

      善我王上魚、產生資西員合兒臉趣論。畫衣生這著爸毛親可時,安程幾?合學作。觀經而作建。都非子作這!法如言子你關!手師也。

      以也座論頭室業放。要車時地變此親不老高小是統習直麼調未,行年香一?

      就竟在,是我童示讓利分和異種百路關母信過明驗有個歷洋中前合著區亮風值新底車有正結,進快保的行戰從:弟除文辦條國備當來際年每小腳識世可的的外的廣下歌洲保輪市果底天影;全氣具些回童但倒影發狀在示,數上學大法很,如要我……月品大供這起服滿老?應學傳者國:山式排只不之然清同關;細車是!停屋常間又,資畫領生,相們制在?公別的人寫教資夠。資再我我!只臉夫藝量不路政吃息緊回力之;兒足灣電空時局我怎初安。意今一子區首者微陸現際安除發連由子由而走學體區園我車當會,經時取頭,嚴了新科同?很夫營動通打,出和導一樂,查旅他。坐是收外子發物北看蘭戰坐車身做可來。道就學務。

      國新故。

      工步他始能詩的,裝進分星海演意學值例道……於財型目古香亮自和這乎?化經溫詩。只賽嚴大一主價世哥受的沒有中年即病行金拉麼河。主小路了種就小為廣不?

      From 亂數假文產生器 - Chinese Lorem Ipsum

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file 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 0000000000..a539bfe22c --- /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 @@ +日本語テスト - Volantis

      This is a Japanese test post.

      私は昨日ついにその助力家というのの上よりするたなけれ。

      最も今をお話団はちょうどこの前後なかろでくらいに困りがいるたをは帰着考えたなかって、そうにもするでうたらない。

      がたを知っないはずも同時に九月をいよいよたありた。

      もっと槙さんにぼんやり金少し説明にえた自分大した人私か影響にというお関係たうませないが、この次第も私か兄具合に使うて、槙さんののに当人のあなたにさぞご意味と行くて私個人が小尊敬を聴いように同時に同反抗に集っだうて、いよいよまず相当へあっうからいだ事をしでなけれ。

      それでそれでもご時日をしはずはたったいやと突き抜けるますて、その元がは行ったてという獄を尽すていけですた。

      この中道具の日その学校はあなたごろがすまなりかとネルソンさんの考えるですん、辺の事実ないというご盲従ありたですと、爺さんのためが薬缶が結果までの箸の当時してならて、多少の十月にためからそういう上からとにかくしましないと触れべきものたで、ないうですと多少お人達したのでたた。

      From すぐ使えるダミーテキスト - 日本語 Lorem ipsum

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/comments/index.html b/theme-settings/comments/index.html new file mode 100644 index 0000000000..83c9ccb33c --- /dev/null +++ b/theme-settings/comments/index.html @@ -0,0 +1 @@ +Volantis: Select comment system - Volantis

      The currently supported comment systems are: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover

      blog/_config.volantis.yml
      comments:
      title: <i class='fas fa-comments'></i> Comments
      subtitle:
      service: valine # valine, minivaline, disqus, gitalk, vssue, livere, isso, hashover

      A fast, concise and efficient no back-end comment system
      https://valine.js.org

      blog/_config.volantis.yml
      comments:
      ...
      service: valine
      ...
      valine:
      appId: # your appId
      appKey: # your appKey
      js: https://unpkg.com/valine@1.4/dist/Valine.min.js
      ... See the source code for optional configuration items

      Among them, placeholder supports setting in front-matter.

      front-matter
      ---
      valine:
      placeholder: What do you think of xxx?
      ---

      You can also share a comment box for multiple pages by setting valine.path.

      front-matter
      ---
      valine:
      path: /wiki/volantis/
      ---

      A fast, concise and efficient no back-end comment system
      https://github.com/MiniValine/MiniValine/

      blog/_config.volantis.yml
      comments:
      ...
      service: minivaline
      ...
      minivaline:
      appId: # Your leancloud application appid
      appKey: # Your leancloud application appkey
      ... See source code for optional configuration items

      Vue-driven, Issue-based comment plugin
      https://vssue.js.org/zh/

      blog/_config.volantis.yml
      comments:
      ...
      service: vssue
      ...
      vssue:
      owner:
      repo:
      clientId:
      clientSecret:

      A modern comment component based on Github Issue and Preact.
      https://gitalk.github.io/

      blog/_config.volantis.yml
      comments:
      ...
      service: gitalk
      ...
      gitalk:
      clientID:
      clientSecret:
      repo:
      owner:
      admin: # []

      The method of obtaining clientID and clientSecret can be searched for the tutorial by yourself, here is only a brief description of the steps:

      1. Click GitHub -> Settings https://github.com/settings/profile
      2. Click Developer settings https://github.com/settings/developers
      3. Click New OAuth App https://github.com/settings/applications/new
      4. Fill in the information:
        Application name Fill in whatever you want, mine is: xaoxuu.com
        Homepage URL and Authorization callback URL both write your URL, mine is: https://xaoxuu.com

      **You can share a comment box on multiple pages by setting 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.yml
      comments:
      ...
      service: disqus
      ...
      disqus:
      shortname:

      Communication makes better world.
      https://www.livere.com/

      blog/_config.volantis.yml
      comments:
      ...
      service: livere
      ...
      livere:
      uid: #Your livere's uid

      Check your uid here: https://livere.com/insight/myCode, find the following code in [Code Management -> General Website], where the content in data-uid is yours livere_uid.

      <!-- Labilee City version installation code -->
      <div id="lv-container" data-id="city" data-uid="Your livere’s uid">
      ...

      A commenting server similar to Disqus.
      https://posativ.org/isso/

      blog/_config.volantis.yml
      comments:
      ...
      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.yml
      comments:
      ...
      service: hashover
      ...
      hashover:
      src: https://example.com/[path/)comments.php
      blog/themes/volantis/layout/_third-party/comments/comment system name/layout.ejs
      Write layout code here
      blog/themes/volantis/layout/_third-party/comments/comment system name/script.ejs
      Here to write the code to load js

      contains more comment systems

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/configuration/index.html b/theme-settings/configuration/index.html new file mode 100644 index 0000000000..718450c7be --- /dev/null +++ b/theme-settings/configuration/index.html @@ -0,0 +1 @@ +Volantis: Create a theme configuration file - Volantis

      The _config.yml file in the theme directory is usually responsible for theme-related configuration. We strongly recommend that you use a replacement theme configuration file to prevent your configuration from being lost. So how to use instead of theme configuration files?

      Step 1/2: Create configuration file

      Create a new file next to the _config.yml file in the blog root directory: _config.volantis.yml, the configuration information in this file has priority over the configuration files in the theme folder.

      Step 2/2: Overwrite custom configuration

      When you need to modify something, such as the navigation bar menu, then you need to find the relevant content in the theme configuration file and copy it into the configuration file you created:

      blog/_config.volantis.yml
      navbar:
      visiable: auto # always, auto
      logo: # choose [img] or [icon + title]
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/Logo-NavBar@3x.png
      icon:
      title:
      menu:
      -name: blog
      icon: fas fa-rss
      url: /

      hint
      For themes installed using "npm i hexo-theme-volantis", the theme configuration file is in "blog/node_modules/hexo-theme-volantis/_config.yml"
      The theme installed in the traditional way, the theme configuration file is in "blog/themes/volantis/_config.yml"

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/cover/index.html b/theme-settings/cover/index.html new file mode 100644 index 0000000000..81f168bcf7 --- /dev/null +++ b/theme-settings/cover/index.html @@ -0,0 +1 @@ +Volantis: website and article cover - Volantis

      Cover height

      blog/_config.volantis.yml
      cover:
      height_scheme: full # full, half
      ...

      Currently the theme provides two home page cover height schemes, and other pages are half screen height.

      Cover layout scheme

      blog/_config.volantis.yml
      cover:
      ...
      scheme: dock # search (search), dock (dock), featured (selected), focus (focus)
      ...
      Layout planSuitable for scene
      searchFocus on search
      dockMore entry options
      featuredThere are about 4 options
      focusThere are about 4 options

      Default display settings

      blog/_config.volantis.yml
      cover:
      ...
      display:
      home: true
      archive: false
      others: false # can be written in front-matter'cover: true'

      Since the homepage and archive are automatically generated by hexo, you need to set whether to display the cover in the theme configuration file, while other pages can be set in front-matter by setting cover: true/false to determine whether to display the cover or not Cover.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/footer/index.html b/theme-settings/footer/index.html new file mode 100644 index 0000000000..7854fbab2d --- /dev/null +++ b/theme-settings/footer/index.html @@ -0,0 +1 @@ +Volantis: Set website footer - Volantis

      Through layout, you can freely lay out the content of website footer ʻaplayer, social, license, ʻinfo, copyright.

      blog/_config.volantis.yml
      site_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>'

      Among them, ʻaplayer` needs to be enabled in the plugin settings. You can add text attributes to display other text information, for example:

      blog/_config.volantis.yml
      site_footer:
      layout: [..., br, hello, ...]
      ...
      # You can add your own property here. (Support markdown, for example: br:'<br>')
      br:'<br>'
      hello:'[Hello World](/)'

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/layout/index.html b/theme-settings/layout/index.html new file mode 100644 index 0000000000..60ada68f80 --- /dev/null +++ b/theme-settings/layout/index.html @@ -0,0 +1 @@ +Volantis: Article layout configuration - Volantis
      # Article layout
      article:
      # Article card layout scheme of the article list page
      preview:
      scheme: landscape # landscape
      # pin icon for post
      pin_icon: https://gcore.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
      # The layout scheme of the article card body on the article details page
      body:
      # Top of article information
      # Take from meta_library
      top_meta: [author, category, date, counter]
      # ----------------
      # Article footer component
      footer_widget:
      # ----------------
      # Reference materials, related materials, etc. (for layout: post/docs)
      references:
      title: Reference
      icon: fas fa-quote-left
      # In front-matter:
      # references:
      #-title: an article
      # url: https://
      # To display this component.
      # ----------------
      # Related articles, plug-ins need to be installed (for layout: post)
      # npm i hexo-related-popular-posts
      related_posts:
      enable: false
      title: Related articles
      icon: fas fa-bookmark
      max_count: 5
      # Set to empty to not use the article header
      placeholder_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg
      # ----------------
      # Copyright notice component (for layout: post/docs)
      copyright:
      enable: true
      permalink:'The permanent link to this article is:'
      content:
      -'The content of the blog follows the attribution-non-commercial use-share in the same way 4.0 International (CC BY-NC-SA 4.0) agreement'
      -permalink
      # ----------------
      # Reward component (for layout: post/docs)
      donate:
      enable: false
      images:
      -https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      -https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      # Information at the bottom of the article
      # Take from meta_library
      bottom_meta: [updated, tags, share]
      # meta library
      meta_library:
      # Default article author (can be overridden in front-matter)
      author:
      avatar:
      name: Please set the author of the article
      url: /
      # Article creation date
      date:
      icon: fas fa-calendar-alt
      title:'Posted on:'
      format:'ll' # Date format http://momentjs.com/docs/
      # Article update date
      updated:
      icon: fas fa-edit
      title:'Updated at:'
      format:'ll' # Date format http://momentjs.com/docs/
      # Article classification
      category:
      icon: fas fa-folder-open
      # Article view count
      counter:
      icon: fas fa-eye
      unit:'Views'
      # Number of article comments: only valine is supported
      valinecount:
      icon: fas fa-comment-dots
      desc:'' # comments
      # Article word count and reading time
      wordcount:
      icon_wordcount: fas fa-keyboard
      icon_duration: fas fa-hourglass-half
      # Article tags
      tags:
      icon: fas fa-hashtag
      # share it
      share:
      -id: qq
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png
      -id: qzone
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png
      -id: weibo
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png
      -id: # qrcode # When id is qrcode, plug-in needs to be installed npm i hexo-helper-qrcode
      img: # https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/wechat.png
      -id: # telegram
      img: # https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/telegram.png

      The values ​​of top_meta and bottom_meta are taken from the meta_library library.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/navbar/index.html b/theme-settings/navbar/index.html new file mode 100644 index 0000000000..479fada106 --- /dev/null +++ b/theme-settings/navbar/index.html @@ -0,0 +1 @@ +Volantis: Set the website navigation bar - Volantis

      The navigation bar is divided into three area settings: logo, menu, and search. If pictures are set in the logo area, icons and titles cannot be displayed. The settings of the menu area can be written in a separate file.

      blog/_config.volantis.yml
      navbar:
      logo: # choose [img] or [icon + title]
      img:
      icon:
      title:
      menu:
      # The following can be written in `blog/source/_data/menu.yml`
      -name: blog
      icon: fas fa-rss
      url: /
      -name: category
      icon: fas fa-folder-open
      url: categories/
      -name: label
      icon: fas fa-tags
      url: tags/
      -name: archive
      icon: fas fa-archive
      url: archives/
      -name: Friends chain
      icon: fas fa-link
      url: friends/
      -name: About
      icon: fas fa-info-circle
      url: about/
      search: search # Search bar placeholder

      use data file

      It is recommended to create a new file to store the configuration of the navigation bar menu. The path of the file is:

      blog/source/_data/menu.yml

      The content of the file is:

      blog/source/_data/menu.yml
      -name: blog
      icon: fas fa-rss
      url: /
      ...

      The navigation bar menu supports nesting, the nested attribute is named rows, and the writing example:

      blog/source/_data/menu.yml
      ...
      -name: more
      icon: fas fa-ellipsis-v
      rows:
      -name: theme source code
      url: https://github.com/volantis-x/hexo-theme-volantis/
      -name: update log
      url: https://github.com/volantis-x/hexo-theme-volantis/releases/
      -name: hr
      -name: Have questions?
      rows:
      -name: see FAQ
      url: faqs/
      -name: see the source code of this site
      url: https://github.com/volantis-x/volantis-docs/
      -name: mention Issue
      url: https://github.com/volantis-x/hexo-theme-volantis/issues/
      -name: hr
      -name: announcements and test blog posts
      url: archives/
      -name: sample blog
      url: examples/
      -name: special thanks
      url: contributors/

      Dividing line

      In the submenu, a new "menu" with only name: hr will be rendered as a dividing line.

      -name: hr

      Subtitle

      In the submenu, a new "menu" with only name: subtitle content (can also have ʻicon: icon for subtitle`) will be rendered as a subtitle.

      ...
      -name: recent
      icon: fas fa-clock
      url: /
      rows:
      -name: popular article
      icon: fas fa-fire
      -name: Design Ideas of ProHUD Open Source Library
      url: blog/2019-08-27-prohud/
      -name: ValueX: Practical safe object type conversion library
      url: blog/2019-08-29-valuex/
      -name: Design and development of Heart Rate Manager App
      url: blog/2019-07-23-heartmate/

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/plugins/index.html b/theme-settings/plugins/index.html new file mode 100644 index 0000000000..3ab8595596 --- /dev/null +++ b/theme-settings/plugins/index.html @@ -0,0 +1 @@ +Volantis: Third-party plugin - Volantis

      Plugin library

      Volantis provides compatibility optimization for rich plug-ins. You only need to turn on and off most of the plug-ins without any settings.

      blog/_config.volantis.yml
      plugins:
      ################ required plugins ################
      # jquery
      jquery: https://unpkg.com/jquery@3.5/dist/jquery.min.js
      # fontawesome
      fontawesome: https://unpkg.com/@fortawesome/fontawesome-free@5.14/css/all.min.css

      ################ optional plugins ################

      ######## Plugins to improve loading speed:

      # Preloading
      preload:
      enable: true
      service: flying_pages # instant_page, flying_pages
      instant_page: https://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js
      flying_pages: https://gcore.jsdelivr.net/gh/gijo-varghese/flying-pages@2.1.2/flying-pages.min.js

      # Picture lazy loading
      # https://www.npmjs.com/package/vanilla-lazyload
      lazyload:
      enable: true
      js: https://unpkg.com/vanilla-lazyload@17.1.0/dist/lazyload.min.js
      onlypost: false
      loadingImg: # https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/placeholder/c617bfd2497fcea598e621413e315c368f8d8e.svg
      blurIn: true # blur loading effect (valid when loadingImg is empty)
      ######## Plugins to optimize the experience:

      # highlight.js
      highlightjs:
      enable: #true # Please set hexo.config.highlight.enable = false !!!
      js: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js
      css: https://unpkg.com/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://unpkg.com/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://unpkg.com/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://unpkg.com/node-waves@0.7.6/dist/waves.min.css
      js: https://unpkg.com/node-waves@0.7.6/dist/waves.min.js

      # fontawesome animation
      fontawesome_animation:
      enable: #true
      css: https://gcore.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css

      # Typing Effects
      comment_typing:
      enable: #true
      js: https://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js

      # Slide Background
      backstretch:
      enable: #true
      js: https://unpkg.com/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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg
      - https://gcore.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://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      - https://unpkg.com/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: # The blocked URL address will not enable pjax redirection, you can use window.location.pathname to get it under the console
      #-/artitalk/ # artitalk does not support pjax

      # Artitalk https://artitalk.js.org
      # Please refer to the configuration process: https://artitalk.js.org/doc.html
      # Except appID and appKEY are optional
      artitalk:
      # Set `layout: artitalk` to enable in page
      appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID
      appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY
      # severurl: #leancloud binds the secure domain name, you don’t need to fill in if you use the international version
      # slanguage: # Language setting, zh is Chinese, en is English, and es is Spanish. The default is Chinese
      # per: #Display number of talks on each page
      # placeholder1: #Placeholder in the input box of the editor talk
      # placeholder2: #Customize the placeholder for the input box of the avatar url
      # lazy: #Load animation switch, 1 is on, 0 is off, the default is on
      # bgimg: #Talk about the background image url of the input box
      # color1: #Talk about background color 1 & button color 1
      # color2: #Talk about background color 2 & button color 2
      # color3: #Talk about font color
      #################################
      # Dark Mode
      # Style:source/css/_plugins/dark.styl
      # Switch button: add in navbar.menu:
      # - name: Dark Mode # Customizable
      # icon: fas fa-moon # Customizable
      # toggle: darkmode
      darkmodejs:
      enable: #true

      Slide background

      blog/_config.volantis.yml
      plugins:
      ...
      backstretch:
      enable: true
      js: https://unpkg.com/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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg
      ...

      The display position of the slideshow background image can be selected to be pasted on the cover and slide along with the cover, or fixed as the background image of the webpage.

      highlight.js

      blog/_config.volantis.yml
      plugins:
      ...
      highlightjs:
      js: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js
      css: https://unpkg.com/highlight.js@9.18.1/styles/solarized-light.css

      If you need to use highlight.js for syntax highlighting, please set highlight.enable in the site configuration file to false, otherwise the plugin will not be loaded. You can choose your favorite theme among the 94 Syntax Highlighting Themes, and then replace the above Css link.

      if you use highlight.js

      after testing

      APlayer Music Player

      blog/_config.volantis.yml
      plugins:
      ...
      aplayer:
      enable: true
      js:
      -https://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      -https://unpkg.com/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 player can only be used in mainland China. Related documents: APlayer | MetingJS

      Artitalk

      blog/_config.volantis.yml
      plugins:
      ...
      # Artitalk https://artitalk.js.org
      # Please refer to the configuration process: https://artitalk.js.org/doc.html
      # Except appID and appKEY are optional
      Artitalk:
      enable: false # true is turned on, false is turned off
      appID: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID
      appKEY: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY
      # severurl: #leancloud binds the secure domain name, you don’t need to fill in if you use the international version
      # slanguage: # Language setting, zh is Chinese, en is English, and es is Spanish. The default is Chinese
      # per: #Display number of talks on each page
      # placeholder1: #Placeholder in the input box of the editor talk
      # placeholder2: #Customize the placeholder for the input box of the avatar url
      # lazy: #Load animation switch, 1 is on, 0 is off, the default is on
      # bgimg: #Talk about the background image url of the input box
      # color1: #Talk about background color 1 & button color 1
      # color2: #Talk about background color 2 & button color 2
      # color3: #Talk about font color

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/search/index.html b/theme-settings/search/index.html new file mode 100644 index 0000000000..2d544f9cb8 --- /dev/null +++ b/theme-settings/search/index.html @@ -0,0 +1 @@ +Volantis: site search - Volantis
      blog/_config.volantis.yml
      search:
      enable: true
      service: hexo # hexo, google, algolia, azure, baidu
      js: https://gcore.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:

      The default configuration is Hexo search, but you need to install a plug-in to use it:

      npm i -S hexo-generator-search hexo-generator-json-content

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/sidebar/index.html b/theme-settings/sidebar/index.html new file mode 100644 index 0000000000..bf399bb26a --- /dev/null +++ b/theme-settings/sidebar/index.html @@ -0,0 +1 @@ +Volantis: Sidebar configuration - Volantis

      The sidebar widget is different from the meta library: In addition to the existing widget, you can easily create your own widget and place it where you need it. In addition, you can also write widgets in separate files.

      View all related configurations
      blog/_config.volantis.yml
      sidebar:
      # Home page, category, archive and other independent pages
      for_page: [blogger, category, tagcloud, qrcode]
      # layout: docs/post such article pages
      for_post: [toc]
      # Sidebar component library
      widget_library:
      # ---------------------------------------
      # blogger info widget
      blogger:
      class: blogger
      display: [desktop, mobile] # [desktop, mobile]
      avatar: https://gcore.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: Contents of this article
      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: Article classification
      url: /blog/categories/
      # ---------------------------------------
      # tagcloud widget
      tagcloud:
      class: tagcloud
      display: [desktop, mobile] # [desktop, mobile]
      header:
      icon: fas fa-tags
      title: Popular tags
      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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      -https://gcore.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: site information
      type:
      article:
      enable: true
      text:'Number of articles:'
      unit:'Article'
      runtime:
      enable: true
      data: '2020/01/01' # Fill in the site construction date
      text:'Elapsed time:'
      unit:'day'
      wordcount:
      enable: true
      text:'Total words on this site:' # Need to enable wordcount
      unit:'word'
      siteuv:
      enable: true
      text:'Number of visitors to this site:' # Need to enable busuanzi
      unit:'person'
      sitepv:
      enable: true
      text:'Total visits to this site:' # Need to enable busuanzi
      unit:'time'
      lastupd:
      enable: true
      friendlyShow: true # More friendly time display
      text:'Last activity time:'
      unit:'day'

      Every widget has class and display. The former represents what the widget is, and the latter represents whether the widget is displayed on what desktop and mobile platform. The sidebar widgets will be moved to the bottom of the body area, so some sidebar widgets have no meaning. It is recommended to set it to display only on the desktop.

      Widget name:
      class: widget category
      display: [Whether the widget is displayed on the desktop, and whether the widget is displayed on the mobile device]

      Blogger information widget

      blog/_config.volantis.yml
      blogger:
      class: blogger
      display: [desktop] # [desktop, mobile]
      avatar: https://gcore.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

      Among them, if today's poem jinrishici is set to a string, this string will become a placeholder text and will be displayed when loading fails. If you don't need it, please set it to jinrishici: false. Please set the specific content of social in the footer of the website.

      Article directory widget

      blog/_config.volantis.yml
      toc:
      class: toc
      display: [desktop, mobile] # [desktop, mobile]
      header:
      icon: fas fa-list
      title: Contents of this article
      list_number: false
      min_depth: 2
      max_depth: 5

      This widget can only be placed in the sidebar and is valid in the article. When previewing on a mobile device, the TOC button will appear on the right side of the navigation bar when you swipe your finger upwards, click to expand the TOC component. If you need to display the chapter number, please set list_number. min_depth and max_depth represent the header level supported by TOC, the maximum range is 2-6.

      Article classification widget

      blog/_config.volantis.yml
      category:
      class: category
      display: [desktop] # [desktop, mobile]
      header:
      icon: fas fa-folder-open
      title: Article classification
      url: /blog/categories/

      This component can directly display all article categories. If you want a separate page to display, you need to create a file by yourself. The specific operation is in the "page" part of the document.

      Tag cloud widget

      blog/_config.volantis.yml
      tagcloud:
      class: tagcloud
      display: [desktop] # [desktop, mobile]
      header:
      icon: fas fa-tags
      title: Popular tags
      url: /blog/tags/
      min_font: 14
      max_font: 24
      color: true
      start_color:'#999'
      end_color:'#555'

      This component can directly display the tags of all articles. If you want a separate page to display, you need to create a file by yourself. The specific operation is in the "page" part of the document.

      QR code parts

      blog/_config.volantis.yml
      donate:
      class: qrcode
      display: [desktop, mobile] # [desktop, mobile]
      height: 64px # Automatic height if not set
      images:
      -https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      -https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png

      You can place it in the footer of the article to display rewarding pictures, or place it in the sidebar.

      Universal text widget

      blog/_config.volantis.yml
      repos:
      class: text
      display: [desktop] # [desktop, mobile]
      header:
      icon: fab fa-github
      title: Like it
      url: https://github.com/xaoxuu/
      content:
      -'Your likes are very important to me. If you like this theme, I hope you can give me a like to support the items below. '
      -'[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/ xaoxuu/ProHUD)'
      -'[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/ xaoxuu/ValueX)'
      -'[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/inspire/logo.png" height="50px">](https://github.com/ xaoxuu/Inspire)'

      You can create text widgets to display any text content.

      Universal list widget

      blog/_config.volantis.yml
      wiki-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/

      You can create a list part to display any linked list. The attributes supported by each item in the list of rows are: name, ʻurl, ʻicon, ʻimg, ʻavatar, where ʻimg is a link to a square image and ʻavatar is a circle Link to the shape picture.

      Group Index

      The layout of this widget is inherited from the list widget and is used to display the grouped article list to which the article belongs. Please upgrade your Volantis to version 2.5 or higher.

      blog/_config.volantis.yml
      group-1:
      class: group
      display: [desktop, mobile] # [desktop, mobile]
      header:
      icon: fab fa-github
      title: Git
      url: /wiki/git/

      Set in the front-matter of the article:

      front-matter
      group: group-1
      order: 16
      sidebar: [group-1, toc]

      The "group-1" card will display all the articles with group: group-1 in the form of a list, sorted from small to large in the order of ʻorder`.

      Universal grid widget

      blog/_config.volantis.yml
      feedback:
      class: grid
      display: [desktop, mobile]
      header:
      icon: fas fa-headset
      title: Contact the developer
      url: https://github.com/volantis-x/hexo-theme-volantis
      fixed: true # fixed width
      rows:
      -name: feedback BUG
      icon: fas fa-bug
      url: https://github.com/volantis-x/hexo-theme-volantis/issues/
      -name: ask for help
      icon: fas fa-question-circle
      url: https://github.com/volantis-x/hexo-theme-volantis/issues/
      -name: make a suggestion
      icon: fas fa-lightbulb
      url: https://github.com/volantis-x/hexo-theme-volantis/issues/

      You can create a grid widget to display any list of links. By default, the grid automatically determines the width of each grid according to the text length. If the text length is different, it is recommended to set fixed: true to fix the width. At this time, the text in the grid with too long text will be displayed in a new line.

      Universal page widget

      blog/_config.volantis.yml
      test:
      class: page
      display: [desktop, mobile]
      pid: haha
      content: excerpt # excerpt, more, content

      You can render the md content of the entire page as a small part. Just set the pid property in the widget and the same pid in the article's front-matter. content represents the content displayed by this component, optional ʻexcerpt, more, and content` correspond to the abstract of the article, the content behind the abstract, and the full text respectively.

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/theme-settings/style/index.html b/theme-settings/style/index.html new file mode 100644 index 0000000000..5e96d3e836 --- /dev/null +++ b/theme-settings/style/index.html @@ -0,0 +1 @@ +Volantis: Custom theme appearance - Volantis

      Maximum layout width

      blog/_config.volantis.yml
      custom_css:
      ...
      max_width: 1080px # Sum of body width and sidebar width

      The maximum width of the content presented on the web page, that is, the sum of the width of the body and sidebar.

      Anti-aliasing

      blog/_config.volantis.yml
      custom_css:
      ...
      font_smoothing: true # font-smoothing for webkit

      Custom cursor style

      blog/_config.volantis.yml
      custom_css:
      ...
      cursor:
      enable: true
      text: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/text.png
      pointer: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png
      default: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png
      not-allowed: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/circle.png
      zoom-out: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png
      zoom-in: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png
      grab: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png

      You can set the height of the navigation bar and visual effects. The currently available visual effects are:
      -shadow: Card shadow.
      -floatable: When the mouse moves into the container, it will appear to float.
      -blur: The background blur effect (frosted glass), displayed as opaque when the browser does not support it.

      blog/_config.volantis.yml
      custom_css:
      ...
      navbar:
      height: 64px
      effect: [shadow, blur] # [shadow, floatable, blur]

      Scroll bar style

      blog/_config.volantis.yml
      custom_css:
      ...
      scrollbar:
      size: 4px
      border: 2px
      color:'#2196f3'
      hover:'#ff5722'

      The visual effects parameters are the same as above. It is worth noting that the card's floatable effect and blur effect conflict.

      blog/_config.volantis.yml
      custom_css:
      ...
      sidebar:
      effect: [shadow] # [shadow, floatable, blur]

      Body area style

      The visual effects parameters are the same as above. It is worth noting that the card's floatable effect and blur effect conflict. You can set the display language name of the code block in language: true. text_align can set the text alignment direction of h1/h2/h3/h4/p.

      blog/_config.volantis.yml
      custom_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:''

      Layout spacing

      You can set several heading layout spacing h2/h3/h4, paragraph spacing line, and paragraph spacing inline within blocks.

      blog/_config.volantis.yml
      custom_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

      Custom font

      You can customize the body and code fonts.

      blog/_config.volantis.yml
      custom_css:
      ...
      fontfamily:
      logofont:
      fontfamily:'"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial'
      name:'Varela Round'
      url: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf
      weight: normal
      style: normal
      codefont:
      fontfamily:'Menlo, Monaco'
      name:'Monaco'
      url: https://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf
      weight: normal
      style: normal

      Custom color

      blog/_config.volantis.yml
      color_scheme:
      # ------------
      # Universal color
      common:
      # Theme color
      theme:'#44D7B6'
      # Link color
      link:'#2196f3'
      # Button color
      button:'#44D7B6'
      # The color when the mouse is placed on the interactive element
      hover:'#ff5722'
      # The color of the text inside the theme color block
      inner:'#fff'
      # The background color of the text in the selected area
      selection:'alpha(#2196f3, 0.2)'
      # ------------
      # Bright theme (default)
      light:
      # Website background color
      site_bg:'#f4f4f4'
      # Text on website background
      site_inner:'#fff'
      # Site footer text
      site_footer:'#666'

      # Card background color
      card:'#fff'
      # Normal text on the card
      text:'#444'

      # Block and code block background color
      block:'#f6f6f6'
      # The background color when the code block is highlighted
      codeblock:'#FFF7EA'
      # Inline code color
      inlinecode:'#D56D28'

      # Article section
      h1:'#444'
      h2:'#444'
      h3:'#444'
      h4:'#444'
      h5:'#444'
      h6:'#444'
      p:'#444'

      # List text
      list:'#666'
      # List the text when hover
      list_hl:'mix($color-theme, #000, 80)'
      # Supporting text
      meta:'#888'
      # ------------
      # Dark theme
      dark:
      # Website background color
      site_bg:'#222'
      # Text on website background
      site_inner:'#eee'
      # Site footer text
      site_footer:'#aaa'
      # Card background color
      card:'#444'
      # Normal text on the card
      text:'#eee'

      # Block and code block background color
      block:'#3a3a3a'
      # The background color when the code block is highlighted
      codeblock:'#343a3c'
      # Inline code color
      inlinecode:'#D56D28'

      # Article section
      h1:'#eee'
      h2:'#eee'
      h3:'#ddd'
      h4:'#ddd'
      h5:'#ddd'
      h6:'#ddd'
      p:'#bbb'

      # List text
      list:'#aaa'
      # List the text when hover
      list_hl:'mix($color-theme, #fff, 80)'
      # Supporting text
      meta:'#888'
      # Night picture brightness
      brightness: 70%

      Customize the right-click menu

      blog/_config.volantis.yml
      rightmenu:
      enable: true
      # hr: dividing line, music: music controller
      layout: [home, help, examples, contributors, hr, source_docs, source_theme, hr, print, hr, music]
      # Optional function item
      print:
      name: print page
      icon: fa fa-print
      onclick: document.execCommand('print')
      # The format of the custom menu is as follows
      help:
      name: FAQ
      icon: fa fa-question
      url: https://volantis.js.org/faqs/
      examples:
      name: sample blog
      icon: fa fa-rss
      url: https://volantis.js.org/examples/
      contributors:
      name: Join the community
      icon: fa fa-fan fa-spin
      url: https://volantis.js.org/contributors/
      source_docs:
      name: source code of this site
      icon: fa fa-code-branch
      url: https://github.com/volantis-x/volantis-docs/
      source_theme:
      name: theme source code
      icon: fa fa-code-branch
      url: https://github.com/volantis-x/hexo-theme-volantis/

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v2/advanced-settings/index.html b/v2/advanced-settings/index.html new file mode 100644 index 0000000000..5251185117 --- /dev/null +++ b/v2/advanced-settings/index.html @@ -0,0 +1 @@ +进阶设定 - Volantis

      建议有一定基础知识的朋友进行尝试。

      将主题添加为子模块
      git submodule add https://github.com/volantis-x/hexo-theme-volantis themes/volantis

      为网站提速

      加载速度

      • 尝试安装 hexo-all-minifier 插件来压缩文件。

      • 减少不必要的 js 插件,例如字数统计、动态背景。

      • 查找并解决拖慢速度的资源,以 Chrome 浏览器为例:

        1. 页面中点击右键,选择「检查」。
        2. 在右边的窗口中「Network」选项卡,并勾选「Disable cache」。
        3. 刷新网页,查看加载速度慢的资源。
          3.1. 加载缓慢的图片,建议使用 CDN。
          3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。
          3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。

      运行速度

      • 访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。

      • 强烈推荐安装 hexo-offline 插件,初次加载速度不变,后期切换页面和刷新网页速度越来越快。

      • 推荐安装图片懒加载插件 hexo-lazyload-image(需同时安装 hexo-fs 依赖库)。

      优化 SEO

      在 front-matter 中,可以设置 keywordsdescriptionrobotsseo_title。其中 seo_title 仅仅用作网页标题,优先级高于 title

      使用 CDN

      对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。

      开启方法

      blog/_config.yml
      use_cdn: true

      如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。

      自定义 CDN

      如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。

      安装「相关文章」插件

      1. 安装插件

        npm i -S hexo-related-popular-posts
      2. 在需要显示的位置添加 related_posts 例如放在侧边栏:

        blog/themes/volantis/_config.yml
        layout:
        on_page:
        sidebar: [related_posts]

      分析与统计

      默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。

      字数和阅读时长

      1. 安装以下插件:
        npm i --save hexo-wordcount
      2. 修改配置文件,将 wordcount 插件打开
        blog/themes/volantis/_config.yml
        plugins:
        ...
        # 文章字数统计、阅读时长,开启需要安装插件: npm i --save hexo-wordcount
        wordcount: true
      3. 然后修改配置文件,将 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 博客主题个性化》

      内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v2/getting-started/index.html b/v2/getting-started/index.html new file mode 100644 index 0000000000..5610c75657 --- /dev/null +++ b/v2/getting-started/index.html @@ -0,0 +1 @@ +开始使用 - Volantis

      A Wonderful Theme for Hexo


      Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。

      这些是使用了本主题的博客: 示例博客

      能力要求

      自建博客需要一定的相关知识,在开始前,请务必确保:

      已掌握 markdown 语法

      已阅读 Hexo 官方文档

      会使用终端(命令行),会使用 git

      会阅读文档、搜索文档

      为了更好地使用,还建议掌握以下知识:

      规范地使用 GitHub Issues(解决文档中没有的问题)

      GitHub Fork、Pull Request 操作(使主题保持更新)

      环境要求

      如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。

      Hexo: 4.2
      hexo-cli: 3.1
      node.js: 12.16 # LTS版
      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
      theme: 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
      1. 全局搜索 seotitle 并替换为 seo_title
      2. group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name
      3. group 组件的列表名优先显示文章的 short_title 其次是 title

      许可协议

      本主题采用 MIT开源许可协议 ,永久无限制免费使用。

      MIT开源许可协议

      被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
      被授权人可根据程式的需要修改授权条款为适当的内容。
      在软件和软件的所有副本中都必须包含版权声明和许可声明。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v2/page-settings/index.html b/v2/page-settings/index.html new file mode 100644 index 0000000000..f519c72990 --- /dev/null +++ b/v2/page-settings/index.html @@ -0,0 +1 @@ +页面配置 - 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网页标题Stringpage.title
      short_title页面标题(在group列表中显示)Stringpage.title
      date创建时间Date文件创建时间
      updated更新日期Date文件修改时间
      link外部文章网址String-
      music内部音乐控件[Object]-
      robotsrobotsString-
      keywords页面关键词String-
      description页面描述、摘要String-
      cover是否显示封面Booltrue
      meta文章或页面的meta信息Bool, Arraytheme.layout.*.meta
      sidebar页面侧边栏Bool, Arraytheme.layout.*.sidebar
      body页面主体元素Arraytheme.layout.on_page.body
      mathjax是否渲染公式Bool, Stringfalse
      thumbnail缩略图Stringfalse
      icons图标Array[]

      layout:post 时特有的字段:

      字段含义值类型默认值
      author文章作者[Object]config.author
      categories分类String, Array-
      tags标签String, Array-
      toc是否生成目录Booltrue
      top是否置顶Boolfalse

      author

      字段含义值类型默认值
      name作者名Stringconfig.author
      avatar头像Stringconfig.avatar
      url链接Stringconfig.url

      music

      字段是否必须值类型
      servernetease, tencent, kugou, xiami, baidu
      typesong, playlist, album, search, artist
      idsong id / playlist id / album id / search keyword

      独立页面

      除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。

      归档页面

      归档页面是自动生成的,并且初始化的时候已经生成,路径如下:

      blog/_config.yml
      # Directory
      archive_dir: archives

      关于页面

      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
      top: true

      如果想自定义置顶标签的文字,可以直接设置为字符串,例如:

      front-matter
      top: 近期更新

      文章分类

      多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。

      多级分类:

      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
      ---

      显示迷你音乐播放器

      标题右边显示迷你音乐播放器,支持的字段有:servertypeid

      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: 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 来设置图标的颜色

      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: post
      date: 2017-07-05
      title: []如何搭建基于Hexo的独立博客
      categories: [Dev, Hexo]
      tags:
      - Hexo
      author:
      name: xaoxuu
      avatar: https://gcore.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
      ---
      sidebar: []
      ---

      某个页面想指定显示某几个侧边栏,就这样写:

      front-matter
      ---
      sidebar: [grid, toc, tags] # 放置任何你想要显示的侧边栏部件
      ---

      关闭评论

      可以

      front-matter
      ---
      comments: false
      ---

      也可以

      front-matter
      ---
      body: [article]
      ---

      只显示留言板

      如果你想创建一个只有留言板的页面

      front-matter
      ---
      body: [comments]
      ---

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v2/site-settings/index.html b/v2/site-settings/index.html new file mode 100644 index 0000000000..2ab4d6becf --- /dev/null +++ b/v2/site-settings/index.html @@ -0,0 +1 @@ +站点配置 - Volantis

      如无特殊说明,本页面的配置信息写在 博客根目录_config.yml 文件中。

      网站标题

      blog/_config.yml
      # 网站标题
      title: my blog

      网站图标

      blog/_config.yml
      # 网站图标,更多尺寸等图标请使用import方式批量导入
      favicon: https://gcore.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://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png">
      - <link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png">
      - <link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png">
      - <link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      - <link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5">
      - <link rel="shortcut icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">

      Import

      可以在无需修改主题文件的情况下在 head 和 body 中添加各种标签。metalink 对应 head 中的 <meta><link> 标签。script 可以在 body 末尾导入 js 文件。

      blog/_config.yml
      import:
      meta:
      - <meta name="msapplication-TileColor" content="#ffffff">
      - <meta name="msapplication-config" content="https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png">
      - <link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png">
      - <link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png">
      - <link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      - <link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5">
      - <link rel="shortcut icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
      script:

      更多配置

      更多请见 Hexo 官方文档:#Hexo配置

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v2/tag-plugins/index.html b/v2/tag-plugins/index.html new file mode 100644 index 0000000000..771b1f3e01 --- /dev/null +++ b/v2/tag-plugins/index.html @@ -0,0 +1 @@ +标签插件 - Volantis

      主题原生支持的标签。

      文本和段落

      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 %}

      彩色文字

      在一段话中方便插入各种颜色的标签,包括:红色黄色绿色青色蓝色灰色

      超大文字

      文档「开始」页面中的标题部分就是超大文字。

      A Wonderful Theme for Hexo

      Note & NoteBlock

      NoteBlock 是 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, 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

      样式

      plus, minus, times

      选中状态

      checked

      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

      纯文本测试

      支持简单的 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://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.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://gcore.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://gcore.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 %}

      <!-- 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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)

      {% endfolding %}

      参数位置可以填写颜色和状态,多个参数用空格隔开。

      颜色

      blue, cyan, green, yellow, red

      状态

      状态填写 open 代表默认打开。

      {% folding 查看图片测试 %}

      ![](https://gcore.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://gcore.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 %}
      查看列表测试
      • haha
      • hehe
      查看嵌套测试
      查看嵌套测试2
      查看嵌套测试3

      hahaha

      多媒体

      包括图片、音频、视频。

      Image

      Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。请将您的 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=每天下课回宿舍的路,承载了太多记忆。 %}

      添加描述:

      每天下课回宿舍的路,承载了太多记忆。
      每天下课回宿舍的路,承载了太多记忆。

      指定宽度:

      image

      指定宽度并添加描述:

      每天下课回宿舍的路,承载了太多记忆。
      每天下课回宿舍的路,承载了太多记忆。

      Fancybox

      Fancybox 标签是一种针对一组图片应用场景的标签。请将您的 Volantis 升级至 2.2 版本以上使用。

      {% fancybox 参数, 列数 %}
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)
      ![](https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)
      {% endfancybox %}

      一行多个图片(不换行)

      example.md:
      {% fancybox %}
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg)
      {% endfancybox %}

      多行多个图片(每行2~8个图片)

      example.md:
      {% fancybox stretch, 4 %}
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)
      ![](https://gcore.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 %}

      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%宽度

      50%宽度

      25%宽度

      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.

      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.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"' %}

      在文章中插入链接,并自动给外部链接添加 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 --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v2/theme-settings/index.html b/v2/theme-settings/index.html new file mode 100644 index 0000000000..727549e2bf --- /dev/null +++ b/v2/theme-settings/index.html @@ -0,0 +1 @@ +主题配置 - Volantis

      如无特殊说明,本页面的配置信息写在 主题config.yml 文件中。

      实用小技巧

      所有需要写在主题配置文件中的配置都可以写在站点配置文件的 theme_config:
      详见 Hexo 官方文档 #覆盖主题配置
      也可以直接查看本站源码中站点配置文件的写法:_config.yml

      主题样式

      您可以在主题配置文件中设定一些简单的样式,在开始前,确保没有使用 CDN 服务,否则修改不会生效。

      最大布局宽度

      blog/themes/volantis/_config.yml
      style:
      ...
      max_width: 1080px # Sum of body width and sidebar width

      网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。

      导航栏样式

      您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有:

      • shadow:卡片阴影。
      • floatable:当鼠标移动到容器内时,呈现出浮起来的效果。
      • blur:背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。
      blog/themes/volantis/_config.yml
      style:
      ...
      navbar:
      height: 64px
      effect: [shadow, blur] # [shadow, floatable, 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] # [shadow, floatable, blur]

      正文区域样式

      视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。您可以在 language: true 这里设置代码块显示语言名称。text_align 可以设置 h1/h2/h3/h4/p 的文字对齐方向。

      blog/themes/volantis/_config.yml
      style:
      ...
      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.yml
      style:
      ...
      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.yml
      style:
      ...
      fontfamily:
      logofont:
      fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial'
      name: 'Varela Round'
      url: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf
      weight: normal
      style: normal
      codefont:
      fontfamily: 'Menlo, Monaco'
      name: 'Monaco'
      url: https://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf
      weight: normal
      style: normal

      颜色样式

      blog/themes/volantis/_config.yml
      style:
      ...
      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.yml
      cover:
      ...
      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.yml
      navbar:
      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 库中取值外,还可以选择 articlecomments )。

      请别着急,具体的库配置将在下文详细讲解。

      meta 库

      meta 即文章的元数据,描述文章的作者、发布时间、更新时间等等信息,Volantis 不替您决定,显示什么图标、如何描述都可以自定义。

      查看所有相关配置
      blog/themes/volantis/_config.yml
      meta:
      # 文章标题
      title: # 暂无配置
      # 默认文章作者(可在front-matter中覆盖)
      author:
      avatar: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png
      - id: qzone
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png
      - id: weibo
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png
      # - id: qrcode # 当id为qrcode时需要安装插件 npm i -S hexo-helper-qrcode
      # img: https://gcore.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.yml
      widget:
      # The following can be written in `blog/source/_data/widget.yml`
      # ---------------------------------------
      # blogger info widget
      blogger:
      class: blogger
      display: [desktop] # [desktop, mobile]
      avatar: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.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/

      每一个小部件都有 classdisplay,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。

      小部件名:
      class: 小部件类别
      display: [小部件在桌面端显示, 小部件在移动设备显示]

      博主信息部件

      blog/themes/volantis/_config.yml
      blogger:
      class: blogger
      display: [desktop] # [desktop, mobile]
      avatar: https://gcore.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: falsesocial 的具体内容请在网站页脚部分设置。

      文章目录部件

      blog/themes/volantis/_config.yml
      toc:
      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_numbermin_depthmax_depth 代表 TOC 支持的标题层级,最大范围是2~6。

      文章分类部件

      blog/themes/volantis/_config.yml
      category:
      class: category
      display: [desktop] # [desktop, mobile]
      header:
      icon: fas fa-folder-open
      title: 文章分类
      url: /blog/categories/

      这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。

      标签云部件

      blog/themes/volantis/_config.yml
      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'

      这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。

      相关文章部件

      blog/themes/volantis/_config.yml
      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

      这个小部件建议放置在文章页脚,要使用这个部件,您需要安装插件:

      npm i -S hexo-related-popular-posts

      值得注意的是,开启了这个功能之后,每次修改文章内容包括 front-matter 之后,都需要重新 hexo s

      文章版权部件

      blog/themes/volantis/_config.yml
      copyright:
      class: copyright
      display: [desktop, mobile] # [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] # [desktop, mobile]
      height: 64px # Automatic height if not set
      fancybox: true
      images:
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png

      您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。

      通用文本部件

      blog/themes/volantis/_config.yml
      repos:
      class: text
      display: [desktop] # [desktop, mobile]
      header:
      icon: fab fa-github
      title: 点个赞吧
      url: https://github.com/xaoxuu/
      content:
      - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。'
      - '[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)'
      - '[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)'
      - '[<img src="https://gcore.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] # [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 中的每一项支持的属性有: nameurliconimgavatar,其中 img 是方形图片的链接,avatar 是圆形图片的链接。

      参考资料

      这个部件的布局继承自 list 部件,用于展示文章的参考资料。请将您的 Volantis 升级至 2.5 版本以上使用。

      blog/themes/volantis/_config.yml
      references:
      class: references # is subclass of list
      display: [desktop, mobile] # [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] # [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 # excerpt, more, content

      您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid 属性和文章的 front-matter 中设置一样的 pid 即可。 content 代表这个部件显示的内容,可选 excerptmorecontent 分别对应文章的摘要、摘要后面的内容、全文。

      部件库文件

      部件库中的所有部件都可以写在部件库文件中,您需要创建一个文件在以下路径:

      blog/source/_data/widget.yml

      文件内容示例:widget.yml

      设置网站页脚

      您通过 layout 可以自由布局网站页脚内容 aplayer, social, license, info, copyright

      blog/themes/volantis/_config.yml
      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-2021 XXX](/)'
      # You can add your own property here. (Support markdown, for example: br: '<br>')
      br: '<br>'

      其中,aplayer 需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如:

      blog/themes/volantis/_config.yml
      footer:
      layout: [..., br, hello, ...]
      ...
      # You can add your own property here. (Support markdown, for example: br: '<br>')
      br: '<br>'
      hello: '[Hello World](/)'

      SEO

      blog/themes/volantis/_config.yml
      seo:
      # 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.yml
      plugins:
      ...
      backstretch:
      enable: true
      js: https://unpkg.com/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://gcore.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://gcore.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js
      css: https://unpkg.com/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://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      - https://unpkg.com/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.yml
      comments:
      title: <i class='fas fa-comments'></i> 评论
      subtitle:
      service: valine # valine, disqus, gitalk, livere
      valine:
      appId: # your appId
      appKey: # your appKey
      js: https://unpkg.com/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.yml
      comments:
      ...
      disqus:
      shortname:

      Gitalk

      官网: https://github.com/gitalk/gitalk

      blog/themes/volantis/_config.yml
      comments:
      ...
      gitalk:
      clientID:
      clientSecret:
      repo:
      owner:
      admin: # []

      clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤:

      1. 点击 GitHub -> Settings https://github.com/settings/profile
      2. 点击 Developer settings https://github.com/settings/developers
      3. 点击 New OAuth App https://github.com/settings/applications/new
      4. 填写信息:
        Application name 随便填,我的是:xaoxuu.com
        Homepage URLAuthorization 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: # your appId
      appKey: # your appKey
      js: https://unpkg.com/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: /
      ---

      MiniValine

      官网: https://github.com/MiniValine/MiniValine/

      blog/themes/volantis/_config.yml
      comments:
      ...
      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.yml
      comments:
      ...
      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.yml
      search:
      enable: true
      service: hexo # hexo, google, algolia, azure, baidu
      js: https://gcore.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

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/advanced-settings/index.html b/v3/advanced-settings/index.html new file mode 100644 index 0000000000..cac20587f8 --- /dev/null +++ b/v3/advanced-settings/index.html @@ -0,0 +1 @@ +进阶设定 - 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 浏览器为例:

        1. 页面中点击右键,选择「检查」。
        2. 在右边的窗口中「Network」选项卡,并勾选「Disable cache」。
        3. 刷新网页,查看加载速度慢的资源。
          3.1. 加载缓慢的图片,建议使用 CDN。
          3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。
          3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。

      运行速度

      • 访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。
      • 推荐安装图片懒加载插件 hexo-lazyload-image(需同时安装 hexo-fs 依赖库)。

      优化 SEO

      blog/_config.volantis.yml
      seo:
      # 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 中,可以设置 keywordsdescriptionrobotsseo_title。其中 seo_title 仅仅用作网页标题,优先级高于 title

      使用 CDN

      对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。

      开启方法

      blog/_config.yml
      use_cdn: true

      如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。

      自定义 CDN

      如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。

      安装「相关文章」插件

      1. 安装插件

        npm i -S hexo-related-popular-posts
      2. 在需要显示的位置添加 related_posts 例如放在侧边栏:

        blog/_config.volantis.yml
        layout:
        on_page:
        sidebar: [related_posts]
      3. 插件的自定义配置方法:

      分析与统计

      默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。

      字数和阅读时长

      1. 安装以下插件:
        npm i --save hexo-wordcount
      2. 修改配置文件,将 wordcount 插件打开
        blog/_config.volantis.yml
        plugins:
        ...
        # 文章字数统计、阅读时长,开启需要安装插件: npm i --save hexo-wordcount
        wordcount: true
      3. 然后修改配置文件,将 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 的这篇博客:

      内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/getting-started/index.html b/v3/getting-started/index.html new file mode 100644 index 0000000000..cf597b6e2a --- /dev/null +++ b/v3/getting-started/index.html @@ -0,0 +1 @@ +安装与版本更新 - Volantis

      A Wonderful Theme for Hexo 5


      Volantis,一个高度模块化和可定制化、功能相对完善的 Hexo 博客主题,既可以用作个人博客,也适合用来搭建文档。

      这些是使用了本主题的博客: 示例博客

      能力要求 !!!

      自建博客需要一定的相关知识,在开始前,请务必确保:

      已掌握 markdown 语法

      已阅读 Hexo 官方文档

      会使用终端(命令行),会使用 git

      会阅读文档、搜索文档


      为了更好地使用,还建议掌握以下知识:

      会阅读源码,知道本站源码在哪里,会参照源码仿写、对比差异

      规范地使用 GitHub Issues(解决文档中没有的问题)

      GitHub Fork、Pull Request 操作(使主题保持最新)

      环境要求

      如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。

      Hexo: 4.2 ~ 5.x
      hexo-cli: 3.1 ~ 4.x
      node.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

      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 服务。
      6. 欢迎补充

      许可协议

      本主题采用 MIT开源许可协议 ,永久无限制免费使用。

      MIT开源许可协议

      被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
      被授权人可根据程式的需要修改授权条款为适当的内容。
      在软件和软件的所有副本中都必须包含版权声明和许可声明。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/page-settings/body/index.html b/v3/page-settings/body/index.html new file mode 100644 index 0000000000..fa1bc405b9 --- /dev/null +++ b/v3/page-settings/body/index.html @@ -0,0 +1 @@ +页面自定义布局 - Volantis

      正文布局

      默认是文章+评论:

      front-matter
      ---
      body: [article, comments]
      ---

      如果你想把相关文章卡片显示在评论前,可以这样写:

      front-matter
      ---
      body: [article, related_posts, comments]
      ---

      如果想全局修改,在主题配置文件中的 layout.on_page.body 中设置。

      显示迷你音乐播放器

      标题右边显示迷你音乐播放器,支持的字段有:servertypeid

      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]
      ---

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/page-settings/front-matter/index.html b/v3/page-settings/front-matter/index.html new file mode 100644 index 0000000000..7f60ae7c57 --- /dev/null +++ b/v3/page-settings/front-matter/index.html @@ -0,0 +1 @@ +front-matter - Volantis

      front-matter

      front-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter

      字段含义值类型默认值
      layout布局模版String-
      title页面标题String-
      seo_title网页标题Stringpage.title
      short_title页面标题(在group列表中显示)Stringpage.title
      date创建时间Date文件创建时间
      updated更新日期Date文件修改时间
      link外部文章网址String-
      music内部音乐控件[Object]-
      robotsrobotsString-
      keywords页面关键词String-
      description页面描述、摘要String-
      cover是否显示封面Booltrue
      meta文章或页面的meta信息Bool, Arraytheme.layout.*.meta
      sidebar页面侧边栏Bool, Arraytheme.layout.*.sidebar
      body页面主体元素Arraytheme.layout.on_page.body
      mathjax是否渲染公式Bool, Stringfalse
      thumbnail缩略图Stringfalse
      icons图标Array[]
      pin是否置顶Boolfalse

      layout:post 时特有的字段:

      字段含义值类型默认值
      author文章作者[Object]config.author
      categories分类String, Array-
      tags标签String, Array-
      toc是否生成目录Booltrue

      author

      字段含义值类型默认值
      name作者名Stringconfig.author
      avatar头像Stringconfig.avatar
      url链接Stringconfig.url

      music

      字段是否必须值类型
      servernetease, tencent, kugou, xiami, baidu
      typesong, playlist, album, search, artist
      idsong id / playlist id / album id / search keyword

      文章置顶

      在 front-matter 中设置以下值:

      front-matter
      pin: true

      文章分类

      多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。

      多级分类:

      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://gcore.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
      ---
      pin: true
      ---

      这会导致一个小问题:首页 post 卡片数量多于设定值,如果有强迫症希望每一个分页数量一致,可以安装插件来实现,详见:#421

      不归档

      存放在 _posts 文件夹下的文章一般都会出现在归档页,如果某篇文章不希望出现在归档页面:

      front-matter
      ---
      archive: false
      ---

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/page-settings/layout/index.html b/v3/page-settings/layout/index.html new file mode 100644 index 0000000000..31d916ca13 --- /dev/null +++ b/v3/page-settings/layout/index.html @@ -0,0 +1 @@ +页面布局模板 - 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
      # Directory
      archive_dir: archives

      关于页面

      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, 可能是输入地址有误或该地址已被删除 %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/page-settings/math/index.html b/v3/page-settings/math/index.html new file mode 100644 index 0000000000..6c6b2b6533 --- /dev/null +++ b/v3/page-settings/math/index.html @@ -0,0 +1 @@ +渲染公式 - 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}
      $$

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/site-settings/configuration/index.html b/v3/site-settings/configuration/index.html new file mode 100644 index 0000000000..6f25417738 --- /dev/null +++ b/v3/site-settings/configuration/index.html @@ -0,0 +1 @@ +站点配置文件 - Volantis

      网站标题

      blog/_config.yml
      # 网站标题
      title: my blog

      网站图标

      blog/_config.yml
      # 网站图标,更多尺寸等图标请使用import方式批量导入
      favicon: https://gcore.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://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png">
      - <link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png">
      - <link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png">
      - <link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      - <link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5">
      - <link rel="shortcut icon" href="https://gcore.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 中添加各种标签。metalink 对应 head 中的 <meta><link> 标签。script 可以在 body 末尾导入 js 文件。

      blog/_config.yml
      import:
      meta:
      - <meta name="msapplication-TileColor" content="#ffffff">
      - <meta name="msapplication-config" content="https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png">
      - <link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png">
      - <link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png">
      - <link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      - <link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5">
      - <link rel="shortcut icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
      script:

      网站

      参数描述
      title网站标题
      subtitle网站副标题
      description网站描述
      keywords网站的关键词。支援多个关键词。
      author您的名字
      language网站使用的语言。对于简体中文用户来说,使用不同的主题可能需要设置成不同的值,请参考你的主题的文档自行设置,常见的有 zh-Hanszh-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.html
      pretty_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_dirInclude 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 casefalse
      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 中没有指定 updatedupdated 的取值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 中没有指定 updatedpost.updated 将会使用 date 的值而不是文件的创建时间。在 Git 工作流中这个选项会很有用 | true

      分页

      参数描述默认值
      per_page每页显示的文章量 (0 = 关闭分页功能)10
      pagination_dir分页目录page

      扩展

      参数描述
      theme当前主题名称。值为false时禁用主题
      theme_config主题的配置文件。在这里放置的配置会覆盖主题目录下的 _config.yml 中的配置
      deploy部署部分的设置
      meta_generatorMeta 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.

      参数描述
      includeHexo 默认会忽略隐藏文件和文件夹(包括名称以下划线和 . 开头的文件和文件夹,Hexo 的 _posts_data 等目录除外)。通过设置此字段将使 Hexo 处理他们并将它们复制到 source 目录下。
      excludeHexo 会忽略这些文件和目录
      ignoreIgnore files/folders

      举例:

      # Include/Exclude Files/Folders
      include:
      - ".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"

      列表中的每一项都必须用单引号或双引号包裹起来。

      includeexclude 并不适用于 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.yml
      theme: "my-theme"
      theme_config:
      bio: "My awesome bio"
      foo:
      bar: 'a'
      # themes/my-theme/_config.yml
      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 起提供

      独立的主题配置文件应放置于站点根目录下,支持 ymljson 格式。需要配置站点 _config.yml 文件中的 theme 以供 Hexo 寻找 _config.[theme].yml 文件。

      # _config.yml
      theme: "my-theme"
      # _config.my-theme.yml
      bio: "My awesome bio"
      foo:
      bar: 'a'
      # themes/my-theme/_config.yml
      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 文件。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/tag-plugins/container/index.html b/v3/tag-plugins/container/index.html new file mode 100644 index 0000000000..91e348d7e2 --- /dev/null +++ b/v3/tag-plugins/container/index.html @@ -0,0 +1 @@ +容器类标签 - Volantis

      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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)

      {% endfolding %}

      参数位置可以填写颜色和状态,多个参数用空格隔开。

      颜色

      blue, cyan, green, yellow, red

      状态

      状态填写 open 代表默认打开。

      {% folding 查看图片测试 %}

      ![](https://gcore.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://gcore.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 %}
      查看列表测试
      • haha
      • hehe
      查看嵌套测试
      查看嵌套测试2
      查看嵌套测试3

      hahaha

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/tag-plugins/hexo/index.html b/v3/tag-plugins/hexo/index.html new file mode 100644 index 0000000000..25c3f28ed1 --- /dev/null +++ b/v3/tag-plugins/hexo/index.html @@ -0,0 +1 @@ +Hexo 内置标签 - Volantis

      文章摘要和截断

      在文章中使用 <!-- more -->,那么 <!-- more --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 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.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"' %}

      在文章中插入链接,并自动给外部链接添加 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 %}

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/tag-plugins/link/index.html b/v3/tag-plugins/link/index.html new file mode 100644 index 0000000000..0405a10eb6 --- /dev/null +++ b/v3/tag-plugins/link/index.html @@ -0,0 +1 @@ +链接、按钮和菜单标签 - Volantis

      外链卡片

      请将您的 Volantis 升级至 3.0 版本以上使用。

      基础按钮

      请将您的 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://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.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://gcore.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://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'>
      </a>
      {% endbtns %}

      如果需要显示类似「团队成员」之类的一组含有头像的链接:

      或者含有图标的按钮:

      圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中

      下拉菜单

      请将您的 Volantis 升级至 3.0 版本以上使用。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/tag-plugins/media/index.html b/v3/tag-plugins/media/index.html new file mode 100644 index 0000000000..c1765d5fd3 --- /dev/null +++ b/v3/tag-plugins/media/index.html @@ -0,0 +1 @@ +多媒体标签 - Volantis

      Inlineimage

      Inlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。请将您的 Volantis 升级至 3.0.0 版本以上使用。

      这是一段话 {% inlineimage 链接, height=高度(可选) %} 这是一段话。

      图片高度

      阿拉伯数字 + px

      example:
      height=20px
      example.md:
      这是 {% inlineimage https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %} 一段话。

      这又是 {% inlineimage https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %} 一段话。

      这是 一段话。

      这又是 一段话。

      Image

      Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。请将您的 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=每天下课回宿舍的路,承载了太多记忆。 %}

      添加描述:

      每天下课回宿舍的路,承载了太多记忆。
      每天下课回宿舍的路,承载了太多记忆。

      指定宽度:

      image

      指定宽度并添加描述:

      每天下课回宿舍的路,承载了太多记忆。
      每天下课回宿舍的路,承载了太多记忆。

      Gallery 标签是一种针对一组图片应用场景的标签。请将您的 Volantis 升级至 3.0 版本以上使用。

      Audio

      请将您的 Volantis 升级至 2.4 版本以上使用。

      example.md:
      {% audio 音频链接 %}
      example.md:
      {% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}

      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%宽度

      50%宽度

      25%宽度

      APlayer

      主题对 APlayer 插件的样式进行了兼容。安装插件:

      npm i -S hexo-tag-aplayer

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/tag-plugins/text/index.html b/v3/tag-plugins/text/index.html new file mode 100644 index 0000000000..96aa5ccd93 --- /dev/null +++ b/v3/tag-plugins/text/index.html @@ -0,0 +1 @@ +文本和段落标签 - Volantis

      行内小标签

      请将您的 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 %}

      彩色文字

      在一段话中方便插入各种颜色的标签,包括:红色黄色绿色青色蓝色灰色

      超大文字

      文档「开始」页面中的标题部分就是超大文字。

      A Wonderful Theme for Hexo

      Note & NoteBlock

      NoteBlock 是 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, 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

      样式

      plus, minus, times

      选中状态

      checked

      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

      纯文本测试

      支持简单的 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

      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 服务。

      2020-07-24 2.6.3 -> 2.6.6

      不需要额外处理。

      2020-07-24 2.6.2 -> 2.6.3

      1. 全局搜索 seotitle 并替换为 seo_title
      2. group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name
      3. group 组件的列表名优先显示文章的 short_title 其次是 title

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/comments/index.html b/v3/theme-settings/comments/index.html new file mode 100644 index 0000000000..aef0c03a46 --- /dev/null +++ b/v3/theme-settings/comments/index.html @@ -0,0 +1 @@ +选择评论系统 - Volantis

      目前支持的评论系统有: Valine, MiniValine, Disqus, Gitalk, Vssue, Livere, Isso, Hashover

      blog/_config.volantis.yml
      comments:
      title: <i class='fas fa-comments'></i> 评论
      subtitle:
      service: valine # valine, minivaline, disqus, gitalk, vssue, livere, isso, hashover

      一款快速、简洁且高效的无后端评论系统
      https://valine.js.org

      blog/_config.volantis.yml
      comments:
      ...
      service: valine
      ...
      valine:
      appId: # your appId
      appKey: # your appKey
      js: https://unpkg.com/valine@1.4/dist/Valine.min.js
      ... 可选配置项详见源码

      其中,placeholder 支持在 front-matter 中设置。

      front-matter
      ---
      valine:
      placeholder: 你觉得xxx怎么样呢?
      ---

      也可以通过设置 valine.path 实现多个页面共用一个评论框。

      front-matter
      ---
      valine:
      path: /
      ---

      一款快速、简洁且高效的无后端评论系统
      https://github.com/MiniValine/MiniValine/

      blog/_config.volantis.yml
      comments:
      ...
      service: minivaline
      ...
      minivaline:
      appId: # Your leancloud application appid
      appKey: # Your leancloud application appkey
      ... 可选配置项详见源码

      Vue 驱动的、基于 Issue 的评论插件
      https://vssue.js.org/zh/

      blog/_config.volantis.yml
      comments:
      ...
      service: vssue
      ...
      vssue:
      owner:
      repo:
      clientId:
      clientSecret:

      A modern comment component based on Github Issue and Preact.
      https://gitalk.github.io/

      blog/_config.volantis.yml
      comments:
      ...
      service: gitalk
      ...
      gitalk:
      clientID:
      clientSecret:
      repo:
      owner:
      admin: # []

      clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤:

      1. 点击 GitHub -> Settings https://github.com/settings/profile
      2. 点击 Developer settings https://github.com/settings/developers
      3. 点击 New OAuth App https://github.com/settings/applications/new
      4. 填写信息:
        Application name 随便填,我的是:xaoxuu.com
        Homepage URLAuthorization 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.yml
      comments:
      ...
      service: disqus
      ...
      disqus:
      shortname:

      Communication makes better world.
      https://www.livere.com/

      blog/_config.volantis.yml
      comments:
      ...
      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.yml
      comments:
      ...
      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.yml
      comments:
      ...
      service: hashover
      ...
      hashover:
      src: https://example.com/(path/)comments.php
      blog/themes/volantis/layout/_third-party/comments/评论系统名称/layout.ejs
      这里写布局代码
      blog/themes/volantis/layout/_third-party/comments/评论系统名称/script.ejs
      这里要写加载 js 的代码

      收录更多评论系统

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/configuration/index.html b/v3/theme-settings/configuration/index.html new file mode 100644 index 0000000000..ca65316d50 --- /dev/null +++ b/v3/theme-settings/configuration/index.html @@ -0,0 +1 @@ +主题配置文件 - Volantis

      使用代替主题配置文件

      第 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

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/cover/index.html b/v3/theme-settings/cover/index.html new file mode 100644 index 0000000000..4b8324c3fc --- /dev/null +++ b/v3/theme-settings/cover/index.html @@ -0,0 +1 @@ +网站与文章封面 - Volantis

      封面方案

      blog/_config.volantis.yml
      cover:
      scheme: docs # docs, blog
      ...

      目前主题提供两种封面方案,全屏封面适用于项目文档,半屏封面适用于个人博客。您可以修改参数决定在任何页面是否显示。

      封面布局

      blog/_config.volantis.yml
      cover:
      ...
      layout: dock # search (搜索), dock (坞), featured (精选), focus (焦点)
      ...

      默认显示设置

      blog/_config.volantis.yml
      cover:
      ...
      display:
      home: true
      archive: false
      others: false # can be written in front-matter 'cover: true'

      由于主页、归档是hexo自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter 中通过设置 cover: true/false 来决定显示封面或者不显示封面。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/footer/index.html b/v3/theme-settings/footer/index.html new file mode 100644 index 0000000000..3fb0135985 --- /dev/null +++ b/v3/theme-settings/footer/index.html @@ -0,0 +1 @@ +设置网站页脚 - Volantis

      您通过 layout 可以自由布局网站页脚内容 aplayer, social, license, info, copyright

      blog/_config.volantis.yml
      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-2021 XXX](/)'
      # You can add your own property here. (Support markdown, for example: br: '<br>')
      br: '<br>'

      其中,aplayer 需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如:

      blog/_config.volantis.yml
      footer:
      layout: [..., br, hello, ...]
      ...
      # You can add your own property here. (Support markdown, for example: br: '<br>')
      br: '<br>'
      hello: '[Hello World](/)'

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/layout/index.html b/v3/theme-settings/layout/index.html new file mode 100644 index 0000000000..013d7f492a --- /dev/null +++ b/v3/theme-settings/layout/index.html @@ -0,0 +1 @@ +设置默认布局 - Volantis

      您可以自由决定每个页面是否显示侧边栏,侧边栏显示什么小部件,正文区域显示什么卡片,文章卡片显示什么 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 库中取值外,还可以选择 articlecomments )。

      请别着急,具体的库配置将在下文详细讲解。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/meta/index.html b/v3/theme-settings/meta/index.html new file mode 100644 index 0000000000..d6492dbc01 --- /dev/null +++ b/v3/theme-settings/meta/index.html @@ -0,0 +1 @@ +元数据组件 - Volantis

      meta 即文章的元数据,描述文章的作者、发布时间、更新时间等等信息,Volantis 不替您决定,显示什么图标、如何描述都可以自定义。

      blog/_config.volantis.yml
      meta:
      # 文章标题
      title: # 暂无配置
      # 默认文章作者(可在front-matter中覆盖)
      author:
      avatar: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png
      - id: qzone
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png
      - id: weibo
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png
      # - id: qrcode # 当id为qrcode时需要安装插件 npm i -S hexo-helper-qrcode
      # img: https://gcore.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'

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/navbar/index.html b/v3/theme-settings/navbar/index.html new file mode 100644 index 0000000000..2870a96065 --- /dev/null +++ b/v3/theme-settings/navbar/index.html @@ -0,0 +1 @@ +设置网站导航栏 - Volantis

      导航栏配置

      导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。

      blog/_config.volantis.yml
      navbar:
      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/

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/plugins/index.html b/v3/theme-settings/plugins/index.html new file mode 100644 index 0000000000..0531c0a624 --- /dev/null +++ b/v3/theme-settings/plugins/index.html @@ -0,0 +1 @@ +第三方插件 - Volantis

      插件库

      Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。

      blog/_config.volantis.yml
      plugins:
      ################ required plugins ################

      # jquery
      jquery: https://unpkg.com/jquery@3.5/dist/jquery.min.js

      ################ optional plugins ################

      # fontawesome
      fontawesome: https://unpkg.com/@fortawesome/fontawesome-free@5.13/css/all.min.css
      # fontawesome animation
      fontawesome_animation: https://gcore.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css
      # fancybox
      fancybox: https://unpkg.com/@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://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js

      ######## Plugins to optimize the experience:
      # highlight.js
      highlightjs:
      js: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js
      css: https://unpkg.com/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://unpkg.com/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://unpkg.com/clipboard@2/dist/clipboard.min.js

      ######## Plugins for SEO:
      # Traffic statistics (very slow loading)
      busuanzi: https://gcore.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://unpkg.com/node-waves@0.7.6/dist/waves.min.css
      js: https://unpkg.com/node-waves@0.7.6/dist/waves.min.js

      # Typing Effects
      comment_typing: #https://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js

      # Slide Background
      backstretch:
      enable: true
      js: https://unpkg.com/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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg
      - https://gcore.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://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      - https://unpkg.com/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://unpkg.com/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://unpkg.com/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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg
      ...

      幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。

      highlight.js

      blog/_config.volantis.yml
      plugins:
      ...
      highlightjs:
      js: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@9.18.1/build/highlight.min.js
      css: https://unpkg.com/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://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      - https://unpkg.com/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

      Artitalk

      blog/_config.volantis.yml
      plugins:
      ...
      # 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: #说说字体颜色

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/search/index.html b/v3/theme-settings/search/index.html new file mode 100644 index 0000000000..71fa9492fe --- /dev/null +++ b/v3/theme-settings/search/index.html @@ -0,0 +1 @@ +站内搜索 - Volantis
      blog/_config.volantis.yml
      search:
      enable: true
      service: hexo # hexo, google, algolia, azure, baidu
      js: https://gcore.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

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/style/index.html b/v3/theme-settings/style/index.html new file mode 100644 index 0000000000..1c61b9e698 --- /dev/null +++ b/v3/theme-settings/style/index.html @@ -0,0 +1 @@ +自定义主题外观 - Volantis

      最大布局宽度

      blog/_config.volantis.yml
      style:
      ...
      max_width: 1080px # Sum of body width and sidebar width

      网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。

      抗锯齿

      blog/_config.volantis.yml
      style:
      ...
      font_smoothing: true # font-smoothing for webkit

      自定义光标样式

      blog/_config.volantis.yml
      style:
      ...
      cursor:
      enable: true
      text: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/text.png
      pointer: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png
      default: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png
      not-allowed: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/circle.png
      zoom-out: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png
      zoom-in: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png
      grab: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png

      导航栏样式

      您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有:

      • shadow:卡片阴影。
      • floatable:当鼠标移动到容器内时,呈现出浮起来的效果。
      • blur:背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。
      blog/_config.volantis.yml
      style:
      ...
      navbar:
      height: 64px
      effect: [shadow, blur] # [shadow, floatable, 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] # [shadow, floatable, blur]

      正文区域样式

      视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。您可以在 language: true 这里设置代码块显示语言名称。text_align 可以设置 h1/h2/h3/h4/p 的文字对齐方向。

      blog/_config.volantis.yml
      style:
      ...
      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.yml
      style:
      ...
      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.yml
      style:
      ...
      fontfamily:
      logofont:
      fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial'
      name: 'Varela Round'
      url: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf
      weight: normal
      style: normal
      codefont:
      fontfamily: 'Menlo, Monaco'
      name: 'Monaco'
      url: https://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/Monaco/Monaco.ttf
      weight: normal
      style: normal

      自定义颜色

      blog/_config.volantis.yml
      style:
      ...
      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.yml
      rightmenu:
      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/

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v3/theme-settings/widget/index.html b/v3/theme-settings/widget/index.html new file mode 100644 index 0000000000..7524dab725 --- /dev/null +++ b/v3/theme-settings/widget/index.html @@ -0,0 +1 @@ +卡片式组件 - Volantis

      widget 即小部件,大部分小部件都可以放置在侧边栏,一部分已经为正文区域显示做了优化,还有一部分只可以放置在文章页脚部分。与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。

      查看所有相关配置
      blog/_config.volantis.yml
      widget:
      # The following can be written in `blog/source/_data/widget.yml`
      # ---------------------------------------
      # blogger info widget
      blogger:
      class: blogger
      display: [desktop] # [desktop, mobile]
      avatar: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.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/

      每一个小部件都有 classdisplay,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。

      小部件名:
      class: 小部件类别
      display: [小部件在桌面端显示, 小部件在移动设备显示]

      博主信息部件

      blog/_config.volantis.yml
      blogger:
      class: blogger
      display: [desktop] # [desktop, mobile]
      avatar: https://gcore.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: falsesocial 的具体内容请在网站页脚部分设置。

      文章目录部件

      blog/_config.volantis.yml
      toc:
      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_numbermin_depthmax_depth 代表 TOC 支持的标题层级,最大范围是2~6。

      文章分类部件

      blog/_config.volantis.yml
      category:
      class: category
      display: [desktop] # [desktop, mobile]
      header:
      icon: fas fa-folder-open
      title: 文章分类
      url: /blog/categories/

      这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。

      标签云部件

      blog/_config.volantis.yml
      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'

      这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。

      相关文章部件

      blog/_config.volantis.yml
      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

      这个小部件建议放置在文章页脚,要使用这个部件,您需要安装插件:

      npm i -S hexo-related-popular-posts

      值得注意的是,开启了这个功能之后,每次修改文章内容包括 front-matter 之后,都需要重新 hexo s

      文章版权部件

      blog/_config.volantis.yml
      copyright:
      class: copyright
      display: [desktop, mobile] # [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] # [desktop, mobile]
      height: 64px # Automatic height if not set
      fancybox: true
      images:
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png

      您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。

      通用文本部件

      blog/_config.volantis.yml
      repos:
      class: text
      display: [desktop] # [desktop, mobile]
      header:
      icon: fab fa-github
      title: 点个赞吧
      url: https://github.com/xaoxuu/
      content:
      - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。'
      - '[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)'
      - '[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)'
      - '[<img src="https://gcore.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] # [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 中的每一项支持的属性有: nameurliconimgavatar,其中 img 是方形图片的链接,avatar 是圆形图片的链接。

      参考资料

      这个部件的布局继承自 list 部件,用于展示文章的参考资料。请将您的 Volantis 升级至 2.5 版本以上使用。

      blog/_config.volantis.yml
      references:
      class: references # is subclass of list
      display: [desktop, mobile] # [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] # [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 # excerpt, more, content

      您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid 属性和文章的 front-matter 中设置一样的 pid 即可。 content 代表这个部件显示的内容,可选 excerptmorecontent 分别对应文章的摘要、摘要后面的内容、全文。

      部件库文件

      部件库中的所有部件都可以写在部件库文件中,您需要创建一个文件在以下路径:

      blog/source/_data/widget.yml

      文件内容示例:widget.yml

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v4/advanced-settings/index.html b/v4/advanced-settings/index.html new file mode 100644 index 0000000000..a92d27178f --- /dev/null +++ b/v4/advanced-settings/index.html @@ -0,0 +1 @@ +进阶设定 - 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
      ---

      为网站提速

      加载速度

      • 减少不必要的 js 插件,例如字数统计、动态背景。

      • 查找并解决拖慢速度的资源,以 Chrome 浏览器为例:

        1. 页面中点击右键,选择「检查」。
        2. 在右边的窗口中「Network」选项卡,并勾选「Disable cache」。
        3. 刷新网页,查看加载速度慢的资源。
          3.1. 加载缓慢的图片,建议使用 CDN。
          3.2. 加载缓慢的可以不用的 js 插件,建议舍弃。
          3.3. 加载缓慢却必须使用的 js 插件,建议下载并自己上传至 jsdelivr。

      运行速度

      • 访问具有动态特效背景(如雪花、粒子等)的网站时,手机很快会发烫变卡,笔记本很快会风扇狂转并且浏览器提示建议关闭此页面。如果你希望网站有好的使用体验请尽量不要安装这类插件。

      优化 SEO

      blog/_config.volantis.yml
      seo:
      # 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 中,可以设置 keywordsdescriptionrobotsseo_title。其中 seo_title 仅仅用作网页标题,优先级高于 title

      使用 CDN

      对于大部分将博客 deploy 到 GitHub 的用户来说,直接加载本地资源速度比较慢,可以使用 jsdelivr 为开源项目提供的 CDN 服务。

      开启方法

      blog/_config.volantis.yml
      # use_cdn: /source/js/* 中的JS文件(JS Only)使用jsdelivr的min版本加速
      # 默认使用 https://unpkg.com/hexo-theme-volantis@<%- theme.info.theme_version %>/source/js/*.min.js 的CDN压缩版本(min.js),注意版本号对应关系!!可以通过修改以下配置项覆盖
      # 开发者注意 use_cdn 设置为 false
      use_cdn: true
      info:
      theme_version: 'x.x.x' # This is theme's version.
      cdn:
      js: # https://unpkg.com/hexo-theme-volantis@<%- theme.info.theme_version %>/source/js/app.min.js # 注意版本!!!
      css:
      first: # /css/first.css (默认不提供CDN,first.css 中为首屏渲染的样式,内含 cover navbar search 的样式。)
      style: # /css/style.css (默认不提供CDN,style.css 为异步延迟加载的样式。)

      如果你需要对样式进行 DIY,可以只关闭 style 文件的 CDN。

      如果你需要对样式进行 DIY,请注意首屏渲染和异步延迟加载的差异。

      自定义 CDN

      如果你把对应的文件上传到自己的 CDN 服务器,可以把对应的链接改为自己的 CDN 链接。

      尝试使用 Terser 压缩 ES6

      安装压缩工具

      npm install -g gulp
      npm install --save-dev gulp gulp-html-minifier-terser gulp-htmlclean gulp-htmlmin gulp-minify-css gulp-terser

      gulp 配置文件

      blog/gulpfile.js
      var gulp = require('gulp');
      var minifycss = require('gulp-minify-css');
      var htmlmin = require('gulp-html-minifier-terser');
      var htmlclean = require('gulp-htmlclean');
      var terser = require('gulp-terser');

      // 压缩css文件
      const minify_css = () => (
      gulp.src(['./public/**/*.css'])
      .pipe(minifycss())
      .pipe(gulp.dest('./public'))
      );

      // 压缩html文件
      const minify_html = () => (
      gulp.src(['./public/**/*.html','!./public/{lib,lib/**}'])
      .pipe(htmlclean())
      .pipe(htmlmin({
      removeComments: true,
      minifyJS: true,
      minifyCSS: true,
      minifyURLs: true,
      }))
      .pipe(gulp.dest('./public'))
      )

      // 压缩js文件
      const minify_js = () => (
      gulp.src(['./public/**/*.js', '!./public/**/*.min.js','!./public/{lib,lib/**}'])
      .pipe(terser())
      .pipe(gulp.dest('./public'))
      )

      module.exports = {
      minify_html: minify_html,
      minify_css: minify_css,
      minify_js: minify_js
      };
      gulp.task('one', gulp.parallel(
      minify_html,
      minify_css,
      minify_js
      ))

      gulp.task('default', gulp.series('one'));

      运行压缩

      gulp

      安装 Service Worker 服务

      blog/_config.yml
      # 全局导入
      import:
      script:
      - <script>"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then(function(n){n.onupdatefound=function(){var e=n.installing;e.onstatechange=function(){switch(e.state){case"installed":navigator.serviceWorker.controller?console.log("Updated serviceWorker."):console.log("serviceWorker Sucess!");break;case"redundant":console.log("The installing service worker became redundant.")}}}}).catch(function(e){console.log("Error during service worker registration:",e)}); </script>

      blog/source中创建sw.js文件。

      内容如下:

      importScripts('https://unpkg.com/workbox-cdn@5.1.3/workbox/workbox-sw.js');

      workbox.setConfig({
      modulePathPrefix: 'https://unpkg.com/workbox-cdn@5.1.3/workbox/'
      });

      const { core, precaching, routing, strategies, expiration, cacheableResponse, backgroundSync } = workbox;
      const { CacheFirst, NetworkFirst, NetworkOnly, StaleWhileRevalidate } = strategies;
      const { ExpirationPlugin } = expiration;
      const { CacheableResponsePlugin } = cacheableResponse;

      const cacheSuffixVersion = '-000010', // 缓存版本号 极端重要,修改静态文件后发布网页一定要修改缓存版本号
      maxEntries = 100;

      self.addEventListener('activate', (event) => {
      event.waitUntil(
      caches.keys().then((keys) => {
      return Promise.all(keys.map((key) => {
      if (!key.includes(cacheSuffixVersion)) return caches.delete(key);
      }));
      })
      );
      });


      core.setCacheNameDetails({
      prefix: 'volantis', // 极端重要 自己拟定一个名字
      suffix: cacheSuffixVersion
      });

      core.skipWaiting();
      core.clientsClaim();
      precaching.cleanupOutdatedCaches();

      /*
      * Precache
      * - Static Assets
      */
      precaching.precacheAndRoute( // 极端重要 定义首次缓存的静态文件 如果开启CDN需要修改为CDN链接
      [
      { url: '/css/first.css', revision: null },
      { url: '/css/style.css', revision: null },
      { url: '/js/app.js', revision: null },
      ],
      );

      /*
      * Cache File From CDN
      *
      * Method: CacheFirst
      * cacheName: static-immutable
      * cacheTime: 30d
      */

      // cdn.jsdelivr.net - cors enabled
      routing.registerRoute(
      /.*cdn\.jsdelivr\.net/,
      new CacheFirst({
      cacheName: 'static-immutable' + cacheSuffixVersion,
      fetchOptions: {
      mode: 'cors',
      credentials: 'omit'
      },
      plugins: [
      new ExpirationPlugin({
      maxAgeSeconds: 30 * 24 * 60 * 60,
      purgeOnQuotaError: true
      })
      ]
      })
      );

      // m7.music.126.net - cors enabled
      routing.registerRoute(
      /.*m7\.music\.126\.net/,
      new CacheFirst({
      cacheName: 'static-immutable' + cacheSuffixVersion,
      fetchOptions: {
      mode: 'cors',
      credentials: 'omit'
      },
      plugins: [
      new ExpirationPlugin({
      maxAgeSeconds: 30 * 24 * 60 * 60,
      purgeOnQuotaError: true
      })
      ]
      })
      );

      /*
      * No Cache
      *
      * Method: networkOnly
      */
      routing.registerRoute(
      /.*baidu\.com.*/,
      new NetworkOnly()
      );
      /*
      * Others img fonts
      * Method: staleWhileRevalidate
      */
      routing.registerRoute(
      // Cache image fonts files
      /.*\.(?:png|jpg|jpeg|svg|gif|webp|ico|eot|ttf|woff|woff2|mp3)/,
      new StaleWhileRevalidate()
      );

      /*
      * Static Assets
      * Method: staleWhileRevalidate
      */
      routing.registerRoute(
      // Cache CSS files
      /.*\.(css|js)/,
      // Use cache but update in the background ASAP
      new StaleWhileRevalidate()
      );

      /*
      * sw.js - Revalidate every time
      * staleWhileRevalidate
      */
      routing.registerRoute(
      '/sw.js', // 本文件名
      new StaleWhileRevalidate()
      );

      /*
      * Default - Serve as it is
      * networkFirst
      */
      routing.setDefaultHandler(
      new NetworkFirst({
      networkTimeoutSeconds: 3
      })
      );

      安装「相关文章」插件

      1. 安装插件

        npm i -S hexo-related-popular-posts
      2. 插件的自定义配置方法:

      如果您使用了头图,可以在站点配置文件中添加以下设置来让相关文章显示正确的文章头图:

      blog/_config.yml
      popularPosts:
      eyeCatchImageAttributeName: headimg

      注意

      需要升级到 5.0.1 及以上版本才可以支持自定义头图,详见 #29

      分析与统计

      默认支持 不蒜子 的访问统计,可以自行添加百度统计和 Google Analytics。

      字数和阅读时长

      1. 安装以下插件:
        npm i --save hexo-wordcount
      2. 修改配置文件,将 wordcount 插件打开
        blog/_config.volantis.yml
        plugins:
        ...
        # 文章字数统计、阅读时长,开启需要安装插件: npm i --save hexo-wordcount
        wordcount:
        enable: #true
      3. 然后修改配置文件,将 wordcount 写入需要显示的 meta 位置:
        blog/_config.volantis.yml
        # 文章布局
        article:
        ...
        # 文章详情页面的文章卡片本体布局方案
        body:
        # 文章顶部信息
        # 从 meta_library 中取
        top_meta: [..., wordcount, ...]
        ...
        # 文章底部信息
        # 从 meta_library 中取
        bottom_meta: [..., wordcount, ...]

      CNZZ 统计

      请参考 ZYMIN 的这篇教程:

      更多进阶玩法

      详见 @TRHX 的这篇博客:

      内含卡片半透明、增加卡通人物、自定义鼠标样式、鼠标特效、烟花特效、彩色滚动字体、网站运行时间、动态浏览器标题、雪花飘落特效等多种详细教程。

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v4/getting-started/index.html b/v4/getting-started/index.html new file mode 100644 index 0000000000..a7704fe09b --- /dev/null +++ b/v4/getting-started/index.html @@ -0,0 +1 @@ +开始使用 - Volantis


      Volantis 是一个功能丰富、高度模块化的 Hexo 博客主题。得益于其强大的模块化特性,您可以轻松搭建一个极简风格的博客,也可以仿照官网搭建一个多人协作的、包含文档模块的大体量综合型博客。

      所有的 Volantis 用户都可以按照格式自行创建 Issue 来将自己的博客添加到官网的示例博客页面中。

      准备工作

      自建博客需要一定的相关知识,在开始前,请务必确保您会使用 markdown 语法,掌握简单的 git 知识,最最重要的是,遇到困难知道该怎么寻求解决:

      1. 翻阅和搜索文档
      2. 搜索 issues 中是否有解决办法
      3. 新建 issue 并按照要求进行操作,详尽地描述您遇到的问题

      如果您没有使用过 Hexo 也不要着急,可以先通读一遍 Hexo 中文文档,要想使用地得心应手,最好参照团队提供的开源项目的源码进行搭建:

      Demo 源码官网源码

      如果您从旧版本更新或着其它主题迁移,请确保环境版本不要太低,否则会产生兼容性问题。

      Hexo: 4.2 ~ 5.x
      hexo-cli: 3.1 ~ 4.x
      node.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-x/p/hexo-theme-volantis.git themes/volantis

      第 3/3 步:检查并安装依赖

      安装 Hexo 搜索的依赖包:

      npm i hexo-generator-search hexo-generator-json-content

      安装 Stylus 渲染器:

      npm i hexo-renderer-stylus

      版本更新注意事项

      使用主题的时候,尽量 fork 主题到自己的 GitHub,然后进行修改并使用。这样做的好处是:当主题进行重要更新的时候可以根据需要拉取合并代码,使自己 DIY 的主题能够通过更新获取 BUG 修复或者新特性。

      如果不懂请自行搜索关键词:fork 更新

      实用小技巧

      所有需要写在主题配置文件中的配置都可以写在站点配置文件的 theme_config: 中,在 Hexo 5.0 后,还可以写在 _config.volantis.yml 文件中,详见 Hexo 官方文档:

      也可以直接查看本站源码中站点配置文件的写法:_config.volantis.yml

      请对照 更新日志 进行更新,下面是更新之后需要注意的事项:

      2021-01-15 4.2.0 -> 4.3.0

      更多关于Volantis的小版本更新请点击上方更新日志按钮

      1. 增加 disqusjs 评论系统;

      2. 增加 waline 评论系统;

      3. 增加 旧版 Internet Explorer 淘汰行动

      4. 增加 Tidio聊天功能;

      5. 增加 twitoo waline valine minivaline 文章阅读量统计;

      6. 增加 bbtalk.js;

      7. 修复#514 #538 #567 #431 #468

      8. 修复关闭 pjax 时 cover样式失效 和 报错 的问题 。

      2020-09-26 3.0.0 -> 4.0.0

      4.0.0 的配置文件改动非常大,强烈建议不要在旧的配置文件上改。

      1. 原数据文件中的配置项不再支持,请在配置文件中进行设置。
      2. 主题配置文件进行了重新设计,需要「完全」重新配置一遍。
      3. 友链使用数据文件,并支持 issues 标签实现动态自助友链。
      4. 原 meta 自定义布局现在只支持文章内部的 top_meta 和 bottom_meta 。
      5. 文章列表页面布局现在只能在有限范围内进行自定义。
      6. 侧边栏组件现在只支持侧边栏位置;文章末尾有专用的组件。
      7. 如果安装了懒加载插件,需要卸载掉,使用主题内置的懒加载(和插件冲突)。
      8. 如果想要关闭评论,需要改为 comments: false
      9. 如果要隐藏文章顶部或者底部的 meta 标签,需设置 top_meta: false 或者 bottom_meta: false
      10. 如果需要同时隐藏标题和顶部的 meta 标签也可以把 title: xxx 改为 seo_title: xxx
      11. 作者的信息使用数据文件进行定义,文章中只需要写 author: xxx 而不需要重复写作者的信息了。
      12. 现在只有 gallery 标签的图片支持放大。
      13. 友链页面 layout: links 改为 layout: friends

      许可协议

      本主题采用 MIT开源许可协议 ,永久无限制免费使用。

      MIT开源许可协议

      被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
      被授权人可根据程式的需要修改授权条款为适当的内容。
      在软件和软件的所有副本中都必须包含版权声明和许可声明。

      配置与使用

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v4/page-settings/index.html b/v4/page-settings/index.html new file mode 100644 index 0000000000..a61b3b7eeb --- /dev/null +++ b/v4/page-settings/index.html @@ -0,0 +1 @@ +页面配置 - Volantis

      页面布局模板

      布局模板

      取值含义
      page独立页面
      post文章页面
      docs文档页面
      category分类页面
      tag标签页面
      friends友链页面
      list列表页面

      page & post & docs

      这三种页面相同,但是有以下细微区别:

      • post 文章有 title 时,向下滚动网页,导航栏会向上移出屏幕显出文章标题,而 page 和 docs 不会。
      • post 文章末尾最多可以显示「参考资料」、「相关文章」、「版权标识」、「打赏」四个模块。
      • docs 文章末尾最多可以显示「参考资料」一个模块。

      除了归档页面是自动生成的,其它独立页面都需要手动创建 md 文件。

      归档页面

      归档页面是自动生成的,并且初始化的时候已经生成,路径如下:

      blog/_config.yml
      # Directory
      archive_dir: archives

      关于页面

      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: 传统布局, 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: # 描述

      不同的布局方式,会用到一部分的字段,一般来说,titleavatarurl 都是必须的。这些数据被转成 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, 可能是输入地址有误或该地址已被删除 %}

      front-matter

      front-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量。更多请见 Hexo 官方文档:#front-matter

      字段含义值类型默认值
      layout布局模版String-
      title页面标题String-
      seo_title网页标题Stringpage.title
      short_title页面标题(在group列表中显示)Stringpage.title
      date创建时间Date文件创建时间
      updated更新日期Date文件修改时间
      link外部文章网址String-
      music内部音乐控件[Object]-
      robotsrobotsString-
      keywords页面关键词String-
      description页面描述、摘要String-
      cover是否显示封面Booltrue
      top_meta是否显示文章或页面顶部的meta信息Booltrue
      bottom_meta是否显示文章或页面底部的meta信息Booltrue
      sidebar页面侧边栏Bool, Arraytheme.layout.*.sidebar
      body页面主体元素Arraytheme.layout.on_page.body
      mathjax是否渲染公式Bool, Stringfalse
      thumbnail缩略图Stringfalse
      icons图标Array[]
      pin是否置顶Boolfalse
      headimg文章头图url-

      layout:post 时特有的字段:

      字段含义值类型默认值
      author文章作者[Object]config.author
      categories分类String, Array-
      tags标签String, Array-
      toc是否生成目录Booltrue

      music

      字段是否必须值类型
      servernetease, tencent, kugou, xiami, baidu
      typesong, playlist, album, search, artist
      idsong id / playlist id / album id / search keyword

      文章置顶

      在 front-matter 中设置以下值:

      front-matter
      pin: true

      文章分类

      多个分类有两种关系,一种是层级(等同于文件夹),一种是并列(等同于标签)。

      多级分类:

      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 --> 前后一定要有空行,不然可能导致显示错位。

      设置文章作者

      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 即可:

      front-matter
      ---
      title: Jon Snow | Game of Thrones Wiki | Fandom
      author: Jon
      ---

      引入外部文章

      利用 link,搭配自定义的文章作者信息,你可以在文章列表中显示外部文章或者网址,例如:

      blog/source/_data/author.yml
      xaoxuu:
      name: xaoxuu
      avatar: https://gcore.jsdelivr.net/gh/xaoxuu/assets@master/avatar/avatar.png
      url: https://xaoxuu.com
      front-matter
      ---
      layout: post
      date: 2017-07-05
      title: []如何搭建基于Hexo的独立博客
      categories: [Dev, Hexo]
      tags:
      - Hexo
      author: xaoxuu
      link: 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
      ---

      页面自定义布局

      显示迷你音乐播放器

      标题右边显示迷你音乐播放器,支持的字段有:servertypeid

      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: 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
      ---
      cover: true
      ---

      显示侧边栏

      通过自由设置边栏卡片来删减对应页面的冗余信息,提高有价值的信息在页面中的权重。

      如果某个页面不需要侧边栏,可以这样写:

      front-matter
      ---
      sidebar: []
      ---

      某个页面想指定显示某几个侧边栏,就这样写:

      front-matter
      ---
      sidebar: [grid, toc, tags] # 放置任何你想要显示的侧边栏部件
      ---

      关闭评论

      front-matter
      ---
      comments: false
      ---

      渲染公式

      默认是不渲染的,如果文章内有公式,需要在 front-matter 中设置开启。即便开启了,文章列表中也不会进行渲染,请注意不要把公式写在文章开头。

      example.md:
      ---
      title: 渲染公式(MathJax)
      date: 2020-02-23
      mathjax: 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 的这篇文章:

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v4/site-settings/index.html b/v4/site-settings/index.html new file mode 100644 index 0000000000..bf10d764b2 --- /dev/null +++ b/v4/site-settings/index.html @@ -0,0 +1 @@ +站点配置 - Volantis

      博客根目录下的 _config.yml 文件通常负责站点相关配置、第三方 npm 插件相关的配置。

      网站标题

      blog/_config.yml
      # 网站标题
      title: my blog

      网站图标

      blog/_config.yml
      # 网站图标,更多尺寸等图标请使用import方式批量导入
      favicon: https://gcore.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://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png">
      - <link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png">
      - <link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png">
      - <link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      - <link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5">
      - <link rel="shortcut icon" href="https://gcore.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 中添加各种标签。metalink 对应 head 中的 <meta><link> 标签。script 可以在 body 末尾导入 js 代码。

      blog/_config.yml
      import:
      meta:
      - <meta name="msapplication-TileColor" content="#ffffff">
      - <meta name="msapplication-config" content="https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/apple-touch-icon.png">
      - <link rel="icon" type="image/png" sizes="32x32" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-32x32.png">
      - <link rel="icon" type="image/png" sizes="16x16" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon-16x16.png">
      - <link rel="manifest" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
      - <link rel="mask-icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/safari-pinned-tab.svg" color="#5bbad5">
      - <link rel="shortcut icon" href="https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/favicon.ico">
      script:
      - <script></script>

      更多

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v4/tag-plugins/index.html b/v4/tag-plugins/index.html new file mode 100644 index 0000000000..fe3158d4a4 --- /dev/null +++ b/v4/tag-plugins/index.html @@ -0,0 +1 @@ +标签插件 - Volantis

      为了兼容老用户,旧的标签插件在重构之前依然沿用旧的格式,即「英文逗号+空格」作为参数分隔符,而部分新增标签插件是「空格+英文竖线+空格」,请注意区分。

      我们也在探索哪种分隔符既简单又不容易引起冲突,所以可能存在多种格式,具体以对应文档描述为准。

      text

      这是一些文本样式标签:

      下划线 的文本

      example.md:
      带 {% u 下划线 %} 的文本

      着重号 的文本

      example.md:
      带 {% emp 着重号 %} 的文本

      波浪线 的文本

      example.md:
      带 {% wavy 波浪线 %} 的文本

      删除线 的文本

      example.md:
      带 {% del 删除线 %} 的文本

      键盘样式的文本 command + D

      example.md:
      键盘样式的文本 {% kbd command %} + {% kbd D %}

      密码样式的文本:这里没有验证码

      example.md:
      密码样式的文本:{% psw 这里没有验证码 %}

      span

      本插件最后更新于 2.5 版本
      {% span 样式参数, 文本内容 %}

      彩色文字

      在一段话中方便插入各种颜色的标签,包括:红色黄色绿色青色蓝色灰色

      超大号文字

      文档「开始」页面中的标题部分就是超大号文字。

      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

      p

      本插件最后更新于 2.5 版本
      {% p 样式参数, 文本内容 %}

      演示效果

      彩色文字

      在一段话中方便插入各种颜色的标签,包括:

      红色

      黄色

      绿色

      青色

      蓝色

      灰色

      超大号文字

      文档「开始」页面中的标题部分就是超大号文字。

      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

      note

      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 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

      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

      checkbox

      最后更新于 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

      radio

      最后更新于 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

      timeline

      最后更新于 3.0 版本
      {% timeline 时间线标题(可选) %}

      {% timenode 时间节点(标题) %}

      正文内容

      {% endtimenode %}

      {% timenode 时间节点(标题) %}

      正文内容

      {% endtimenode %}

      {% endtimeline %}

      演示效果

      2020-07-24 2.6.6 -> 3.0

      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 服务。

      2020-05-15 2.6.3 -> 2.6.6

      不需要额外处理。

      2020-04-20 2.6.2 -> 2.6.3

      1. 全局搜索 seotitle 并替换为 seo_title
      2. group 组件的索引规则有变,使用 group 组件的文章内,group: group_name 对应的组件名必须是 group_name
      3. 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 %}

      最后更新于 3.0 版本
      {% link 标题, 链接, 图片链接(可选) %}

      演示效果

      上述示例的源码

      example:
      {% link 如何参与项目, https://volantis.js.org/contributors/, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets@master/logo/256/safari.png %}

      button

      这个页面的标签将会在不久后重构

      基础按钮

      请将您的 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://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/avatar/avatar.png %}
      {% cell xaoxuu, https://xaoxuu.com, https://gcore.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://gcore.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://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/qrcode/heartmate_lite.png'>
      </a>
      {% endbtns %}

      如果需要显示类似「团队成员」之类的一组含有头像的链接:

      或者含有图标的按钮:

      圆形图标 + 标题 + 描述 + 图片 + 网格5列 + 居中


      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 %} |

      更多参数选择


      site

      网站卡片可以显示网站截图、logo、标题、描述,使用方法和友链标签一模一样,唯一的区别是数据文件名称为 sites.yml,可以和友链数据混用,通过分组过滤实现不一样的效果。

      示例写法
      {% sites only:community_team %}
      sites only:community_team

      dropmenu

      这个页面的标签将会在不久后重构

      下拉菜单

      请将您的 Volantis 升级至 3.0 版本以上使用。


      tab

      此插件移植自 NexT #tabs

      最后更新于 2.1 版本
      {% tabs 页面内不重复的ID %}
      <!-- tab 栏目1 -->
      内容
      <!-- endtab -->
      <!-- tab 栏目2 -->
      内容
      <!-- endtab -->
      {% endtabs %}

      演示效果

      。。。

      !!!

      上述示例的源码

      example:
      {% tabs tab-id %}

      <!-- tab 栏目1 -->

      。。。

      <!-- endtab -->

      <!-- tab 栏目2 -->

      !!!

      <!-- endtab -->

      {% endtabs %}

      folding

      最后更新于 2.3 版本
      {% folding 参数(可选), 标题 %}
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)
      {% endfolding %}

      演示效果

      查看图片测试

      查看默认打开的折叠框

      这是一个默认打开的折叠框。

      查看代码测试
      {% folding green, 查看代码测试 %}

      查看代码测试

      {% endfolding %}
      查看列表测试
      • haha
      • hehe
      查看嵌套测试
      查看嵌套测试2
      查看嵌套测试3

      hahaha

      上述示例的源码

      example:
      {% folding 查看图片测试 %}

      ![](https://gcore.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://gcore.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 代表默认打开。


      inlineimage

      Inlineimage 标签是一种行内图片标签,可以用来在一段话中间插入表情。

      本插件最后更新于 4.0 版本
      {% inlineimage 图片链接, height=高度(可选) %}

      演示效果

      这是 一段话。

      这又是 一段话。

      上述示例的源码

      example:
      这是 {% inlineimage https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/0000.gif %} 一段话。

      这又是 {% inlineimage https://gcore.jsdelivr.net/gh/volantis-x/cdn-emoji/aru-l/5150.gif, height=40px %} 一段话。

      可以支持的参数

      高度

      height=20px

      image

      Image 标签是一种针对单个图片应用场景的标签,支持图片描述文字和指定宽度。

      本插件最后更新于 4.0 版本
      {% image 链接, width=宽度(可选), height=高度(可选), alt=描述(可选), bg=占位颜色(可选) %}

      演示效果

      添加描述:

      每天下课回宿舍的路,没有什么故事。
      每天下课回宿舍的路,没有什么故事。

      指定宽度:

      image

      指定宽度并添加描述:

      每天下课回宿舍的路,没有什么故事。
      每天下课回宿舍的路,没有什么故事。

      设置占位背景色:

      优化不同宽度浏览的观感
      优化不同宽度浏览的观感

      上述示例的源码

      example:
      添加描述:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, alt=每天下课回宿舍的路,没有什么故事。 %}

      指定宽度:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px %}

      指定宽度并添加描述:

      {% image https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg, width=400px, alt=每天下课回宿舍的路,没有什么故事。 %}

      设置占位背景色:

      {% image https://gcore.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

      Gallery 标签是一种针对一组图片应用场景的标签。

      本插件最后更新于 3.0 版本
      {% gallery 参数, 列数 %}
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)
      {% endgallery %}

      演示效果

      一行一个图片

      一行多个图片(不换行)

      多行多个图片(每行2~8个图片)

      上述示例的源码

      一行一个图片

      example.md:
      {% gallery %}
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg)
      {% endgallery %}

      一行多个图片(不换行)

      example.md:
      {% gallery %}
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B18FCBB3-67FD-48CC-B4F3-457BA145F17A.jpeg)
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg)
      ![图片描述](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/00E0F0ED-9F1C-407A-9AA6-545649D919F4.jpeg)
      {% endgallery %}

      多行多个图片(每行2~8个图片)

      example.md:
      {% gallery stretch, 4 %}
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/B951AE18-D431-417F-B3FE-A382403FF21B.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/AEB33F9D-7294-4CF1-B8C5-3020748A9D45.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/250662D4-5A21-4AAA-BB63-CD25CF97CFF1.jpeg)
      ![](https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/landscape/10A0FCE5-36A1-4AD0-8CF0-019259A89E03.jpeg)
      {% endgallery %}

      可以支持的参数

      对齐方向

      left, center, right

      缩放

      stretch

      列数

      逗号后面直接写列数,支持 2 ~ 8 列。设定列列数之后就是「多行多图」布局,此时图片默认左对齐。为了避免图片大小不一,建议搭配 stretch 来时图片放大填充。


      audio

      本插件最后更新于 2.4 版本
      {% audio 音频链接 %}

      演示效果

      上述示例的源码

      example:
      {% audio https://github.com/volantis-x/volantis-docs/releases/download/assets/Lumia1020.mp3 %}

      video

      本插件最后更新于 2.3 版本
      {% video 视频链接 %}

      演示效果

      100%宽度

      50%宽度

      25%宽度

      上述示例的源码

      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 列。


      frame

      这是一个能够将图片或者视频套入设备框架中的标签,可以用来更优雅地显示截图、录屏。

      本插件最后更新于 4.0 版本
      {% frame 框架名 | img=图片链接 | alt=图片描述(可选) | part=top/bottom(可选) %}
      {% frame 框架名 | video=视频链接 | part=top/bottom(可选) %}

      {% frame iphone11 | img=https://7.dusays.com/2020/09/28/baa33914a34ec.jpg | video=https://7.dusays.com/2020/09/28/39db723f1e200.mp4 | part=top %}

      在这个示例中同时出现了 imgvideo 那么它就是一个带有封面的视频,在视频加载完成之前会先显示视频封面。

      设备框架

      目前支持的有:

      iphone11

      如果您有以下其它设备框架图(svg),欢迎 PR 兼容。

      android, ipad, macbook, watch

      剪裁

      通过设置 part=top 或者 part=bottom 来显示上半部分或者下半部分,否则将显示完整的框架及其中的图片/视频。


      aplayer

      主题对 APlayer 插件的样式进行了兼容。安装插件:

      npm i -S hexo-tag-aplayer

      使用方法:


      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」等,例如:

      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 %}

      对应的仓库链接:

      友链

      {% 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 %}

      上述示例对应的仓库链接:

      Hexo 通用标签

      在文章中使用 <!-- more -->,那么 <!-- more --> 之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。详见 Hexo 官方文档:

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file diff --git a/v4/theme-settings/index.html b/v4/theme-settings/index.html new file mode 100644 index 0000000000..2b54486826 --- /dev/null +++ b/v4/theme-settings/index.html @@ -0,0 +1 @@ +主题配置 - Volantis

      创建主题配置文件

      主题目录下的 _config.yml 文件通常负责主题相关配置,我们强烈建议您使用代替的主题配置文件以防止自己的配置丢失。那么如何使用代替主题配置文件呢?

      第 1/2 步:创建配置文件

      在博客根目录的 _config.yml 文件旁边新建一个文件: _config.volantis.yml ,这个文件中的配置信息优先级高于主题文件夹中的配置文件。

      第 2/2 步:覆盖自定义配置

      当您需要修改某项内容时,例如导航栏菜单,那么您需要在主题配置文件中找到相关内容,复制进自己创建的配置文件中:

      blog/_config.volantis.yml
      navbar:
      visiable: auto # always, auto
      logo: # choose [img] or [icon + title]
      img: https://gcore.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

      自定义主题外观

      最大布局宽度

      blog/_config.volantis.yml
      custom_css:
      ...
      max_width: 1080px # Sum of body width and sidebar width

      网页所呈现的内容的最大宽度,即 body 和 sidebar 的宽度之和。

      抗锯齿

      blog/_config.volantis.yml
      custom_css:
      ...
      font_smoothing: true # font-smoothing for webkit

      自定义光标样式

      blog/_config.volantis.yml
      custom_css:
      ...
      cursor:
      enable: true
      text: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/text.png
      pointer: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/pointer.png
      default: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/left_ptr.png
      not-allowed: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/circle.png
      zoom-out: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/zoom-out.png
      zoom-in: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/zoom-in.png
      grab: https://gcore.jsdelivr.net/gh/inkss/common@master/cursor/openhand.png

      导航栏样式

      您可以设置导航栏的高度以及视觉特效,视觉特效目前可选的有:

      • shadow:卡片阴影。
      • floatable:当鼠标移动到容器内时,呈现出浮起来的效果。
      • blur:背景模糊效果(毛玻璃),当浏览器不支持时显示为不透明。
      blog/_config.volantis.yml
      custom_css:
      ...
      navbar:
      height: 64px
      effect: [shadow, blur] # [shadow, floatable, 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] # [shadow, floatable, blur]

      正文区域样式

      视觉特效参数同上,值得注意的是:卡片的 floatable 效果和 blur 效果相冲突。您可以在 language: true 这里设置代码块显示语言名称。text_align 可以设置 h1/h2/h3/h4/p 的文字对齐方向。

      blog/_config.volantis.yml
      custom_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.yml
      custom_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.yml
      custom_css:
      ...
      fontfamily:
      logofont:
      fontfamily: '"Varela Round", "PingFang SC", "Microsoft YaHei", Helvetica, Arial'
      name: 'Varela Round'
      url: https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-fonts/UbuntuMono/UbuntuMono-Regular.ttf
      weight: normal
      style: normal
      codefont:
      fontfamily: 'Menlo, Monaco'
      name: 'Monaco'
      url: https://gcore.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'
      # 列表 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.yml
      # 自定义右键菜单
      rightmenu:
      enable: true
      # hr: 分割线, music: 音乐控制器
      layout: [home, help, examples, contributors, hr, source_docs, source_theme, hr, print, hr, dark_mode, 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/
      dark_mode:
      name: Dark mode
      icon: fas fa-moon
      toggle: darkmode

      设置网站导航栏

      导航栏配置

      导航栏分为 logo、menu、search 三个区域设置,其中 logo 区域如果设置了图片,则不能显示图标和标题, menu 区域的设置可以写在一个单独的文件中。

      blog/_config.volantis.yml
      # 注意事项:建议规范全站路径 URL 最后带一个 "/" 例如 "about/"
      navbar:
      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/

      播放器

      在子菜单中,新增一个 icon: fas fa-compact-disc 的“菜单”就会被渲染成一个 APlayer 播放器。

      - name: 背景音乐
      icon: fas fa-compact-disc

      设置网站页脚

      您通过 layout 可以自由布局网站页脚内容 aplayer, social, license, info, copyright

      blog/_config.volantis.yml
      site_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-2021 XXX](/)'
      # You can add your own property here. (Support markdown, for example: br: '<br>')
      br: '<br>'

      其中,aplayer 需要在插件部分设置中启用。您可以新增文字属性,用于展示其它文字信息,例如:

      blog/_config.volantis.yml
      site_footer:
      layout: [..., br, hello, ...]
      ...
      # You can add your own property here. (Support markdown, for example: br: '<br>')
      br: '<br>'
      hello: '[Hello World](/)'

      网站与文章封面

      封面高度

      blog/_config.volantis.yml
      cover:
      height_scheme: full # full, half
      ...

      目前主题提供两种首页封面高度方案,其它页面均为半屏幕高度。

      封面布局方案

      blog/_config.volantis.yml
      cover:
      ...
      scheme: dock # search (搜索), dock (坞), featured (精选), focus (焦点)
      ...
      布局方案适合场景
      search注重搜索
      dock入口选项比较多
      featured选项在4个左右
      focus选项在4个左右

      默认显示设置

      blog/_config.volantis.yml
      cover:
      ...
      display:
      home: true
      archive: false
      others: false # can be written in front-matter 'cover: true'

      由于主页、归档是 hexo 自动生成的,您需要在主题配置文件中设置是否显示封面,而其它页面则可以在 front-matter 中通过设置 cover: true/false 来决定显示封面或者不显示封面。

      文章布局配置

      # 文章布局
      article:
      # 文章列表页面的文章卡片布局方案
      preview:
      scheme: landscape # landscape
      # pin icon for post
      pin_icon: https://gcore.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://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png
      - id: qzone
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png
      - id: weibo
      img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png
      - id: # qrcode # 当id为qrcode时需要安装插件 npm i hexo-helper-qrcode
      img: # https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/wechat.png
      - id: # telegram
      img: # https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/telegram.png

      其中 top_metabottom_meta 部分的取值自 meta_library 库。

      侧边栏配置

      侧边栏小组件与 meta 库不同的是:除了现有的 widget ,您可以很轻易地创建自己的 widget ,然后放在需要的地方。此外,您还可以将 widget 写在单独的文件中。

      查看所有相关配置
      blog/_config.volantis.yml
      sidebar:
      # 主页、分类、归档等独立页面
      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://gcore.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://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.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: '日'

      每一个小部件都有 classdisplay,前者代表这个小部件是什么,后者代表这个小部件在什么桌面和移动平台中是否显示,如果在移动平台显示,由于屏幕宽度有限,侧边栏的小部件则会被移动到正文区域下方,因此部分侧边栏小部件便失去意义,建议设置为仅桌面端显示。

      小部件名:
      class: 小部件类别
      display: [小部件在桌面端是否显示, 小部件在移动设备是否显示]

      博主信息部件

      blog/_config.volantis.yml
      blogger:
      class: blogger
      display: [desktop] # [desktop, mobile]
      avatar: https://gcore.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: falsesocial 的具体内容请在网站页脚部分设置。

      文章目录部件

      blog/_config.volantis.yml
      toc:
      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_numbermin_depthmax_depth 代表 TOC 支持的标题层级,最大范围是2~6。

      文章分类部件

      blog/_config.volantis.yml
      category:
      class: category
      display: [desktop] # [desktop, mobile]
      header:
      icon: fas fa-folder-open
      title: 文章分类
      url: /blog/categories/

      这个部件可以直接显示所有文章分类,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。

      标签云部件

      blog/_config.volantis.yml
      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'

      这个部件可以直接显示所有文章的标签,如果您希望有一个独立的页面来展示,需要自己创建一个文件,具体操作在「页面」部分文档中。

      二维码部件

      blog/_config.volantis.yml
      donate:
      class: qrcode
      display: [desktop, mobile] # [desktop, mobile]
      height: 64px # Automatic height if not set
      images:
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-org/blog/qrcode/github@volantis.png

      您可以放置在文章页脚用于展示打赏图片,也可以放置在侧边栏。

      通用文本部件

      blog/_config.volantis.yml
      repos:
      class: text
      display: [desktop] # [desktop, mobile]
      header:
      icon: fab fa-github
      title: 点个赞吧
      url: https://github.com/xaoxuu/
      content:
      - '您的赞对我来说很重要,如果您喜欢本主题,希望能够给下面的项目点个赞来支持一下。'
      - '[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/prohud/logo.png" height="50px">](https://github.com/xaoxuu/ProHUD)'
      - '[<img src="https://gcore.jsdelivr.net/gh/xaoxuu/cdn-assets/proj/valuex/logo.png" height="50px">](https://github.com/xaoxuu/ValueX)'
      - '[<img src="https://gcore.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] # [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 中的每一项支持的属性有: nameurliconimgavatar,其中 img 是方形图片的链接,avatar 是圆形图片的链接。

      组索引

      这个部件的布局继承自 list 部件,用于展示文章所属的分组的文章列表。请将您的 Volantis 升级至 2.5 版本以上使用。

      blog/_config.volantis.yml
      group-1:
      class: group
      display: [desktop, mobile] # [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 # excerpt, more, content

      您可以把整个页面的md内容作为一个小部件渲染显示出来。只需要设置小部件里的 pid 属性和文章的 front-matter 中设置一样的 pid 即可。 content 代表这个部件显示的内容,可选 excerptmorecontent 分别对应文章的摘要、摘要后面的内容、全文。

      选择评论系统

      目前支持的评论系统有: valine, twikoo, waline, minivaline, disqus, disqusjs, gitalk, vssue, livere, isso, hashover

      blog/_config.volantis.yml
      comments:
      title: <i class='fas fa-comments'></i> 评论
      subtitle:
      service: valine # valine, twikoo, waline, minivaline, disqus, disqusjs, gitalk, vssue, livere, isso, hashover

      一款快速、简洁且高效的无后端评论系统
      https://valine.js.org

      blog/_config.volantis.yml
      comments:
      ...
      service: valine
      ...
      valine:
      # js: https://unpkg.com/valine@1.4/dist/Valine.min.js
      path: # 全局评论地址 目前设置全局评论地址后visitor失效,这是valine的问题
      placeholder: 快来评论吧~ # 评论占位提示
      # 其他配置项按照yml格式继续填写即可 除了 [el path placeholder emojiCDN emojiMaps] 选项
      appId: # your appId
      appKey: # your appKey
      ... 可选配置项详见源码

      其中,placeholder 支持在 front-matter 中设置。

      front-matter
      ---
      valine:
      placeholder: 你觉得xxx怎么样呢?
      ---

      也可以通过设置 valine.path 实现多个页面共用一个评论框。

      front-matter
      ---
      valine:
      path: /
      ---

      一个简洁、安全、免费的静态网站评论系统 | A simple, safe, free comment system.
      https://twikoo.js.org/

      blog/_config.volantis.yml
      comments:
      ...
      service: twikoo
      ...
      twikoo:
      js: https://unpkg.com/twikoo@latest # 建议锁定版本
      path: # 全局评论地址
      # 其他配置项按照yml格式继续填写即可 除了 [el path] 选项
      envId: xxxxxxxxxxxxxxx # 腾讯云环境id

      一个简洁、安全、免费的静态网站评论系统 | A simple, safe, free comment system.
      https://waline.js.org/

      blog/_config.volantis.yml
      comments:
      ...
      service: waline
      ...
      # Waline
      # https://waline.js.org/
      waline:
      js: https://unpkg.com/@waline/client/dist/Waline.min.js
      path: # 全局评论地址 目前设置全局评论地址后visitor失效,这是waline的问题
      placeholder: 快来评论吧~ # 评论占位提示
      imageHosting: https://7bu.top/api/upload # 图床api(默认使用去不图床)
      # 其他配置项按照yml格式继续填写即可 除了 [el path placeholder uploadImage] 选项
      serverURL: xxxxxxxxxxxxxxx # Waline 的服务端地址(必填) 测试用地址: https://waline-ruddy.vercel.app
      ... 可选配置项详见源码

      一款快速、简洁且高效的无后端评论系统
      https://github.com/MiniValine/MiniValine/

      blog/_config.volantis.yml
      comments:
      ...
      service: minivaline
      ...
      # MiniValine
      # https://github.com/MiniValine/MiniValine
      minivaline:
      js: https://unpkg.com/minivaline@latest
      path: # 全局评论地址
      placeholder: 快来评论吧~ # 全局评论占位提示
      # 更多选项 https://minivaline.js.org/docs/cn/#/Options 按照yml格式继续填写即可 (除了 [el path placeholder] 选项)
      # emoticonUrl 等列表选项 可参考 https://github.com/MiniValine/hexo-next-minivaline
      # 下面是一个例子:
      backend: waline
      serverURL: https://waline.vercel.app

      Vue 驱动的、基于 Issue 的评论插件
      https://vssue.js.org/zh/

      blog/_config.volantis.yml
      comments:
      ...
      service: vssue
      ...
      vssue:
      owner:
      repo:
      clientId:
      clientSecret:

      A modern comment component based on Github Issue and Preact.
      https://gitalk.github.io/

      blog/_config.volantis.yml
      comments:
      ...
      service: gitalk
      ...
      gitalk:
      clientID:
      clientSecret:
      repo:
      owner:
      admin: # []

      clientID 和 clientSecret 的获取方法可自行搜索教程,这里仅简单描述一下步骤:

      1. 点击 GitHub -> Settings https://github.com/settings/profile
      2. 点击 Developer settings https://github.com/settings/developers
      3. 点击 New OAuth App https://github.com/settings/applications/new
      4. 填写信息:
        Application name 随便填,我的是:xaoxuu.com
        Homepage URLAuthorization 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.yml
      comments:
      ...
      service: disqus
      ...
      disqus:
      shortname:

      Render Disqus comments in Mainland China using Disqus API
      https://github.com/SukkaW/DisqusJS

      blog/_config.volantis.yml
      comments:
      ...
      service: disqusjs
      ...
      # DisqusJS
      # https://github.com/SukkaW/DisqusJS
      disqusjs:
      path: # 全局评论地址
      # 配置项按照yml格式继续填写即可 除了 [siteName url identifier] 选项
      #shortname:
      #api:
      #apikey:
      #admin:
      #nesting:

      Communication makes better world.
      https://www.livere.com/

      blog/_config.volantis.yml
      comments:
      ...
      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.yml
      comments:
      ...
      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.yml
      comments:
      ...
      service: hashover
      ...
      hashover:
      src: https://example.com/(path/)comments.php
      blog/themes/volantis/layout/_third-party/comments/评论系统名称/layout.ejs
      这里写布局代码
      blog/themes/volantis/layout/_third-party/comments/评论系统名称/script.ejs
      这里要写加载 js 的代码

      收录更多评论系统

      站内搜索

      blog/_config.volantis.yml
      search:
      enable: true
      service: hexo # hexo, google, algolia, azure, baidu
      js: https://gcore.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

      第三方插件

      插件库

      Volantis 为丰富的插件提供了兼容性优化。大部分插件您只需开启和关闭,无需进行设置。

      blog/_config.volantis.yml
      plugins:
      ################# required plugins ################
      # jquery
      jquery: https://unpkg.com/jquery@3.5/dist/jquery.min.js
      # fontawesome
      fontawesome: https://unpkg.com/@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://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js
      flying_pages: https://gcore.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://unpkg.com/vanilla-lazyload@17.1.0/dist/lazyload.min.js
      onlypost: false
      loadingImg: # https://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@3/img/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://gcore.jsdelivr.net/gh/highlightjs/cdn-release@10/build/highlight.min.js
      css: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@10/build/styles/solarized-light.min.css
      # more: https://www.jsdelivr.com/package/npm/highlight.js?path=styles

      # https://scrollrevealjs.org/api/reveal.html
      scrollreveal:
      enable: #true
      js: https://unpkg.com/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://unpkg.com/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://unpkg.com/node-waves@0.7.6/dist/waves.min.css
      js: https://unpkg.com/node-waves@0.7.6/dist/waves.min.js

      # fontawesome animation
      fontawesome_animation:
      enable: #true
      css: https://gcore.jsdelivr.net/gh/l-lin/font-awesome-animation/dist/font-awesome-animation.min.css

      # Typing Effects
      comment_typing:
      enable: #true
      js: https://gcore.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js

      # Slide Background
      backstretch:
      enable: #true
      js: https://unpkg.com/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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/001.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/002.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/003.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/004.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/005.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/006.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/012.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/016.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/019.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/025.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/033.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/034.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/035.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/038.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/039.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/042.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/046.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/051.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/052.jpg
      - https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper-minimalist/2020/054.jpg
      - https://gcore.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:
      aplayer: https://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      meting: https://unpkg.com/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
      cover: true # 封面是否pjax处理 false:每次切换页面封面都重载,适合封面较少的情况 true:封面经过Pjax处理,适合封面较多的情况
      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: false # false, nprogress, circle
      banUrl: # 被屏蔽的 url 地址将不启用 pjax 跳转,可以在控制台下使用 window.location.pathname 获取
      # - '/artitalk/' # artitalk 不支持 pjax
      # - '/bb/' # bbtalk 不支持 pjax

      # 从 issues 加载动态数据
      # {% issues sites/timeline/friends | api=xxx | group=key:a,b,c %}
      # 例如:
      # {% issues sites | api=https://api.github.com/repos/volantis-x/examples/issues?sort=updated&state=open&page=1&per_page=100 | group=version:latest,v6,v5,v4,v3,v2,v1,v0 %}


      # 暗黑模式 darkmode
      # 样式:source/css/_plugins/dark.styl
      # 开关按钮:在 navbar.menu 中添加:
      # - name: 暗黑模式 # 可自定义
      # icon: fas fa-moon # 可自定义
      # toggle: darkmode
      darkmodejs:
      enable: #true

      # 旧版 Internet Explorer 淘汰行动
      # https://www.microsoft.com/zh-cn/WindowsForBusiness/End-of-IE-support
      # 本主题不支持Internet Explorer的任何版本!!!
      killOldVersionsOfIE:
      enable: true

      # 禁用JavaScript提示
      # 本页面需要浏览器支持(启用)JavaScript
      # 主题中的某些插件必须启用JavaScript才能正常工作,例如开启scrollreveal如果禁用JavaScript会导致卡片消失
      killNoScript:
      enable: true

      # Artitalk https://artitalk.js.org
      # 配置过程请参考:https://artitalk.js.org/doc.html
      # 使用过旧版本的请修改Leancloud shuoshuo class部分列名:https://artitalk.js.org/release.html
      # 除appID和appKEY外均为选填项
      artitalk:
      # Set `layout: artitalk` to enable in page
      # 配置项按照yml格式继续填写即可
      appId: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID
      appKey: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY
      # serverURL: #leancloud绑定的安全域名,使用国际版的话不需要填写
      # lang: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语
      # pageSize: #每页说说的显示数量
      # shuoPla: #在编辑说说的输入框中的占位符
      # avatarPla: #自定义头像url的输入框的占位符
      # motion: #加载动画的开关,1为开,0为关,默认为开
      # bgImg: #说说输入框背景图片url
      # color1: #说说背景颜色1&按钮颜色1
      # color2: #说说背景颜色2&按钮颜色2
      # color3: #说说字体颜色
      # cssUrl: #自定义css接口

      # BBtalk https://bb.js.org
      bbtalk:
      js: https://unpkg.com/bbtalk@0.1.5/dist/bbtalk.min.js # BBtalk.js
      appId: 0KzOX4vC7Jsk6vzUGNeEiUaI-gzGzoHsz # your appID
      appKey: HwCiWuxfpvKiLm4teCUgTIba # your appKEY
      serverURLs: https://bbapi.heson10.com # Request Api 域名

      # Tidio聊天功能
      # https://www.tidio.com/
      tidio:
      enable: #true
      id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      幻灯片背景

      blog/_config.volantis.yml
      plugins:
      ...
      backstretch:
      enable: true
      js: https://unpkg.com/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://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/41F215B9-261F-48B4-80B5-4E86E165259E.jpeg
      ...

      幻灯片背景图片显示的位置可以选择粘贴在封面上,跟随封面一起滑动,也可以选择固定作为网页背景图片。

      highlight.js

      blog/_config.volantis.yml
      plugins:
      ...
      # highlight.js
      highlightjs:
      enable: true # Please set hexo.config.highlight.enable = false !!!
      js: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@10/build/highlight.min.js
      css: https://gcore.jsdelivr.net/gh/highlightjs/cdn-release@10/build/styles/solarized-light.min.css
      # more: https://www.jsdelivr.com/package/npm/highlight.js?path=styles

      如果需要使用 highlight.js 进行语法高亮,请将站点配置文件中的 highlight.enable 设置为 false 否则不会加载插件。您可以在 94语法高亮主题 中挑选喜爱的主题,然后替换上面的 css 链接。

      如果您使用 highlight.js 请确保没有使用 hexo 官方的 codeblock 标签,否则会报错。

      经测试,使用 highlight.js 的情况下,部分容器内的代码可能仍然会被渲染甚至报错。

      APlayer 音乐播放器

      blog/_config.volantis.yml
      plugins:
      ...
      # APlayer is only available in mainland China.
      # APlayer config: https://github.com/metowolf/MetingJS
      aplayer:
      enable: true
      js:
      aplayer: https://unpkg.com/aplayer@1.10/dist/APlayer.min.js
      meting: https://unpkg.com/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

      APlayer播放器只可以在中国大陆地区使用。相关文档: APlayer | MetingJS

      暗黑模式

      blog/_config.volantis.yml
      plugins:
      ...
      # 样式:source/css/_plugins/dark.styl
      # 开关按钮:在 navbar.menu 中添加:
      # - name: 暗黑模式 # 可自定义
      # icon: fas fa-moon # 可自定义
      # toggle: darkmode
      darkmodejs:
      enable: true

      结束支持

      blog/_config.volantis.yml
      plugins:
      ...
      # 旧版 Internet Explorer 淘汰行动
      # https://www.microsoft.com/zh-cn/WindowsForBusiness/End-of-IE-support
      # 本主题不支持Internet Explorer的任何版本!!!
      killOldVersionsOfIE:
      enable: true

      # 禁用JavaScript提示
      # 本页面需要浏览器支持(启用)JavaScript
      # 主题中的某些插件必须启用JavaScript才能正常工作,例如开启scrollreveal如果禁用JavaScript会导致卡片消失
      killNoScript:
      enable: true

      Artitalk

      blog/_config.volantis.yml
      plugins:
      ...
      # Artitalk https://artitalk.js.org
      # 配置过程请参考:https://artitalk.js.org/doc.html
      # 使用过旧版本的请修改Leancloud shuoshuo class部分列名:https://artitalk.js.org/release.html
      # 除appID和appKEY外均为选填项
      artitalk:
      # Set `layout: artitalk` to enable in page
      # 配置项按照yml格式继续填写即可
      appId: ogP8qj3veMh0LFpFWMPOyF0X-MdYXbMMI # your appID
      appKey: nHXLd3N3Jgh460t2iRQKWAtr # your appKEY
      # serverURL: #leancloud绑定的安全域名,使用国际版的话不需要填写
      # lang: # 语言设置,zh为汉语,en为英语,es为西班牙语。默认为汉语
      # pageSize: #每页说说的显示数量
      # shuoPla: #在编辑说说的输入框中的占位符
      # avatarPla: #自定义头像url的输入框的占位符
      # motion: #加载动画的开关,1为开,0为关,默认为开
      # bgImg: #说说输入框背景图片url
      # color1: #说说背景颜色1&按钮颜色1
      # color2: #说说背景颜色2&按钮颜色2
      # color3: #说说字体颜色
      # cssUrl: #自定义css接口

      BBtalk

      blog/_config.volantis.yml
      plugins:
      ...
      bbtalk:
      js: https://unpkg.com/bbtalk@0.1.5/dist/bbtalk.min.js # BBtalk.js
      appId: 0KzOX4vC7Jsk6vzUGNeEiUaI-gzGzoHsz # your appID
      appKey: HwCiWuxfpvKiLm4teCUgTIba # your appKEY
      serverURLs: https://bbapi.heson10.com # Request Api 域名

      Tidio

      blog/_config.volantis.yml
      plugins:
      ...
      # Tidio聊天功能
      # https://www.tidio.com/
      tidio:
      enable: true
      id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

      User Exchange Area

      This is only for communication between users. If you have any questions, please go to GitHub to submit an issue. Asking questions in the comment area will not receive any response from the developer!

      \ No newline at end of file