This commit is contained in:
Van 2019-03-26 10:59:56 +08:00
parent f038d96741
commit 00f36effdb
No known key found for this signature in database
GPG Key ID: 7059B8783A78F16C
25 changed files with 2839 additions and 0 deletions

View File

@ -0,0 +1,61 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} ${archiveLabel} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<div class="module__title">
<span>
<#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear}
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if>
<span class="ft-green">
${archiveDate.archiveDatePublishedArticleCount}
<span class="ft-12">${cntArticleLabel}</span>
</span>
</span>
</div>
<#include "article-list.ftl">
</div>
<#include "bottom2.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>

75
Casper/archives.ftl Normal file
View File

@ -0,0 +1,75 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${archiveLabel} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<div class="module__title">
<span>
${archiveDates?size}
<span class="ft-green ft-12">${cntMonthLabel}</span>
${statistic.statisticPublishedBlogArticleCount}
<span class="ft-green ft-12">${cntArticleLabel}</span>
</span>
</div>
<#if 0 != archiveDates?size>
<#list archiveDates as archiveDate>
<div class="page__item">
<h3>
<a class="ft-gray"
href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
<#if "en" == localeString?substring(0, 2)>
${archiveDate.monthName} ${archiveDate.archiveDateYear}
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if>
<span class="ft-green">
${archiveDate.archiveDatePublishedArticleCount}
<span class="ft-12">${cntArticleLabel}</span>
</span>
</a>
</h3>
</div>
</#list>
</#if>
</div>
<#include "bottom.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>

88
Casper/article-list.ftl Normal file
View File

@ -0,0 +1,88 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<div class="fn-clear article__wrap">
<#list articles as article>
<article class="article__item
<#if article_index == 0 || article_index == 10>article__item--big
<#elseif article_index &gt; 0 && article_index &lt; 5>article__item--small
<#elseif article_index &gt; 4 && article_index &lt; 8>article__item--big
<#elseif article_index == 8 || article_index == 9>article__item--mid
<#elseif article_index &gt; 10 && article_index &lt; 15>article__item--small
<#elseif article_index &gt; 14 && article_index &lt; 18>article__item--big
<#elseif article_index &gt; 17 && article_index &lt; 20>article__item--mid
<#else>article__item--big
</#if>">
<header class="article__panel">
<div class="article__main">
<h2 class="article__title">
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h2>
<div class="article__thumbnail" style="background-image: url(${article.articleImg1URL})"/>
</div>
<div class="article__meta ft-gray fn-flex">
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time> &nbsp;•&nbsp;
<a href="${servePath}${article.articlePermalink}#comments" class="ft-gray">
${article.articleCommentCount} ${commentLabel}
</a> &nbsp;•&nbsp;
<a href="${servePath}${article.articlePermalink}" class="ft-gray">
${article.articleViewCount} ${viewLabel}
</a>
</div>
</header>
</article>
</#list>
</div>
<#if 0 != paginationPageCount>
<nav class="pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}?p=${paginationPreviousPageNum}" class="pagination__item">&laquo;</a>
<a class="pagination__item" href="${servePath}${path}">1</a>
<span class="pagination__item pagination__omit">...</span>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="pagination__item pagination__item--active">${paginationPageNum}</span>
<#else>
<a class="pagination__item" href="${servePath}${path}?p=${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount>
<span class="pagination__item pagination__omit">...</span>
<a href="${servePath}${path}?p=${paginationPageCount}" class="pagination__item">${paginationPageCount}</a>
<a href="${servePath}${path}?p=${paginationNextPageNum}" class="pagination__item">&raquo;</a>
</#if>
</nav>
</#if>

235
Casper/article.ftl Normal file
View File

@ -0,0 +1,235 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<#include "macro-comments.ftl">
<#include "../../common-template/macro-comment_script.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${article.articleTitle} - ${blogTitle}" description="${article.articleAbstract?html}">
<link rel="stylesheet"
href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
<#if previousArticlePermalink??>
<link rel="prev" title="${previousArticleTitle}" href="${servePath}${previousArticlePermalink}">
</#if>
<#if nextArticlePermalink??>
<link rel="next" title="${nextArticleTitle}" href="${servePath}${nextArticlePermalink}">
</#if>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<div class="main post__main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<article class="post">
<header>
<h1 class="post__title">
${article.articleTitle}
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
</header>
<section class="vditor-reset">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</section>
<footer data-oid="${article.oId}"
class="post__tags"
data-tag="<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>">
<#list article.articleTags?split(",") as articleTag>
<a class="tag" rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
</footer>
<div class="post__share fn-clear">
<time class="ft-gray">
${article.articleCreateDate?string("yyyy-MM-dd")} •
</time>
<a class="post__view" href="${servePath}${article.articlePermalink}">
${article.articleViewCount} ${viewLabel}</a>
<div class="fn-right">
<span class="vditor-tooltipped vditor-tooltipped__n post__share-icon ft-green"
onclick="$('#comment').focus()"
aria-label="${commentLabel}">
<svg>
<use xlink:href="#icon-comment"></use>
</svg>
${article.articleCommentCount} &nbsp; &nbsp;
</span>
<span id="articleShare">
<span class="post__share-icon" data-type="wechat">
<svg><use xlink:href="#icon-wechat"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="weibo">
<svg><use xlink:href="#icon-weibo"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="twitter">
<svg><use xlink:href="#icon-twitter"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="qqz">
<svg><use xlink:href="#icon-qqz"></use></svg>
</span>
<span class="article__code"
data-title="${article.articleTitle}"
data-blogtitle="${blogTitle}"
data-url="${servePath}${article.articlePermalink}"
data-avatar="${article.authorThumbnailURL}"></span>
</span>
</div>
</div>
</article>
</div>
<div class="article__bottom">
<div class="wrapper">
<div class="fn-flex footer__tag">
<div class="fn-flex-1" id="externalRelevantArticles"></div>
<div class="fn-flex-1" id="relevantArticles"></div>
<div class="fn-flex-1" id="randomArticles"></div>
</div>
<@comments commentList=articleComments article=article></@comments>
</div>
</div>
<div class="article__toolbar">
<div class="wrapper">
<a class="post__view" href="${servePath}${article.articlePermalink}">
${article.articleViewCount} ${viewLabel}
</a>
<div class="fn-right">
<span class="vditor-tooltipped vditor-tooltipped__n post__share-icon ft-green"
onclick="$('#comment').focus()"
aria-label="${commentLabel}">
<svg>
<use xlink:href="#icon-comment"></use>
</svg>
${article.articleCommentCount} &nbsp; &nbsp;
</span>
<span id="articleBottomShare">
<span class="post__share-icon" data-type="wechat">
<svg><use xlink:href="#icon-wechat"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="weibo">
<svg><use xlink:href="#icon-weibo"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="twitter">
<svg><use xlink:href="#icon-twitter"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="qqz">
<svg><use xlink:href="#icon-qqz"></use></svg>
</span>
<span class="article__code"
data-title="${article.articleTitle}"
data-blogtitle="${blogTitle}"
data-url="${servePath}${article.articlePermalink}"
data-avatar="${article.authorThumbnailURL}"></span>
</span>
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" rel="next" class="article__next">
<span class="ft-12 ft-gray">${nextArticleLabel}</span> <br>
${nextArticleTitle}
</a>
</#if>
</div>
</div>
</div>
<div class="post__side">
<span class="vditor-tooltipped vditor-tooltipped__e post__share-icon ft-green"
onclick="$('#comment').focus()"
aria-label="${commentLabel}">
<span class="ft-gray">${article.articleCommentCount}</span>
<svg>
<use xlink:href="#icon-comment"></use>
</svg>
</span>
<div id="articleSideShare">
<span class="post__share-icon" data-type="wechat">
<svg><use xlink:href="#icon-wechat"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="weibo">
<svg><use xlink:href="#icon-weibo"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="twitter">
<svg><use xlink:href="#icon-twitter"></use></svg>
</span> &nbsp; &nbsp;
<span class="post__share-icon" data-type="qqz">
<svg><use xlink:href="#icon-qqz"></use></svg>
</span>
<span class="article__code"
data-title="${article.articleTitle}"
data-blogtitle="${blogTitle}"
data-url="${servePath}${article.articlePermalink}"
data-avatar="${article.authorThumbnailURL}"></span>
</div>
</div>
<div class="main">
<#include "bottom.ftl">
</div>
<#if article?? && article.articleToC?? && article.articleToC?size &gt; 0>
<#include "../../common-template/toc.ftl"/>
</#if>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
<script type="text/javascript"
src="${staticServePath}/skins/${skinDirName}/js/jquery.qrcode${miniPostfix}.js"></script>
<#if pjax><!---- pjax {#pjax} start ----></#if>
<@comment_script oId=article.oId commentable=article.commentable>
Skin.initArticle()
Skin.initComment = function (articleOId, articleTags) {
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != randomArticlesDisplayCount>
page.loadRandomArticles("<div class='module__title'><span>${randomArticlesLabel}</span></div>");
</#if>
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles(articleTags, "<div class='module__title'><span>${externalRelevantArticlesLabel}</span></div>");
</#if>
<#if 0 != relevantArticlesDisplayCount>
page.loadRelevantArticles(articleOId, '<div class="module__title"><span>${relevantArticlesLabel}</span></div>');
</#if>
}
Skin.initComment('${article.oId}', "<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>")
</@comment_script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
${plugins}
</body>
</html>

50
Casper/bottom.ftl Normal file
View File

@ -0,0 +1,50 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<div class="footer__tag wrapper fn-flex">
<#if 0 != mostUsedCategories?size>
<div class="fn-flex-1">
<div class="module__title">
<span>${categoryLabel}</span>
</div>
<div>
<#list mostUsedCategories as category>
<a class="tag vditor-tooltipped vditor-tooltipped__n"
aria-label="${category.categoryTagCnt} ${cntLabel}${tagsLabel}"
href="${servePath}/category/${category.categoryURI}">${category.categoryTitle}</a>
</#list>
</div>
</div>
</#if>
<#if 0 != mostUsedTags?size>
<div class="fn-flex-1">
<div class="module__title">
<span>${tagsLabel}</span>
</div>
<div>
<#list mostUsedTags as tag>
<a rel="tag"
class="tag vditor-tooltipped vditor-tooltipped__n"
aria-label="${tag.tagPublishedRefCount} ${countLabel}${articleLabel}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">${tag.tagTitle}</a>
</#list>
</div>
</div>
</#if>
</div>

