Van 2019-02-27 21:33:50 +08:00
parent aeb19ca6f8
commit 0defece290
No known key found for this signature in database
GPG Key ID: 7059B8783A78F16C
44 changed files with 1170 additions and 461 deletions

View File

@ -158,6 +158,7 @@
<#if 0 != relevantArticlesDisplayCount>
page.loadRelevantArticles('${article.oId}', '<h4>${relevantArticlesLabel}</h4>');
</#if>
Skin.initArticle()
</@comment_script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -28,33 +28,19 @@
content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<div class="module">
<div class="module__content ft__center">
<i class="icon__home"></i>
<a href="${servePath}" class="breadcrumb">${blogTitle}</a>
&nbsp; > &nbsp;
<i class="icon__inbox"></i>
<a href="${servePath}/archives.html" class="breadcrumb">${archiveLabel}</a>
&nbsp; > &nbsp;
<#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear}
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if>
- ${archiveDate.archiveDatePublishedArticleCount} ${articleLabel}
</div>
<div class="wrapper wrapper--min">
<div class="page__title">
<span class="ft__red">#</span>
${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}
</div>
<#include "article-list.ftl">
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
</body>
</html>

View File

@ -26,48 +26,28 @@
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<div class="module">
<div class="module__content ft__center">
<i class="icon__home"></i>
<a href="${servePath}" class="breadcrumb">${blogTitle}</a>
&nbsp; > &nbsp;
<i class="icon__inbox"></i>
${statistic.statisticPublishedBlogArticleCount} ${archiveLabel}${articleLabel}
</div>
<div class="wrapper wrapper--min">
<div class="page__title">
<span class="ft__red">#</span>
${statistic.statisticPublishedBlogArticleCount} ${archiveLabel}${articleLabel}
</div>
<div class="module">
<div class="module__list">
<#if 0 != archiveDates?size>
<ul>
<#list archiveDates as archiveDate>
<li>
<#if "en" == localeString?substring(0, 2)>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear}
(${archiveDate.archiveDatePublishedArticleCount})
</a>
<#else>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
(${archiveDate.archiveDatePublishedArticleCount})
</a>
</#if>
</li>
</#list>
</ul>
</#if>
</div>
<div class="page__content fn__clear">
<#if 0 != archiveDates?size>
<#list archiveDates as archiveDate>
<a class="page__item" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} / ${archiveDate.archiveDateMonth}
(${archiveDate.archiveDatePublishedArticleCount})
</a>
</#list>
</#if>
</div>
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
</body>
</html>

View File

@ -17,7 +17,7 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div class="article-list fn__clear">
<main class="article-list fn__clear">
<#list articles as article>
<article class="item">
<div class="item__container">
@ -57,7 +57,7 @@
</div>
</article>
</#list>
</div>
</main>
<#if 0 != paginationPageCount>
<nav class="pagination">
<#if 1 != paginationPageNums?first>

View File

