diff --git a/README.md b/README.md index 416fb00..826e00f 100644 --- a/README.md +++ b/README.md @@ -4,5 +4,6 @@ 皮肤样例: - [bolo-fantastic](https://www.zeekling.cn/?skin=bolo-fantastic-mod) +- [bolo-NeoEase](https://www.zeekling.cn/?skin=bolo-NeoEase-mod) 个人站点:[小令童鞋](https://www.zeekling.cn/) diff --git a/bolo-NeoEase/archive-articles.ftl b/bolo-NeoEase/archive-articles.ftl new file mode 100644 index 0000000..64d0ec5 --- /dev/null +++ b/bolo-NeoEase/archive-articles.ftl @@ -0,0 +1,49 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> + + + + <@head title="${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} ${archiveLabel} - ${blogTitle}"> + + + + + ${topBarReplacement} + <#include "header.ftl"> +
+
+
+

${archive1Label} + <#if "en" == localeString?substring(0, 2)> + ${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} (${archiveDate.archiveDatePublishedArticleCount}) + <#else> + ${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} (${archiveDate.archiveDatePublishedArticleCount}) + +

+ <#include "article-list.ftl"> +
+ <#include "side.ftl"> +
+
+
+ <#include "footer.ftl"> + + diff --git a/bolo-NeoEase/article-list.ftl b/bolo-NeoEase/article-list.ftl new file mode 100644 index 0000000..305db7f --- /dev/null +++ b/bolo-NeoEase/article-list.ftl @@ -0,0 +1,106 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#list articles as article> +
+

+ + + ${article.articleTitle} + + <#if article.articlePutTop> + + ${topArticleLabel} + + + <#if article.hasUpdated> + + + ${updatedLabel} + + + + + + +

+
+ + <#if article.hasUpdated> + ${article.articleUpdateDate?string("yyyy-MM-dd HH:mm:ss")} + <#else> + ${article.articleUpdateDate?string("yyyy-MM-dd HH:mm:ss")} + + + + ${article.authorName} + +
+
+ <#if interactive == "on"> + + ${article.articleCommentCount}  ${commentLabel} +    + + + ${article.articleViewCount}  ${viewLabel} + +
+
+
+
+ ${article.articleAbstract} +
+
+
+
+ + <#if article.articleCategory != ""> + + + + + <#list article.articleTags?split(",") as articleTag> + <#if articleTag_has_next>, + + +
+
+ +<#if 0 != paginationPageCount> + + diff --git a/bolo-NeoEase/article.ftl b/bolo-NeoEase/article.ftl new file mode 100644 index 0000000..0b334b9 --- /dev/null +++ b/bolo-NeoEase/article.ftl @@ -0,0 +1,134 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> +<#include "macro-comments.ftl"> +<#include "../../common-template/macro-comment_script.ftl"> + + + + <@head title="${article.articleTitle} - ${blogTitle}" description="${article.articleAbstract?html}"> + + <#if previousArticlePermalink??> + + + <#if nextArticlePermalink??> + + + + + + ${topBarReplacement} + <#include "header.ftl"> +
+
+
+
+

+ + ${article.articleTitle} + + <#if article.articlePutTop> + + ${topArticleLabel} + + +

+
+ + ${article.articleUpdateDate?string("yyyy-MM-dd HH:mm:ss")} + + + ${article.authorName} + +
+
+ <#if interactive == "on"> + + ${article.articleCommentCount}  ${commentLabel} +    + + + ${article.articleViewCount}  ${viewLabel} + +
+
+
+ ${article.articleContent} + <#if "" != article.articleSign.signHTML?trim> +
+ ${article.articleSign.signHTML} +
+ +
+ +
+ + <#list article.articleTags?split(",") as articleTag> + <#if articleTag_has_next>, + + +
+
+ <#if nextArticlePermalink??> + + + <#if previousArticlePermalink??> + + +
+
+
+
+
+
+
+
+
+ <#if interactive == "on"> + <@comments commentList=articleComments article=article> + + <#include "side.ftl"> +
+
+
+
+ <#include "footer.ftl"> + <@comment_script oId=article.oId commentable=article.commentable> + page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}"; + <#if 0 != randomArticlesDisplayCount> + page.loadRandomArticles(); + + <#if 0 != relevantArticlesDisplayCount> + page.loadRelevantArticles('${article.oId}', '

${relevantArticlesLabel}

'); + + <#if 0 != externalRelevantArticlesDisplayCount> + page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,"); + + + + diff --git a/bolo-NeoEase/author-articles.ftl b/bolo-NeoEase/author-articles.ftl new file mode 100644 index 0000000..b4e58ea --- /dev/null +++ b/bolo-NeoEase/author-articles.ftl @@ -0,0 +1,43 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> + + + + <@head title="${authorName} - ${blogTitle}"> + + + + + ${topBarReplacement} + <#include "header.ftl"> +
+
+
+

${author1Label}${authorName}

+ <#include "article-list.ftl"> +
+ <#include "side.ftl"> +
+
+
+ <#include "footer.ftl"> + + diff --git a/bolo-NeoEase/category-articles.ftl b/bolo-NeoEase/category-articles.ftl new file mode 100644 index 0000000..166194e --- /dev/null +++ b/bolo-NeoEase/category-articles.ftl @@ -0,0 +1,47 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> + + + + <@head title="${category.categoryTitle} - ${blogTitle}"> + + + + + ${topBarReplacement} + <#include "header.ftl"> +
+
+
+

+ ${categoryLabel}: + ${category.categoryTitle} + (${category.categoryTagCnt}) ${category.categoryDescription} +

+ <#include "article-list.ftl"> +
+ <#include "side.ftl"> +
+
+
+ <#include "footer.ftl"> + + diff --git a/bolo-NeoEase/common-comment.ftl b/bolo-NeoEase/common-comment.ftl new file mode 100644 index 0000000..220827d --- /dev/null +++ b/bolo-NeoEase/common-comment.ftl @@ -0,0 +1,45 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +
+
+
+ <#if "http://" == comment.commentURL> + ${comment.commentName} + <#else> + ${comment.commentName} + + <#if comment.isReply> @ + ${comment.commentOriginalCommentName} + +
+ <#if article.commentable> +
+ ${replyLabel} +  |  + ${comment.commentDate2?string("yyyy-MM-dd HH:mm:ss")} +
+ + +
${comment.commentContent}
+
+ +
\ No newline at end of file diff --git a/bolo-NeoEase/css/base.css b/bolo-NeoEase/css/base.css new file mode 100644 index 0000000..671e282 --- /dev/null +++ b/bolo-NeoEase/css/base.css @@ -0,0 +1 @@ +.article__toc{overflow:auto}.article__toc::-webkit-scrollbar{display:none}.article__toc li{list-style-type:none}.article__toc li a{padding-left:10px;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.article__toc li a:hover{text-decoration:none}.article__toc li.toc__h3 a{padding-left:20px}.article__toc li.toc__h4 a{padding-left:30px}.article__toc li.toc__h5 a{padding-left:40px}.user__site:hover{text-decoration:none}.vditor{--border-color: #d1d5da;--second-color: rgba(88, 96, 105, 0.36);--panel-background-color: #fff;--panel-shadow: 0 1px 2px rgba(0, 0, 0, .2);--toolbar-background-color: #f6f8fa;--toolbar-icon-color: #586069;--toolbar-icon-hover-color: #4285f4;--textarea-background-color: #fafbfc;--textarea-text-color: #24292e;--resize-icon-color: var(--toolbar-icon-color);--resize-background-color: var(--toolbar-background-color);--resize-hover-icon-color: var(--panel-background-color);--resize-hover-background-color: var(--toolbar-icon-hover-color);--code-background-color: rgba(27, 31, 35, .05);--preview-background-color: rgba(27, 31, 35, .02);--heading-border-color: #eaecef;--blockquote-color: #6a737d;--ir-heading-color: #660e7a;--ir-title-color: #808080;--ir-bi-color: #000080;--ir-link-color: #008000;--ir-bracket-color: #0000ff;--ir-paren-color: #008000}.vditor--dark{--border-color: #141414;--second-color: rgba(185, 185, 185, .36);--panel-background-color: #24292e;--panel-shadow: 0 1px 2px rgba(255, 255, 255, .2);--toolbar-background-color: #1d2125;--toolbar-icon-color: #b9b9b9;--toolbar-icon-hover-color: #fff;--textarea-background-color: #2f363d;--textarea-text-color: #d1d5da;--resize-icon-color: var(--border-color);--resize-background-color: var(--second-color);--resize-hover-icon-color: var(--toolbar-icon-hover-color);--resize-hover-background-color: rgba(185, 185, 185, .86);--code-background-color: rgba(66,133,244,0.36);--preview-background-color: rgba(120, 146, 190, 0.55);--heading-border-color: var(--textarea-text-color);--blockquote-color: var(--toolbar-icon-color);--ir-heading-color: #9876aa;--ir-title-color: #808080;--ir-bi-color: #cc7832;--ir-link-color: #ffc66d;--ir-bracket-color: #287bde;--ir-paren-color: #6a8759}@-webkit-keyframes tooltip-appear{from{opacity:0}to{opacity:1}}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.vditor-tooltipped{position:relative;cursor:pointer}.vditor-tooltipped::after{position:absolute;z-index:1000000;display:none;padding:5px 8px;font-size:11px;font-weight:normal;-webkit-font-smoothing:subpixel-antialiased;color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:#3b3e43;border-radius:3px;line-height:16px;opacity:0}.vditor-tooltipped::before{position:absolute;z-index:1000001;display:none;width:0;height:0;color:#3b3e43;pointer-events:none;content:"";border:5px solid transparent;opacity:0}.vditor-tooltipped--hover::before,.vditor-tooltipped--hover::after,.vditor-tooltipped:hover::before,.vditor-tooltipped:hover::after,.vditor-tooltipped:active::before,.vditor-tooltipped:active::after,.vditor-tooltipped:focus::before,.vditor-tooltipped:focus::after{display:inline-block;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.15s;animation-duration:0.15s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}.vditor-tooltipped__s::after,.vditor-tooltipped__se::after,.vditor-tooltipped__sw::after{top:100%;right:50%;margin-top:5px}.vditor-tooltipped__s::before,.vditor-tooltipped__se::before,.vditor-tooltipped__sw::before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:#3b3e43}.vditor-tooltipped__se::after{right:auto;left:50%;margin-left:-15px}.vditor-tooltipped__sw::after{margin-right:-15px}.vditor-tooltipped__n::after,.vditor-tooltipped__ne::after,.vditor-tooltipped__nw::after{right:50%;bottom:100%;margin-bottom:5px}.vditor-tooltipped__n::before,.vditor-tooltipped__ne::before,.vditor-tooltipped__nw::before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:#3b3e43}.vditor-tooltipped__ne::after{right:auto;left:50%;margin-left:-15px}.vditor-tooltipped__nw::after{margin-right:-15px}.vditor-tooltipped__s::after,.vditor-tooltipped__n::after{transform:translateX(50%)}.vditor-tooltipped__w::after{right:100%;bottom:50%;margin-right:5px;transform:translateY(50%)}.vditor-tooltipped__w::before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:#3b3e43}.vditor-tooltipped__e::after{bottom:50%;left:100%;margin-left:5px;transform:translateY(50%)}.vditor-tooltipped__e::before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:#3b3e43}@media screen and (max-width: 520px){.vditor-tooltipped:before,.vditor-tooltipped:after{content:none}}@-webkit-keyframes scale-in{0%{opacity:0;transform:scale(0.5)}100%{opacity:1;transform:scale(1)}}@keyframes scale-in{0%{opacity:0;transform:scale(0.5)}100%{opacity:1;transform:scale(1)}}.vditor-panel{background-color:var(--panel-background-color);position:absolute;box-shadow:var(--panel-shadow);border-radius:3px;padding:5px;z-index:3;font-size:14px;display:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;max-width:320px;min-width:80px;-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-name:scale-in;animation-name:scale-in;-webkit-animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5);animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5);color:var(--toolbar-icon-color)}.vditor-panel--none{padding:0;-webkit-animation:none;animation:none;min-width:auto;max-width:none;white-space:nowrap}.vditor-panel--arrow:before{position:absolute;width:0;height:0;pointer-events:none;content:" ";border:7px solid transparent;top:-14px;left:5px;border-bottom-color:var(--panel-background-color)}.vditor-panel--left{right:0}.vditor-panel--left.vditor-panel--arrow:before{right:5px;left:auto}.vditor-input{border:0;padding:3px 5px;background-color:var(--panel-background-color);font-size:12px;color:var(--textarea-text-color)}.vditor-input:focus{background-color:var(--toolbar-background-color);outline:none}.vditor-icon{color:var(--toolbar-icon-color);cursor:pointer;float:left;padding:4px 5px;height:21px;width:23px;background-color:transparent;border:0;box-sizing:border-box}.vditor-icon:hover,.vditor-icon--current{color:var(--toolbar-icon-hover-color);background-color:transparent}.vditor-icon:focus{outline:none}.vditor-icon svg{height:13px !important;width:13px !important;float:left;fill:currentColor;pointer-events:none}.vditor-toolbar{background-color:var(--toolbar-background-color);border-bottom:1px solid var(--border-color);padding:0 5px;line-height:1}.vditor-toolbar--pin{position:-webkit-sticky;position:sticky;top:0;z-index:1}.vditor-toolbar--hide{transition:all 0.15s ease-in-out;height:5px;overflow:hidden}.vditor-toolbar--hide:hover{background-color:var(--toolbar-background-color);height:auto;overflow:visible}.vditor-toolbar__item{float:left;position:relative}.vditor-toolbar__item .vditor-tooltipped{color:var(--toolbar-icon-color);border:0;padding:10px 5px;background-color:transparent;height:35px;width:25px;box-sizing:border-box}.vditor-toolbar__item .vditor-tooltipped:focus{outline:none}.vditor-toolbar__item .vditor-tooltipped:focus{cursor:pointer;color:var(--toolbar-icon-hover-color)}.vditor-toolbar__item svg{fill:currentColor;display:inline-block;stroke-width:0;stroke:currentColor;width:15px;height:15px}.vditor-toolbar__item input{position:absolute;width:25px;height:35px;top:0;left:0;cursor:pointer;opacity:.001;overflow:hidden}.vditor-toolbar__divider{float:left;width:16px;height:35px}.vditor-toolbar__br{width:100%;padding:0 !important;height:0 !important}.vditor-menu--current{color:var(--toolbar-icon-hover-color) !important}.vditor-menu--disabled{color:var(--second-color) !important;cursor:not-allowed !important}.vditor-emojis{display:inline-block;overflow:auto}.vditor-emojis::-webkit-scrollbar{display:none}.vditor-emojis__tip{flex:1;min-width:1px;width:200px;margin-right:10px;color:var(--toolbar-icon-color);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.vditor-emojis__tail{margin-top:5px;font-size:12px;color:var(--toolbar-icon-color);display:flex}.vditor-emojis__tail a{text-decoration:none;color:var(--toolbar-icon-color)}.vditor-emojis__tail a:hover{color:var(--toolbar-icon-hover-color)}.vditor-emojis button{cursor:pointer;border-radius:3px;float:left;height:30px;width:30px;text-align:center;line-height:26px;padding:3px;box-sizing:border-box;font-size:16px;transition:all 0.15s ease-in-out;border:0;margin:0;background-color:transparent;overflow:hidden}.vditor-emojis button:focus{outline:none}.vditor-emojis button:hover .vditor-emojis__icon{display:inline-block;transform:scale(1.2)}.vditor-emojis img{height:20px;width:20px;float:left;margin:3px 0 0 3px}@media screen and (max-width: 520px){.vditor-toolbar__item{padding:0 12px}}@media (hover: hover) and (pointer: fine){.vditor-toolbar__item .vditor-tooltipped:hover{color:var(--toolbar-icon-hover-color)}}@-webkit-keyframes slideInDown{from{transform:translate3d(0, -100%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}@keyframes slideInDown{from{transform:translate3d(0, -100%, 0);visibility:visible}to{transform:translate3d(0, 0, 0)}}.vditor{display:flex;flex-direction:column;border:1px solid var(--border-color);border-radius:3px;box-sizing:border-box;font-family:"Helvetica Neue","Luxi Sans","DejaVu Sans","Hiragino Sans GB","Microsoft Yahei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji","Segoe UI Symbol","Android Emoji","EmojiSymbols"}.vditor .vditor-copy{z-index:auto}.vditor--fullscreen{position:fixed;top:0;width:100% !important;left:0;height:100vh !important;z-index:90;border-radius:0}.vditor-content{display:flex;min-height:60px;flex:1;min-width:1px;position:relative}.vditor-textarea{font-family:"Helvetica Neue","Luxi Sans","DejaVu Sans","Hiragino Sans GB","Microsoft Yahei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji","Segoe UI Symbol","Android Emoji","EmojiSymbols";margin:0 1px 0 0;overflow:auto;width:100%;flex:1;min-width:1px;border:0;resize:none;padding:10px 9px 10px 10px;box-sizing:border-box;background-color:var(--panel-background-color);outline:0 none;font-size:16px;line-height:22px;color:var(--textarea-text-color);border-radius:0 0 3px 3px;font-variant-ligatures:no-common-ligatures;white-space:pre-wrap;word-break:break-word;word-wrap:break-word}.vditor-textarea[contenteditable="false"]{opacity:0.3;cursor:not-allowed}.vditor-textarea:empty::before{content:attr(placeholder);color:var(--second-color)}.vditor-textarea:focus{background-color:var(--textarea-background-color)}.vditor-textarea:after{content:"";height:var(--editor-bottom);display:block}.vditor-preview{flex:1;min-width:1px;overflow:auto;margin-left:-1px;border-left:1px solid var(--border-color);box-sizing:border-box;border-radius:0 0 3px 0;background-color:var(--textarea-background-color)}.vditor-preview::-webkit-scrollbar{display:none}.vditor-preview__action{text-align:center;padding:10px;background-color:var(--toolbar-background-color)}.vditor-preview__action button{background-color:var(--toolbar-background-color);color:var(--toolbar-icon-color);line-height:20px;border:0;margin:0 10px;cursor:pointer;padding:0 7px;font-size:12px}.vditor-preview__action button.vditor-preview__action--current,.vditor-preview__action button:hover{color:var(--toolbar-icon-hover-color);background-color:var(--toolbar-background-color)}.vditor-preview__action button:focus{outline:none}.vditor-preview__action button svg{fill:currentColor;height:15px;width:15px;vertical-align:middle}.vditor-preview>.vditor-reset{padding:10px;margin:0 auto}.vditor-devtools{display:none;background-color:var(--textarea-background-color);overflow:auto;flex:1;min-width:1px;box-shadow:inset 1px 0 var(--border-color);box-sizing:border-box;border-radius:0 0 3px 0;padding:10px}.vditor-counter{padding:3px;color:var(--toolbar-icon-color);background-color:var(--code-background-color);border-radius:3px;font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;float:right;margin:8px 3px 0 0}.vditor-counter--error{color:#d23f31;background-color:rgba(210,63,49,0.1)}.vditor-resize{padding:3px 0;cursor:row-resize;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:absolute;width:100%}.vditor-resize--top{top:-3px}.vditor-resize--bottom{bottom:-3px}.vditor-resize>div{height:3px;background-color:var(--resize-background-color);transition:all 0.15s ease-in-out}.vditor-resize:hover>div,.vditor-resize--selected>div{background-color:var(--resize-hover-background-color)}.vditor-resize:hover svg,.vditor-resize--selected svg{color:var(--resize-hover-icon-color)}.vditor-resize svg{fill:currentColor;stroke-width:0;stroke:currentColor;width:13px;height:3px;display:block;margin:0 auto;color:var(--resize-icon-color)}.vditor-upload{position:absolute;height:3px;left:0;top:-2px;transition:all 0.15s ease-in-out;background-color:#4285f4}.vditor-tip{position:absolute;font-size:12px;top:10px;-webkit-animation-duration:.15s;animation-duration:.15s;-webkit-animation-fill-mode:both;animation-fill-mode:both;left:50%;z-index:5}.vditor-tip--show{display:block;-webkit-animation-name:slideInDown;animation-name:slideInDown}.vditor-tip__content{text-align:left;display:inline-block;line-height:16px;padding:3px 10px;border-radius:3px;background:var(--toolbar-background-color);position:relative;margin-left:-50%;color:var(--toolbar-icon-color);max-width:100%;box-shadow:var(--panel-shadow)}.vditor-tip__content ul{margin:2px 0;padding:0 0 0 18px}.vditor-tip__content a{color:#4285f4}.vditor-tip__close{position:absolute;color:var(--toolbar-icon-color);top:-7px;right:-15px;font-weight:bold;cursor:pointer}.vditor-tip__close:hover{color:var(--toolbar-icon-hover-color)}.vditor-outline{min-width:250px;width:250px;border-right:1px solid var(--border-color);background-color:var(--panel-background-color);display:none}.vditor-outline__item{padding:5px 10px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.vditor-outline__item:hover{color:var(--toolbar-icon-hover-color);background-color:var(--toolbar-background-color)}.vditor-outline__panel{position:-webkit-sticky;position:sticky;overflow:auto;top:35px;padding-bottom:10px;color:var(--textarea-text-color);box-sizing:border-box}.vditor-outline__panel::-webkit-scrollbar{display:none}.vditor-outline__title{border-bottom:1px dashed var(--border-color);padding:5px 10px;color:var(--toolbar-icon-color);font-size:12px}.vditor-hint{background-color:var(--panel-background-color);position:absolute;box-shadow:var(--panel-shadow);border-radius:3px;padding:5px 0;z-index:4;line-height:20px;list-style:none;font-size:12px;margin:0;max-width:250px;min-width:80px;display:none}.vditor-hint .vditor-hint{margin-top:-31px;left:100%;right:auto}.vditor-hint .vditor-hint.vditor-panel--left{right:100%;left:auto}.vditor-hint button{color:var(--toolbar-icon-color);display:block;padding:3px 10px;border:0;border-radius:0;line-height:20px;width:100%;box-sizing:border-box;text-align:left;margin:0;background-color:transparent;cursor:pointer;white-space:nowrap}.vditor-hint button:focus{outline:none}.vditor-hint--current,.vditor-hint button:not(.vditor-menu--disabled):hover{background-color:var(--toolbar-background-color) !important;color:var(--toolbar-icon-hover-color) !important}.vditor-hint__emoji{font-size:16px;float:left;margin-right:3px}.vditor-hint img{height:20px;width:20px;float:left;margin-right:3px}.vditor-reset{color:#24292e;font-variant-ligatures:no-common-ligatures;font-family:"Helvetica Neue","Luxi Sans","DejaVu Sans","Hiragino Sans GB","Microsoft Yahei",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji","Segoe UI Symbol","Android Emoji","EmojiSymbols";word-wrap:break-word;overflow:auto;line-height:1.5;font-size:16px;word-break:break-word}.vditor-reset--anchor{padding-left:20px}.vditor-reset--error{color:#d23f31;font-size:12px;display:block;line-height:16px}.vditor-reset ul ul ul{list-style-type:square}.vditor-reset ul ul{list-style-type:circle}.vditor-reset ul{list-style-type:disc}.vditor-reset ul,.vditor-reset ol{padding-left:2em;margin-top:0;margin-bottom:16px}.vditor-reset li+li{margin-top:0.25em}.vditor-reset audio{max-width:100%}.vditor-reset audio:focus{outline:none}.vditor-reset video{max-height:90vh;max-width:100%}.vditor-reset img{max-width:100%}.vditor-reset img.emoji{cursor:auto;max-width:20px;vertical-align:sub}.vditor-reset h1,.vditor-reset h2,.vditor-reset h3,.vditor-reset h4,.vditor-reset h5,.vditor-reset h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.vditor-reset h1:hover .vditor-anchor svg,.vditor-reset h2:hover .vditor-anchor svg,.vditor-reset h3:hover .vditor-anchor svg,.vditor-reset h4:hover .vditor-anchor svg,.vditor-reset h5:hover .vditor-anchor svg,.vditor-reset h6:hover .vditor-anchor svg{visibility:visible}.vditor-reset h1{padding-bottom:0.3em;font-size:1.7em;border-bottom:1px solid #eaecef}.vditor-reset h2{padding-bottom:0.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.vditor-reset h3{font-size:1.25em}.vditor-reset h4{font-size:1em}.vditor-reset h5{font-size:0.875em}.vditor-reset h6{font-size:0.85em}.vditor-reset hr{height:2px;padding:0;margin:24px 0;background-color:#eaecef;border:0}.vditor-reset p{margin-top:0;margin-bottom:16px}.vditor-reset blockquote{padding:0 1em;color:#6a737d;border-left:0.25em solid #eaecef;margin:0 0 16px 0}.vditor-reset blockquote>:first-child{margin-top:0}.vditor-reset blockquote>:last-child{margin-bottom:0}.vditor-reset ins>iframe{border:0}.vditor-reset iframe{border:1px solid #d1d5da;max-width:100%;box-sizing:border-box}.vditor-reset iframe.iframe__video{min-width:80%;min-height:36vh}.vditor-reset table{border-collapse:collapse;empty-cells:show;margin-bottom:16px;overflow:auto;border-spacing:0}.vditor-reset table tr{background-color:#fafbfc;border-top:1px solid #c6cbd1}.vditor-reset table td,.vditor-reset table th{padding:6px 13px;border:1px solid #dfe2e5;word-break:normal}.vditor-reset table th{font-weight:600}.vditor-reset table tbody tr:nth-child(2n){background-color:#fff}.vditor-reset code:not(.hljs):not(.highlight-chroma){padding:0.2em 0.4em;margin:0;font-size:85%;border-radius:3px;font-family:mononoki,Consolas,"Liberation Mono",Menlo,Courier,monospace,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji","Segoe UI Symbol","Android Emoji","EmojiSymbols";word-break:break-word;background-size:20px 20px;white-space:pre-wrap;background-color:rgba(27,31,35,0.05)}.vditor-reset code:not(.hljs):not(.highlight-chroma).language-mermaid,.vditor-reset code:not(.hljs):not(.highlight-chroma).language-math,.vditor-reset code:not(.hljs):not(.highlight-chroma).language-graphviz,.vditor-reset code:not(.hljs):not(.highlight-chroma).language-echarts,.vditor-reset code:not(.hljs):not(.highlight-chroma).language-mindmap{background-color:rgba(27,31,35,0.02)}.vditor-reset pre{margin:1em 0}.vditor-reset pre>code{margin:0;font-size:85%;padding:0.5em;border-radius:5px;display:block;overflow:auto;white-space:pre;font-family:mononoki,Consolas,"Liberation Mono",Menlo,Courier,monospace,"Apple Color Emoji","Segoe UI Emoji","Noto Color Emoji","Segoe UI Symbol","Android Emoji","EmojiSymbols";background-size:20px 20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8AgMAAABHkjHhAAAACVBMVEWAgIBaWlo+Pj7rTFvWAAAAA3RSTlMHCAw+VhR4AAAA+klEQVQoz4WSMW7EQAhFPxKWNh2FCx+HkaZI6RRb5DYbyVfIJXLKDCFoMbaTKSw/8ZnPAPjaH2xgZcUNUDADD7D9LtDBCLZ45fbkvo/30K8yeI64pPwl6znd/3n/Oe93P3ho9qeh72btTFzqkz0rsJle8Zr81OLEwZ1dv/713uWqvu2pl+k0fy7MWtj9r/tN5q/02z89qa/L4Dc2LvM93kezPfXlME/O86EbY/V9GB9ePX8G1/6W+/9h1dq/HGfTfzT3j/xNo7522Bfnqe5jO/fvhVthlfk434v3iO9zG/UOphyPeinPl1J8Gtaa7xPTa/Dk+RIs4deMvwGvcGsmsCvJ0AAAAABJRU5ErkJggg==);word-break:initial;word-wrap:normal}.vditor-reset pre:hover div.vditor-copy{display:block}.vditor-reset kbd{display:inline-block;padding:3px 5px;font:11px Consolas, "Liberation Mono", Menlo, Courier, monospace;line-height:10px;color:#24292e;vertical-align:middle;background-color:#fafbfc;border:solid 1px #d1d5da;border-radius:3px;box-shadow:inset 0 -1px 0 #d1d5da}.vditor-reset summary{cursor:pointer}.vditor-reset summary:focus{outline:none}.vditor-reset svg{height:auto;width:auto;stroke-width:initial}.vditor-reset p:last-child,.vditor-reset blockquote:last-child,.vditor-reset pre:last-child,.vditor-reset ul:last-child,.vditor-reset ol:last-child,.vditor-reset hr:last-child{margin-bottom:0}.vditor-reset .language-echarts,.vditor-reset .language-mindmap{overflow:hidden;height:420px}.vditor-reset .language-graphviz polygon{fill:transparent}.vditor-task{list-style:none}.vditor-task input{margin:0 .2em .25em -1.6em;font-size:12px;vertical-align:middle}.vditor-copy{position:relative;display:none;z-index:1}.vditor-copy textarea{position:absolute;left:-100000px;height:10px}.vditor-copy span{cursor:pointer;position:absolute;right:0.5em;top:0.5em}.vditor-copy svg{color:#586069;height:14px;width:14px !important;display:block;fill:currentColor}.vditor-linenumber{padding-left:4em !important;position:relative}.vditor-linenumber__rows{position:absolute;pointer-events:none;top:0.2em;left:0;width:3em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;counter-reset:linenumber}.vditor-linenumber__rows>span{pointer-events:none;display:block}.vditor-linenumber__rows>span::before{counter-increment:linenumber;content:counter(linenumber);color:rgba(158,150,150,0.38);display:block;padding-right:1em;text-align:right}.vditor-speech{position:absolute;display:none;background-color:#f6f8fa;border:1px solid #d1d5da;border-radius:3px;padding:3px;cursor:pointer;color:#586069}.vditor-speech:hover,.vditor-speech--current{color:#4285f4}.vditor-speech svg{height:14px;width:14px;fill:currentColor;display:block;stroke-width:0;stroke:currentColor}.vditor-anchor{margin-right:5px}.vditor-anchor--left{float:left;padding-right:4px;margin-left:-20px}.vditor-anchor svg{visibility:hidden}.vditor-anchor:hover svg{visibility:visible}.vditor-anchor:focus{outline:none}.vditor-linkcard{margin:31px auto 16px;transition:all 0.15s ease-in-out;cursor:pointer;max-width:768px;padding:0 10px}.vditor-linkcard a{border-radius:3px;background-color:#f6f8fa;overflow:hidden;max-height:250px;display:flex;text-decoration:none;flex-wrap:wrap-reverse;box-shadow:0 1px 2px rgba(0,0,0,0.2)}.vditor-linkcard a:hover{box-shadow:0 0 3px rgba(0,0,0,0.13),0 3px 6px rgba(0,0,0,0.26);text-decoration:none}.vditor-linkcard a:visited .vditor-linkcard__abstract{color:rgba(88,96,105,0.36)}.vditor-linkcard__info{padding:10px;min-width:200px;box-sizing:border-box;flex:1}.vditor-linkcard__title{font-size:14px;font-weight:400;color:#24292e;display:flex;align-items:center}.vditor-linkcard__title img{cursor:pointer;height:20px;width:20px;border-radius:3px;flex-shrink:0;margin-right:5px}.vditor-linkcard__abstract{word-wrap:break-word;word-break:break-all;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;font-size:13px;color:#586069;margin:5px 0}.vditor-linkcard__site{font-size:12px;color:#4285f4}.vditor-linkcard__image{background-size:cover;background-repeat:no-repeat;background-position:center center;max-width:250px;min-width:126px;cursor:pointer;background-color:rgba(88,96,105,0.36)}.vditor-math mjx-container:focus{outline:none;cursor:context-menu}.vditor-footnotes__goto-ref{text-decoration:none}.vditor-toc{margin-bottom:16px}.vditor-wysiwyg{box-sizing:border-box;flex:1;position:relative;width:100%;min-width:1px}.vditor-wysiwyg pre.vditor-reset{background-color:var(--panel-background-color);margin:0;white-space:pre-wrap;height:100%;box-sizing:border-box}.vditor-wysiwyg pre.vditor-reset[contenteditable="false"]{opacity:0.3;cursor:not-allowed}.vditor-wysiwyg pre.vditor-reset:empty::before{content:attr(placeholder);color:var(--second-color)}.vditor-wysiwyg pre.vditor-reset:focus{outline:none;background-color:var(--textarea-background-color)}.vditor-wysiwyg pre.vditor-reset:after{content:"";height:var(--editor-bottom);display:block}.vditor-wysiwyg blockquote:empty::before,.vditor-wysiwyg pre>code:empty::before,.vditor-wysiwyg p:empty::before,.vditor-wysiwyg h1:empty::after,.vditor-wysiwyg h2:empty::after,.vditor-wysiwyg h3:empty::after,.vditor-wysiwyg h4:empty::after,.vditor-wysiwyg h5:empty::after,.vditor-wysiwyg h6:empty::after{content:' '}.vditor-wysiwyg code[data-marker="`"]{padding-left:0 !important;padding-right:0 !important}.vditor-wysiwyg__block pre:first-child{margin-bottom:-1em}.vditor-wysiwyg__block pre:first-child code{height:auto;background-color:var(--code-background-color) !important}.vditor-wysiwyg__block pre:last-child{margin-bottom:1em}.vditor-wysiwyg__preview{cursor:pointer;white-space:initial;min-height:27px}.vditor-wysiwyg__preview code:not(.hljs):not(.highlight-chroma){background-color:var(--preview-background-color)}.vditor-wysiwyg h1:before,.vditor-wysiwyg h2:before,.vditor-wysiwyg h3:before,.vditor-wysiwyg h4:before,.vditor-wysiwyg h5:before,.vditor-wysiwyg h6:before,.vditor-wysiwyg div.vditor-wysiwyg__block:before,.vditor-wysiwyg div[data-type="link-ref-defs-block"]:before,.vditor-wysiwyg div[data-type="footnotes-block"]:before,.vditor-wysiwyg .vditor-toc:before{float:left;padding-right:4px;margin-left:-29px;content:'H1';font-size:0.85rem;font-weight:normal;color:var(--second-color)}.vditor-wysiwyg h2:before{content:'H2'}.vditor-wysiwyg h3:before{content:'H3'}.vditor-wysiwyg h4:before{content:'H4'}.vditor-wysiwyg h5:before{content:'H5'}.vditor-wysiwyg h6:before{content:'H6'}.vditor-wysiwyg div[data-type="link-ref-defs-block"]:before{content:'"A"'}.vditor-wysiwyg div[data-type="footnotes-block"]:before{content:'^F'}.vditor-wysiwyg div.vditor-wysiwyg__block:before{content:""}.vditor-wysiwyg .vditor-toc:before{content:"ToC"}.vditor-wysiwyg hr{display:inline-block;margin:12px 0;width:100%}.vditor-wysiwyg details{white-space:initial}.vditor-wysiwyg span[data-type="backslash"]>span{display:none;color:var(--second-color)}.vditor-wysiwyg span[data-type="link-ref"],.vditor-wysiwyg sup[data-type="footnotes-ref"]{color:#4285f4}.vditor-wysiwyg span[data-type="toc-h"]{color:#4285f4;text-decoration:underline}.vditor-wysiwyg div[data-type="footnotes-block"]{border-top:2px solid var(--heading-border-color);padding-top:24px;margin-top:24px}.vditor-wysiwyg div[data-type="link-ref-defs-block"]{color:var(--blockquote-color)}@media screen and (max-width: 520px){.vditor-wysiwyg h1:before,.vditor-wysiwyg h2:before,.vditor-wysiwyg h3:before,.vditor-wysiwyg h4:before,.vditor-wysiwyg h5:before,.vditor-wysiwyg h6:before,.vditor-wysiwyg div.vditor-wysiwyg__block:before,.vditor-wysiwyg div[data-type="link-ref-defs-block"]:before,.vditor-wysiwyg div[data-type="footnotes-block"]:before,.vditor-wysiwyg .vditor-toc:before{content:none}}.vditor-ir{box-sizing:border-box;flex:1;min-width:1px;position:relative;width:100%}.vditor-ir__block[data-type="html-block"] pre{margin:1em 0 !important}.vditor-ir__node[data-type="code-block"]:before,.vditor-ir__node[data-type="code-block"]:after,.vditor-ir__node[data-type="math-block"]:before,.vditor-ir__node[data-type="math-block"]:after{content:' ';color:var(--second-color)}.vditor-ir__node:not(.vditor-ir__node--expand) .vditor-ir__marker{padding:0 !important}.vditor-ir__node[data-type="link-ref"],.vditor-ir__node[data-type="footnotes-ref"]{color:#4285f4}.vditor-ir__node .vditor-ir__marker{width:0;overflow:hidden;display:inline-block;height:0;transition:all 0.15s ease-in-out}.vditor-ir__node .vditor-ir__preview code:not(.hljs):not(.highlight-chroma){background-color:var(--preview-background-color)}.vditor-ir__node--hidden .vditor-ir__marker{visibility:hidden}.vditor-ir__node--expand .vditor-ir__marker{color:var(--second-color);display:inline;height:auto;width:auto}.vditor-ir__node--expand .vditor-ir__marker--hide{display:none}.vditor-ir__node--expand .vditor-ir__marker--heading{color:var(--ir-heading-color)}.vditor-ir__node--expand .vditor-ir__marker--bi{color:var(--ir-bi-color)}.vditor-ir__node--expand .vditor-ir__marker--link{color:var(--ir-link-color)}.vditor-ir__node--expand .vditor-ir__marker--title{color:var(--ir-title-color)}.vditor-ir__node--expand .vditor-ir__marker--bracket{color:var(--ir-bracket-color);text-decoration:underline}.vditor-ir__node--expand .vditor-ir__marker--paren{color:var(--ir-paren-color)}.vditor-ir__node--expand .vditor-ir__marker--info{color:var(--ir-heading-color)}.vditor-ir__node--expand .vditor-ir__marker--pre{color:var(--textarea-text-color)}.vditor-ir__node--expand .vditor-ir__marker--pre .language-mermaid,.vditor-ir__node--expand .vditor-ir__marker--pre .language-math,.vditor-ir__node--expand .vditor-ir__marker--pre .language-graphviz,.vditor-ir__node--expand .vditor-ir__marker--pre .language-echarts,.vditor-ir__node--expand .vditor-ir__marker--pre .language-mindmap{background-color:var(--code-background-color) !important;height:auto}.vditor-ir__node--expand[data-type="code-block"]:before,.vditor-ir__node--expand[data-type="code-block"]:after{content:'```'}.vditor-ir__node--expand[data-type="math-block"]:before,.vditor-ir__node--expand[data-type="math-block"]:after{content:'$$'}.vditor-ir__node span[data-type="code-block-open-marker"],.vditor-ir__node span[data-type="code-block-close-marker"],.vditor-ir__node span[data-type="math-block-open-marker"],.vditor-ir__node span[data-type="math-block-close-marker"]{display:none}.vditor-ir__link{color:var(--ir-bracket-color);text-decoration:underline}.vditor-ir pre.vditor-reset{background-color:var(--panel-background-color);margin:0;white-space:pre-wrap;height:100%;box-sizing:border-box}.vditor-ir pre.vditor-reset[contenteditable="false"]{opacity:0.3;cursor:not-allowed}.vditor-ir pre.vditor-reset:empty::before{content:attr(placeholder);color:var(--second-color)}.vditor-ir pre.vditor-reset:focus{outline:none;background-color:var(--textarea-background-color)}.vditor-ir pre.vditor-reset:after{content:"";height:var(--editor-bottom);display:block}.vditor-ir pre.vditor-reset pre{margin:0}.vditor-ir hr{display:inline-block;margin:12px 0;width:100%}.vditor-ir blockquote:empty::before,.vditor-ir pre>code:empty::before,.vditor-ir p:empty::before,.vditor-ir h1:empty::after,.vditor-ir h2:empty::after,.vditor-ir h3:empty::after,.vditor-ir h4:empty::after,.vditor-ir h5:empty::after,.vditor-ir h6:empty::after{content:' '}.vditor-ir h1:before,.vditor-ir h2:before,.vditor-ir h3:before,.vditor-ir h4:before,.vditor-ir h5:before,.vditor-ir h6:before,.vditor-ir div[data-type="link-ref-defs-block"]:before,.vditor-ir div[data-type="footnotes-block"]:before,.vditor-ir .vditor-toc:before{float:left;padding-right:4px;margin-left:-29px;content:'H1';font-size:0.85rem;font-weight:normal;color:var(--second-color)}.vditor-ir h2:before{content:'H2'}.vditor-ir h3:before{content:'H3'}.vditor-ir h4:before{content:'H4'}.vditor-ir h5:before{content:'H5'}.vditor-ir h6:before{content:'H6'}.vditor-ir div[data-type="link-ref-defs-block"]{color:var(--blockquote-color)}.vditor-ir div[data-type="link-ref-defs-block"]:before{content:'"A"'}.vditor-ir div[data-type="footnotes-block"]{border-top:2px solid var(--heading-border-color);padding-top:24px;margin-top:24px}.vditor-ir div[data-type="footnotes-block"]:before{content:'^F'}.vditor-ir .vditor-toc:before{content:"ToC"}.vditor-ir .vditor-toc span[data-type="toc-h"]{color:#4285f4;text-decoration:underline}@media screen and (max-width: 520px){.vditor-ir h1:before,.vditor-ir h2:before,.vditor-ir h3:before,.vditor-ir h4:before,.vditor-ir h5:before,.vditor-ir h6:before,.vditor-ir div[data-type="link-ref-defs-block"]:before,.vditor-ir div[data-type="footnotes-block"]:before,.vditor-ir .vditor-toc:before{content:none}}.user__site{display:inline-block;margin-right:15px}.user__site svg{height:20px;width:20px;fill:currentColor}html,body,div,ul,li,h1,h2,h3,h4,h5,h6{margin:0;padding:0}::-moz-selection{background-color:#ccc;color:#fff}::selection{background-color:#ccc;color:#fff}::-moz-selection{background-color:#ccc;color:#fff}body{font-family:"Lucida Grande", "Verdana", "\5fae\8f6f\96c5\9ed1";font-size:12px;background-color:#F9F9F9;color:#333}a:link{outline:none;color:#21759B;text-decoration:none}a:visited{color:#555777}a:hover{color:#D54E21}a:active{color:#333}img{max-width:100%;vertical-align:middle;border:0;height:auto;-ms-interpolation-mode:bicubic}textarea,input{outline:none}.left{float:left}.right{float:right}.clear{background-color:transparent;border:0;clear:both;display:block;font-size:0;height:0;line-height:0;overflow:hidden}.none{display:none}.logo{padding:0 5px;text-shadow:0 0 1px #EEE}.tip{color:#D54E21;font-size:11px}.tip__sup{cursor:text}.tip__sup:link{color:#D54E21}.tip__sup:hover{color:#D54E21}.tip__sup:visited{color:#F9F9F9}.em-span{line-height:24px;float:left}.em-br{line-height:24px}.date-ico,.tag-ico,.user-ico,.expand-ico,.collapse-ico,#search,.translate-ico,.feed-ico{background-image:url("../../bolo-NeoEase/images/icons.png")}.feed-ico{background-position:right -146px;background-repeat:no-repeat;color:#333;padding-right:24px}.translate-ico{background-position:1px -125px;background-repeat:no-repeat;border:1px solid #999;border-radius:3px 3px 3px 3px;cursor:pointer;float:right;height:16px;margin:6px 0 0 18px;padding:1px;width:16px}.translate-ico:hover{border-color:#D54E21;box-shadow:0 0 1px #999;background-color:#F2F2F2}.expand-ico,.collapse-ico{background-position:54px -84px;cursor:pointer;height:16px;background-repeat:no-repeat}.collapse-ico{background-position:54px -69px}.date-ico,.tag-ico,.user-ico{background-repeat:no-repeat;height:16px;display:block;padding-left:20px}.tag-ico{margin:6px 6px 0 0}.date-ico{float:left;background-position:0 -16px}.user-ico{background-position:0 -32px;float:left;margin-left:12px}.wrapper{margin:0 auto;width:960px}.body{border-top:2px solid #DDD}.main{float:left;margin:16px 0 50px;overflow:hidden;width:667px}.header{background:url("../../bolo-NeoEase/images/icons.png") repeat-x scroll 0 -220px #F2F2F2;padding:20px 0}.header .title{border-bottom:1px solid #242424;color:#000;font-size:26px;font-weight:normal}.header .sub-title{color:#242424;font-size:11px}.nav .page-icon{float:left;height:14px;width:14px;margin:8px 3px 0 0}#search{background-position:7px -99px;background-repeat:no-repeat;background-color:#FFF;border:1px solid #DDD;border-radius:2px 2px 2px 2px;box-shadow:0 1px 1px rgba(0,0,0,0.1) inset;color:#888;float:right;font-size:14px;height:20px;line-height:145%;padding:3px 10px 3px 28px;width:24px;transition:width 0.4s ease, background 0.4s ease}#search:focus{background-color:#F9F9F9;width:196px}.nav{background-color:#E9E9E9;border-bottom:1px solid #CCCCCC}.nav ul{list-style:none;float:left}.nav li{float:left}.nav a{color:#666666;display:block;float:left;font-size:14px;height:30px;line-height:30px;padding:0 15px;text-shadow:0 1px 0 #EEE}.nav a:hover{color:#D54E21;background-color:#DDD}.nav .current{background-color:#DDD;margin:-1px 0;padding-right:2px}.nav .current a{background-color:#F9F9F9;border-color:#CCCCCC #CCCCCC #F9F9F9;border-style:solid;border-width:1px 1px 3px;font-weight:700;height:33px;line-height:33px;margin:-2px 0 -3px;color:#333;text-shadow:1px 1px 1px #C6D9E9}.nav img{margin-left:3px}.nav .right{line-height:29px}.footer{background-color:#E9E9E9;border-top:3px solid #DDD;color:#999;font-size:11px;padding:12px 0}.footer a{color:#787878}.footer a:hover{color:#D54E21}#goTop{background:url("../../bolo-NeoEase/images/icons.png") no-repeat scroll 5px -51px #DDD;border-radius:2px 2px 0 0;cursor:pointer;font-size:11px;height:21px;line-height:21px;padding:0 10px 0 23px;position:absolute;right:56px;display:none}#goTop:hover{background-color:#EAEAEA}.side{float:right;width:278px;margin-bottom:50px}.side>div{border-bottom:1px solid #DEDEDE;padding:10px 5px 15px}.side h4{font-size:14px;line-height:32px}.side ul{list-style:none}#archiveSide{list-style:square outside none;margin-left:18px}#archiveSide .archive-year{color:#D54E21;font-weight:bold;height:18px;line-height:18px;list-style:none}.side a{line-height:18px;color:#21759B}.side a:hover{text-decoration:underline}.side sup{color:#333}.side .side-li li{overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;width:268px}.side .side-li a{white-space:nowrap}.recent-comments li>img{background-color:#FFF;border:1px solid #999;padding:1px;width:32px;height:32px;margin-top:1px}.recent-comments-main{float:left;margin:0 0 9px 3px;width:229px}.recent-comments-main .expand-ico,.recent-comments-main .collapse-ico{background-position:0 -86px;float:right;width:16px;transition:opacity 400ms ease;opacity:0;filter:alpha(opacity=0)}.recent-comments li:hover .expand-ico,.recent-comments li:hover .collapse-ico{opacity:1;filter:alpha(opacity=100)}.recent-comments-main .collapse-ico{background-position:0 -70px}.recent-comments-content{height:18px;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.recent-comments-content img{width:16px}.recent-comments-content a{color:#555777}.recent-comments-content a:hover{text-decoration:none}.recent-comments-content p{margin:0}.article{border-bottom:1px solid #CCC;padding:0 5px 10px;margin-top:20px}.article-element{font-size:11px;line-height:16px;margin:12px 0}.article-element--article{margin-top:0}.vditor-reset--article{padding-bottom:12px}.vditor-reset--article::-webkit-scrollbar{display:none}.article-element a{border-bottom:1px solid #DFDFDF;color:#555;text-decoration:none;padding-bottom:1px}.article-element a:hover{color:#D54E21;border-bottom-color:#D54E21}.article-title{color:#21759B;font-size:20px;font-weight:normal}.article-title:hover{color:#D54E21}.article .expand-ico,.article .collapse-ico{float:right;margin-top:9px;padding-right:6px;width:15px;background-position:0 -86px}.article .collapse-ico{background-position:0 -70px}.pagination{margin-top:30px;line-height:21px}.pagination a{border:1px solid #C5C3C2;font-size:10px;margin:2px;padding:1px 5px;text-decoration:none;background-color:#F2F2F2}.pagination a.current{background-color:#FFF;font-weight:bold;padding:2px 6px;color:#000}.pagination a:hover{background-color:#F3DEDD;color:#D54E21;border:1px solid #D54E21}.page{margin-top:20px;padding:0 5px 5px}.article-panel1{background-color:#F2F2F2;padding:5px 10px}.article-panel2{background-color:#FFF;margin-top:12px;padding:5px 10px}.article-panel2 ul{line-height:18px;list-style:square outside none;margin-left:18px}.share{border-bottom:1px solid #DEDEDE;margin-top:15px}.share-comment{background-color:#DDD;border-radius:2px 2px 0 0;float:right;font-size:11px;height:21px;line-height:21px;margin-right:16px;padding:0 10px}.share-comment:hover{background-color:#EAEAEA}#comments{position:relative}#comments>div{border-bottom:1px solid #DEDEDE;padding:10px;width:647px;background-color:#F5F5F5}#comments>div:nth-child(2n){background-color:#F8F8F8}#comments .comment-panel>.right{transition:opacity 400ms ease;opacity:0;filter:alpha(opacity=0)}#comments>div:hover .comment-panel>.right{opacity:1;filter:alpha(opacity=100)}.comment-header{height:50px;width:50px;float:left;background-color:#FFF;border:1px solid #DEDEDE;padding:1px}.comment-panel{float:left;margin:0 10px;width:573px;line-height:16px}.comment-panel .vditor-reset{margin-top:5px}#comments .comment-body-ref{border-bottom:0;background-color:#FFF;border-radius:5px 5px 5px 5px;left:73px;position:absolute;box-shadow:1px 0 3px #DEDEDE;width:560px}.comment-body-ref .comment-panel{width:486px}.comment-body-ref .arrow{border-color:#F5F5F5 #FFF #F5F5F5 #F5F5F5;border-style:solid;border-width:6px 8px 10px 0;display:block;left:-8px;position:absolute;top:5px}.form{margin:10px}.form img{cursor:pointer}.form h4{margin:10px 0 5px 5px}.form th{text-align:right;white-space:nowrap}.form input[type="text"],.form input[type="password"],.form textarea{border-color:silver #D9D9D9 #D9D9D9;border-style:solid;border-width:1px;font-family:"Lucida Grande", Verdana, '微软雅黑';font-size:12px;outline:medium none;padding:0 3px}.form input:focus,.form textarea:focus{box-shadow:0 1px 2px rgba(0,0,0,0.3) inset}.form textarea{overflow:auto;resize:vertical;padding:3px;width:634px}.form input{height:24px;line-height:16px;width:260px}.form button{background-color:#B4D666;border-color:#B4D666 #81B840 #81B840 #B4D666;border-style:solid;border-width:1px;color:#2970A6;height:28px;line-height:28px;padding:0 12px}.form button:hover{background-color:#98C64C;border-color:#76B33A #98C64C #98C64C #76B33A;color:#074A7E}#tags li{float:left;list-style:none;height:38px}#tags a:hover{text-shadow:0 0 2px}#tags a{border-radius:3px 3px 3px 3px;box-shadow:1px 1px 3px #333;float:left;margin:3px 6px;padding:3px 12px}#tagsSide li a{float:left;line-height:145%;margin-right:7px;white-space:nowrap}.tags1{font-size:12px;color:#A1A1A1}.tags2{font-size:14px;color:#687F95}.tags3{font-size:16px;color:#4C6E90}.tags4{font-size:18px;color:#258}.tags5{font-size:20px}#tagsSide .tags2{font-size:14px}#tagsSide .tags3{font-size:16px}#tagsSide .tags4{font-size:18px}#tagsSide .tags5{font-size:20px}.main>h2{margin-top:16px}.error{background-image:url("../../bolo-NeoEase/images/404.png");float:left;height:536px;margin:50px 80px;position:relative;width:363px}.error h2{left:-68px;position:absolute;top:-20px}.error a{background-color:#9CD941;border:265px none;bottom:12px;color:#333555;float:left;padding:10px 15px;position:absolute;right:-106px}.error a:hover{background-color:#ADEb51} diff --git a/bolo-NeoEase/css/base.scss b/bolo-NeoEase/css/base.scss new file mode 100644 index 0000000..688c8dd --- /dev/null +++ b/bolo-NeoEase/css/base.scss @@ -0,0 +1,866 @@ +/* + * Bolo - A stable and beautiful blogging system based in Solo. + * Copyright (c) 2020, https://github.com/adlered + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +/** + * skin neoease style + * + * @author Liyuan Li + * @version 2.3.0.0, Aug 2, 2019 + */ +@import "../../../scss/toc"; +@import "../../../scss/usite"; +@import "vditor/src/assets/scss/index"; + +.user__site { + display: inline-block; + margin-right: 15px; + + svg { + height: 20px; + width: 20px; + fill: currentColor; + } +} + +/* start base */ +html, body, div, ul, li, h1, h2, h3, h4, h5, h6 { + margin: 0; + padding: 0; +} + +::selection { + background-color: #ccc; + color: #fff; +} + +::-moz-selection { + background-color: #ccc; + color: #fff; +} + +body { + font-family: "Lucida Grande", "Verdana", "\5fae\8f6f\96c5\9ed1"; + font-size: 12px; + background-color: #F9F9F9; + color: #333; +} + +a:link { + outline: none; + color: #21759B; + text-decoration: none; +} + +a:visited { + color: #555777; +} + +a:hover { + color: #D54E21; +} + +a:active { + color: #333; +} + +img { + max-width: 100%; + vertical-align: middle; + border: 0; + height: auto; + -ms-interpolation-mode: bicubic +} + +textarea, input { + outline: none; +} + +.left { + float: left; +} + +.right { + float: right; +} + +.clear { + background-color: transparent; + border: 0; + clear: both; + display: block; + font-size: 0; + height: 0; + line-height: 0; + overflow: hidden; +} + +.none { + display: none; +} + +.logo { + padding: 0 5px; + text-shadow: 0 0 1px #EEE; +} + +.tip { + color: #D54E21; + font-size: 11px; + + &__sup { + cursor: text; + &:link { + color: #D54E21; + } + &:hover { + color: #D54E21; + } + &:visited { + color: #F9F9F9; + } + } +} + +.em-span { + line-height: 24px; + float: left; +} + +.em-br { + line-height: 24px; +} + +/* end base */ + +/* start ico */ +.date-ico, .tag-ico, .user-ico, .expand-ico, .collapse-ico, #search, +.translate-ico, .feed-ico { + background-image: url("../../bolo-NeoEase/images/icons.png"); +} + +.feed-ico { + background-position: right -146px; + background-repeat: no-repeat; + color: #333; + padding-right: 24px; +} + +.translate-ico { + background-position: 1px -125px; + background-repeat: no-repeat; + border: 1px solid #999; + border-radius: 3px 3px 3px 3px; + cursor: pointer; + float: right; + height: 16px; + margin: 6px 0 0 18px; + padding: 1px; + width: 16px; +} + +.translate-ico:hover { + border-color: #D54E21; + box-shadow: 0 0 1px #999; + background-color: #F2F2F2; +} + +.expand-ico, .collapse-ico { + background-position: 54px -84px; + cursor: pointer; + height: 16px; + background-repeat: no-repeat; +} + +.collapse-ico { + background-position: 54px -69px; +} + +.date-ico, .tag-ico, .user-ico { + background-repeat: no-repeat; + height: 16px; + display: block; + padding-left: 20px; +} + +.tag-ico { + margin: 6px 6px 0 0; +} + +.date-ico { + float: left; + background-position: 0 -16px; +} + +.user-ico { + background-position: 0 -32px; + float: left; + margin-left: 12px; +} + +/* end ico */ + +/* start frame */ +.wrapper { + margin: 0 auto; + width: 960px; +} + +.body { + border-top: 2px solid #DDD; +} + +.main { + float: left; + margin: 16px 0 50px; + overflow: hidden; + width: 667px; +} + +/* end frame */ + +/* start header */ +.header { + background: url("../../bolo-NeoEase/images/icons.png") repeat-x scroll 0 -220px #F2F2F2; + padding: 20px 0; +} + +.header .title { + border-bottom: 1px solid #242424; + color: #000; + font-size: 26px; + font-weight: normal; +} + +.header .sub-title { + color: #242424; + font-size: 11px; +} + +.nav .page-icon { + float: left; + height: 14px; + width: 14px; + margin: 8px 3px 0 0; +} + +#search { + background-position: 7px -99px; + background-repeat: no-repeat; + background-color: #FFF; + border: 1px solid #DDD; + border-radius: 2px 2px 2px 2px; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) inset; + color: #888; + float: right; + font-size: 14px; + height: 20px; + line-height: 145%; + padding: 3px 10px 3px 28px; + width: 24px; + -moz-transition: width 0.4s ease, background 0.4s ease; + -webkit-transition: width 0.4s ease, background 0.4s ease; + transition: width 0.4s ease, background 0.4s ease; +} + +#search:focus { + background-color: #F9F9F9; + width: 196px; +} + +.nav { + background-color: #E9E9E9; + border-bottom: 1px solid #CCCCCC; +} + +.nav ul { + list-style: none; + float: left; +} + +.nav li { + float: left; +} + +.nav a { + color: #666666; + display: block; + float: left; + font-size: 14px; + height: 30px; + line-height: 30px; + padding: 0 15px; + text-shadow: 0 1px 0 #EEE; +} + +.nav a:hover { + color: #D54E21; + background-color: #DDD; +} + +.nav .current { + background-color: #DDD; + margin: -1px 0; + padding-right: 2px; +} + +.nav .current a { + background-color: #F9F9F9; + border-color: #CCCCCC #CCCCCC #F9F9F9; + border-style: solid; + border-width: 1px 1px 3px; + font-weight: 700; + height: 33px; + line-height: 33px; + margin: -2px 0 -3px; + color: #333; + text-shadow: 1px 1px 1px #C6D9E9; +} + +.nav img { + margin-left: 3px; +} + +.nav .right { + line-height: 29px; +} + +/* end header */ + +/* start footer */ +.footer { + background-color: #E9E9E9; + border-top: 3px solid #DDD; + color: #999; + font-size: 11px; + padding: 12px 0; +} + +.footer a { + color: #787878; +} + +.footer a:hover { + color: #D54E21; +} + +#goTop { + background: url("../../bolo-NeoEase/images/icons.png") no-repeat scroll 5px -51px #DDD; + border-radius: 2px 2px 0 0; + cursor: pointer; + font-size: 11px; + height: 21px; + line-height: 21px; + padding: 0 10px 0 23px; + position: absolute; + right: 56px; + display: none; +} + +#goTop:hover { + background-color: #EAEAEA; +} + +/* end footer*/ + +/* start side */ +.side { + float: right; + width: 278px; + margin-bottom: 50px; +} + +.side > div { + border-bottom: 1px solid #DEDEDE; + padding: 10px 5px 15px; +} + +.side h4 { + font-size: 14px; + line-height: 32px; +} + +.side ul { + list-style: none; +} + +#archiveSide { + list-style: square outside none; + margin-left: 18px; +} + +#archiveSide .archive-year { + color: #D54E21; + font-weight: bold; + height: 18px; + line-height: 18px; + list-style: none; +} + +.side a { + line-height: 18px; + color: #21759B; +} + +.side a:hover { + text-decoration: underline; +} + +.side sup { + color: #333; +} + +.side .side-li li { + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; + width: 268px; +} + +.side .side-li a { + white-space: nowrap; +} + +.recent-comments li > img { + background-color: #FFF; + border: 1px solid #999; + padding: 1px; + width: 32px; + height: 32px; + margin-top: 1px; +} + +.recent-comments-main { + float: left; + margin: 0 0 9px 3px; + width: 229px; +} + +.recent-comments-main .expand-ico, .recent-comments-main .collapse-ico { + background-position: 0 -86px; + float: right; + width: 16px; + -moz-transition: opacity 400ms ease; + -webkit-transition: opacity 400ms ease; + transition: opacity 400ms ease; + opacity: 0; + filter: alpha(opacity=0); +} + +.recent-comments li:hover .expand-ico, .recent-comments li:hover .collapse-ico { + opacity: 1; + filter: alpha(opacity=100); +} + +.recent-comments-main .collapse-ico { + background-position: 0 -70px; +} + +.recent-comments-content { + height: 18px; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} + +.recent-comments-content img { + width: 16px; +} + +.recent-comments-content a { + color: #555777; +} + +.recent-comments-content a:hover { + text-decoration: none; +} + +.recent-comments-content p { + margin: 0; +} + +/* end side */ + +/* start article list */ +.article { + border-bottom: 1px solid #CCC; + padding: 0 5px 10px; + margin-top: 20px; +} + +.article-element { + font-size: 11px; + line-height: 16px; + margin: 12px 0; + + &--article { + margin-top: 0; + } +} + +.vditor-reset--article { + padding-bottom: 12px; + + &::-webkit-scrollbar { + display: none; + } +} + +.article-element a { + border-bottom: 1px solid #DFDFDF; + color: #555; + text-decoration: none; + padding-bottom: 1px; +} + +.article-element a:hover { + color: #D54E21; + border-bottom-color: #D54E21; +} + +.article-title { + color: #21759B; + font-size: 20px; + font-weight: normal; +} + +.article-title:hover { + color: #D54E21; +} + +.article .expand-ico, .article .collapse-ico { + float: right; + margin-top: 9px; + padding-right: 6px; + width: 15px; + background-position: 0 -86px; +} + +.article .collapse-ico { + background-position: 0 -70px; +} + +.pagination { + margin-top: 30px; + line-height: 21px; +} + +.pagination a { + border: 1px solid #C5C3C2; + font-size: 10px; + margin: 2px; + padding: 1px 5px; + text-decoration: none; + background-color: #F2F2F2; +} + +.pagination a.current { + background-color: #FFF; + font-weight: bold; + padding: 2px 6px; + color: #000; +} + +.pagination a:hover { + background-color: #F3DEDD; + color: #D54E21; + border: 1px solid #D54E21; +} + +.page { + margin-top: 20px; + padding: 0 5px 5px; +} + +/* end article list */ + +/* start article */ +.article-panel1 { + background-color: #F2F2F2; + padding: 5px 10px; +} + +.article-panel2 { + background-color: #FFF; + margin-top: 12px; + padding: 5px 10px; +} + +.article-panel2 ul { + line-height: 18px; + list-style: square outside none; + margin-left: 18px; +} + +.share { + border-bottom: 1px solid #DEDEDE; + margin-top: 15px; +} + +.share-comment { + background-color: #DDD; + border-radius: 2px 2px 0 0; + float: right; + font-size: 11px; + height: 21px; + line-height: 21px; + margin-right: 16px; + padding: 0 10px; +} + +.share-comment:hover { + background-color: #EAEAEA; +} + +#comments { + position: relative; +} + +#comments > div { + border-bottom: 1px solid #DEDEDE; + padding: 10px; + width: 647px; + background-color: #F5F5F5; +} + +#comments > div:nth-child(2n) { + background-color: #F8F8F8; +} + +#comments .comment-panel > .right { + -moz-transition: opacity 400ms ease; + -webkit-transition: opacity 400ms ease; + transition: opacity 400ms ease; + opacity: 0; + filter: alpha(opacity=0); +} + +#comments > div:hover .comment-panel > .right { + opacity: 1; + filter: alpha(opacity=100); +} + +.comment-header { + height: 50px; + width: 50px; + float: left; + background-color: #FFF; + border: 1px solid #DEDEDE; + padding: 1px; +} + +.comment-panel { + float: left; + margin: 0 10px; + width: 573px; + line-height: 16px; +} + +.comment-panel .vditor-reset { + margin-top: 5px; +} + +#comments .comment-body-ref { + border-bottom: 0; + background-color: #FFF; + border-radius: 5px 5px 5px 5px; + left: 73px; + position: absolute; + box-shadow: 1px 0 3px #DEDEDE; + width: 560px; +} + +.comment-body-ref .comment-panel { + width: 486px; +} + +.comment-body-ref .arrow { + border-color: #F5F5F5 #FFF #F5F5F5 #F5F5F5; + border-style: solid; + border-width: 6px 8px 10px 0; + display: block; + left: -8px; + position: absolute; + top: 5px; +} + +.form { + margin: 10px; +} + +.form img { + cursor: pointer; +} + +.form h4 { + margin: 10px 0 5px 5px; +} + +.form th { + text-align: right; + white-space: nowrap; +} + +.form input[type="text"], .form input[type="password"], .form textarea { + border-color: silver #D9D9D9 #D9D9D9; + border-style: solid; + border-width: 1px; + font-family: "Lucida Grande", Verdana, '微软雅黑'; + font-size: 12px; + outline: medium none; + padding: 0 3px; +} + +.form input:focus, .form textarea:focus { + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3) inset; +} + +.form textarea { + overflow: auto; + resize: vertical; + padding: 3px; + width: 634px; +} + +.form input { + height: 24px; + line-height: 16px; + width: 260px; +} + +.form button { + background-color: #B4D666; + border-color: #B4D666 #81B840 #81B840 #B4D666; + border-style: solid; + border-width: 1px; + color: #2970A6; + height: 28px; + line-height: 28px; + padding: 0 12px; +} + +.form button:hover { + background-color: #98C64C; + border-color: #76B33A #98C64C #98C64C #76B33A; + color: #074A7E; +} + +/* end article*/ + +/* start tags */ +#tags li { + float: left; + list-style: none; + height: 38px; +} + +#tags a:hover { + text-shadow: 0 0 2px; +} + +#tags a { + border-radius: 3px 3px 3px 3px; + box-shadow: 1px 1px 3px #333; + float: left; + margin: 3px 6px; + padding: 3px 12px; +} + +#tagsSide li a { + float: left; + line-height: 145%; + margin-right: 7px; + white-space: nowrap; +} + +.tags1 { + font-size: 12px; + color: #A1A1A1; +} + +.tags2 { + font-size: 14px; + color: #687F95; +} + +.tags3 { + font-size: 16px; + color: #4C6E90; +} + +.tags4 { + font-size: 18px; + color: #258; +} + +.tags5 { + font-size: 20px; +} + +#tagsSide .tags2 { + font-size: 14px; +} + +#tagsSide .tags3 { + font-size: 16px; +} + +#tagsSide .tags4 { + font-size: 18px; +} + +#tagsSide .tags5 { + font-size: 20px; +} + +/* end tags */ + +/* start others */ +.main > h2 { + margin-top: 16px; +} + +.error { + background-image: url("../../bolo-NeoEase/images/404.png"); + float: left; + height: 536px; + margin: 50px 80px; + position: relative; + width: 363px; +} + +.error h2 { + left: -68px; + position: absolute; + top: -20px; +} + +.error a { + background-color: #9CD941; + border: 265px none; + bottom: 12px; + color: #333555; + float: left; + padding: 10px 15px; + position: absolute; + right: -106px; +} + +.error a:hover { + background-color: #ADEb51; +} + +/* end others */ diff --git a/bolo-NeoEase/footer.ftl b/bolo-NeoEase/footer.ftl new file mode 100644 index 0000000..859a327 --- /dev/null +++ b/bolo-NeoEase/footer.ftl @@ -0,0 +1,36 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> + +
TOP
+ + + +<#include "../../common-template/label.ftl"> +${plugins} diff --git a/bolo-NeoEase/header.ftl b/bolo-NeoEase/header.ftl new file mode 100644 index 0000000..e210a33 --- /dev/null +++ b/bolo-NeoEase/header.ftl @@ -0,0 +1,80 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +
+
+
+

+ + ${blogTitle} + +

+ ${blogSubtitle} +
+ <#if interactive == "on"> +
+ + +
+ +
+
+
+ diff --git a/bolo-NeoEase/images/404.png b/bolo-NeoEase/images/404.png new file mode 100644 index 0000000..47f24c8 Binary files /dev/null and b/bolo-NeoEase/images/404.png differ diff --git a/bolo-NeoEase/images/ajax-loader.gif b/bolo-NeoEase/images/ajax-loader.gif new file mode 100644 index 0000000..5ba2f07 Binary files /dev/null and b/bolo-NeoEase/images/ajax-loader.gif differ diff --git a/bolo-NeoEase/images/icons.png b/bolo-NeoEase/images/icons.png new file mode 100644 index 0000000..b11023a Binary files /dev/null and b/bolo-NeoEase/images/icons.png differ diff --git a/bolo-NeoEase/index.ftl b/bolo-NeoEase/index.ftl new file mode 100644 index 0000000..6d8c968 --- /dev/null +++ b/bolo-NeoEase/index.ftl @@ -0,0 +1,42 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> + + + + <@head title="${blogTitle}"> + + + + + ${topBarReplacement} + <#include "header.ftl"> +
+
+
+ <#include "article-list.ftl"> +
+ <#include "side.ftl"> +
+
+
+ <#include "footer.ftl"> + + diff --git a/bolo-NeoEase/js/bolo-NeoEase-mod.js b/bolo-NeoEase/js/bolo-NeoEase-mod.js new file mode 100644 index 0000000..cf89ef8 --- /dev/null +++ b/bolo-NeoEase/js/bolo-NeoEase-mod.js @@ -0,0 +1,179 @@ +/* + * Bolo - A stable and beautiful blogging system based in Solo. + * Copyright (c) 2020, https://github.com/adlered + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +/** + * @fileoverview neoease js. + * + * @author Liyuan Li + * @version 1.0.0.8, Sep 6, 2012 + */ +var goTop = function (acceleration) { + acceleration = acceleration || 0.1 + + var y = $(window).scrollTop() + var speed = 1 + acceleration + window.scrollTo(0, Math.floor(y / speed)) + + if (y > 0) { + var invokeFunction = 'goTop(' + acceleration + ')' + window.setTimeout(invokeFunction, 16) + } +} + +var collapseArchive = function (it, year) { + var tag = true + if (it.className === 'collapse-ico') { + it.className = 'expand-ico' + tag = false + } else { + it.className = 'collapse-ico' + } + + $('#archiveSide li').each(function () { + var $this = $(this) + // hide other year month archives + if ($this.data('year') === year) { + if (tag) { + $(this).show() + } else { + $(this).hide() + } + } + }) +} + +var getArticle = function (it, id) { + var $abstract = $('#abstract' + id), + $content = $('#content' + id) + + if ($content.html() === '') { + $.ajax({ + url: '/get-article-content?id=' + id, + type: 'GET', + dataType: 'html', + beforeSend: function () { + $abstract.css('background', + 'url(/skins/bolo-NeoEase/images/ajax-loader.gif) no-repeat scroll center center transparent') + }, + success: function (result, textStatus) { + it.className = 'collapse-ico' + $content.html(result) + $abstract.hide().css('background', 'none') + $content.fadeIn('slow') + Util.parseLanguage() + Util.parseMarkdown() + }, + }) + } else { + if (it.className === 'expand-ico') { + $abstract.hide() + $content.fadeIn() + it.className = 'collapse-ico' + } else { + $content.hide() + $abstract.fadeIn() + it.className = 'expand-ico' + } + } + + return false +} + +var goTranslate = function () { + window.open('http://translate.google.com/translate?sl=auto&tl=auto&u=' + + location.href) +} + +$(document).ready(function () { + // go top icon show or hide + $(window).scroll(function () { + var y = $(window).scrollTop() + + if (y > 182) { + var bodyH = $(window).height() + var top = y + bodyH - 21 + if ($('body').height() - 58 <= y + bodyH) { + top = $('.footer').offset().top - 21 + } + $('#goTop').fadeIn('slow').css('top', top) + } else { + $('#goTop').hide() + } + }) + + // archive + var currentYear = (new Date()).getFullYear(), + year = currentYear + $('#archiveSide li').each(function (i) { + var $this = $(this) + + // hide other year month archives + if ($this.data('year') !== currentYear) { + $(this).hide() + } + + // append year archive + if (year !== $this.data('year')) { + year = $this.data('year') + $this.before('
  • ' + year + ' \u5e74
  • ') + } + }) + + // recent comment mouse click + $('.recent-comments .expand-ico').click(function () { + if (this.className === 'expand-ico') { + $(this).parent().next().css({ + 'height': 'auto', + 'white-space': 'normal', + }) + this.className = 'collapse-ico' + } else { + $(this).parent().next().animate({ + 'height': '18px', + }, function () { + $(this).css('white-space', 'nowrap') + }) + this.className = 'expand-ico' + } + }) + + // nav current + $('.nav ul li').each(function () { + var $a = $(this).find('a') + if ($a.attr('href') === Label.servePath + location.pathname) { + $(this).addClass('current') + } else if (/\/[0-9]+$/.test(location.pathname)) { + $('.nav ul li')[0].className = 'current' + } + }) + + Util.setTopBar() + Util.replaceSideEm($('.recent-comments-content')) + Util.buildTags('tagsSide') + + // recent comments + $('.recent-comments .recent-comments-main').each(function () { + if ($(this).find('.recent-comments-content>a').height() < 30) { + $(this).find('.expand-ico').remove() + } else { + $(this).find('.expand-ico').parent().next().css({ + 'white-space': 'nowrap', + }) + } + }) +}) \ No newline at end of file diff --git a/bolo-NeoEase/js/bolo-NeoEase-mod.min.js b/bolo-NeoEase/js/bolo-NeoEase-mod.min.js new file mode 100644 index 0000000..775af59 --- /dev/null +++ b/bolo-NeoEase/js/bolo-NeoEase-mod.min.js @@ -0,0 +1 @@ +var goTop=function(e){e=e||.1;var a=$(window).scrollTop(),t=1+e;if(window.scrollTo(0,Math.floor(a/t)),a>0){var n="goTop("+e+")";window.setTimeout(n,16)}},collapseArchive=function(e,a){var t=!0;"collapse-ico"===e.className?(e.className="expand-ico",t=!1):e.className="collapse-ico",$("#archiveSide li").each((function(){$(this).data("year")===a&&(t?$(this).show():$(this).hide())}))},getArticle=function(e,a){var t=$("#abstract"+a),n=$("#content"+a);return""===n.html()?$.ajax({url:"/get-article-content?id="+a,type:"GET",dataType:"html",beforeSend:function(){t.css("background","url(/skins/bolo-NeoEase/images/ajax-loader.gif) no-repeat scroll center center transparent")},success:function(a,o){e.className="collapse-ico",n.html(a),t.hide().css("background","none"),n.fadeIn("slow"),Util.parseLanguage(),Util.parseMarkdown()}}):"expand-ico"===e.className?(t.hide(),n.fadeIn(),e.className="collapse-ico"):(n.hide(),t.fadeIn(),e.className="expand-ico"),!1},goTranslate=function(){window.open("http://translate.google.com/translate?sl=auto&tl=auto&u="+location.href)};$(document).ready((function(){$(window).scroll((function(){var e=$(window).scrollTop();if(e>182){var a=$(window).height(),t=e+a-21;$("body").height()-58<=e+a&&(t=$(".footer").offset().top-21),$("#goTop").fadeIn("slow").css("top",t)}else $("#goTop").hide()}));var e=(new Date).getFullYear(),a=e;$("#archiveSide li").each((function(t){var n=$(this);n.data("year")!==e&&$(this).hide(),a!==n.data("year")&&(a=n.data("year"),n.before("
  • "+a+" \u5e74
  • "))})),$(".recent-comments .expand-ico").click((function(){"expand-ico"===this.className?($(this).parent().next().css({height:"auto","white-space":"normal"}),this.className="collapse-ico"):($(this).parent().next().animate({height:"18px"},(function(){$(this).css("white-space","nowrap")})),this.className="expand-ico")})),$(".nav ul li").each((function(){$(this).find("a").attr("href")===Label.servePath+location.pathname?$(this).addClass("current"):/\/[0-9]+$/.test(location.pathname)&&($(".nav ul li")[0].className="current")})),Util.setTopBar(),Util.replaceSideEm($(".recent-comments-content")),Util.buildTags("tagsSide"),$(".recent-comments .recent-comments-main").each((function(){$(this).find(".recent-comments-content>a").height()<30?$(this).find(".expand-ico").remove():$(this).find(".expand-ico").parent().next().css({"white-space":"nowrap"})}))})); \ No newline at end of file diff --git a/bolo-NeoEase/lang/lang_en_US.properties b/bolo-NeoEase/lang/lang_en_US.properties new file mode 100644 index 0000000..5983078 --- /dev/null +++ b/bolo-NeoEase/lang/lang_en_US.properties @@ -0,0 +1,36 @@ +# +# Bolo - A stable and beautiful blogging system based in Solo. +# Copyright (c) 2020, https://github.com/adlered +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +# +# Description: Language configurations(en_US) for skin "neoease". +# Version: 2.0.0.0, Feb 23, 2019 +# Author: Liyuan Li +# +allTagsLabel=Tags +indexLabel=Home +archive1Label=Archive: +tag1Label=Tags: +returnTo1Label=Return: +replyLabel=Reply +commentNameLabel=Name +commentURLLabel=URL +nameTooLongLabel=Sorry, your username must be between 2 and 20 characters long! +commentContentCannotEmptyLabel=Sorry, your content must be between 2 and 500 characters long! +loadingLabel=loading.... +externalRelevantArticlesLabel=External Relevant Articles: +b3logLabel=B3LOG diff --git a/bolo-NeoEase/lang/lang_zh_CN.properties b/bolo-NeoEase/lang/lang_zh_CN.properties new file mode 100644 index 0000000..389ad21 --- /dev/null +++ b/bolo-NeoEase/lang/lang_zh_CN.properties @@ -0,0 +1,27 @@ +# +# Bolo - A stable and beautiful blogging system based in Solo. +# Copyright (c) 2020, https://github.com/adlered +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +# +# Description: Language configurations(zh_CN) for skin "neoease". +# Version: 2.0.0.0, Feb 23, 2019 +# Author: Liyuan Li +# +replyLabel=\u56DE\u590D +commentNameLabel=\u59D3\u540D +commentURLLabel=URL +b3logLabel=B3LOG diff --git a/bolo-NeoEase/macro-comments.ftl b/bolo-NeoEase/macro-comments.ftl new file mode 100644 index 0000000..99f30cd --- /dev/null +++ b/bolo-NeoEase/macro-comments.ftl @@ -0,0 +1,40 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#macro comments commentList article> + +
    + <#list commentList as comment> + <#include "common-comment.ftl"/> + +
    +<#if article.commentable> +
    +

    ${postCommentsLabel}

    + + + +
    + + \ No newline at end of file diff --git a/bolo-NeoEase/preview.png b/bolo-NeoEase/preview.png new file mode 100644 index 0000000..1779495 Binary files /dev/null and b/bolo-NeoEase/preview.png differ diff --git a/bolo-NeoEase/side.ftl b/bolo-NeoEase/side.ftl new file mode 100644 index 0000000..5fb33a4 --- /dev/null +++ b/bolo-NeoEase/side.ftl @@ -0,0 +1,178 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +
    +
    +
    + <#include "../../common-template/macro-user_site.ftl"/> + <@userSite dir="nw"/> + <#if "" != noticeBoard> +

    +
    ${noticeBoard}
    + +
    + <#if article?? && article.articleToC?? && article.articleToC?size > 0> +
    +

    ${tocLabel}

    + <#include "../../common-template/toc.ftl"/> +
    + + <#else> + <#if interactive == "on"> + <#if 0 != recentComments?size> +
    +

    ${recentCommentsLabel}

    + +
    + + <#if 0 != mostCommentArticles?size> +
    +

    ${mostCommentArticlesLabel}

    + +
    + + + <#if 0 != mostViewCountArticles?size> +
    +

    ${mostViewCountArticlesLabel}

    + +
    + + + <#if 0 != mostUsedCategories?size> +
    +

    ${categoryLabel}

    + +
    +
    + + + <#if 0 != mostUsedTags?size> +
    +

    ${tagsLabel}

    + +
    +
    + + <#if 0 != links?size> +
    +

    ${linkLabel}

    + +
    + + <#if 0 != archiveDates?size> +
    +

    ${archiveLabel}

    + +
    + + +
    diff --git a/bolo-NeoEase/skin.properties b/bolo-NeoEase/skin.properties new file mode 100644 index 0000000..1816448 --- /dev/null +++ b/bolo-NeoEase/skin.properties @@ -0,0 +1,26 @@ +# +# Bolo - A stable and beautiful blogging system based in Solo. +# Copyright (c) 2020, https://github.com/adlered +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +# +# Description: NeoEase skin. +# Version: 1.0.0.7, Nov 21, 2012 +# Author: Liyuan Li +# + +name=NeoEase +memo=http://www.neoease.com/ diff --git a/bolo-NeoEase/tag-articles.ftl b/bolo-NeoEase/tag-articles.ftl new file mode 100644 index 0000000..dccb543 --- /dev/null +++ b/bolo-NeoEase/tag-articles.ftl @@ -0,0 +1,49 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> + + + + <@head title="${tag.tagTitle} ${tagLabel} - ${blogTitle}"> + + + + + ${topBarReplacement} + <#include "header.ftl"> +
    +
    + + <#include "side.ftl"> +
    +
    +
    + <#include "footer.ftl"> + + diff --git a/bolo-NeoEase/tags.ftl b/bolo-NeoEase/tags.ftl new file mode 100644 index 0000000..2517b8e --- /dev/null +++ b/bolo-NeoEase/tags.ftl @@ -0,0 +1,55 @@ +<#-- + + Bolo - A stable and beautiful blogging system based in Solo. + Copyright (c) 2020, https://github.com/adlered + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +--> +<#include "../../common-template/macro-common_head.ftl"> + + + + <@head title="${allTagsLabel} - ${blogTitle}"> + + + + + ${topBarReplacement} + <#include "header.ftl"> +
    +
    +
    + +
    + <#include "side.ftl"> +
    +
    +
    + <#include "footer.ftl"> + + +