36
Casper/bottom2.ftl Normal file
View File

@ -0,0 +1,36 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<div class="footer__tag wrapper">
<#if 0 != mostUsedCategories?size>
<#list mostUsedCategories as category>
<a class="tag vditor-tooltipped vditor-tooltipped__n"
aria-label="${category.categoryTagCnt} ${cntLabel}${tagsLabel}"
href="${servePath}/category/${category.categoryURI}">${category.categoryTitle}</a>
</#list>
</#if>
<#if 0 != mostUsedTags?size>
<#list mostUsedTags as tag>
<a rel="tag"
class="tag vditor-tooltipped vditor-tooltipped__n"
aria-label="${tag.tagPublishedRefCount} ${countLabel}${articleLabel}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">${tag.tagTitle}</a>
</#list>
</#if>
</div>

View File

@ -0,0 +1,56 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${category.categoryTitle} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<div class="module__title">
<span>
${category.categoryTitle}
<span class="ft-green ft-12">
${category.categoryDescription}
</span>
</span>
</div>
<#include "article-list.ftl">
</div>
<#include "bottom2.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>

54
Casper/common-comment.ftl Normal file
View File

@ -0,0 +1,54 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<div id="${comment.oId}" class="comment__item">
<img class="comment__avatar" src="${comment.commentThumbnailURL}"/>
<main class="comment__body">
<div class="fn-clear">
<span class="comment__user">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
</span>
<span class="ft-12">
<#if comment.isReply>
<a class="ft-gray" href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 23);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')">
<svg class="ft-gray"><use xlink:href="#icon-reply"></use></svg>
${reply1Label} ${comment.commentOriginalCommentName}
</a>
</#if>
<time class="ft-fade"> • ${comment.commentDate2?string("yyyy-MM-dd")}</time>
</span>
<#if article.commentable>
<a class="fn-right ft-green" href="javascript:page.toggleEditor('${comment.oId}', '${comment.commentName}')">
<svg><use xlink:href="#icon-reply"></use></svg> ${reply1Label}
</a>
</#if>
</div>
<div class="vditor-reset">
${comment.commentContent}
</div>
</main>
</div>

1
Casper/css/base.css Normal file

File diff suppressed because one or more lines are too long

842
Casper/css/base.scss Normal file
View File

@ -0,0 +1,842 @@
/**
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* 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 <https://www.gnu.org/licenses/>.
*/
/*
* skin style
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 2.1.0.0, Mar 22, 2019
*/
@import "../../../scss/reset";
@import "../../../scss/usite";
@import "../../../scss/toc";
@import "../../../scss/nprogress";
@import "vditor/src/assets/scss/classic";
.fn-flex {
display: flex
}
.fn-flex-1 {
flex: 1;
min-width: 1px
}
.fn-clear:before, .fn-clear:after {
display: table;
content: ""
}
.fn-clear:after {
clear: both
}
.fn-left {
float: left
}
.fn-right {
float: right
}
.ft-12 {
font-size: 12px;
font-weight: normal;
}
.ft-gray {
color: rgba(0, 0, 0, 0.54);
}
.ft-fade {
color: rgba(0, 0, 0, 0.38);
}
.ft-green {
color: #03a87c !important;
transition: all 0.1s
}
.ft-green:hover {
color: #018f69 !important
}
.tag {
background-color: rgba(0, 0, 0, 0.05);
color: rgba(0, 0, 0, 0.68);
padding: 5px 10px;
line-height: 22px;
font-weight: 400;
border-radius: 3px;
white-space: nowrap;
display: inline-block;
transition: all 0.1s;
margin: 0 8px 8px 0;
font-size: 15px
}
.tag:hover {
text-decoration: none;
background: rgba(0, 0, 0, 0.1);
color: rgba(0, 0, 0, 0.68)
}
.tag__level0 {
line-height: inherit;
font-size: 12px;
color: rgba(0, 0, 0, 0.38)
}
.tag__level1 {
line-height: inherit;
font-size: 16px;
color: rgba(0, 0, 0, 0.54)
}
.tag__level2 {
line-height: inherit;
font-size: 21px;
color: #6f6f6f
}
.tag__level3 {
line-height: inherit;
font-size: 24px;
color: #3b3e43
}
.tag__level4 {
line-height: inherit;
font-size: 30px;
color: #000
}
.module__title {
border-bottom: 1px solid rgba(0, 0, 0, 0.15);
margin-bottom: 25px;
line-height: 26px;
font-size: 22px;
position: relative;
height: 46px
}
.module__title > span {
border-bottom: 1px solid rgba(0, 0, 0, 0.54);
position: absolute;
padding-bottom: 20px;
height: 26px
}
/* star framework */
.wrapper {
max-width: 1000px;
margin: 0 auto;
box-sizing: border-box
}
.header {
padding: 0 20px;
box-sizing: border-box;
height: 64px;
text-align: center;
transition: all 0.1s;
z-index: 11;
}
.header h1 {
display: inline-block;
line-height: 61px;
width: 50%;
overflow: auto;
white-space: nowrap;
}
.header h1::-webkit-scrollbar {
display: none;
}
.header--fixed {
position: fixed;
width: 100%;
top: -64px;
background-color: #fff;
box-shadow: 0 2px 2px -2px rgba(0, 0, 0, 0.15)
}
.header__logo {
float: left;
height: 32px;
width: 32px;
margin: 16px 0;
background-size: cover;
background-repeat: no-repeat;
background-position: center center
}
.header__title {
overflow: hidden;
font-size: 26px;
color: rgba(0, 0, 0, 0.84)
}
.header__title:hover {
text-decoration: none
}
.header__icon {
transition: all 0.1s;
color: rgba(0, 0, 0, 0.54);
text-decoration: none;
width: 25px;
margin-left: 10px;
float: left;
margin-top: 25px
}
.header__icon:hover {
text-decoration: none;
color: rgba(0, 0, 0, 0.68)
}
.header__icon svg {
height: 16px;
width: 16px
}
.header__icon.avatar {
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
display: inline-block;
height: 32px;
width: 32px;
border-radius: 16px;
margin-top: 16px;
margin-left: 14px
}
.header__a {
color: #03a87c;
font-size: 16px;
float: left;
margin: 16px 0 0 16px;
transition: all 0.1s;
line-height: 32px;
}
.header__a:hover {
text-decoration: none;
color: #018f69;
border-color: #018f69
}
.header__nav {
height: 50px;
padding: 0 20px;
box-sizing: border-box
}
.header__nav .wrapper {
overflow: auto;
word-wrap: normal;
white-space: nowrap
}
.header__nav .wrapper::-webkit-scrollbar {
display: none
}
.header__nav a {
color: rgba(0, 0, 0, 0.76);
font-size: 15px;
padding: 0 10px;
line-height: 50px;
text-decoration: none
}
.header__nav a img {
height: 16px;
width: 16px;
vertical-align: text-top
}
.header__nav a:first-child {
padding-left: 0
}
.header__nav--fixed {
z-index: 11;
position: fixed;
width: 100%;
top: 0;
background-color: #fff;
box-shadow: 0 2px 2px -2px rgba(0, 0, 0, 0.15)
}
.footer {
margin-top: 50px;
padding: 10px 20px 25px;
font-size: 14px;
border-top: 1px solid rgba(0, 0, 0, 0.05);
color: rgba(0, 0, 0, 0.38)
}
.footer a {
color: rgba(0, 0, 0, 0.54)
}
.footer__tag {
margin-top: 50px;
}
.footer__tag > div {
margin-right: 20px
}
.footer__tag > div:last-child {
margin-right: 0
}
.footer__tag li {
list-style: none;
}
.footer__tag li a {
color: rgba(0, 0, 0, 0.54);
display: block;
line-height: 30px;
word-break: keep-all;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
padding: 0 25px;
}
.footer__tag li a:hover {
color: rgba(0, 0, 0, 0.68);
}
.main {
margin: 50px 20px 0
}
.main .content {
margin-top: 50px
}
.board {
padding: 12px 0;
text-align: center
}
/* star article */
.article {
&__toc {
left: 100%;
position: fixed;
top: 90px;
bottom: 60px;
a {
color: rgba(0, 0, 0, 0.54);
&:hover {
color: rgba(0, 0, 0, 0.68);
}
}
}
&__main {
display: flex;
flex-direction: column;
}
&__thumbnail {
margin: 10px 0;
background-position: center center;
background-size: cover;
flex: 1;
}
&__wrap {
margin-right: -20px
}
&__item {
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 2px;
margin-bottom: 20px;
float: left
}
&__item--big {
width: 318px;
margin-right: 20px
}
&__item--big .article__main {
height: 236px;
overflow: hidden;
}
&__item--small {
width: 318px;
margin-right: 20px;
.article__thumbnail {
background-image: none !important;
}
}
&__item--small .article__main {
height: 91px;
overflow: hidden;
}
&__item--mid {
width: 488px;
margin-right: 20px
}
&__item--mid .article__main {
height: 195px;
overflow: hidden;
}
&__panel {
padding: 16px
}
&__title {
overflow: hidden;
line-height: 24px;
font-size: 21px;
font-weight: 600;
word-break: break-all
}
&__title a {
color: rgba(0, 0, 0, 0.84)
}
&__title a:hover {
text-decoration: none
}
&__title sup {
top: -6px;
font-size: 12px;
color: #03a87c;
}
&__content {
margin-top: 4px;
font-size: 16px;
color: rgba(0, 0, 0, 0.54);
overflow: hidden;
line-height: 23px;
word-break: break-all;
}
&__meta {
font-size: 15px;
line-height: 23px;
flex-shrink: 0;
}
}
/* end article list */
/* start article */
.post {
max-width: 740px;
margin: 50px auto 20px;
position: relative
}
.post__main {
margin: 20px 0 0 0
}
.post__title {
font-weight: 700;
font-size: 42px;
margin: 0 -20px 10px;
word-break: break-all
}
.post__title sup {
font-size: 16px;
top: -20px;
color: #03a87c;
}
.post__tags {
padding: 4px 0 22px;
border-bottom: 1px solid rgba(0, 0, 0, 0.05)
}
.post__share {
padding: 20px 0;
margin-bottom: 20px;
font-size: 16px;
}
.post__share svg {
height: 20px;
width: 20px;
vertical-align: bottom
}
.post__share #articleShare {
position: relative
}
.post__share #articleShare .article__code {
position: absolute;
height: 130px;
width: 130px;
left: -2px;
top: 22px
}
.post__share-icon {
color: rgba(0, 0, 0, 0.54);
cursor: pointer;
}
.post__share-icon:hover {
color: rgba(0, 0, 0, 0.68);
}
.post__view {
color: #03a87c;
transition: all 0.1s
}
.post__view:hover {
color: #018f69;
text-decoration: none
}
.post__side {
position: fixed;
top: 50%;
left: 10%;
width: 55px;
text-align: center;
font-size: 16px;
margin-top: -125px;
transition: opacity .1s;
opacity: 0
}
.post__side svg {
height: 25px;
width: 25px
}
.post__side .ft-green svg {
height: 55px;
width: 55px;
vertical-align: bottom;
margin-bottom: 10px
}
.post__side .article__code {
position: absolute;
height: 130px;
width: 130px;
left: 45px;
top: 90px
}
#articleSideShare {
width: 26px;
margin: 0 auto;
}
.article__bottom {
background-color: #fafafa;
padding: 40px 20px;
position: relative;
z-index: 1;
}
.article__bottom .footer__tag {
margin-bottom: 50px;
}
.article__comment {
width: 640px;
margin: 45px auto 0;
position: relative;
}
.article__comment .comment__title {
font-size: 16px;
margin-bottom: 15px;
color: rgba(0, 0, 0, 0.68)
}
.article__comment .comment__item {
background-color: rgb(255, 255, 255);
box-shadow: rgba(0, 0, 0, 0.04) 0px 1px 4px;
border: 1px solid rgba(0, 0, 0, 0.09);
border-radius: 3px;
padding: 10px 20px 10px 77px;
margin: 0 0 20px;
}
.article__comment .comment__avatar {
position: absolute;
left: 10px;
height: 57px;
width: 57px;
display: inline-block;
z-index: 10;
border: 2px solid rgb(255, 255, 255);
border-radius: 50%;
}
.article__comment .comment__body svg.ft-gray {
height: 12px;
width: 12px;
vertical-align: text-top;
margin-left: 5px;
}
.article__comment .comment__body .vditor-reset {
min-height: 40px;
}
.article__comment .comment__user,
.article__comment .comment__user a {
color: rgb(3, 168, 124);
}
.article__comment .comment__user a:hover {
color: rgb(1, 143, 105);
text-decoration: none;
}
.comment-body-ref {
position: absolute;
width: 559px;
box-sizing: border-box;
left: 101px;
}
.comment-body-ref .ft-green {
display: none;
}
.comment__textarea {
background-color: rgb(255, 255, 255);
box-shadow: rgba(0, 0, 0, 0.04) 0px 1px 4px;
border: 1px solid rgba(0, 0, 0, 0.09);
border-radius: 3px;
padding: 10px;
margin: 0 0 5px;
width: 100%;
box-sizing: border-box;
cursor: pointer;
resize: none;
}
.article__toolbar {
box-shadow: 0 0 1px rgba(0, 0, 0, 0.54);
position: fixed;
bottom: -44px;
width: 100%;
background-color: #fff;
height: 44px;
font-size: 16px;
line-height: 44px;
transition: all 0.1s;
opacity: 0
}
.article__toolbar .wrapper {
max-width: 740px
}
.article__toolbar svg {
height: 20px;
width: 20px;
vertical-align: middle
}
.article__toolbar .fn-right {
position: absolute;
top: 0;
right: 20px
}
.article__toolbar .article__code {
position: absolute;
height: 130px;
width: 130px;
left: 50px;
bottom: 30px
}
.article__next {
border-left: 1px solid rgba(0, 0, 0, 0.38);
line-height: 15px;
margin-top: 7px;
color: rgba(0, 0, 0, 0.84);
font-size: 14px;
display: inline-block;
padding-left: 20px;
margin-left: 20px;
transition: all .2s;
float: right;
}
.article__next:hover {
text-decoration: none;
color: rgba(0, 0, 0, 0.54);
}
.pagination {
margin-top: 30px;
font-size: 16px;
border-top: 1px solid rgba(0, 0, 0, 0.15)
}
.pagination__item {
text-align: center;
border-top: 1px solid transparent;
transition: all 0.1s;
display: inline-block;
position: relative;
top: -1px;
margin: 0 10px;
padding: 0 10px;
line-height: 30px;
color: rgba(0, 0, 0, 0.54)
}
.pagination__item:hover {
border-top-color: rgba(0, 0, 0, 0.54);
color: rgba(0, 0, 0, 0.84);
text-decoration: none
}
.pagination__item--active {
background: rgba(0, 0, 0, 0.05);
border-top-color: rgba(0, 0, 0, 0.54)
}
.pagination__item--active:hover {
color: rgba(0, 0, 0, 0.54);
border-top-color: rgba(0, 0, 0, 0.54)
}
.pagination__item:first-child {
margin-left: 0
}
.pagination__item:last-child {
margin-right: 0
}
.pagination__omit {
top: -5px;
margin: 0;
border: 0;
padding: 0;
color: #ccc
}
.page__item {
display: block;
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
padding: 40px 0 35px
}
@media (max-width: 768px) {
.header {
text-align: left
}
.header__logo,
.post__side, .article__next, #articleBottomShare, #articleShare,
.article__comment .comment__avatar {
display: none
}
.post {
margin: 50px 20px 20px
}
.article__toolbar {
padding-left: 20px;
box-sizing: border-box
}
.article__item {
width: 100%;
margin-bottom: 20px
}
.article__wrap {
margin: 0
}
.article__comment {
width: 100%
}
.article__main {
height: auto !important
}
.footer .fn-right {
float: none
}
.footer__tag {
display: block
}
.footer__tag > div {
margin: 0 0 50px
}
.footer__tag > div:last-child {
margin: 0
}
.pagination__item {
margin: 0
}
.article__comment .comment__item {
padding-left: 10px;
}
}
/* Make clicks pass-through */
#nprogress .bar {
background: #d23f31;
}
/* Fancy blur effect */
#nprogress .peg {
box-shadow: 0 0 10px #d23f31, 0 0 5px #d23f31;
}
#nprogress .spinner-icon {
border-top-color: #d23f31;
border-left-color: #d23f31;
}