@ -47,151 +47,129 @@
<meta name="twitter:title" content="${article.articleTitle}"/>
<meta name="twitter:image" content="${article.authorThumbnailURL}"/>
<meta name="twitter:url" content="${servePath}${article.articlePermalink}"/>
<meta name="twitter:site" content="@DL88250"/>
<meta name="twitter:creator" content="@DL88250"/>
</head>
<body>
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main id="articlePage">
<div class="article-list">
<div class="item item--active">
<time class="tooltipped tooltipped__n item__date"
aria-label="${article.articleCreateDate?string("yyyy")}${yearLabel}">
${article.articleCreateDate?string("MM")}${monthLabel}
<span class="item__day">${article.articleCreateDate?string("dd")}</span>
</time>
<h2 class="item__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="item__date--m fn__none">
<i class="icon__date"></i>
${article.articleCreateDate?string("yyyy-MM-dd")}
</div>
<div class="ft__center">
<span class="tag">
<i class="icon__tags"></i>
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a><#if articleTag_has_next>,</#if>
</#list>
</span>
<a class="tag" href="${servePath}${article.articlePermalink}#comments">
<i class="icon__comments"></i> ${article.articleCommentCount} ${commentLabel}
</a>
<span class="tag">
<i class="icon__views"></i>
${article.articleViewCount} ${viewLabel}
</span>
</div>
<div class="content-reset">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</div>
</div>
<div class="post wrapper wrapper--miner">
<h2 class="item__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="ft__gray item__meta">
Published on
<time>
<#setting locale="en_US">
${article.articleCreateDate?string["MMM d, yyyy"]}
</time>
<#if article.category??>
in <a href="${servePath}/category/${article.category.categoryURI}">${article.category.categoryTitle}</a>
</#if>
with ${article.articleViewCount} views
<#if article.articleCommentCount != 0>
and <a href="#comments">${article.articleCommentCount} comments</a>
</#if>
</div>
<#if previousArticlePermalink?? || nextArticlePermalink??>
<div class="module mobile__hidden">
<div class="module__content fn__clear">
<#if previousArticlePermalink??>
<a href="${servePath}${previousArticlePermalink}" rel="prev" class="fn__left breadcrumb">
${previousArticleLabel}: ${previousArticleTitle}
</a>
</#if>
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" rel="next"
class="fn__right breadcrumb">
${nextArticleTitle}: ${nextArticleLabel}
</a>
</#if>
</div>
<div class="item__tags">
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" class="tag tag--${articleTag_index}" href="${servePath}/tags/${articleTag?url('UTF-8')}">
<b># ${articleTag}</b>
</a>
</#list>
</div>
<div class="content-reset">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
<#if previousArticlePermalink??>
<div class="module mobile__hidden fn__none">
<div class="module__content">
<a href="${servePath}${previousArticlePermalink}" rel="prev" class="breadcrumb">
${previousArticleLabel}: ${previousArticleTitle}
</a>
</div>
</div>
</#if>
<#if nextArticlePermalink??>
<div class="module mobile__hidden fn__none">
<div class="module__content">
<a href="${servePath}${nextArticlePermalink}" rel="next"
class="breadcrumb">
${nextArticleLabel}: ${nextArticleTitle}
</a>
</div>
</div>
</#if>
<@comments commentList=articleComments article=article></@comments>
<div class="fn__flex article__relevant">
<div class="fn__flex-1" id="externalRelevantArticlesWrap">
<div class="module">
<div id="externalRelevantArticles" class="module__list"></div>
</div>
</div>
<div class="mobile__hidden">&nbsp; &nbsp; &nbsp; &nbsp; </div>
<div class="fn__flex-1" id="randomArticlesWrap">
<div class="module">
<div id="randomArticles" class="module__list"></div>
</div>
</div>
<div class="mobile__hidden">&nbsp; &nbsp; &nbsp; &nbsp; </div>
<div class="fn__flex-1" id="relevantArticlesWrap">
<div class="module">
<div id="relevantArticles" class="module__list"></div>
</div>
</div>
</div>
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<div class="post__toc"></div>
<div class="body--gray post__gray">
<div class="wrapper comment">
<@comments commentList=articleComments article=article></@comments>
<div class="post__list fn__flex">
<div class="fn__flex-1">
<div id="externalRelevantArticles"></div>
</div>
<div class="post__list-mid fn__flex-1">
<div id="randomArticles"></div>
</div>
<div class="fn__flex-1">
<div id="relevantArticles"></div>
</div>
</div>
</div>
</div>
<div class="post__fix">
<div class="wrapper">
<span class="post__share">
Share
<span class="tag tag--4" data-type="weibo">WeiBo</span>
<span class="tag tag--5" data-type="twitter">Twitter</span>
<span class="tag tag--6" data-type="qqz">QZone</span>
<span class="post__code tag tag--7"
data-type="wechat"
data-title="${article.articleTitle}"
data-blogtitle="${blogTitle}"
data-url="${servePath}${article.articlePermalink}"
data-avatar="${article.authorThumbnailURL}">WeChat</span>
</span>
<span class="post__arrow">
<#if previousArticlePermalink??>
<a href="${servePath}${previousArticlePermalink}" rel="prev"
class="tooltipped__n tooltipped"
pjax-title="${previousArticleTitle}"
aria-label="${previousArticleLabel}: ${previousArticleTitle}">←</a>
</#if>
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" rel="next"
class="tooltipped__n tooltipped"
pjax-title="${nextArticleTitle}"
aria-label="${nextArticleLabel}: ${nextArticleTitle}">→</a>
</#if>
<a href="javascript:Util.goTop()" class="tooltipped__n tooltipped"
aria-label="${goTopLabel}">↑</a>
<a href="javascript:Util.goBottom()" class="tooltipped__n tooltipped"
aria-label="${goBottomLabel}">↓</a>
</span>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<@comment_script oId=article.oId commentable=article.commentable>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != randomArticlesDisplayCount>
page.loadRandomArticles('<header class="module__header">${randomArticlesLabel}</header>');
page.loadRandomArticles('<h3>RECOMMEND POSTS</h3>');
</#if>
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>"
, "<header class='module__header'>${externalRelevantArticlesLabel}</header>");
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>",
'<h3>HACPAI POSTS</h3>');
</#if>
<#if 0 != relevantArticlesDisplayCount>
page.loadRelevantArticles('${article.oId}',
'<header class="module__header">${relevantArticlesLabel}</header>');
page.loadRelevantArticles('${article.oId}', '<h3>RELEVANT POSTS</h3>');
</#if>
Skin.initArticle()
</@comment_script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</body>

