diff --git a/_config.yml b/_config.yml
index 5143035..6e74738 100755
--- a/_config.yml
+++ b/_config.yml
@@ -1,7 +1,7 @@
############################### Basic Information ###############################
info:
name: Volantis
- version: '2.1.6'
+ version: '2.2-beta1'
docs: https://volantis.js.org/
cdn: # To use CDN, write 'use_cdn: true' in 'blog/_config.yml'.
css: https://cdn.jsdelivr.net/gh/xaoxuu/cdn-volantis@2.1.6.2/css/style.css
diff --git a/layout/404.ejs b/layout/404.ejs
new file mode 100755
index 0000000..55e0f26
--- /dev/null
+++ b/layout/404.ejs
@@ -0,0 +1,5 @@
+<%- partial('_pre') %>
+
+ <%- partial('_partial/article', {post: page, index: false}) %>
+
+<%- partial('_partial/footer', null, {cache: !config.relative_link}) %>
diff --git a/scripts/events/404.js b/scripts/events/404.js
new file mode 100644
index 0000000..58def01
--- /dev/null
+++ b/scripts/events/404.js
@@ -0,0 +1,7 @@
+hexo.extend.generator.register('404', function(locals){
+ return {
+ path: '404.html',
+ data: locals.posts,
+ layout: ['404']
+ }
+});
diff --git a/scripts/tags/gallery.js b/scripts/tags/gallery.js
new file mode 100644
index 0000000..b4bcd28
--- /dev/null
+++ b/scripts/tags/gallery.js
@@ -0,0 +1,27 @@
+const url_for = require('hexo-util').url_for.bind(hexo);
+
+function gallery(args, content) {
+ return `${hexo.render.renderSync({text: content, engine: 'markdown'}).split('\n').join('')}
+
`;
+}
+
+function galleryGroup(args){
+ const name = args[0]
+ const desrc = args[1]
+ const url = url_for(args[2])
+ const img = url_for(args[3])
+
+ return `
+
+ `
+}
+
+hexo.extend.tag.register('gallery', gallery, {ends: true});
+hexo.extend.tag.register('galleryGroup', galleryGroup);
diff --git a/scripts/tags/hide.js b/scripts/tags/hide.js
new file mode 100644
index 0000000..fd8e19d
--- /dev/null
+++ b/scripts/tags/hide.js
@@ -0,0 +1,33 @@
+
+/**
+ * {% hideInline content,display,bg,color %}
+ * content不能包含當引號,可用 '
+ */
+function hideInline(args) {
+ args = args.join(' ').split(',')
+ let content = args[0].trim()
+ let display = args[1] || 'Click'
+ let bg = args[2] ==='' || typeof args[2] ==='undefined' ? '' : `background-color:${args[2]}`
+ let color = args[3] || '#fff'
+ return `${display}
+ ${content}`
+}
+
+/**
+ * {% hideBlock display,bg,color %}
+ * content
+ * {% endhideBlock %}
+ */
+function hideBlock(args,content) {
+ args = args.join(' ').split(',')
+ let display = args[0] || 'Click'
+ let bg = args[1] ==='' || typeof args[2] ==='undefined' ? '' : `background-color:${args[2]}`
+ let color = args[2] || '#fff'
+
+ return `${display}
+ ${hexo.render.renderSync({text: content, engine: 'markdown'}).split('\n').join('')} `
+
+}
+
+hexo.extend.tag.register('hideInline', hideInline);
+hexo.extend.tag.register('hideBlock', hideBlock, {ends: true});
\ No newline at end of file
diff --git a/scripts/tags/mermaid.js b/scripts/tags/mermaid.js
new file mode 100644
index 0000000..319310e
--- /dev/null
+++ b/scripts/tags/mermaid.js
@@ -0,0 +1,7 @@
+function mermaid(args, content) {
+ return `
+ ${content}
+
`;
+}
+
+hexo.extend.tag.register('mermaid', mermaid, {ends: true});
\ No newline at end of file
diff --git a/scripts/tags/note.js b/scripts/tags/note.js
new file mode 100644
index 0000000..61acd3b
--- /dev/null
+++ b/scripts/tags/note.js
@@ -0,0 +1,15 @@
+/**
+ * note.js
+ * transplant from hexo-theme-next
+ */
+
+'use strict';
+
+function postNote(args, content) {
+ return `
+ ${hexo.render.renderSync({text: content, engine: 'markdown'}).split('\n').join('')}
+
`;
+}
+
+hexo.extend.tag.register('note', postNote, {ends: true});
+hexo.extend.tag.register('subnote', postNote, {ends: true});
\ No newline at end of file
diff --git a/source/css/_layout/article.styl b/source/css/_layout/article.styl
index d49fc67..8eecea4 100644
--- a/source/css/_layout/article.styl
+++ b/source/css/_layout/article.styl
@@ -146,7 +146,7 @@
border-left: $border-codeblock solid $color-blockquote
border-radius: $border-codeblock
- blockquote,div.info,div.success,div.warning,div.danger
+ blockquote
&,p,ul,ol
text-align: left
word-wrap: normal
diff --git a/source/css/_tag-plugins/note.styl b/source/css/_tag-plugins/note.styl
new file mode 100644
index 0000000..fdc1a49
--- /dev/null
+++ b/source/css/_tag-plugins/note.styl
@@ -0,0 +1,135 @@
+div.note
+ $border-codeblock = 4px
+ bg($c)
+ return mix($c, $color-card, 10)
+ border($c)
+ return mix($c, $color-card, 80)
+ position: relative
+ margin-top: $gap-line
+ margin-bottom: $gap-line
+ padding: $gap-inline $gap
+ padding-left: "calc(16px + %s)" % $gap
+ border-radius: $border-codeblock
+
+ h2,
+ h3,
+ h4,
+ h5,
+ h6
+ if $note-icons
+ margin-top: 3px
+ else
+ margin-top: 0
+
+ margin-bottom: 0
+ padding-top: 0 !important
+ border-bottom: initial
+
+ p,
+ ul,
+ ol,
+ table,
+ pre,
+ blockquote,
+ img
+ font-size: $fontsize-list
+ margin-top: $gap-inline
+ margin-bottom: $gap-inline
+
+ &::before
+ position: absolute
+ top: "calc(50% - %s * 0.5)" % (24px)
+ left 4px
+ width: 24px
+ height: 24px
+ text-align: center
+ font-weight: 600
+ line-height: 24px
+ vertical-align: middle
+ font-family: 'Font Awesome 5 Free'
+
+ background: bg($color-text)
+ border-left: $border-codeblock solid border($color-text)
+ &::before
+ color: border($color-text)
+ content: '\f10d'
+ &.info
+ background: bg($color-mac-cyan)
+ border-color: border($color-mac-cyan)
+ &::before
+ color: border($color-mac-cyan)
+ content: '\f129'
+ &.success,&.done
+ background: bg($color-mac-green)
+ border-color: border($color-mac-green)
+ &::before
+ color: border($color-mac-green)
+ content: '\f00c'
+ &.warning
+ background: bg($color-mac-yellow)
+ border-color: border($color-mac-yellow)
+ &::before
+ color: border($color-mac-yellow)
+ content: '\f12a'
+ &.danger,&.error
+ background: bg($color-mac-red)
+ border-color: border($color-mac-red)
+ &::before
+ color: border($color-mac-red)
+ content: '\f00d'
+ &.radiation::before
+ content: '\f7b9'
+ &.bug::before
+ content: '\f188'
+ &.idea::before
+ content: '\f0eb'
+ &.link::before
+ content: '\f0c1'
+ &.paperclip::before
+ content: '\f0c6'
+ &.todo::before
+ content: '\f0ae'
+ &.msg::before
+ content: '\f4ad'
+ &.guide::before
+ content: '\f277'
+ &.download::before
+ content: '\f019'
+
+
+
+ &.light
+ background: mix($color-text, $color-card, 5)
+ border-left-color: mix($color-text, $color-card, 50)
+ &::before
+ color: mix($color-text, $color-card, 50)
+ &.gray
+ background: bg($color-text)
+ border-color: border($color-text)
+ &::before
+ color: border($color-text)
+ &.red
+ background: bg($color-mac-red)
+ border-color: border($color-mac-red)
+ &::before
+ color: border($color-mac-red)
+ &.yellow
+ background: bg($color-mac-yellow)
+ border-color: border($color-mac-yellow)
+ &::before
+ color: border($color-mac-yellow)
+ &.green
+ background: bg($color-mac-green)
+ border-color: border($color-mac-green)
+ &::before
+ color: border($color-mac-green)
+ &.cyan
+ background: bg($color-mac-cyan)
+ border-color: border($color-mac-cyan)
+ &::before
+ color: border($color-mac-cyan)
+ &.blue
+ background: bg($color-md-blue)
+ border-color: border($color-md-blue)
+ &::before
+ color: border($color-md-blue)
diff --git a/source/css/_third-party/container.styl b/source/css/_third-party/container.styl
deleted file mode 100644
index 404c46a..0000000
--- a/source/css/_third-party/container.styl
+++ /dev/null
@@ -1,87 +0,0 @@
-.article-entry
- div.info
- background-color: alpha($color-mac-cyan, 20%)
- border-left: $border-codeblock solid $color-mac-cyan
- border-radius: $border-codeblock
- // >:before
- // content: " "
- // position: absolute
- // top: 50%
- // left: -14.5px
- // margin-top: -12px
- // width: 24px
- // height: 24px
- // border-radius: 50%
- // text-align: center
- // color: white
- // 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==")
-
- div.success
- background-color: alpha($color-mac-green, 20%)
- border-left: $border-codeblock solid $color-mac-green
- border-radius: $border-codeblock
- // >:before
- // content: " "
- // position: absolute
- // top: 50%
- // left: -14.5px
- // margin-top: -12px
- // width: 24px
- // height: 24px
- // border-radius: 50%
- // text-align: center
- // color: #fff
- // background-size: 16px 16px
- // background-position: 4px 4px
- // background-repeat: no-repeat
- // background-color: $color-mac-green
- // background-image: url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjcxIDU2NnEwIDQwLTI4IDY4bC03MjQgNzI0LTEzNiAxMzZxLTI4IDI4LTY4IDI4dC02OC0yOGwtMTM2LTEzNi0zNjItMzYycS0yOC0yOC0yOC02OHQyOC02OGwxMzYtMTM2cTI4LTI4IDY4LTI4dDY4IDI4bDI5NCAyOTUgNjU2LTY1N3EyOC0yOCA2OC0yOHQ2OCAyOGwxMzYgMTM2cTI4IDI4IDI4IDY4eiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==")
-
-
- div.warning
- background-color: alpha($color-mac-yellow, 20%)
- border-left: $border-codeblock solid $color-mac-yellow
- border-radius: $border-codeblock
- // >:before
- // content: " "
- // position: absolute
- // top: 50%
- // left: -14.5px
- // margin-top: -12px
- // width: 24px
- // height: 24px
- // border-radius: 50%
- // text-align: center
- // color: #fff
- // background-size: 16px 16px
- // background-position: 4px 4px
- // background-repeat: no-repeat
- // background-color: $color-mac-yellow
- // background-image: url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMDg4IDEyNTZ2MjQwcTAgMTYtMTIgMjh0LTI4IDEyaC0yNDBxLTE2IDAtMjgtMTJ0LTEyLTI4di0yNDBxMC0xNiAxMi0yOHQyOC0xMmgyNDBxMTYgMCAyOCAxMnQxMiAyOHptMzE2LTYwMHEwIDU0LTE1LjUgMTAxdC0zNSA3Ni41LTU1IDU5LjUtNTcuNSA0My41LTYxIDM1LjVxLTQxIDIzLTY4LjUgNjV0LTI3LjUgNjdxMCAxNy0xMiAzMi41dC0yOCAxNS41aC0yNDBxLTE1IDAtMjUuNS0xOC41dC0xMC41LTM3LjV2LTQ1cTAtODMgNjUtMTU2LjV0MTQzLTEwOC41cTU5LTI3IDg0LTU2dDI1LTc2cTAtNDItNDYuNS03NHQtMTA3LjUtMzJxLTY1IDAtMTA4IDI5LTM1IDI1LTEwNyAxMTUtMTMgMTYtMzEgMTYtMTIgMC0yNS04bC0xNjQtMTI1cS0xMy0xMC0xNS41LTI1dDUuNS0yOHExNjAtMjY2IDQ2NC0yNjYgODAgMCAxNjEgMzF0MTQ2IDgzIDEwNiAxMjcuNSA0MSAxNTguNXoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=")
-
-
-
- div.danger
- background-color: alpha($color-mac-red, 20%)
- border-left: $border-codeblock solid $color-mac-red
- border-radius: $border-codeblock
- // >:before
- // content: " "
- // position: absolute
- // top: 50%
- // left: -14.5px
- // margin-top: -12px
- // width: 24px
- // height: 24px
- // border-radius: 50%
- // text-align: center
- // color: #fff
- // background-size: 16px 16px
- // background-position: 4px 4px
- // background-repeat: no-repeat
- // background-color: $color-mac-red
- // background-image: url("data:image/svg+xmlbase64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xMDg4IDEyNDh2MjI0cTAgMjYtMTkgNDV0LTQ1IDE5aC0yNTZxLTI2IDAtNDUtMTl0LTE5LTQ1di0yMjRxMC0yNiAxOS00NXQ0NS0xOWgyNTZxMjYgMCA0NSAxOXQxOSA0NXptMzAtMTA1NmwtMjggNzY4cS0xIDI2LTIwLjUgNDV0LTQ1LjUgMTloLTI1NnEtMjYgMC00NS41LTE5dC0yMC41LTQ1bC0yOC03NjhxLTEtMjYgMTcuNS00NXQ0NC41LTE5aDMyMHEyNiAwIDQ0LjUgMTl0MTcuNSA0NXoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=")
diff --git a/source/css/style.styl b/source/css/style.styl
index b87b400..2f81387 100644
--- a/source/css/style.styl
+++ b/source/css/style.styl
@@ -1,6 +1,7 @@
@import '_defines/*'
// project
@import '_base'
+@import '_tag-plugins/*'
@import '_highlight'
@import '_third-party/*'
@import '_layout/*'