524
Casper/css/selection.json Executable file
View File

@ -0,0 +1,524 @@
{
"IcoMoonType": "selection",
"icons": [
{
"icon": {
"paths": [
"M219.429 804.571c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM219.429 512c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM1024 749.714v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286zM219.429 219.429c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM1024 457.143v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286zM1024 164.571v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"list-ul"
],
"defaultCode": 61642,
"grid": 14
},
"attrs": [],
"properties": {
"name": "list",
"id": 6,
"order": 3,
"prevSize": 28,
"code": 61642
},
"setIdx": 0,
"setId": 3,
"iconIdx": 0
},
{
"icon": {
"paths": [
"M804.571 566.857v274.286c0 20-16.571 36.571-36.571 36.571h-219.429v-219.429h-146.286v219.429h-219.429c-20 0-36.571-16.571-36.571-36.571v-274.286c0-1.143 0.571-2.286 0.571-3.429l328.571-270.857 328.571 270.857c0.571 1.143 0.571 2.286 0.571 3.429zM932 527.429l-35.429 42.286c-2.857 3.429-7.429 5.714-12 6.286h-1.714c-4.571 0-8.571-1.143-12-4l-395.429-329.714-395.429 329.714c-4 2.857-8.571 4.571-13.714 4-4.571-0.571-9.143-2.857-12-6.286l-35.429-42.286c-6.286-7.429-5.143-19.429 2.286-25.714l410.857-342.286c24-20 62.857-20 86.857 0l139.429 116.571v-111.429c0-10.286 8-18.286 18.286-18.286h109.714c10.286 0 18.286 8 18.286 18.286v233.143l125.143 104c7.429 6.286 8.571 18.286 2.286 25.714z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"home"
],
"defaultCode": 61461,
"grid": 14
},
"attrs": [],
"properties": {
"name": "home",
"id": 7,
"order": 4,
"prevSize": 28,
"code": 61461
},
"setIdx": 0,
"setId": 3,
"iconIdx": 1
},
{
"icon": {
"paths": [
"M402.286 219.429c-178.286 0-329.143 100.571-329.143 219.429 0 62.857 42.286 123.429 115.429 165.714l55.429 32-20 48c12-6.857 24-14.286 35.429-22.286l25.143-17.714 30.286 5.714c28.571 5.143 57.714 8 87.429 8 178.286 0 329.143-100.571 329.143-219.429s-150.857-219.429-329.143-219.429zM402.286 146.286c222.286 0 402.286 130.857 402.286 292.571s-180 292.571-402.286 292.571c-34.857 0-68.571-3.429-100.571-9.143-47.429 33.714-101.143 58.286-158.857 73.143-15.429 4-32 6.857-49.143 9.143h-1.714c-8.571 0-16.571-6.857-18.286-16.571v0c-2.286-10.857 5.143-17.714 11.429-25.143 22.286-25.143 47.429-47.429 66.857-94.857-92.571-53.714-152-136.571-152-229.143 0-161.714 180-292.571 402.286-292.571zM872 814.286c19.429 47.429 44.571 69.714 66.857 94.857 6.286 7.429 13.714 14.286 11.429 25.143v0c-2.286 10.286-10.857 17.714-20 16.571-17.143-2.286-33.714-5.143-49.143-9.143-57.714-14.857-111.429-39.429-158.857-73.143-32 5.714-65.714 9.143-100.571 9.143-103.429 0-198.286-28.571-269.714-75.429 16.571 1.143 33.714 2.286 50.286 2.286 122.857 0 238.857-35.429 327.429-99.429 95.429-69.714 148-164 148-266.286 0-29.714-4.571-58.857-13.143-86.857 96.571 53.143 159.429 137.714 159.429 233.143 0 93.143-59.429 175.429-152 229.143z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"comments-o"
],
"defaultCode": 61670,
"grid": 14
},
"attrs": [],
"properties": {
"name": "comments",
"id": 8,
"order": 5,
"prevSize": 28,
"code": 61670
},
"setIdx": 0,
"setId": 3,
"iconIdx": 2
},
{
"icon": {
"paths": [
"M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"calendar"
],
"defaultCode": 61555,
"grid": 14
},
"attrs": [],
"properties": {
"name": "date",
"id": 9,
"order": 6,
"prevSize": 28,
"code": 61555
},
"setIdx": 0,
"setId": 3,
"iconIdx": 3
},
{
"icon": {
"paths": [
"M658.286 475.429c0-141.143-114.857-256-256-256s-256 114.857-256 256 114.857 256 256 256 256-114.857 256-256zM950.857 950.857c0 40-33.143 73.143-73.143 73.143-19.429 0-38.286-8-51.429-21.714l-196-195.429c-66.857 46.286-146.857 70.857-228 70.857-222.286 0-402.286-180-402.286-402.286s180-402.286 402.286-402.286 402.286 180 402.286 402.286c0 81.143-24.571 161.143-70.857 228l196 196c13.143 13.143 21.143 32 21.143 51.429z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"search"
],
"defaultCode": 61442,
"grid": 14
},
"attrs": [],
"properties": {
"name": "search",
"id": 10,
"order": 7,
"prevSize": 28,
"code": 61442
},
"setIdx": 0,
"setId": 3,
"iconIdx": 4
},
{
"icon": {
"paths": [
"M961.714 760.571l-94.857 94.286c-14.286 14.286-37.143 14.286-51.429 0l-303.429-303.429-303.429 303.429c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.286c-14.286-14.286-14.286-37.714 0-52l424-423.429c14.286-14.286 37.143-14.286 51.429 0l424 423.429c14.286 14.286 14.286 37.714 0 52z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"chevron-up"
],
"defaultCode": 61559,
"grid": 14
},
"attrs": [],
"properties": {
"name": "up",
"id": 11,
"order": 8,
"prevSize": 28,
"code": 61559
},
"setIdx": 0,
"setId": 3,
"iconIdx": 5
},
{
"icon": {
"paths": [
"M584.571 548.571h180.571c-1.143-2.857-1.714-6.286-2.857-9.143l-121.143-283.429h-404.571l-121.143 283.429c-1.143 2.857-1.714 6.286-2.857 9.143h180.571l54.286 109.714h182.857zM877.714 565.714v275.429c0 20-16.571 36.571-36.571 36.571h-804.571c-20 0-36.571-16.571-36.571-36.571v-275.429c0-20.571 6.286-50.857 14.286-70.286l136-315.429c8-18.857 30.857-33.714 50.857-33.714h475.429c20 0 42.857 14.857 50.857 33.714l136 315.429c8 19.429 14.286 49.714 14.286 70.286z"
],
"width": 877.7142857142857,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"inbox"
],
"defaultCode": 61468,
"grid": 14
},
"attrs": [],
"properties": {
"name": "inbox",
"id": 12,
"order": 9,
"prevSize": 28,
"code": 61468
},
"setIdx": 0,
"setId": 3,
"iconIdx": 6
},
{
"icon": {
"paths": [
"M256 256c0-40.571-32.571-73.143-73.143-73.143s-73.143 32.571-73.143 73.143 32.571 73.143 73.143 73.143 73.143-32.571 73.143-73.143zM865.714 585.143c0 19.429-8 38.286-21.143 51.429l-280.571 281.143c-13.714 13.143-32.571 21.143-52 21.143s-38.286-8-51.429-21.143l-408.571-409.143c-29.143-28.571-52-84-52-124.571v-237.714c0-40 33.143-73.143 73.143-73.143h237.714c40.571 0 96 22.857 125.143 52l408.571 408c13.143 13.714 21.143 32.571 21.143 52zM1085.143 585.143c0 19.429-8 38.286-21.143 51.429l-280.571 281.143c-13.714 13.143-32.571 21.143-52 21.143-29.714 0-44.571-13.714-64-33.714l268.571-268.571c13.143-13.143 21.143-32 21.143-51.429s-8-38.286-21.143-52l-408.571-408c-29.143-29.143-84.571-52-125.143-52h128c40.571 0 96 22.857 125.143 52l408.571 408c13.143 13.714 21.143 32.571 21.143 52z"
],
"width": 1085.1474285714285,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"tags"
],
"defaultCode": 61484,
"grid": 14
},
"attrs": [],
"properties": {
"name": "tags",
"id": 13,
"order": 10,
"prevSize": 28,
"code": 61484
},
"setIdx": 0,
"setId": 3,
"iconIdx": 7
},
{
"icon": {
"paths": [
"M832 694.857c0-14.857-5.714-28.571-16-38.857l-118.857-118.857c-10.286-10.286-24.571-16-38.857-16-16.571 0-29.714 6.286-41.143 18.286 18.857 18.857 41.143 34.857 41.143 64 0 30.286-24.571 54.857-54.857 54.857-29.143 0-45.143-22.286-64-41.143-12 11.429-18.857 24.571-18.857 41.714 0 14.286 5.714 28.571 16 38.857l117.714 118.286c10.286 10.286 24.571 15.429 38.857 15.429s28.571-5.143 38.857-14.857l84-83.429c10.286-10.286 16-24 16-38.286zM430.286 292c0-14.286-5.714-28.571-16-38.857l-117.714-118.286c-10.286-10.286-24.571-16-38.857-16s-28.571 5.714-38.857 15.429l-84 83.429c-10.286 10.286-16 24-16 38.286 0 14.857 5.714 28.571 16 38.857l118.857 118.857c10.286 10.286 24.571 15.429 38.857 15.429 16.571 0 29.714-5.714 41.143-17.714-18.857-18.857-41.143-34.857-41.143-64 0-30.286 24.571-54.857 54.857-54.857 29.143 0 45.143 22.286 64 41.143 12-11.429 18.857-24.571 18.857-41.714zM941.714 694.857c0 43.429-17.714 85.714-48.571 116l-84 83.429c-30.857 30.857-72.571 47.429-116 47.429-44 0-85.714-17.143-116.571-48.571l-117.714-118.286c-30.857-30.857-47.429-72.571-47.429-116 0-45.143 18.286-88 50.286-119.429l-50.286-50.286c-31.429 32-73.714 50.286-118.857 50.286-43.429 0-85.714-17.143-116.571-48l-118.857-118.857c-31.429-31.429-48-72.571-48-116.571 0-43.429 17.714-85.714 48.571-116l84-83.429c30.857-30.857 72.571-47.429 116-47.429 44 0 85.714 17.143 116.571 48.571l117.714 118.286c30.857 30.857 47.429 72.571 47.429 116 0 45.143-18.286 88-50.286 119.429l50.286 50.286c31.429-32 73.714-50.286 118.857-50.286 43.429 0 85.714 17.143 116.571 48l118.857 118.857c31.429 31.429 48 72.571 48 116.571z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"chain",
"link"
],
"defaultCode": 61633,
"grid": 14
},
"attrs": [],
"properties": {
"name": "link",
"id": 14,
"order": 11,
"prevSize": 28,
"code": 61633
},
"setIdx": 0,
"setId": 3,
"iconIdx": 8
},
{
"icon": {
"paths": [
"M863.429 603.429c0 1.143 0 2.857-0.571 4-48.571 202.286-215.429 343.429-426.286 343.429-111.429 0-219.429-44-300.571-121.143l-73.714 73.714c-6.857 6.857-16 10.857-25.714 10.857-20 0-36.571-16.571-36.571-36.571v-256c0-20 16.571-36.571 36.571-36.571h256c20 0 36.571 16.571 36.571 36.571 0 9.714-4 18.857-10.857 25.714l-78.286 78.286c53.714 50.286 125.143 78.857 198.857 78.857 101.714 0 196-52.571 249.143-139.429 13.714-22.286 20.571-44 30.286-66.857 2.857-8 8.571-13.143 17.143-13.143h109.714c10.286 0 18.286 8.571 18.286 18.286zM877.714 146.286v256c0 20-16.571 36.571-36.571 36.571h-256c-20 0-36.571-16.571-36.571-36.571 0-9.714 4-18.857 10.857-25.714l78.857-78.857c-54.286-50.286-125.714-78.286-199.429-78.286-101.714 0-196 52.571-249.143 139.429-13.714 22.286-20.571 44-30.286 66.857-2.857 8-8.571 13.143-17.143 13.143h-113.714c-10.286 0-18.286-8.571-18.286-18.286v-4c49.143-202.857 217.714-343.429 428.571-343.429 112 0 221.143 44.571 302.286 121.143l74.286-73.714c6.857-6.857 16-10.857 25.714-10.857 20 0 36.571 16.571 36.571 36.571z"
],
"width": 877.7142857142857,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"refresh"
],
"defaultCode": 61473,
"grid": 14
},
"attrs": [],
"properties": {
"name": "refresh",
"id": 15,
"order": 12,
"prevSize": 28,
"code": 61473
},
"setIdx": 0,
"setId": 3,
"iconIdx": 9
},
{
"icon": {
"paths": [
"M976 768h-16v-208c0-61.756-50.242-112-112-112h-272v-128h16c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-160c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h16v128h-272c-61.756 0-112 50.244-112 112v208h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h256v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-16v-192h256v192h-16c-26.4 0-48 21.6-48 48v160c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48zM192 960h-128v-128h128v128zM576 960h-128v-128h128v128zM448 256v-128h128v128h-128zM960 960h-128v-128h128v128z"
],
"tags": [
"tree",
"branches",
"inheritance"
],
"defaultCode": 59836,
"grid": 16,
"attrs": []
},
"attrs": [],
"properties": {
"ligatures": "tree, branches",
"name": "category",
"order": 13,
"id": 16,
"prevSize": 32,
"code": 59836
},
"setIdx": 0,
"setId": 3,
"iconIdx": 10
},
{
"icon": {
"paths": [
"M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"exit",
"signout",
"logout",
"quit",
"close"
],
"defaultCode": 59924,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "exit, signout",
"name": "logout",
"id": 0,
"order": 14,
"prevSize": 32,
"code": 59924
},
"setIdx": 0,
"setId": 3,
"iconIdx": 11
},
{
"icon": {
"paths": [
"M512 192c-282.784 0-512 320-512 320s229.216 320 512 320 512-320 512-320-229.216-320-512-320zM512 704c-106.016 0-192-85.984-192-192s85.984-192 192-192 192 85.984 192 192-85.984 192-192 192zM512 384c-70.688 0-128 57.312-128 128s57.312 128 128 128 128-57.312 128-128-57.312-128-128-128z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"eye",
"views"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 15,
"id": 1,
"name": "views",
"prevSize": 32,
"code": 59648
},
"setIdx": 0,
"setId": 3,
"iconIdx": 12
},
{
"icon": {
"paths": [
"M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z",
"M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"user-plus",
"user",
"user-add",
"profile",
"avatar",
"person",
"member"
],
"defaultCode": 59763,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "user-plus, user2",
"name": "register",
"id": 2,
"order": 16,
"prevSize": 32,
"code": 59763
},
"setIdx": 0,
"setId": 3,
"iconIdx": 13
},
{
"icon": {
"paths": [
"M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"cog",
"gear",
"preferences",
"settings",
"generate",
"control",
"options"
],
"defaultCode": 59796,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "cog, gear",
"name": "setting",
"id": 3,
"order": 17,
"prevSize": 32,
"code": 59796
},
"setIdx": 0,
"setId": 3,
"iconIdx": 14
},
{
"icon": {
"paths": [
"M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"enter",
"signin",
"login"
],
"defaultCode": 59923,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "enter, signin",
"name": "login",
"id": 4,
"order": 18,
"prevSize": 32,
"code": 59923
},
"setIdx": 0,
"setId": 3,
"iconIdx": 15
},
{
"icon": {
"paths": [
"M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"feed",
"rss",
"social"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 19,
"id": 5,
"prevSize": 32,
"code": 59649,
"name": "rss"
},
"setIdx": 0,
"setId": 3,
"iconIdx": 16
}
],
"height": 1024,
"metadata": {
"name": "icomoon"
},
"preferences": {
"showGlyphs": true,
"showQuickUse": true,
"showQuickUse2": true,
"showSVGs": true,
"fontPref": {
"prefix": "icon-",
"metadata": {
"fontFamily": "icomoon"
},
"metrics": {
"emSize": 1024,
"baseline": 6.25,
"whitespace": 50
},
"embed": false
},
"imagePref": {
"prefix": "icon-",
"png": true,
"useClassSelector": true,
"color": 4473924,
"bgColor": 16777215
},
"historySize": 100,
"showCodes": false,
"gridSize": 16
}
}