View File

@ -27,29 +27,20 @@
content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<div class="module">
<div class="module__content ft__center">
<i class="icon__home"></i>
<a href="${servePath}" class="breadcrumb">${blogTitle}</a>
&nbsp; > &nbsp;
<i class="icon__category"></i>
${categoryLabel}
&nbsp; > &nbsp;
<span class="tooltipped tooltipped__w"
aria-label="${category.categoryDescription}">${category.categoryTitle}</span>
</div>
<div class="wrapper wrapper--min">
<div class="page__title">
<span class="ft__red">#</span>
${category.categoryTitle}
<div class="ft__gray">${category.categoryDescription}</div>
</div>
<#include "article-list.ftl">
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
</body>
</html>

View File

@ -17,32 +17,35 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<li id="${comment.oId}" class="comments__item">
<div class="comments__meta fn__flex">
<div class="fn__flex-1">
<#setting locale="en_US">
<li id="${comment.oId}" class="item">
<div class="fn__clear">
<div class="item__avatar" style="background-image: url(${comment.commentThumbnailURL})"></div>
<div class="item__name">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<#if comment.isReply>
@<a href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 28);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
@ <a href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 6);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
>${comment.commentOriginalCommentName}</a>
</#if>
</div>
<time>${comment.commentDate2?string("yyyy-MM-dd HH:mm")}</time>
</div>
<main class="comments__content fn__clear">
<div class="comments__avatar" style="background-image: url(${comment.commentThumbnailURL})"></div>
<div class="content-reset">
${comment.commentContent}
</div>
<div class="content-reset">
${comment.commentContent}
</div>
<div class="item__meta fn__clear">
<time>
${comment.commentDate2?string["MMM d, yyyy"]}
</time>
<#if article?? && article.commentable>
<a class="fn__right breadcrumb" href="javascript:page.toggleEditor('${comment.oId}', '${comment.commentName}')">${replyLabel}</a>
<#else>
<a class="fn__right breadcrumb" href="${servePath}${comment.commentSharpURL}">${viewLabel}»</a>
<a class="fn__right fn__none item__reply"
href="javascript:page.toggleEditor('${comment.oId}', '${comment.commentName}')">Reply</a>
</#if>
</main>
</div>
</li>

File diff suppressed because one or more lines are too long

View File