52
Casper/footer.ftl Normal file
View File

@ -0,0 +1,52 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<div class="wrapper">
<footer class="footer">
<div class="fn-clear">
${blogSubtitle}
<#include "../../common-template/macro-user_site.ftl"/>
<@userSite dir="n"/>
<div class="fn-right">
${blogTitle} &copy; ${year} ${footerContent}
</div>
</div>
<div class="fn-clear">
${statistic.statisticPublishedBlogArticleCount} ${articleLabel} &nbsp;
${statistic.statisticPublishedBlogCommentCount} ${commentLabel} &nbsp;
${statistic.statisticBlogViewCount} ${viewLabel} &nbsp;
${onlineVisitorCnt} ${onlineVisitorLabel}
<div class="fn-right">
Powered by <a href="https://b3log.org" target="_blank">B3log 开源</a> •
<a href="https://solo.b3log.org" target="_blank">Solo</a> •
Theme <a rel="friend" href="https://github.com/b3log/solo-skins" target="_blank">${skinDirName}</a>
by <a href="http://vanessa.b3log.org" target="_blank">Vanessa</a>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/compress/pjax.min.js" charset="utf-8"></script>
<script type="text/javascript" src="${staticServePath}/js/common${miniPostfix}.js?${staticResourceVersion}"
charset="utf-8"></script>
<script type="text/javascript"
src="${staticServePath}/skins/${skinDirName}/js/common${miniPostfix}.js?${staticResourceVersion}"
charset="utf-8"></script>
<#include "../../common-template/label.ftl">
${plugins}

104
Casper/header.ftl Normal file
View File

@ -0,0 +1,104 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<defs>
<symbol id="icon-tag" viewBox="0 0 32 32">
<path
d="M29.021 0h-8.936c-1.638 0-3.927 0.948-5.085 2.106l-13.842 13.842c-1.158 1.158-1.158 3.054 0 4.213l10.681 10.681c1.158 1.158 3.054 1.158 4.212 0l13.842-13.842c1.158-1.158 2.106-3.447 2.106-5.085v-8.936c0-1.638-1.34-2.979-2.979-2.979zM25.063 9.91c-1.642 0-2.973-1.331-2.973-2.973s1.331-2.973 2.973-2.973 2.973 1.331 2.973 2.973-1.331 2.973-2.973 2.973z"></path>
</symbol>
<symbol id="icon-feed" viewBox="0 0 28 28">
<path
d="M8.542 22.72c0 1.805-1.465 3.27-3.27 3.27s-3.27-1.465-3.27-3.27 1.465-3.27 3.27-3.27 3.27 1.465 3.27 3.27zM17.262 24.815c0.017 0.307-0.085 0.596-0.29 0.817-0.204 0.238-0.494 0.358-0.8 0.358h-2.299c-0.562 0-1.022-0.426-1.073-0.988-0.494-5.195-4.615-9.316-9.81-9.81-0.562-0.051-0.988-0.511-0.988-1.073v-2.299c0-0.307 0.119-0.596 0.358-0.8 0.187-0.187 0.46-0.29 0.732-0.29h0.085c3.628 0.29 7.051 1.873 9.623 4.462 2.589 2.572 4.173 5.995 4.462 9.623zM25.982 24.849c0.017 0.29-0.085 0.579-0.307 0.8-0.204 0.221-0.477 0.341-0.783 0.341h-2.435c-0.579 0-1.056-0.443-1.090-1.022-0.562-9.895-8.448-17.781-18.343-18.36-0.579-0.034-1.022-0.511-1.022-1.073v-2.435c0-0.307 0.119-0.579 0.341-0.783 0.204-0.204 0.477-0.307 0.749-0.307h0.051c5.961 0.307 11.564 2.81 15.788 7.051 4.241 4.224 6.744 9.827 7.051 15.788z"></path>
</symbol>
<symbol id="icon-folders" viewBox="0 0 28 28">
<path
d="M28.68 15.875c0 0.375-0.234 0.75-0.484 1.031l-5.25 6.188c-0.906 1.062-2.75 1.906-4.125 1.906h-17c-0.562 0-1.359-0.172-1.359-0.875 0-0.375 0.234-0.75 0.484-1.031l5.25-6.188c0.906-1.062 2.75-1.906 4.125-1.906h17c0.562 0 1.359 0.172 1.359 0.875zM23.32 10.5v2.5h-13c-1.953 0-4.375 1.109-5.641 2.609l-5.344 6.281c0-0.125-0.016-0.266-0.016-0.391v-15c0-1.922 1.578-3.5 3.5-3.5h5c1.922 0 3.5 1.578 3.5 3.5v0.5h8.5c1.922 0 3.5 1.578 3.5 3.5z"></path>
</symbol>
<symbol id="icon-bookmark" viewBox="0 0 28 28">
<path
d="M17.231 12.923c0-0.589-0.488-1.077-1.077-1.077h-4.308c-0.589 0-1.077 0.488-1.077 1.077s0.488 1.077 1.077 1.077h4.308c0.589 0 1.077-0.488 1.077-1.077zM26.923 9.692v16.154c0 0.589-0.488 1.077-1.077 1.077h-23.692c-0.589 0-1.077-0.488-1.077-1.077v-16.154c0-0.589 0.488-1.077 1.077-1.077h23.692c0.589 0 1.077 0.488 1.077 1.077zM28 2.154v4.308c0 0.589-0.488 1.077-1.077 1.077h-25.846c-0.589 0-1.077-0.488-1.077-1.077v-4.308c0-0.589 0.488-1.077 1.077-1.077h25.846c0.589 0 1.077 0.488 1.077 1.077z"></path>
</symbol>
<symbol id="icon-group" viewBox="0 0 28 28">
<path
d="M8.665 14c-1.512 0.044-2.879 0.698-3.853 1.861h-1.948c-1.454 0-2.82-0.698-2.82-2.312 0-1.178-0.044-5.132 1.803-5.132 0.305 0 1.817 1.236 3.78 1.236 0.669 0 1.308-0.116 1.934-0.334-0.044 0.32-0.073 0.64-0.073 0.959 0 1.323 0.422 2.631 1.178 3.722zM24.235 23.261c0 2.355-1.556 3.765-3.882 3.765h-12.706c-2.326 0-3.882-1.41-3.882-3.765 0-3.286 0.771-8.33 5.030-8.33 0.494 0 2.297 2.021 5.205 2.021s4.71-2.021 5.205-2.021c4.26 0 5.030 5.045 5.030 8.33zM9.348 4.696c0 2.050-1.672 3.722-3.722 3.722s-3.722-1.672-3.722-3.722 1.672-3.722 3.722-3.722 3.722 1.672 3.722 3.722zM19.583 10.278c0 3.082-2.501 5.583-5.583 5.583s-5.583-2.501-5.583-5.583 2.501-5.583 5.583-5.583 5.583 2.501 5.583 5.583zM27.956 13.549c0 1.614-1.367 2.312-2.82 2.312h-1.948c-0.974-1.163-2.341-1.817-3.853-1.861 0.756-1.090 1.178-2.399 1.178-3.722 0-0.32-0.029-0.64-0.073-0.959 0.625 0.218 1.265 0.334 1.934 0.334 1.963 0 3.475-1.236 3.78-1.236 1.846 0 1.803 3.954 1.803 5.132zM26.096 4.696c0 2.050-1.672 3.722-3.722 3.722s-3.722-1.672-3.722-3.722 1.672-3.722 3.722-3.722 3.722 1.672 3.722 3.722z"></path>
</symbol>
<symbol id="icon-search" viewBox="0 0 32 32">
<path
d="M31.008 27.231l-7.58-6.447c-0.784-0.705-1.622-1.029-2.299-0.998 1.789-2.096 2.87-4.815 2.87-7.787 0-6.627-5.373-12-12-12s-12 5.373-12 12 5.373 12 12 12c2.972 0 5.691-1.081 7.787-2.87-0.031 0.677 0.293 1.515 0.998 2.299l6.447 7.58c1.104 1.226 2.907 1.33 4.007 0.23s0.997-2.903-0.23-4.007zM12 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z"></path>
</symbol>
<symbol id="icon-home" viewBox="0 0 32 32">
<path
d="M32 18.967l-16-12.42-16 12.42v-5.064l16-12.42 16 12.42zM28 18.516v12h-8v-8h-8v8h-8v-12l12-9z"></path>
</symbol>
<symbol id="icon-setting" viewBox="0 0 32 32">
<path
d="M29.181 19.070c-1.679-2.908-0.669-6.634 2.255-8.328l-3.145-5.447c-0.898 0.527-1.943 0.829-3.058 0.829-3.36 0-6.085-2.742-6.085-6.125h-6.289c0.008 1.044-0.252 2.103-0.811 3.070-1.679 2.908-5.411 3.897-8.339 2.211l-3.144 5.447c0.905 0.515 1.689 1.268 2.246 2.234 1.676 2.903 0.672 6.623-2.241 8.319l3.145 5.447c0.895-0.522 1.935-0.82 3.044-0.82 3.35 0 6.067 2.725 6.084 6.092h6.289c-0.003-1.034 0.259-2.080 0.811-3.038 1.676-2.903 5.399-3.894 8.325-2.219l3.145-5.447c-0.899-0.515-1.678-1.266-2.232-2.226zM16 22.479c-3.578 0-6.479-2.901-6.479-6.479s2.901-6.479 6.479-6.479c3.578 0 6.479 2.901 6.479 6.479s-2.901 6.479-6.479 6.479z"></path>
</symbol>
<symbol id="icon-out" viewBox="0 0 28 32">
<path d="M11.429 25.714c0 0.5 0.232 1.714-0.571 1.714h-5.714c-2.839 0-5.143-2.304-5.143-5.143v-12.571c0-2.839 2.304-5.143 5.143-5.143h5.714c0.304 0 0.571 0.268 0.571 0.571 0 0.5 0.232 1.714-0.571 1.714h-5.714c-1.571 0-2.857 1.286-2.857 2.857v12.571c0 1.571 1.286 2.857 2.857 2.857h5.143c0.446 0 1.143-0.089 1.143 0.571zM28 16c0 0.304-0.125 0.589-0.339 0.804l-9.714 9.714c-0.214 0.214-0.5 0.339-0.804 0.339-0.625 0-1.143-0.518-1.143-1.143v-5.143h-8c-0.625 0-1.143-0.518-1.143-1.143v-6.857c0-0.625 0.518-1.143 1.143-1.143h8v-5.143c0-0.625 0.518-1.143 1.143-1.143 0.304 0 0.589 0.125 0.804 0.339l9.714 9.714c0.214 0.214 0.339 0.5 0.339 0.804z"></path>
</symbol>
<symbol id="icon-enter" viewBox="0 0 27 32">
<path d="M21.143 16c0 0.304-0.125 0.589-0.339 0.804l-9.714 9.714c-0.214 0.214-0.5 0.339-0.804 0.339-0.625 0-1.143-0.518-1.143-1.143v-5.143h-8c-0.625 0-1.143-0.518-1.143-1.143v-6.857c0-0.625 0.518-1.143 1.143-1.143h8v-5.143c0-0.625 0.518-1.143 1.143-1.143 0.304 0 0.589 0.125 0.804 0.339l9.714 9.714c0.214 0.214 0.339 0.5 0.339 0.804zM27.429 9.714v12.571c0 2.839-2.304 5.143-5.143 5.143h-5.714c-0.304 0-0.571-0.268-0.571-0.571 0-0.5-0.232-1.714 0.571-1.714h5.714c1.571 0 2.857-1.286 2.857-2.857v-12.571c0-1.571-1.286-2.857-2.857-2.857h-5.143c-0.446 0-1.143 0.089-1.143-0.571 0-0.5-0.232-1.714 0.571-1.714h5.714c2.839 0 5.143 2.304 5.143 5.143z"></path>
</symbol>
<symbol id="icon-link" viewBox="0 0 32 32">
<path d="M13.757 19.868c-0.416 0-0.832-0.159-1.149-0.476-2.973-2.973-2.973-7.81 0-10.783l6-6c1.44-1.44 3.355-2.233 5.392-2.233s3.951 0.793 5.392 2.233c2.973 2.973 2.973 7.81 0 10.783l-2.743 2.743c-0.635 0.635-1.663 0.635-2.298 0s-0.635-1.663 0-2.298l2.743-2.743c1.706-1.706 1.706-4.481 0-6.187-0.826-0.826-1.925-1.281-3.094-1.281s-2.267 0.455-3.094 1.281l-6 6c-1.706 1.706-1.706 4.481 0 6.187 0.635 0.635 0.635 1.663 0 2.298-0.317 0.317-0.733 0.476-1.149 0.476z"></path>
<path d="M8 31.625c-2.037 0-3.952-0.793-5.392-2.233-2.973-2.973-2.973-7.81 0-10.783l2.743-2.743c0.635-0.635 1.664-0.635 2.298 0s0.635 1.663 0 2.298l-2.743 2.743c-1.706 1.706-1.706 4.481 0 6.187 0.826 0.826 1.925 1.281 3.094 1.281s2.267-0.455 3.094-1.281l6-6c1.706-1.706 1.706-4.481 0-6.187-0.635-0.635-0.635-1.663 0-2.298s1.663-0.635 2.298 0c2.973 2.973 2.973 7.81 0 10.783l-6 6c-1.44 1.44-3.355 2.233-5.392 2.233z"></path>
</symbol>
<svg id="icon-comment" viewBox="0 0 29 29">
<path d="M21.27 20.058c1.89-1.826 2.754-4.17 2.754-6.674C24.024 8.21 19.67 4 14.1 4 8.53 4 4 8.21 4 13.384c0 5.175 4.53 9.385 10.1 9.385 1.007 0 2-.14 2.95-.41.285.25.592.49.918.7 1.306.87 2.716 1.31 4.19 1.31.276-.01.494-.14.6-.36a.625.625 0 0 0-.052-.65c-.61-.84-1.042-1.71-1.282-2.58a5.417 5.417 0 0 1-.154-.75zm-3.85 1.324l-.083-.28-.388.12a9.72 9.72 0 0 1-2.85.424c-4.96 0-8.99-3.706-8.99-8.262 0-4.556 4.03-8.263 8.99-8.263 4.95 0 8.77 3.71 8.77 8.27 0 2.25-.75 4.35-2.5 5.92l-.24.21v.32c0 .07 0 .19.02.37.03.29.1.6.19.92.19.7.49 1.4.89 2.08-.93-.14-1.83-.49-2.67-1.06-.34-.22-.88-.48-1.16-.74z"></path>
</svg>
<symbol id="icon-reply" viewBox="0 0 28 28">
<path d="M0 18c0 2.188 1.094 5.047 1.984 7.047 0.172 0.359 0.344 0.859 0.578 1.188 0.109 0.156 0.219 0.266 0.438 0.266 0.313 0 0.5-0.25 0.5-0.547 0-0.25-0.063-0.531-0.078-0.781-0.047-0.641-0.078-1.281-0.078-1.922 0-7.453 4.422-8.75 11.156-8.75h3.5v4c0 0.547 0.453 1 1 1 0.266 0 0.516-0.109 0.703-0.297l8-8c0.187-0.187 0.297-0.438 0.297-0.703s-0.109-0.516-0.297-0.703l-8-8c-0.187-0.187-0.438-0.297-0.703-0.297-0.547 0-1 0.453-1 1v4h-3.5c-5.125 0-11.5 0.906-13.672 6.297-0.656 1.656-0.828 3.453-0.828 5.203z"></path>
</symbol>
<symbol id="icon-qqz" viewBox="0 0 32 32">
<path d="M22.824 13.989l-8.348 6.287s3.351 0.522 8.404 0.461l-0.23-1.040 7.2-6.549c0.132-0.12 0.183-0.312 0.129-0.487s-0.203-0.299-0.377-0.314l-9.492-0.856-3.708-9.213c-0.068-0.169-0.226-0.279-0.401-0.279s-0.333 0.11-0.401 0.279l-3.708 9.213-9.492 0.856c-0.174 0.015-0.323 0.139-0.377 0.314s-0.004 0.366 0.129 0.487l7.2 6.549-2.158 9.742c-0.040 0.178 0.026 0.365 0.168 0.474 0.142 0.107 0.331 0.115 0.481 0.021l8.158-5.165 8.158 5.165c0.070 0.045 0.147 0.066 0.225 0.066 0.090 0 0.18-0.029 0.256-0.086 0.142-0.109 0.208-0.295 0.168-0.474l-1.707-7.704c0.732-0.386 1.538-1.040 1.538-1.040s-3.195 1.638-14.664 0.838l8.312-6.325s-0.327-0.534-10.744-0.914c-0.697-0.026 8.493-1.83 15.281-0.305z"></path>
</symbol>
<symbol id="icon-wechat" viewBox="0 0 32 32"><path d="M9.062 9.203q0-0.641-0.391-1.031t-1.031-0.391q-0.672 0-1.188 0.398t-0.516 1.023q0 0.609 0.516 1.008t1.188 0.398q0.641 0 1.031-0.383t0.391-1.023zM20.672 17.125q0-0.438-0.398-0.781t-1.023-0.344q-0.422 0-0.773 0.352t-0.352 0.773q0 0.438 0.352 0.789t0.773 0.352q0.625 0 1.023-0.344t0.398-0.797zM16.984 9.203q0-0.641-0.383-1.031t-1.023-0.391q-0.672 0-1.188 0.398t-0.516 1.023q0 0.609 0.516 1.008t1.188 0.398q0.641 0 1.023-0.383t0.383-1.023zM26.906 17.125q0-0.438-0.406-0.781t-1.016-0.344q-0.422 0-0.773 0.352t-0.352 0.773q0 0.438 0.352 0.789t0.773 0.352q0.609 0 1.016-0.344t0.406-0.797zM22.75 10.922q-0.484-0.063-1.094-0.063-2.641 0-4.859 1.203t-3.492 3.258-1.273 4.492q0 1.219 0.359 2.375-0.547 0.047-1.062 0.047-0.406 0-0.781-0.023t-0.859-0.102-0.695-0.109-0.852-0.164-0.781-0.164l-3.953 1.984 1.125-3.406q-4.531-3.172-4.531-7.656 0-2.641 1.523-4.859t4.125-3.492 5.68-1.273q2.75 0 5.195 1.031t4.094 2.852 2.133 4.070zM32 19.688q0 1.828-1.070 3.492t-2.898 3.023l0.859 2.828-3.109-1.703q-2.344 0.578-3.406 0.578-2.641 0-4.859-1.102t-3.492-2.992-1.273-4.125 1.273-4.125 3.492-2.992 4.859-1.102q2.516 0 4.734 1.102t3.555 3 1.336 4.117z"></path></symbol>
<symbol id="icon-weibo" viewBox="0 0 32 32"><path d="M13.242 27.106c-5.22 0.517-9.727-1.847-10.065-5.27-0.339-3.429 3.62-6.618 8.834-7.135 5.22-0.517 9.727 1.847 10.059 5.27 0.345 3.429-3.614 6.624-8.828 7.135zM23.677 15.735c-0.443-0.135-0.751-0.222-0.517-0.806 0.505-1.268 0.554-2.358 0.006-3.14-1.022-1.459-3.823-1.385-7.030-0.037 0 0-1.010 0.437-0.751-0.357 0.492-1.588 0.419-2.912-0.351-3.681-1.742-1.742-6.372 0.068-10.342 4.038-2.967 2.961-4.691 6.119-4.691 8.846 0 5.208 6.686 8.379 13.224 8.379 8.569 0 14.276-4.98 14.276-8.933 0-2.395-2.013-3.749-3.823-4.309z"></path><path d="M29.371 6.193c-2.069-2.296-5.122-3.17-7.942-2.573v0c-0.653 0.142-1.065 0.782-0.923 1.428 0.142 0.653 0.776 1.065 1.428 0.923 2.007-0.425 4.174 0.197 5.645 1.828s1.872 3.854 1.237 5.799v0c-0.203 0.634 0.142 1.311 0.776 1.521 0.634 0.203 1.311-0.142 1.521-0.776v-0.006c0.887-2.721 0.326-5.848-1.742-8.145z"></path><path d="M26.189 9.068c-1.010-1.12-2.499-1.545-3.866-1.25-0.56 0.117-0.917 0.677-0.8 1.237 0.123 0.56 0.677 0.917 1.231 0.794v0c0.671-0.142 1.397 0.068 1.89 0.609 0.492 0.548 0.628 1.293 0.412 1.945v0c-0.172 0.542 0.123 1.133 0.671 1.311 0.548 0.172 1.133-0.123 1.311-0.671 0.431-1.336 0.16-2.863-0.85-3.977z"></path><path d="M13.531 20.907c-0.185 0.314-0.585 0.462-0.899 0.332-0.314-0.123-0.406-0.48-0.228-0.782 0.185-0.302 0.573-0.449 0.88-0.332 0.308 0.111 0.419 0.462 0.246 0.782zM11.863 23.037c-0.505 0.806-1.588 1.157-2.401 0.788-0.8-0.363-1.040-1.299-0.536-2.087 0.499-0.782 1.545-1.133 2.352-0.794 0.819 0.351 1.084 1.28 0.585 2.093zM13.759 17.336c-2.481-0.646-5.288 0.591-6.366 2.776-1.102 2.229-0.037 4.709 2.469 5.522 2.598 0.837 5.664-0.449 6.729-2.85 1.053-2.358-0.259-4.777-2.832-5.448z"></path></symbol>
<symbol id="icon-twitter" viewBox="0 0 32 32"><path d="M32 6.077c-1.175 0.525-2.443 0.875-3.768 1.031 1.356-0.812 2.393-2.1 2.887-3.631-1.268 0.75-2.674 1.3-4.168 1.593-1.2-1.275-2.906-2.068-4.793-2.068-3.624 0-6.561 2.937-6.561 6.561 0 0.512 0.056 1.012 0.169 1.493-5.455-0.275-10.292-2.887-13.529-6.861-0.562 0.969-0.887 2.1-0.887 3.299 0 2.275 1.156 4.287 2.918 5.461-1.075-0.031-2.087-0.331-2.974-0.819 0 0.025 0 0.056 0 0.081 0 3.181 2.262 5.836 5.268 6.436-0.55 0.15-1.131 0.231-1.731 0.231-0.425 0-0.831-0.044-1.237-0.119 0.837 2.606 3.262 4.505 6.13 4.562-2.25 1.762-5.074 2.812-8.155 2.812-0.531 0-1.050-0.031-1.568-0.094 2.912 1.868 6.361 2.949 10.067 2.949 12.073 0 18.678-10.004 18.678-18.678 0-0.287-0.006-0.569-0.019-0.85 1.281-0.919 2.393-2.075 3.274-3.393z"></path></symbol>
<symbol id="icon-register" viewBox="0 0 32 32">
<path d="M16 0c8.839 0 16 7.161 16 16 0 8.786-7.125 16-16 16-8.857 0-16-7.196-16-16 0-8.839 7.161-16 16-16zM27.054 24.125c1.661-2.286 2.661-5.089 2.661-8.125 0-7.554-6.161-13.714-13.714-13.714s-13.714 6.161-13.714 13.714c0 3.036 1 5.839 2.661 8.125 0.643-3.196 2.196-5.839 5.464-5.839 1.446 1.411 3.411 2.286 5.589 2.286s4.143-0.875 5.589-2.286c3.268 0 4.821 2.643 5.464 5.839zM22.857 12.571c0-3.786-3.071-6.857-6.857-6.857s-6.857 3.071-6.857 6.857 3.071 6.857 6.857 6.857 6.857-3.071 6.857-6.857z"></path>
</symbol>
</defs>
</svg>
<header class="header">
<div class="wrapper fn-clear">
<h1><a href="${servePath}" rel="start" class="header__title">${blogTitle}</a></h1>
<div class="fn-right">
<a href="${servePath}/search" aria-label="${searchLabel}"
class="vditor-tooltipped vditor-tooltipped__w header__icon">
<svg>
<use xlink:href="#icon-search"></use>
</svg>
</a>
<#if isLoggedIn>
<a class="avatar vditor-tooltipped vditor-tooltipped__w header__icon" aria-label="${adminLabel}"
href="${servePath}/admin-index.do#main"
style="background-image: url(${adminUser.userAvatar});"></a>
<#else>
<a href="${servePath}/start" class="header__a">
${startToUseLabel}
</a>
</#if>
</div>
</div>
</header>