@ -30,7 +30,7 @@
@import "icon";
@import "vditor/src/assets/scss/classic";
body {
.body--gray {
background-color: #f7f7f7;
}
@ -49,18 +49,80 @@ a:active, a:focus, a:hover {
::selection {
color: #fff;
background-color: #eb5055
background-color: #eb5055;
}
.content-reset {
font-size: 14px;
.b3-solo-list {
display: none;
}
}
.ft__gray {
color: #767676;
}
.ft__red {
color: #eb5055;
}
.tag {
font-size: 13px;
display: inline-block;
padding: 0 15px;
transition: all .3s;
line-height: 24px;
color: #fff;
cursor: pointer;
background: #6fa3ef;
border-radius: 12px;
margin-left: 10px;
&:hover {
color: #5f5f5f;
background: #f7f7f7;
}
&--1 {
background: #ff9800;
}
&--2 {
background: #46c47c;
}
&--3 {
background: #eb5055;
}
&--4 {
background: #db4437;
}
&--5 {
background: #1b95e0;
}
&--6 {
background: #fdc200;
}
&--7 {
background: #4caf50;
}
}
.wrapper {
width: 1025px;
width: 1024px;
padding: 0 10px;
box-sizing: border-box;
margin: 0 auto;
&--min {
animation: fade-in;
animation-duration: .5s;
padding-top: 115px;
max-width: 900px;
}
&--miner {
animation: fade-in;
animation-duration: .5s;
padding-top: 115px;
max-width: 700px;
}
}
.header {
@ -90,6 +152,9 @@ a:active, a:focus, a:hover {
float: right;
a {
margin: 0 15px;
&.current {
color: #eb5055;
}
}
}
@ -136,6 +201,7 @@ a:active, a:focus, a:hover {
.footer {
background-color: #fff;
line-height: 20px;
position: relative;
font-size: 13px;
&__border {
border-bottom: 1px solid rgba(184, 197, 214, .2);
@ -165,16 +231,16 @@ a:active, a:focus, a:hover {
.wrapper {
padding-bottom: 40px;
}
a {
color: #5f5f5f;
&:hover {
color: #313131;
}
}
}
.article-list {
animation: fade-in;
animation-duration: .5s;
padding-top: 95px;
max-width: 900px;
margin: 0 auto;
box-sizing: border-box;
.item {
float: left;
width: 33.3333%;
@ -244,6 +310,8 @@ a:active, a:focus, a:hover {
}
&__title {
margin-bottom: 2px;
height: 44px;
a {
font-size: 18px;
line-height: 22px;
@ -254,8 +322,13 @@ a:active, a:focus, a:hover {
text-overflow: ellipsis;
-webkit-box-orient: vertical;
display: -webkit-box;
margin-bottom: 2px;
height: 44px;
}
sup {
font-weight: normal;
font-size: 12px;
float: left;
top: -33px;
color: #eb5055;
}
}
@ -296,4 +369,283 @@ a:active, a:focus, a:hover {
color: #eb5055;
}
}
}
.post {
&__fix {
position: fixed;
box-sizing: border-box;
z-index: 2;
right: 0;
bottom: 0;
left: 0;
height: 48px;
border-top: 1px solid #e0e0e0;
background-color: #fff;
animation-duration: .5s;
animation-fill-mode: both;
&--unpinned {
animation-name: unpinned;
}
&--pinned {
animation-name: pinned;
}
@keyframes unpinned {
0% {
transform: translateY(0)
}
100% {
transform: translateY(48px)
}
}
@keyframes pinned {
0% {
transform: translateY(48px)
}
100% {
transform: translateY(0)
}
}
}
&__share {
line-height: 48px;
}
&__code {
position: relative;
canvas {
position: absolute;
bottom: 30px;
left: 0;
}
}
&__arrow {
float: right;
a {
margin-left: 20px;
line-height: 48px;
}
}
.item {
&__title {
a {
font-weight: 400;
font-size: 21px;
color: #222;
}
sup {
font-weight: normal;
color: #eb5055;
}
}
&__meta {
font-size: 12px;
margin: 5px 0 15px;
}
&__tags {
border-bottom: 1px solid #e0e0e0;
padding-bottom: 15px;
margin-bottom: 15px;
.tag--0 {
margin-left: 0;
}
}
}
&__list {
padding: 20px 0 40px;
&-mid {
margin: 0 20px;
}
h3 {
font-size: 14px;
padding-bottom: 10px;
color: #5f5f5f;
font-weight: normal;
}
li {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-wrap: normal;
list-style: none;
font-size: 13px;
line-height: 26px;
}
}
&__toc {
position: fixed;
top: 100px;
max-width: 200px;
border-left: 1px solid #ddd;
.b3-solo-list {
margin: 0;
font-size: 14px;
line-height: 24px;
a {
display: block;
margin-top: -24px;
}
}
.b3-solo-list-h2,
.b3-solo-list-h4,
.b3-solo-list-h5,
.b3-solo-list-h3 {
margin-left: 0;
}
.b3-solo-list-h2 a {
margin-left: 10px;
}
.b3-solo-list-h3 a {
margin-left: 20px;
}
.b3-solo-list-h4 a {
margin-left: 30px;
}
.b3-solo-list-h5 a {
margin-left: 40px;
}
li {
&:before {
position: relative;
top: -2px;
left: -4px;
display: inline-block;
width: 7px;
height: 7px;
content: '';
border-radius: 50%;
background-color: #eb5055;
}
}
}
&__gray {
position: relative;
}
}
.comment {
width: 700px;
box-sizing: border-box;
&-body-ref {
position: absolute;
left: 80px;
width: 76%;
}
&__title {
padding: 30px 20px;
color: #5f5f5f;
}
.item {
margin: 20px 0;
border: 1px solid rgba(184, 197, 214, .2);
border-radius: 3px;
background: #fff;
box-shadow: 0 1px 4px rgba(0, 0, 0, .04);
list-style: none;
padding: 20px;
&__meta {
color: #5f5f5f;
font-size: 12px;
}
&__avatar {
float: left;
height: 40px;
width: 40px;
border-radius: 20px;
border: 1px solid #eaeaea;
margin: 0 20px 20px 0;
background-size: cover;
background-position: center center;
}
&__name {
color: #5f5f5f;
float: left;
line-height: 40px;
}
&:hover {
.item__reply {
display: block;
color: #eb5055;
}
}
}
#comments {
position: relative;
}
#comment {
position: relative;
margin-bottom: 30px;
padding: 20px;
border-radius: 3px;
background: #fff;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
border: 0;
resize: none;
cursor: pointer;
width: 100%;
box-sizing: border-box;
}
}
.page {
&__title {
margin: 10px 0;
padding: 0 15px;
color: #5f5f5f;
}
&__content {
margin: 15px 0 40px;
}
&__item {
float: left;
list-style: none;
box-shadow: 0 1px 4px rgba(0, 0, 0, .04);
background-color: #fff;
padding: 15px;
margin: 15px;
min-width: 115px;
line-height: 22px;
&:hover {
transform: scale(1.03);
}
}
&__bottom {
height: 40px;
}
&__tags {
.tag {
margin: 15px;
}
}
}

View File

@ -21,7 +21,7 @@
<nav class="footer__nav">
<#list pageNavigations as page>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
<#if page.pageIcon != ''><img src="${page.pageIcon}"></#if>${page.pageTitle}
${page.pageTitle}
</a>
</#list>
<a rel="alternate" href="${servePath}/rss.xml" rel="section">RSS</a>

View File

@ -30,11 +30,13 @@
</#if>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "article-list.ftl">
<div class="wrapper wrapper--min">
<#include "article-list.ftl">
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">

View File

@ -27,23 +27,6 @@
* @static
*/
var Skin = {
_initCommon: function ($goTop) {
$(window).scroll(function () {
if ($(window).scrollTop() > 125) {
$goTop.show()
} else {
$goTop.hide()
}
if ($('.side .b3-solo-list').length > 0) {
if ($(window).scrollTop() > 50) {
$('.side').css('position', 'fixed')
} else {
$('.side').css('position', 'initial')
}
}
})
},
init: function () {
var header = new Headroom($('header')[0], {
tolerance: 0,
@ -61,87 +44,117 @@ var Skin = {
header.init()
Util.initPjax(function () {
if ($('#articlePage').length === 0) {
$('.b3-solo-list').closest('.module').remove()
if ($('.post__fix').length === 0) {
$('body').addClass('body--gray')
} else {
$('body').removeClass('body--gray')
}
$('.header__nav a').each(function () {
$('.header__nav a').removeClass('current')
if (this.href === location.href) {
this.className = 'current'
}
})
})
$('body').on('click', '.content-reset img', function () {
window.open(this.src)
})
this._initCommon($('.icon__up'))
$('.header__nav a, .header__m a').each(function () {
$('.header__nav a').each(function () {
if (this.href === location.href) {
this.className = 'current'
}
}).click(function () {
$('.header__nav a, .header__m a').removeClass('current')
this.className = 'current'
$('.header__m .module__list').hide()
})
$('.header__logo').click(function () {
$('.header__nav a, .header__m a').removeClass('current')
$('.header__nav a').removeClass('current')
if (this.href === location.href) {
this.className = 'current'
}
})
},
_initArticleCommon: function () {
if ($(window).width() > 768) {
if ($('#articlePage .b3-solo-list li').length === 0) {
$('.side .b3-solo-list').closest('.module').remove()
$('.side').css({
height: 'auto',
position: 'initial',
})
_initToc: function () {
if ($('.content-reset .b3-solo-list li').length === 0 || $(window).width() < 768) {
$('.post__toc .b3-solo-list').remove()
return
}
$('.post__toc').html($('.b3-solo-list')).css('left', $('.post').offset().left + $('.post').outerWidth())
$(window).scroll(function () {
if ($(window).scrollTop() > 72) {
$('.post__toc').show()
} else {
$('.post__toc').hide()
}
})
},
_initShare: function () {
var $this = $('.post__share')
var $qrCode = $this.find('.post__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.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
}
$('#articlePage').width($('.main').width() - 310)
if ($('.side .b3-solo-list').length === 0) {
$('.side').
prepend('<div class="module"><div class="module__list"></div></div>').
css({
right: ($(window).width() - $('.main').width()) / 2,
position: 'fixed',
overflow: 'auto',
height: $(window).height() - 30,
top: 30,
if (key === 'wechat') {
if ($qrCode.find('canvas').length === 0) {
$.ajax({
method: 'GET',
url: latkeConfig.staticServePath +
'/skins/Pinghsu/js/jquery.qrcode.min.js',
dataType: 'script',
cache: true,
success: function () {
$qrCode.qrcode({
width: 128,
height: 128,
text: shareURL,
})
},
})
} else {
$qrCode.find('canvas').slideToggle()
}
return false
}
$('.side .module:eq(0) .module__list').html($('.b3-solo-list'))
$(window).scroll()
$('.side').scrollTop(0)
} else {
if ($('#articlePage .b3-solo-list li').length === 0) {
$('.header__m .icon__list').hide().next().hide()
return
}
$('.header__m .icon__list').show().next().html($('.b3-solo-list'))
$('.b3-solo-list a').click(function () {
$(this).closest('.module__list').hide()
})
}
window.open(urls[key], '_blank', 'top=100,left=200,width=648,height=618')
})
},
initArticle: function () {
this._initArticleCommon()
var postSharer = new Headroom($('.post__fix')[0], {
tolerance: 0,
offset: 48,
classes: {
initial: 'post__fix',
pinned: 'post__fix--pinned',
unpinned: 'post__fix--unpinned',
top: 'post__fix',
notTop: 'post__fix',
bottom: 'post__fix',
notBottom: 'post__fix',
},
})
postSharer.init()
setTimeout(function () {
if ($('#externalRelevantArticlesWrap li').length === 0) {
$('#externalRelevantArticlesWrap').next().remove()
$('#externalRelevantArticlesWrap').remove()
}
if ($('#relevantArticlesWrap li').length === 0) {
$('#relevantArticlesWrap').prev().remove()
$('#relevantArticlesWrap').remove()
}
if ($('#randomArticlesWrap li').length === 0) {
$('#randomArticlesWrap').prev().remove()
$('#randomArticlesWrap').remove()
}
}, 1000)
Skin._initShare()
Skin._initToc()
},
}
Skin.init()

View File

@ -15,4 +15,4 @@
* 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/>.
*/
var Skin={_initCommon:function(e){$(window).scroll(function(){125<$(window).scrollTop()?e.show():e.hide(),0<$(".side .b3-solo-list").length&&(50<$(window).scrollTop()?$(".side").css("position","fixed"):$(".side").css("position","initial"))})},_initAnimation:function(){if(!("IntersectionObserver"in window))return $(".item").addClass("item--active"),!1;window.imageIntersectionObserver?window.imageIntersectionObserver.disconnect():window.imageIntersectionObserver=new IntersectionObserver(function(e){e.forEach(function(e){if(void 0===e.isIntersecting?0!==e.intersectionRatio:e.isIntersecting)$(e.target).addClass("item--active");else{if(1===$(e.target).closest(".side").length||1===$(e.target).closest("#articlePage").length||768<$(e.target).outerHeight())return;$(e.target).removeClass("item--active")}})}),$(".item").each(function(){window.imageIntersectionObserver.observe(this)})},init:function(){Util.initPjax(function(){Skin._initAnimation(),0===$("#articlePage").length&&$(".b3-solo-list").closest(".module").remove()}),Skin._initAnimation(),$("body").on("click",".content-reset img",function(){window.open(this.src)}),this._initCommon($(".icon__up")),$(".header__nav a, .header__m a").each(function(){this.href===location.href&&(this.className="current")}).click(function(){$(".header__nav a, .header__m a").removeClass("current"),this.className="current",$(".header__m .module__list").hide()}),$(".header__logo").click(function(){$(".header__nav a, .header__m a").removeClass("current")})},_initArticleCommon:function(){if(768<$(window).width()){if(0===$("#articlePage .b3-solo-list li").length)return $(".side .b3-solo-list").closest(".module").remove(),void $(".side").css({height:"auto",position:"initial"});$("#articlePage").width($(".main").width()-310),0===$(".side .b3-solo-list").length&&$(".side").prepend('<div class="module"><div class="module__list"></div></div>').css({right:($(window).width()-$(".main").width())/2,position:"fixed",overflow:"auto",height:$(window).height()-30,top:30}),$(".side .module:eq(0) .module__list").html($(".b3-solo-list")),$(window).scroll(),$(".side").scrollTop(0)}else{if(0===$("#articlePage .b3-solo-list li").length)return void $(".header__m .icon__list").hide().next().hide();$(".header__m .icon__list").show().next().html($(".b3-solo-list")),$(".b3-solo-list a").click(function(){$(this).closest(".module__list").hide()})}},initArticle:function(){this._initArticleCommon(),setTimeout(function(){0===$("#externalRelevantArticlesWrap li").length&&($("#externalRelevantArticlesWrap").next().remove(),$("#externalRelevantArticlesWrap").remove()),0===$("#relevantArticlesWrap li").length&&($("#relevantArticlesWrap").prev().remove(),$("#relevantArticlesWrap").remove()),0===$("#randomArticlesWrap li").length&&($("#randomArticlesWrap").prev().remove(),$("#randomArticlesWrap").remove())},1e3)}};Skin.init();
var Skin={init:function(){new Headroom($("header")[0],{tolerance:0,offset:70,classes:{initial:"header",pinned:"header--down",unpinned:"header--up",top:"header",notTop:"header",bottom:"header",notBottom:"header"}}).init(),Util.initPjax(function(){0===$(".post__fix").length?$("body").addClass("body--gray"):$("body").removeClass("body--gray"),$(".header__nav a").each(function(){$(".header__nav a").removeClass("current"),this.href===location.href&&(this.className="current")})}),$("body").on("click",".content-reset img",function(){window.open(this.src)}),$(".header__nav a").each(function(){this.href===location.href&&(this.className="current")}).click(function(){$(".header__nav a").removeClass("current"),this.href===location.href&&(this.className="current")})},_initToc:function(){0===$(".content-reset .b3-solo-list li").length||$(window).width()<768?$(".post__toc .b3-solo-list").remove():($(".post__toc").html($(".b3-solo-list")).css("left",$(".post").offset().left+$(".post").outerWidth()),$(window).scroll(function(){72<$(window).scrollTop()?$(".post__toc").show():$(".post__toc").hide()}))},_initShare:function(){var t=$(".post__share"),e=t.find(".post__code"),o=e.data("url"),n=e.data("avatar"),i=encodeURIComponent(e.data("title")+" - "+e.data("blogtitle")),s=encodeURIComponent(o),a={};a.weibo="http://v.t.sina.com.cn/share/share.php?title="+i+"&url="+s+"&pic="+n,a.qqz="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+s+"&sharesource=qzone&title="+i+"&pics="+n,a.twitter="https://twitter.com/intent/tweet?status="+i+" "+s,t.find("span").click(function(){var t=$(this).data("type");if(t)return"wechat"===t?(0===e.find("canvas").length?$.ajax({method:"GET",url:latkeConfig.staticServePath+"/skins/Pinghsu/js/jquery.qrcode.min.js",dataType:"script",cache:!0,success:function(){e.qrcode({width:128,height:128,text:o})}}):e.find("canvas").slideToggle(),!1):void window.open(a[t],"_blank","top=100,left=200,width=648,height=618")})},initArticle:function(){new Headroom($(".post__fix")[0],{tolerance:0,offset:48,classes:{initial:"post__fix",pinned:"post__fix--pinned",unpinned:"post__fix--unpinned",top:"post__fix",notTop:"post__fix",bottom:"post__fix",notBottom:"post__fix"}}).init(),Skin._initShare(),Skin._initToc()}};Skin.init();

18
Pinghsu/js/headroom.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,45 @@
/*
* 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/>.
*/
(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery);

18
Pinghsu/js/jquery.qrcode.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -18,16 +18,10 @@
#
# Description: Solo language configurations(en_US).
# Version: 2.0.0.0, Feb 23, 2019
# Version: 0.1.0.0, Feb 26, 2019
# Author: Liyuan Li
#
cancelLabel=Cancel
siteViewLabel=Site
onlineVisitorLabel=Visitor
tocLabel=Article ToC
readLabel=Read More
nextArticleLabel=Next
previousArticleLabel=Previous
articleCP1Label=Please indicate the source:
viewCountLabel=View Count
goTopLabel=Go top
goBottomLabel=Go bottom

View File

@ -18,15 +18,10 @@
#
# Description: Solo default language configurations(zh_CN).
# Version: 2.0.0.0, Feb 23, 2019
# Version: 0.1.0.0, Feb 26, 2019
# Author: Liyuan Li
#
siteViewLabel=\u7AD9\u70B9\u6982\u8981
onlineVisitorLabel=\u8BBF\u5BA2
tocLabel=\u6587\u7AE0\u76EE\u5F55
readLabel=\u9605\u8BFB\u5168\u6587
nextArticleLabel=\u65B0\u4E00\u7BC7
previousArticleLabel=\u65E7\u4E00\u7BC7
articleCP1Label=\u8F6C\u8F7D\u8BF7\u6CE8\u660E\u6765\u6E90\uFF1A
viewCountLabel=\u6D4F\u89C8\u6570
goTopLabel=\u79FB\u52A8\u5230\u9876\u90E8
goBottomLabel=\u79FB\u52A8\u5230\u5E95\u90E8

View File

@ -26,41 +26,30 @@
<meta name="description" content="${metaDescription},${linkLabel}"/>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<div class="module">
<div class="module__content ft__center">
<i class="icon__home"></i>
<a href="${servePath}" class="breadcrumb">${blogTitle}</a>
&nbsp; > &nbsp;
<i class="icon__link"></i>
<div class="wrapper--min wrapper">
<div class="page__title">
<span class="ft__red">#</span>
${linkLabel}
</div>
</div>
<div class="module">
<div class="module__list">
<#if 0 != links?size>
<ul class="list">
<#list links as link>
<li>
<a rel="friend" href="${link.linkAddress}" title="${link.linkDescription}"
target="_blank">
${link.linkTitle}
</a>
</li>
</#list>
</ul>
</#if>
</div>
<div class="page__content fn__clear">
<#if 0 != links?size>
<#list links as link>
<a rel="friend" href="${link.linkAddress}"
class="page__item"
title="${link.linkDescription}"
target="_blank">
${link.linkTitle}
</a>
</#list>
</#if>
</div>
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
</body>
</html>

View File

@ -18,26 +18,16 @@
-->
<#macro comments commentList article>
<div class="comments__item">
<div class="comments__meta comments__meta--only">${commentLabel}</div>
<div class="comment__title">
Responses
</div>
<#if article.commentable>
<textarea rows="3" placeholder="Your comment here. Be cool. " id="comment"></textarea>
</#if>
<ul class="comments" id="comments">
<ul id="comments">
<#list commentList as comment>
<#include 'common-comment.ftl'/>
</#list>
</ul>
<#if article.commentable>
<div class="comments__item">
<div class="comments__meta">
${postCommentsLabel}
</div>
<div class="comments__content">
<div class="form">
<textarea rows="3" placeholder="${postCommentsLabel}" id="comment"></textarea>
</div>
</div>
</div>
</#if>
</#macro>

View File

@ -30,25 +30,42 @@
</head>
<body>
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<article class="module">
<div class="module__content">
<div class="content-reset">
${page.pageContent}
</div>
<div class="post wrapper wrapper--miner">
<div class="content-reset">
${page.pageContent}
</div>
</article>
<@comments commentList=pageComments article=page></@comments>
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<div class="body--gray post__gray">
<div class="wrapper comment">
<@comments commentList=pageComments article=page></@comments>
</div>
<div class="page__bottom"></div>
</div>
<div class="post__fix">
<div class="wrapper">
<span class="post__share">
Share
<span class="tag tag--4" data-type="weibo">WeiBo</span>
<span class="tag tag--5" data-type="twitter">Twitter</span>
<span class="tag tag--6" data-type="qqz">QZone</span>
<span class="post__code tag tag--7"
data-type="wechat"
data-title="${page.pageTitle}"
data-blogtitle="${blogTitle}"
data-url="${servePath}${page.pagePermalink}"
data-avatar="${adminUser.userAvatar}">WeChat</span>
</span>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<@comment_script oId=page.oId commentable=page.commentable></@comment_script>
<@comment_script oId=page.oId commentable=page.commentable>
Skin.initArticle()
</@comment_script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</body>
</html>

View File

@ -27,28 +27,19 @@
content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<div class="module">
<div class="module__content ft__center">
<i class="icon__home"></i>
<a href="${servePath}" class="breadcrumb">${blogTitle}</a>
&nbsp; > &nbsp;
<i class="icon__tags"></i>
<a href="${servePath}/tags.html" class="breadcrumb">${allTagsLabel}</a>
&nbsp; > &nbsp;
${tag.tagTitle} ${tagLabel}
</div>
<div class="wrapper wrapper--min">
<div class="page__title">
<span class="ft__red">#</span>
${tag.tagTitle} ${tagLabel}
</div>
<#include "article-list.ftl">
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
</body>
</html>

View File

@ -26,36 +26,28 @@
<meta name="description" content="<#list tags as tag>${tag.tagTitle}<#if tag_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<body class="body--gray">
<#include "header.ftl">
<div class="main">
<div id="pjax" class="content">
<main id="pjax">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<main>
<div class="module">
<div class="module__content ft__center">
<i class="icon__home"></i>
<a href="${servePath}" class="breadcrumb">${blogTitle}</a>
&nbsp; > &nbsp;
<i class="icon__tags"></i> ${sumLabel} ${tags?size} ${tagLabel}
</div>
<div class="wrapper--min wrapper">
<div class="page__title">
<span class="ft__red">#</span>
${sumLabel} ${tags?size} ${tagLabel}
</div>
<div class="module">
<div class="module__content fn__clear tags">
<#list tags as tag>
<a rel="tag" data-count="${tag.tagPublishedRefCount}" class="tag"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
<span class="name">${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>)
</a>
</#list>
</div>
<div class="page__content page__tags fn__clear">
<#list tags as tag>
<a rel="tag" data-count="${tag.tagPublishedRefCount}" class="tag tag--${tag_index % 10}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
<span class="name">${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>)
</a>
</#list>
</div>
</main>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</main>
<#include "footer.ftl">
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -47,8 +47,6 @@
<meta name="twitter:title" content="${article.articleTitle}"/>
<meta name="twitter:image" content="${article.authorThumbnailURL}"/>
<meta name="twitter:url" content="${servePath}${article.articlePermalink}"/>
<meta name="twitter:site" content="@DL88250"/>
<meta name="twitter:creator" content="@DL88250"/>
</head>
<body>
<#include "header.ftl">
@ -181,18 +179,17 @@
<#include "footer.ftl">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<@comment_script oId=article.oId commentable=article.commentable>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != randomArticlesDisplayCount>
page.loadRandomArticles('<header class="module__header">${randomArticlesLabel}</header>');
page.loadRandomArticles('<header class="module__header">${randomArticlesLabel}</header>');
</#if>
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>"
, "<header class='module__header'>${externalRelevantArticlesLabel}</header>");
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>" , "<header class='module__header'>${externalRelevantArticlesLabel}</header>");
</#if>
<#if 0 != relevantArticlesDisplayCount>
page.loadRelevantArticles('${article.oId}',
'<header class="module__header">${relevantArticlesLabel}</header>');
page.loadRelevantArticles('${article.oId}', '<header class="module__header">${relevantArticlesLabel}</header>');
</#if>
Skin.initArticle()
</@comment_script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long