BIN
Casper/images/header-bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

48
Casper/index.ftl Normal file
View File

@ -0,0 +1,48 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<#include "article-list.ftl">
</div>
<#include "bottom2.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>

223
Casper/js/common.js Normal file
View File

@ -0,0 +1,223 @@
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* 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 <https://www.gnu.org/licenses/>.
*/
/**
* @fileoverview util and every page should be used.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.1.0.1, Mar 22, 2019
*/
/**
* @description 皮肤脚本
* @static
*/
var Skin = {
init: function () {
var $article__toc = $('.article__toc')
$(window).scroll(function () {
if ($article__toc.length === 1) {
if ($('.article__bottom').offset().top < $(window).scrollTop()) {
$article__toc.hide()
} else {
$article__toc.show()
}
}
if ($('#headerNav').length === 0) {
return
}
if ($(window).scrollTop() > 64) {
$('#headerNav').addClass('header__nav--fixed');
$('.main').css('margin-top', '100px');
} else {
$('#headerNav').removeClass('header__nav--fixed');
$('.main').css('margin-top', '50px');
}
});
$(window).scroll();
Util.initPjax(function () {
Util.parseMarkdown();
if (Util.isArticlePage(location.href)) {
if (!$('#articleSideShare .article__code').qrcode) {
$.ajax({
method: "GET",
url: Label.staticServePath + '/js/lib/jquery.qrcode.min.js',
dataType: "script",
cache: true
});
}
}
Skin.initToc()
})
Skin.initToc()
},
initTags: function () {
var $tags = $('#tags');
var tagsArray = $tags.find('.tag')
// 根据引用次数添加样式,产生云效果
var max = parseInt(tagsArray.first().data('count'));
var distance = Math.ceil(max / 5);
for (var i = 0; i < tagsArray.length; i++) {
var count = parseInt($(tagsArray[i]).data('count'));
// 算出当前 tag 数目所在的区间,加上 class
for (var j = 0; j < 5; j++) {
if (count > j * distance && count <= (j + 1) * distance) {
tagsArray[i].className = 'tag tag__level' + j;
break;
}
}
}
// 按字母或者中文拼音进行排序
$tags.html(tagsArray.get().sort(function (a, b) {
var valA = $(a).text().toLowerCase();
var valB = $(b).text().toLowerCase();
// 对中英文排序的处理
return valA.localeCompare(valB);
}));
},
initArticle: function () {
if ($('#articleShare').length === 0) {
return
}
Skin._share('#articleShare')
Skin._share('#articleSideShare')
Skin._share('#articleBottomShare')
var $postSide = $('.post__side')
if ($(window).height() >= $('.post').height()) {
$postSide.css('opacity', 1)
}
$postSide.css('left', (($('.post').offset().left - 20) / 2 - 27) + 'px')
var sideAbsoluteTop = ($(window).height() - 249) / 2 + 125
var beforScrollTop = $(window).scrollTop()
$(window).scroll(function () {
if ($('#articleShare').length === 0) {
return
}
var scrollTop = $(window).scrollTop()
var bottomTop = $('.article__bottom').offset().top
if (scrollTop > 65) {
$postSide.css('opacity', 1)
if (beforScrollTop - scrollTop > 0) {
// up
$('.header').addClass('header--fixed').css({'top': '0'})
$('.main').css('padding-top', '64px')
if ($(window).height() <= $('.post').height() && scrollTop < bottomTop - $(window).height()) {
$('.article__toolbar').css({
'bottom': 0,
'opacity': 1
})
}
} else if (beforScrollTop - scrollTop < 0) {
// down
$('.header').css({'top': '-64px'}).removeClass('header--fixed')
$('.main').css('padding-top', '0')
$('.article__toolbar').css({
'bottom': '-44px',
'opacity': 0
})
}
} else {
if ($(window).height() <= $('.post').height()) {
$postSide.css('opacity', 0)
}
$('.header').removeClass('header--fixed').css('top', '-64px')
$('.main').css('padding-top', '0')
}
if (scrollTop > bottomTop - $(window).height()) {
if (bottomTop < $(window).height()) {
$postSide.css({
'position': 'absolute',
'top': (bottomTop - 125) + 'px'
})
} else {
$postSide.css({
'position': 'absolute',
'top': (bottomTop - sideAbsoluteTop) + 'px'
})
}
} else {
$postSide.css({
'position': 'fixed',
'top': '50%'
})
}
beforScrollTop = scrollTop
})
$(window).scroll()
},
_share: function (id) {
var $this = $(id)
var $qrCode = $this.find('.article__code')
var shareURL = $qrCode.data('url')
var avatarURL = $qrCode.data('avatar')
var title = encodeURIComponent($qrCode.data('title') + ' - ' + $qrCode.data('blogtitle')),
url = encodeURIComponent(shareURL)
var urls = {}
urls.tencent = 'http://share.v.t.qq.com/index.php?c=share&a=index&title=' + title +
'&url=' + url + '&pic=' + avatarURL
urls.weibo = 'http://v.t.sina.com.cn/share/share.php?title=' +
title + '&url=' + url + '&pic=' + avatarURL
urls.qqz = 'https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='
+ url + '&sharesource=qzone&title=' + title + '&pics=' + avatarURL
urls.twitter = 'https://twitter.com/intent/tweet?status=' + title + ' ' + url
$this.find('span').click(function () {
var key = $(this).data('type')
if (!key) {
return
}
if (key === 'wechat') {
if ($qrCode.find('canvas').length === 0) {
$qrCode.qrcode({
width: 128,
height: 128,
text: shareURL
});
} else {
$qrCode.slideToggle();
}
return false;
}
window.open(urls[key], '_blank', 'top=100,left=200,width=648,height=618')
})
},
initToc: function () {
if ($('.article__toc').length !== 0 && $(window).width() > 1000) {
$('.article__toc').animate({
'left': ($('.post').outerWidth() + $('.post').offset().left) + 'px'
}, 600)
} else {
$('.article__toc').hide()
}
}
};
Skin.init();

1
Casper/js/common.min.js vendored Normal file
View File

@ -0,0 +1 @@
var Skin={init:function(){var t=$(".article__toc");$(window).scroll(function(){1===t.length&&($(".article__bottom").offset().top<$(window).scrollTop()?t.hide():t.show()),0!==$("#headerNav").length&&(64<$(window).scrollTop()?($("#headerNav").addClass("header__nav--fixed"),$(".main").css("margin-top","100px")):($("#headerNav").removeClass("header__nav--fixed"),$(".main").css("margin-top","50px")))}),$(window).scroll(),Util.initPjax(function(){Util.parseMarkdown(),Util.isArticlePage(location.href)&&($("#articleSideShare .article__code").qrcode||$.ajax({method:"GET",url:Label.staticServePath+"/js/lib/jquery.qrcode.min.js",dataType:"script",cache:!0})),Skin.initToc()}),Skin.initToc()},initTags:function(){for(var t=$("#tags"),e=t.find(".tag"),i=parseInt(e.first().data("count")),o=Math.ceil(i/5),a=0;a<e.length;a++)for(var n=parseInt($(e[a]).data("count")),s=0;s<5;s++)if(s*o<n&&n<=(s+1)*o){e[a].className="tag tag__level"+s;break}t.html(e.get().sort(function(t,e){var i=$(t).text().toLowerCase(),o=$(e).text().toLowerCase();return i.localeCompare(o)}))},initArticle:function(){if(0!==$("#articleShare").length){Skin._share("#articleShare"),Skin._share("#articleSideShare"),Skin._share("#articleBottomShare");var i=$(".post__side");$(window).height()>=$(".post").height()&&i.css("opacity",1),i.css("left",($(".post").offset().left-20)/2-27+"px");var o=($(window).height()-249)/2+125,a=$(window).scrollTop();$(window).scroll(function(){if(0!==$("#articleShare").length){var t=$(window).scrollTop(),e=$(".article__bottom").offset().top;65<t?(i.css("opacity",1),0<a-t?($(".header").addClass("header--fixed").css({top:"0"}),$(".main").css("padding-top","64px"),$(window).height()<=$(".post").height()&&t<e-$(window).height()&&$(".article__toolbar").css({bottom:0,opacity:1})):a-t<0&&($(".header").css({top:"-64px"}).removeClass("header--fixed"),$(".main").css("padding-top","0"),$(".article__toolbar").css({bottom:"-44px",opacity:0}))):($(window).height()<=$(".post").height()&&i.css("opacity",0),$(".header").removeClass("header--fixed").css("top","-64px"),$(".main").css("padding-top","0")),t>e-$(window).height()?e<$(window).height()?i.css({position:"absolute",top:e-125+"px"}):i.css({position:"absolute",top:e-o+"px"}):i.css({position:"fixed",top:"50%"}),a=t}}),$(window).scroll()}},_share:function(t){var e=$(t),i=e.find(".article__code"),o=i.data("url"),a=i.data("avatar"),n=encodeURIComponent(i.data("title")+" - "+i.data("blogtitle")),s=encodeURIComponent(o),r={};r.tencent="http://share.v.t.qq.com/index.php?c=share&a=index&title="+n+"&url="+s+"&pic="+a,r.weibo="http://v.t.sina.com.cn/share/share.php?title="+n+"&url="+s+"&pic="+a,r.qqz="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+s+"&sharesource=qzone&title="+n+"&pics="+a,r.twitter="https://twitter.com/intent/tweet?status="+n+" "+s,e.find("span").click(function(){var t=$(this).data("type");if(t)return"wechat"===t?(0===i.find("canvas").length?i.qrcode({width:128,height:128,text:o}):i.slideToggle(),!1):void window.open(r[t],"_blank","top=100,left=200,width=648,height=618")})},initToc:function(){0!==$(".article__toc").length&&1e3<$(window).width()?$(".article__toc").animate({left:$(".post").outerWidth()+$(".post").offset().left+"px"},600):$(".article__toc").hide()}};Skin.init();

66
Casper/links.ftl Normal file
View File

@ -0,0 +1,66 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${linkLabel} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<div class="module__title">
<span>
${links?size}
<span class="ft-green ft-12">${linkLabel}</span>
</span>
</div>
<#if 0 != links?size>
<#list links as link>
<div class="page__item">
<h3>
<a rel="friend" class="ft-gray" href="${link.linkAddress}" target="_blank">
${link.linkTitle}
<span class="ft-12 ft-green">${link.linkDescription}</span>
</a>
</h3>
</div>
</#list>
</#if>
</div>
<#include "bottom.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>

33
Casper/macro-comments.ftl Normal file
View File

@ -0,0 +1,33 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#macro comments commentList article>
<div class="article__comment">
<div class="comment__title">${commentLabel}</div>
<div id="comments">
<#list commentList as comment>
<#include 'common-comment.ftl'/>
</#list>
</div>
<#if article.commentable>
<textarea rows="3" placeholder="${postCommentsLabel}"
class="comment__textarea" id="comment"></textarea>
</#if>
</div>
</#macro>

78
Casper/nav.ftl Normal file
View File

@ -0,0 +1,78 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<nav id="headerNav" class="header__nav">
<div class="wrapper">
<a href="${servePath}">
<svg>
<use xlink:href="#icon-home"></use>
</svg>
${indexLabel}
</a>
<a href="${servePath}/tags.html" rel="section">
<svg>
<use xlink:href="#icon-tag"></use>
</svg> ${allTagsLabel}
</a>
<a href="${servePath}/archives.html">
<svg>
<use xlink:href="#icon-bookmark"></use>
</svg> ${archiveLabel}
</a>
<#list pageNavigations as page>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
<#if page.pageIcon != ''><img src="${page.pageIcon}"></#if> ${page.pageTitle}
</a>
</#list>
<a rel="archive" href="${servePath}/links.html">
<svg>
<use xlink:href="#icon-link"></use>
</svg> ${linkLabel}
</a>
<a rel="alternate" href="${servePath}/rss.xml" rel="section">
<svg>
<use xlink:href="#icon-feed"></use>
</svg>
RSS
</a>
<#if isLoggedIn>
<a href="${servePath}/admin-index.do#main">
<svg>
<use xlink:href="#icon-setting"></use>
</svg> ${adminLabel}
</a>
<a href="${logoutURL}">
<svg>
<use xlink:href="#icon-out"></use>
</svg>
${logoutLabel}
</a>
<#else>
<a rel="alternate" href="${servePath}/start" rel="section">
<svg>
<use xlink:href="#icon-enter"></use>
</svg>
${startToUseLabel}
</a>
</#if>
</div>
</nav>

62
Casper/page.ftl Normal file
View File

@ -0,0 +1,62 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<#include "macro-comments.ftl">
<#include "../../common-template/macro-comment_script.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${page.pageTitle} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<article class="post">
<section class="vditor-reset">
${page.pageContent}
</section>
</article>
</div>
</div>
<div class="article__bottom">
<@comments commentList=pageComments article=page></@comments>
</div>
<div style="margin-left: 20px;margin-right: 20px">
<#include "bottom.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<@comment_script oId=page.oId commentable=page.commentable></@comment_script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</body>
</html>

BIN
Casper/preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

26
Casper/skin.properties Normal file
View File

@ -0,0 +1,26 @@
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# 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 <https://www.gnu.org/licenses/>.
#
#
# Description: skin properties.
# Version: 0.1.0.0, Mar 26, 2018
# Author: Liyuan Li
#
name=Casper
memo=https://demo.ghost.io/

57
Casper/tag-articles.ftl Normal file
View File

@ -0,0 +1,57 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${tag.tagTitle} ${tagLabel} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<div class="module__title">
<span>
${tag.tagTitle}
<span class="ft-green">
${tag.tagPublishedRefCount}
<span class="ft-12">${tagLabel}</span>
</span>
</span>
</div>
<#include "article-list.ftl">
</div>
<#include "bottom2.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>

67
Casper/tags.ftl Normal file
View File

@ -0,0 +1,67 @@
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
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 <https://www.gnu.org/licenses/>.
-->
<#include "../../common-template/macro-common_head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${allTagsLabel} - ${blogTitle}">
<link rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base.css?${staticResourceVersion}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "nav.ftl">
<div class="main">
<#if noticeBoard??>
<div class="board">
${noticeBoard}
</div>
</#if>
<div class="wrapper content">
<div class="module__title">
<span>
${tags?size}
<span class="ft-green ft-12">${tagLabel}</span>
</span>
</div>
<div id="tags">
<#list tags as tag>
<a rel="tag" data-count="${tag.tagPublishedRefCount}" class="tag"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
${tag.tagTitle}
<span class="ft-green ft-12">${tag.tagPublishedRefCount} ${countLabel}</span>
</a>
</#list>
</div>
</div>
<#include "bottom.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<script>
Skin.initTags()
</script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</body>
</html>