Skin:community-bubbles

This commit is contained in:
Armstrong 2013-02-01 16:59:29 +08:00
parent 787b8b9c27
commit 4dd3616fc3
43 changed files with 2893 additions and 0 deletions

View File

@ -0,0 +1,32 @@
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} (${archiveDate.archiveDatePublishedArticleCount}) - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveDate.archiveDateYear}${archiveDate.archiveDateMonth}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div class="content">
<h2>${archive1Label}
<#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} (${archiveDate.archiveDatePublishedArticleCount})
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} (${archiveDate.archiveDatePublishedArticleCount})
</#if>
</h2>
<#include "article-list.ftl">
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
</body>
</html>

View File

@ -0,0 +1,180 @@
<#assign leftId=users[0].oId />
<#assign rightId=users[1].oId/>
<#list articles as article>
<div class="marginBottom40">
<#if article.authorId!=rightId && article.authorId!=leftId>
<div class="article-main" style="width:100%;border:5px solid brown">
<div class="article-header">
<h3><span class="left">
by&nbsp;
</span>
<a rel="nofollow" class="left" title="${article.authorName}" href="${servePath}/authors/${article.authorId}">
${article.authorName}
</a>
<span>&nbsp;&nbsp;</span>
<span>
<#if article.hasUpdated>
${article.articleUpdateDate?string("yyyy-MM-dd HH:mm")}
<#else>
${article.articleCreateDate?string("yyyy-MM-dd HH:mm")}
</#if>
</span><span>&nbsp;&nbsp;</span>
<span>(<a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount}
</a>/<a rel="nofollow" href="${servePath}${article.articlePermalink}" title="${viewLabel}">
${article.articleViewCount}
</a>)</span></h3>
</div>
<div class="clear" style="display:block;"></div>
<h2 class="title">
<a rel="bookmark" class="no-underline" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.hasUpdated>
<sup class="red">
${updatedLabel}
</sup>
</#if>
<#if article.articlePutTop>
<sup class="red">
${topArticleLabel}
</sup>
</#if>
</h2>
<div class="article-body">
${article.articleAbstract}
</div>
<div class="read-more">
<a href="${servePath}${article.articlePermalink}">
<span class="left">${readmore2Label}</span>
<span class="read-more-icon"></span>
<span class="clear"></span>
</a>
<div class="clear"></div>
</div>
</div>
<#else>
<#if article.authorId==rightId>
<div class="article-header minwidth20per" style="float:right;">
<#elseif article.authorId==leftId>
<div class="article-header minwidth20per">
</#if>
<div class="clear"></div>
<div class="article-date">
<#if article.hasUpdated>
${article.articleUpdateDate?string("yyyy-MM-dd HH:mm")}
<#else>
${article.articleCreateDate?string("yyyy-MM-dd HH:mm")}
</#if>
</div>
<!--
<div class="arrow-right"></div>
-->
<div class="clear"></div>
<div>
<img width="160px" height="160px" src="${staticServePath}/images/default-user-thumbnail.png" onload="this.onload=null;this.src=getIcon('${article.articleAuthorEmail}')+'&d=404';" onerror="this.src='${staticServePath}/images/default-user-thumbnail.png';">
</div>
<div class="clear"></div>
<ul>
<li>
<span class="left">
by&nbsp;
</span>
<a rel="nofollow" class="left" title="${article.authorName}" href="${servePath}/authors/${article.authorId}">
${article.authorName}
</a>
<span class="clear"></span>
</li>
<li>
<a rel="nofollow" href="${servePath}${article.articlePermalink}" title="${viewLabel}">
${viewLabel} (${article.articleViewCount})
</a>
</li>
<li>
<a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#comments">
${commentLabel} (${article.articleCommentCount})
</a>
</li>
</ul>
</div>
<#if article.authorId==rightId>
<div class="triangle-border right minwidth70per" style="border-color:pink;">
<div class="article-main article-main-right">
<#elseif article.authorId==leftId>
<div class="triangle-border left minwidth70per">
<div class="article-main">
</#if>
<h2 class="title">
<a rel="bookmark" class="no-underline" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.hasUpdated>
<sup class="red">
${updatedLabel}
</sup>
</#if>
<#if article.articlePutTop>
<sup class="red">
${topArticleLabel}
</sup>
</#if>
</h2>
<div class="article-body">
${article.articleAbstract}
</div>
<div class="read-more">
<a href="${servePath}${article.articlePermalink}">
<span class="left">${readmore2Label}</span>
<span class="read-more-icon"></span>
<span class="clear"></span>
</a>
<div class="clear"></div>
</div>
</div>
</div>
<!--
<div class="article-footer">
<h3>${tagsLabel}</h3>
<ul>
<#list article.articleTags?split(",") as articleTag>
<li>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}
</a>
</li>
</#list>
<li>
<a href="${servePath}${article.articlePermalink}">
${createDateLabel}:${article.articleCreateDate?string("yyyy-MM-dd HH:mm")}
</a>
</li>
</ul>
</div>
-->
</#if>
<div class="clear"></div>
</div>
</#list>
<#if 0 != paginationPageCount>
<div class="pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/1">${firstPageLabel}</a>
<a id="previousPage" href="${servePath}${path}/${paginationPreviousPageNum}">${previousPageLabel}</a>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<a href="${servePath}${path}/${paginationPageNum}" class="selected">${paginationPageNum}</a>
<#else>
<a href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount>
<a id="nextPage" href="${servePath}${path}/${paginationNextPageNum}">${nextPagePabel}</a>
<a href="${servePath}${path}/${paginationPageCount}">${lastPageLabel}</a>
</#if>
&nbsp;&nbsp;${sumLabel} ${paginationPageCount} ${pageLabel}
</div>
</#if>

View File

@ -0,0 +1,127 @@
<#include "macro-head.ftl">
<#include "macro-comments.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${article.articleTitle} - ${blogTitle}">
<meta name="keywords" content="${article.articleTags}" />
<meta name="description" content="${article.articleAbstract?html}" />
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div class="content">
<div class="marginBottom40">
<div class="article-header">
<div class="article-date">
<#if article.hasUpdated>
${article.articleUpdateDate?string("yyyy-MM-dd HH:mm")}
<#else>
${article.articleCreateDate?string("yyyy-MM-dd HH:mm")}
</#if>
</div>
<div class="arrow-right"></div>
<div class="clear"></div>
<div>
<img width="160px" height="160px" src="${staticServePath}/images/default-user-thumbnail.png" onload="this.onload=null;this.src=getIcon('${article.articleAuthorEmail}')+'&d=404';" onerror="this.src='${staticServePath}/images/default-user-thumbnail.png';">
</div>
<ul>
<li>
<span class="left">
by&nbsp;
</span>
<a rel="nofollow" class="left" title="${article.authorName}" href="${servePath}/authors/${article.authorId}}">
${article.authorName}
</a>
<span class="clear"></span>
</li>
<li>
<a rel="nofollow" href="${servePath}${article.articlePermalink}" title="${viewLabel}">
${viewLabel} (${article.articleViewCount})
</a>
</li>
<li>
<a rel="nofollow" title="${commentLabel}" href="${servePath}${article.articlePermalink}#comments">
${commentLabel} (${article.articleCommentCount})
</a>
</li>
</ul>
</div>
<div class="article-main article-detail-body">
<h2 class="title">
<a href="${servePath}${article.articlePermalink}">${article.articleTitle}</a>
<#if article.hasUpdated>
<sup class="red">
${updatedLabel}
</sup>
</#if>
<#if article.articlePutTop>
<sup class="red">
${topArticleLabel}
</sup>
</#if>
</h2>
<div class="article-body">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div class="marginTop12">
${article.articleSign.signHTML}
</div>
</#if>
</div>
<div class="tags">
<span class="tag-icon" title="${tagsLabel}"></span>
${tags1Label}
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a><#if articleTag_has_next>,</#if>
</#list>
</div>
<div class="copyright">
${articleRightLabel}<br>
${articleWelcomeCopyLabel}<br>
${articleCopyNoteLabel}<strong>${blogTitle}</strong> [<a href="${servePath}">${servePath}</a>]<br>
${articleTitleLabel}${article.articleTitle}<br>
${articleLinkLabel}<a href="${servePath}${article.articlePermalink}">${servePath}${article.articlePermalink}</a><br>
</div>
</div>
<div class="clear"></div>
<div class="article-detail-footer">
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" class="left">${nextArticle1Label} ${nextArticleTitle}</a>
</#if>
<#if previousArticlePermalink??>
<a href="${servePath}${previousArticlePermalink}" class="right">${previousArticle1Label} ${previousArticleTitle}</a>
</#if>
<div class="clear"></div>
<div id="randomArticles" class="left article-relative"></div>
<div id="relevantArticles" class="article-relative left" style="width: 48%;"></div>
<div class="clear"></div>
<div id="externalRelevantArticles" class="article-relative"></div>
</div>
</div>
<@comments commentList=articleComments article=article></@comments>
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != randomArticlesDisplayCount>
page.loadRandomArticles();
</#if>
<#if 0 != relevantArticlesDisplayCount>
page.loadRelevantArticles('${article.oId}', '<h4>${relevantArticles1Label}</h4>');
</#if>
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>");
</#if>
</@comment_script>
</body>
</html>

View File

@ -0,0 +1,28 @@
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${authorName} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${authorName}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div class="content">
<h2>
${commentName1Label}${authorName}
</h2>
<#include "article-list.ftl">
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
</body>
</html>

View File

@ -0,0 +1,135 @@
/* ------------------------------------------
PURE CSS SPEECH BUBBLES
by Nicolas Gallagher
- http://nicolasgallagher.com/pure-css-speech-bubbles/
http://nicolasgallagher.com
http://twitter.com/necolas
Created: 02 March 2010
Version: 1.2 (03 March 2011)
Dual licensed under MIT and GNU GPLv2 <EFBFBD> Nicolas Gallagher
------------------------------------------ */
/* NOTE: Some declarations use longhand notation so that it can be clearly
explained what specific properties or values do and what their relationship
is to other properties or values in creating the effect */
/* ============================================================================================================================
== GENERAL STYLES
** ============================================================================================================================ */
/* ============================================================================================================================
== BUBBLE WITH A BORDER AND TRIANGLE
** ============================================================================================================================ */
/* THE SPEECH BUBBLE
------------------------------------------------------------------------------------------------------------------------------- */
.triangle-border {
position:relative;
padding:15px;
margin:1em 0 3em;
border:5px solid #5a8f00;
color:#333;
background:#fff;
/* css3 */
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
}
/* Variant : for left positioned triangle
------------------------------------------ */
.triangle-border.left {
margin-left:30px;
}
/* Variant : for right positioned triangle
------------------------------------------ */
.triangle-border.right {
margin-right:30px;
}
/* THE TRIANGLE
------------------------------------------------------------------------------------------------------------------------------- */
.triangle-border:before {
content:"";
position:absolute;
bottom:-20px; /* value = - border-top-width - border-bottom-width */
left:40px; /* controls horizontal position */
border-width:20px 20px 0;
border-style:solid;
border-color:#5a8f00 transparent;
/* reduce the damage in FF3.0 */
display:block;
width:0;
}
/* creates the smaller triangle */
.triangle-border:after {
content:"";
position:absolute;
bottom:-13px; /* value = - border-top-width - border-bottom-width */
left:47px; /* value = (:before left) + (:before border-left) - (:after border-left) */
border-width:13px 13px 0;
border-style:solid;
border-color:#fff transparent;
/* reduce the damage in FF3.0 */
display:block;
width:0;
}
/* Variant : left
------------------------------------------ */
/* creates the larger triangle */
.triangle-border.left:before {
top:10px; /* controls vertical position */
bottom:auto;
left:-30px; /* value = - border-left-width - border-right-width */
border-width:15px 30px 15px 0;
border-color:transparent #5a8f00;
}
/* creates the smaller triangle */
.triangle-border.left:after {
top:16px; /* value = (:before top) + (:before border-top) - (:after border-top) */
bottom:auto;
left:-21px; /* value = - border-left-width - border-right-width */
border-width:9px 21px 9px 0;
border-color:transparent #fff;
}
/* Variant : right
------------------------------------------ */
/* creates the larger triangle */
.triangle-border.right:before {
top:10px; /* controls vertical position */
bottom:auto;
left:auto;
right:-30px; /* value = - border-left-width - border-right-width */
border-width:15px 0 15px 30px;
border-color:transparent pink;
}
/* creates the smaller triangle */
.triangle-border.right:after {
top:16px; /* value = (:before top) + (:before border-top) - (:after border-top) */
bottom:auto;
left:auto;
right:-21px; /* value = - border-left-width - border-right-width */
border-width:9px 0 9px 21px;
border-color:transparent #fff;
}

View File

@ -0,0 +1,759 @@
@charset "utf-8";
/*
* skin community style
*
* @author <a href="mailto:LLY219@gmail.com">Liyuan Li</a>
* @version 1.0.0.7, May 15, 2012
*/
body {
background-color: #EFEFEF;
color: #555555;
min-width: 960px;
}
.copyright {
background:#E2E2E2;
text-align:left;
margin:20px 0;
padding:3px 0 3px 10px;
color:#333;
font-size:9pt;
line-height:22px;
border-left:5px solid #797979;
}
a, a:link {
color:#000000;
text-decoration: none;
}
a:active, a:visited {
color: #000000;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.content {
width: 940px;
margin: 0 auto;
}
.content>h2 {
margin: -20px 0 20px 0;
}
.hr {
background: url("../images/indentline-light.png") repeat-x scroll left top transparent;
margin: 20px 0 40px;
clear: both;
height: 2px;
}
.arrow-right {
background: url("../images/icon.png") 0px -64px no-repeat;
float: left;
height: 38px;
width: 14px;
}
input[type='button'] {
border-radius:5px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 0 2px rgba(255, 255, 255, 0.3) inset, 0 1px 2px rgba(0, 0, 0, 0.29);
background-color: #000000;
background-image: linear-gradient(top,#333333,#000000);
background-image: -moz-linear-gradient(top,#333333,#000000);
background-image: -ms-linear-gradient(top,#333333,#000000);
background-image: -o-linear-gradient(top,#333333,#000000);
background-image: -webkit-gradient(linear,left top,left bottom,from(#333333),to(#000000));
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#000000');
border: 1px solid #000000;
color: white;
margin: 15px 0 0 200px;
padding: 7px 13px;
height: auto;
}
input[type='button']:hover {
background-color: #333333;
background-image: linear-gradient(top,#333333,#212121);
background-image: -moz-linear-gradient(top,#333333,#212121);
background-image: -ms-linear-gradient(top,#333333,#212121);
background-image: -o-linear-gradient(top,#333333,#212121);
background-image: -webkit-gradient(linear,left top,left bottom,from(#333333),to(#212121));
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#212121');
}
.minwidth20per{
max-width:20%;
}
.minwidth70per{
max-width:70%;
}
.marginBottom40 {
margin-bottom: 40px;
}
/* header */
.header-user {
background-color: #DEDEDE;
padding-top: 1px;
}
.header-navi {
background: url("../images/icon.png") 0px -130px repeat-x #333333;
margin-bottom: 50px;
}
a.header-title {
color: #FFFFFF;
text-decoration: none;
line-height: 49px;
font: bold 35px/53px '微软雅黑,Arial,Helvetica';
}
.sub-title {
color: #9BC4CE;
margin-left: 10px;
}
.header-navi-main .tabs {
list-style: none;
height: 57px;
}
.header-navi-main .tab {
float: left;
font-size: 16px;
margin-left: 1px;
height: 57px;
}
.header-navi-main .tab:hover {
background: url("../images/icon.png") repeat-x scroll 0 -130px #9BC4CE;
}
#header-pages {
position: relative;
}
.header-navi-main .tab a {
color: #FFFFFF;
display: block;
font-weight: bold;
line-height: 22px;
padding: 19px 16px 16px;
text-decoration: none;
}
#header-pages:hover .sub-tabs {
left: 0px;
list-style: none;
position: absolute;
top: 57px;
display: block;
}
.header-navi-main .sub-tab {
background-color: #9BC4CE;
border-bottom: 1px solid #76A0AA;
border-top: 1px solid #B4D9E2;
margin-left: 0px;
}
.header-navi-main .sub-tab a {
min-width: 98px;
padding: 0 16px;
line-height: 42px;
font-size: 14px;
}
.header-navi-main .sub-tab:hover {
background-color: #76A0AA;
}
/* article list */
.article-header {
color: #9F9F9F;
float: left;
font-size: 12px;
padding-top: 15px;
/* width: 180px; */
display:inline-block;
}
.article-header ul {
background-color: #333333;
list-style: none;
width: 160px;
}
.article-header ul li {
background: url("../images/indentline.png") repeat-x scroll left bottom transparent;
font-weight: bold;
padding: 7px 15px 8px;
margin-left: 0px;
}
.article-header ul li a {
color: #FFFFFF;
display: block;
}
.article-main {
background-color: #FFFFFF;
border-bottom: 1px solid #E3E3E3;
border-right: 1px solid #E3E3E3;
margin-right:20px;
padding: 20px 20px 0;
/* width: 499px; */
/* float: left; */
overflow: hidden;
display:inline-block;
}
.article-main-right {
background-color: #FFFFFF;
border-bottom: 1px solid #E3E3E3;
border-left: 1px solid #E3E3E3;
border-right:none;
margin-right:20px;
padding: 20px 20px 0;
/* width: 499px; */
/* float: left; */
overflow: hidden;
display:inline-block;
}
.article-body {
line-height: 145%;
}
.article-body a {
color: #075181;
}
.article-body a:hover {
color: #68ADD5;
}
.article-main h2.title {
font: bold 30px Arial,Helvetica,sans-serif;
margin: 0 0 20px;
}
.article-main h2.title sup {
font-size: 12px;
}
.read-more a {
background-color:#F2F2F2;
color: #333333;
font-size: 12px;
padding: 8px 18px 8px 12px;
margin: 20px 0;
float: left;
}
.article-footer {
width: 200px;
float: left;
}
.article-footer h3 {
background: url("../images/indentline-light.png") repeat-x scroll left bottom transparent;
font-size: 17px;
padding: 25px 0 10px;
}
.article-footer ul {
list-style: none;
}
.article-footer li {
margin-left: 0px;
border-bottom: 1px solid #E0E0E0;
padding: 8px 5px;
}
.article-footer a {
color: #888888;
margin-bottom: 2px;
display: block;
}
.pagination {
background-color: #FFFFFF;
border-right: 1px solid #E3E3E3;
border-bottom: 1px solid #E3E3E3;
margin: 0 0 20px 0px;
text-align: center;
padding: 12px 20px;
}
.pagination a {
color: #555555;
padding: 0 3px;
text-decoration: none;
}
.pagination a.selected {
font-weight: bold;
}
.pagination a:hover, .pagination a.selected {
text-decoration: underline;
}
/* article detail */
.article-detail-body {
width: 716px;
margin-right: 0px;
}
.article-detail-body .tags, #replyForm {
margin: 20px 0;
}
.article-detail-footer {
background-color: #FFFFFF;
border-bottom: 1px solid #E3E3E3;
border-right: 1px solid #E3E3E3;
margin: 40px 0 40px 181px;
padding:20px;
width: 716px;
}
.article-detail-footer>a{
font-weight: bold;
}
.article-relative {
margin-top: 20px;
width: 360px;
}
.article-relative h4 {
font-size: 14px;
line-height: 25px;
}
.article-relative a {
color: #555555;
line-height: 145%;
}
#comments {
background: url("../images/indentline-light.png") repeat-x scroll left top transparent;
padding-top: 30px;
position: relative;
}
#comments>div{
margin-top: 10px;
}
#comments>div>img {
height: 80px;
width: 80px;
margin: 1px 10px 10px 0;
}
#comments .comment-panel {
background: none repeat scroll 0 0 #FFFFFF;
border-bottom: 1px solid #E3E3E3;
border-right: 1px solid #E3E3E3;
padding: 20px;
width: 798px;
margin-bottom: 10px;
word-wrap:break-word;
overflow: hidden;
}
#comments .comment-top {
margin-bottom: 10px;
}
#comments .comment-panel .reply {
margin-top: 20px;
}
#comments .comment-panel .reply a {
border-radius:5px;
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.3) inset, 0 0 2px rgba(255, 255, 255, 0.3) inset, 0 1px 2px rgba(0, 0, 0, 0.29);
background-color: #EEEEEE;
border: 1px solid #888888;
color: #555555;
padding: 2px 10px;
}
#comments .comment-panel .reply a:hover {
background-color: #E6E6E6;
text-decoration: none;
}
.comment-body-ref {
position: absolute;
border: 1px solid #E3E3E3;
background-color: #FFFFFF;
padding: 10px 0 0 10px;
left: 177px;
opacity: 0.9;
}
#comments .comment-body-ref .comment-panel{
border-width: 0px;
margin-bottom: 0;
width: 620px;
padding: 10px;
}
.comment-title {
color: #333333;
font-size: 30px;
margin: 20px 0 15px 0;
font-family: \5fae\8f6f\96c5\9ed1;
}
.comment {
margin-bottom: 40px;
}
.comment th {
padding: 10px 0px 10px 0;
text-align: left;
}
.comment input[type="text"], .comment textarea {
outline: none;
color: #666666;
padding: 10px 7px;
background-color: #FFFFFF;
font-family: Arial,Helvetica,sans-serif;
width: 723px;
border: 1px solid #DDDDDD;
font-size: 12px;
height: 16px;
line-height: 16px;
}
.comment textarea {
margin: 10px 0;
padding: 7px;
height: auto;
}
.comment #captchaReply {
margin-left: 10px;
}
#commentValidate, #commentValidateReply {
width: 240px;
}
.em00, .em01, .em02, .em03, .em04, .em05, .em06, .em07, .em08, .em09, .em10, .em11, .em12, .em13, .em14 {
background-image: url("../../community/images/emotions/emotions-black.png");
margin: 0 12px;
}
/* header notice */
.header-notice {
background: url("../images/indentline-light.png") repeat-x scroll left top #DEDEDE;
padding: 40px 0;
}
.header-cnt{
border:5px dashed blue;
}
.notice-cnt{
padding:15px;
font-size:24px;
}
.header-notice h4 {
background-color: #333333;
color: #FFFFFF;
float: left;
font-size: 17px;
font-weight: bold;
height: 37px;
line-height: 37px;
padding-left: 15px;
width: 145px;
}
/* footer secondary */
.footer-secondary {
background: url("../images/indentline-light.png") repeat-x scroll left top #DEDEDE;
padding: 40px 0;
}
.footer-secondary h4, .article-date, .comment th span.comment-label {
background-color: #333333;
color: #FFFFFF;
float: left;
font-size: 17px;
font-weight: bold;
height: 37px;
line-height: 37px;
padding-left: 15px;
width: 145px;
}
.most-view-count-articles, .recent-comments, .notice {
float: left;
width: 700px;
margin-left: 65px;
word-break:break-all;
word-wrap:break-word;
}
.most-view-count-articles a {
font: 18px 微软雅黑;
margin-right: 20px;
font-weight: bold;
}
.most-view-count-articles sup {
font-size: 12px;
color: #555555;
font-weight: normal;
margin-right: 3px;
}
.recent-comments div {
float: left;
margin: 0 25px 10px 0px;
text-align: center;
width: 91px;
}
.recent-comments div a {
display: block;
line-height: 22px;
}
.recent-comments img, #comments>div>img {
background-color: #FFFFFF;
border-bottom: 1px solid #C2C2C2;
border-right: 1px solid #C2C2C2;
padding: 8px 7px 7px 8px;
width: 75px;
height: 75px;
}
.recent-comments img:hover, #comments>div>img:hover {
border-color: #5A5A5A;
}
/* footer widgets */
.footer-widgets {
background: url("../images/indentline-light.png") repeat-x scroll left top transparent;
padding: 40px 0;
}
.footer-block {
margin-right: 20px;
width: 220px;
}
.footer-block h4{
font: bold 18px 微软雅黑;
color: #000000;
height: 25px;
padding: 0 0 15px;
background: url("../images/indentline.png") repeat-x scroll left bottom transparent;
}
.footer-block ul {
list-style: none;
}
.footer-block li {
margin-left: 0px;
height: 30px;
padding-left: 10px;
background: url("../images/indentline-light.png") repeat-x scroll left bottom transparent;
}
.footer-block li.mostUsedTags a{
padding-left: 20px;
}
.footer-block li img{
cursor: pointer;
height: 16px;
left: 0px;
position: relative;
top: -20px;
width: 16px;
}
.footer-block li a {
color: #555555;
display: block;
height: 19px;
line-height: 19px;
overflow: hidden;
padding: 6px 0 1px 0px;
}
.footer-block li sup {
float: left;
margin: 5px 3px 0 0;
}
.footer-block li:hover {
background: url("../images/icon.png") repeat-x 0px -34px;
}
/* footer copyright */
.footer {
background: url("../images/indentline-light.png") repeat-x scroll left top #DEDEDE;
text-align: left;
}
.footer .content {
line-height: 22px;
}
.footer a {
color: #000000;
}
.footer .goTop {
background: url("../images/icon.png") no-repeat -12px -64px;
cursor: pointer;
padding-left: 15px;
height: 17px;
line-height: 17px;
}
/* error */
.error-msg {
color: #333333;
font-weight: bold;
}
.error-footer {
bottom: 0;
position: fixed;
width: 100%;
}
.error-panel {
background-color: #FFFFFF;
border-bottom: 1px solid #E3E3E3;
border-right: 1px solid #E3E3E3;
margin-bottom: 50px;
padding: 20px;
}
.error-panel h2 {
font: bold 30px/24px;
margin: 0 0 20px;
}
/* icon */
.read-more-icon, .arrow-dowm-icon, .tag-icon, .atom-icon, .up-icon, .down-icon {
background-image: url("../images/icon.png");
background-repeat: no-repeat;
float: left;
}
.read-more-icon {
background-position: 0 -22px;
height: 12px;
margin: 2px 0 0 6px;
width: 12px;
}
.arrow-dowm-icon {
background-position: -13px -22px;
height: 13px;
margin: 8px 0 0 6px;
width: 13px;
cursor: pointer;
}
.tag-icon {
background-position: 0px -102px;
margin-right: 6px;
height: 16px;
width: 16px;
}
.atom-icon {
height: 22px;
margin-left: 6px;
width: 22px;
}
.up-icon {
background-position: -11px -118px;
height: 12px;
margin: 6px 0 0 10px;
width: 11px;
cursor: pointer;
}
.down-icon {
background-position: 0 -118px;
height: 12px;
margin: 6px 0 0 10px;
width: 11px;
cursor: pointer;
}
.star-current-icon, .star-icon, .moon-icon, .moon-current-icon {
height: 58px;
width: 64px;
background-image: url("../images/author-header.png");
float: right;
white-space:normal;
text-align: center;
word-break:break-all;
padding-top: 6px;
word-wrap:break-word;
font-weight: bold;
}
.star-current-icon {
background-position: 0px -64px;
}
a.star-current-icon {
color: #333333;
}
.star-icon {
background-position: 0 -192px;
}
a.star-icon {
color: orange;
}
.moon-icon {
float: right;
margin-top: 4px;
}
.moon-current-icon {
float: right;
background-position: 0 -128px;
margin: 1px 0 3px 0;
}
#tagsPanel a.tagPanel:hover {
border: 1px dashed;
}
#tagsPanel a.tagPanel {
border: 1px solid;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
margin: 3px;
cursor: pointer;
float: left;
}

View File

@ -0,0 +1,112 @@
<div class="content paddingTop12 paddingBottom12">
<div class="left">
<div>
<span style="color: gray;">&copy; ${year}</span> - <a href="${servePath}">${blogTitle}</a>
</div>
Powered by
<a href="http://b3log.org" target="_blank" class="logo">
${b3logLabel}&nbsp;
<span style="color: orangered; font-weight: bold;">Solo</span></a>,
ver ${version}&nbsp;&nbsp;
Theme by <a rel="friend" href="http://blog.sweelia.com" target="_blank">Armstrong@sweelia.com</a> & <a rel="friend" href="http://vanessa.b3log.org" target="_blank">Vanessa</a> & <a rel="friend" href="http://demo.woothemes.com/skeptical/" target="_blank">Skeptical</a>.
</div>
<div class="right nowrap">
<div class="goTop right" onclick="Util.goTop();">${goTopLabel}</div>
<br/>
<div class="right">
${viewCount1Label}
<span class='error-msg'>
${statistic.statisticBlogViewCount}
</span>
&nbsp;&nbsp;
${articleCount1Label}
<span class='error-msg'>
${statistic.statisticPublishedBlogArticleCount}
</span>
&nbsp;&nbsp;
${commentCount1Label}
<span class='error-msg'>
${statistic.statisticPublishedBlogCommentCount}
</span>
</div>
</div>
<div class="clear"></div>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.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">
var latkeConfig = {
"servePath": "${servePath}",
"staticServePath": "${staticServePath}"
};
var Label = {
"clearAllCacheLabel": "${clearAllCacheLabel}",
"clearCacheLabel": "${clearCacheLabel}",
"adminLabel": "${adminLabel}",
"logoutLabel": "${logoutLabel}",
"skinDirName": "${skinDirName}",
"loginLabel": "${loginLabel}",
"loginLabel": "${loginLabel}",
"em00Label": "${em00Label}",
"em01Label": "${em01Label}",
"em02Label": "${em02Label}",
"em03Label": "${em03Label}",
"em04Label": "${em04Label}",
"em05Label": "${em05Label}",
"em06Label": "${em06Label}",
"em07Label": "${em07Label}",
"em08Label": "${em08Label}",
"em09Label": "${em09Label}",
"em10Label": "${em10Label}",
"em11Label": "${em11Label}",
"em12Label": "${em12Label}",
"em13Label": "${em13Label}",
"em14Label": "${em14Label}"
},
maxLength = parseInt("${mostCommentArticles?size}");
$(document).ready(function () {
// article header: user list.
var isAuthorArticle = false;
$(".header-user a").each(function () {
var it = this;
if (window.location.pathname === it.pathname) {
it.className = "star-current-icon";
isAuthorArticle = true;
}
});
if (isAuthorArticle) {
$(".moon-current-icon").removeClass().addClass("moon-icon");
}
Util.init();
$(".footer-block").each(function (num) {
var $lis = $(this).find("li");
if ($lis.length > maxLength) {
for (var i = maxLength; i < $lis.length; i++) {
$lis.get(i).style.display = "none";
}
$(this).find("h4").append("<span class='down-icon' onmouseover=\"showFooterBlock(this, " + num + ");\"></span>");
}
});
});
var showFooterBlock = function (it, num) {
var $li = $($(".footer-block").get(num)).find("li");
for (var i = maxLength; i < $li.length; i++) {
if (it.className === "down-icon") {
$($li.get(i)).slideDown("normal");
} else {
$($li.get(i)).slideUp("normal");
}
}
if (it.className === "down-icon") {
it.className = "up-icon";
} else {
it.className = "down-icon";
}
}
</script>
${plugins}

View File

@ -0,0 +1,59 @@
<#if 1 != users?size>
<div class="header-user">
<div class="content">
<div class="moon-current-icon"></div>
<#list users as user>
<a class="star-icon" href="${servePath}/authors/${user.oId}">
${user.userName}
</a>
</#list>
<div class="clear"></div>
</div>
</div>
</#if>
<div class="header-navi">
<div class="header-navi-main content">
<div class="left">
<a rel="nofollow" href="${servePath}" class="header-title">
${blogTitle}
</a>
<span class="sub-title">${blogSubtitle}</span>
</div>
<div class="right">
<ul class="tabs">
<li class="tab">
<a href="${servePath}">${homeLabel}</a>
</li>
<li class="tab">
<a href="${servePath}/tags.html">${allTagsLabel}</a>
</li>
<#if 0 != pageNavigations?size>
<li class="tab" id="header-pages">
<a href="${servePath}">
<span class="left">
${pageLabel}
</span>
<span class="arrow-dowm-icon"></span>
<span class="clear"></span>
</a>
<ul class="sub-tabs none">
<#list pageNavigations as page>
<li class="sub-tab">
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}">${page.pageTitle}</a>
</li>
</#list>
</ul>
</li>
</#if>
<li class="tab">
<a rel="alternate" href="${servePath}/blog-articles-feed.do">
<span class="left">${atomLabel}</span>
<span class="atom-icon"></span>
<span class="clear"></span>
</a>
</li>
</ul>
</div>
<div class="clear"></div>
</div>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

View File

@ -0,0 +1,28 @@
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div>
<#include "notice.ftl">
</div>
<div class="content">
<#include "article-list.ftl">
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
</body>
</html>

View File

@ -0,0 +1,7 @@
function getIcon(email){
return "http://secure.gravatar.com/avatar/" + hex_md5(trim(email.toLowerCase())) +"?s=160&r=G";
}
function trim(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
}

379
community-bubbles/js/md5.js Normal file
View File

@ -0,0 +1,379 @@
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/*
* Configurable variables. You may need to tweak these to be compatible with
* the server-side, but the defaults work in most cases.
*/
var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
/*
* These are the functions you'll usually want to call
* They take string arguments and return either hex or base-64 encoded strings
*/
function hex_md5(s) { return rstr2hex(rstr_md5(str2rstr_utf8(s))); }
function b64_md5(s) { return rstr2b64(rstr_md5(str2rstr_utf8(s))); }
function any_md5(s, e) { return rstr2any(rstr_md5(str2rstr_utf8(s)), e); }
function hex_hmac_md5(k, d)
{ return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
function b64_hmac_md5(k, d)
{ return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d))); }
function any_hmac_md5(k, d, e)
{ return rstr2any(rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d)), e); }
/*
* Perform a simple self-test to see if the VM is working
*/
function md5_vm_test()
{
return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72";
}
/*
* Calculate the MD5 of a raw string
*/
function rstr_md5(s)
{
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
}
/*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstr_hmac_md5(key, data)
{
var bkey = rstr2binl(key);
if(bkey.length > 16) bkey = binl_md5(bkey, key.length * 8);
var ipad = Array(16), opad = Array(16);
for(var i = 0; i < 16; i++)
{
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
}
/*
* Convert a raw string to a hex string
*/
function rstr2hex(input)
{
try { hexcase } catch(e) { hexcase=0; }
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var output = "";
var x;
for(var i = 0; i < input.length; i++)
{
x = input.charCodeAt(i);
output += hex_tab.charAt((x >>> 4) & 0x0F)
+ hex_tab.charAt( x & 0x0F);
}
return output;
}
/*
* Convert a raw string to a base-64 string
*/
function rstr2b64(input)
{
try { b64pad } catch(e) { b64pad=''; }
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var output = "";
var len = input.length;
for(var i = 0; i < len; i += 3)
{
var triplet = (input.charCodeAt(i) << 16)
| (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
| (i + 2 < len ? input.charCodeAt(i+2) : 0);
for(var j = 0; j < 4; j++)
{
if(i * 8 + j * 6 > input.length * 8) output += b64pad;
else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
}
}
return output;
}
/*
* Convert a raw string to an arbitrary string encoding
*/
function rstr2any(input, encoding)
{
var divisor = encoding.length;
var i, j, q, x, quotient;
/* Convert to an array of 16-bit big-endian values, forming the dividend */
var dividend = Array(Math.ceil(input.length / 2));
for(i = 0; i < dividend.length; i++)
{
dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
}
/*
* Repeatedly perform a long division. The binary array forms the dividend,
* the length of the encoding is the divisor. Once computed, the quotient
* forms the dividend for the next step. All remainders are stored for later
* use.
*/
var full_length = Math.ceil(input.length * 8 /
(Math.log(encoding.length) / Math.log(2)));
var remainders = Array(full_length);
for(j = 0; j < full_length; j++)
{
quotient = Array();
x = 0;
for(i = 0; i < dividend.length; i++)
{
x = (x << 16) + dividend[i];
q = Math.floor(x / divisor);
x -= q * divisor;
if(quotient.length > 0 || q > 0)
quotient[quotient.length] = q;
}
remainders[j] = x;
dividend = quotient;
}
/* Convert the remainders to the output string */
var output = "";
for(i = remainders.length - 1; i >= 0; i--)
output += encoding.charAt(remainders[i]);
return output;
}
/*
* Encode a string as utf-8.
* For efficiency, this assumes the input is valid utf-16.
*/
function str2rstr_utf8(input)
{
var output = "";
var i = -1;
var x, y;
while(++i < input.length)
{
/* Decode utf-16 surrogate pairs */
x = input.charCodeAt(i);
y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
{
x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
i++;
}
/* Encode output as utf-8 */
if(x <= 0x7F)
output += String.fromCharCode(x);
else if(x <= 0x7FF)
output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
0x80 | ( x & 0x3F));
else if(x <= 0xFFFF)
output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
0x80 | ((x >>> 6 ) & 0x3F),
0x80 | ( x & 0x3F));
else if(x <= 0x1FFFFF)
output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
0x80 | ((x >>> 12) & 0x3F),
0x80 | ((x >>> 6 ) & 0x3F),
0x80 | ( x & 0x3F));
}
return output;
}
/*
* Encode a string as utf-16
*/
function str2rstr_utf16le(input)
{
var output = "";
for(var i = 0; i < input.length; i++)
output += String.fromCharCode( input.charCodeAt(i) & 0xFF,
(input.charCodeAt(i) >>> 8) & 0xFF);
return output;
}
function str2rstr_utf16be(input)
{
var output = "";
for(var i = 0; i < input.length; i++)
output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
input.charCodeAt(i) & 0xFF);
return output;
}
/*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input)
{
var output = Array(input.length >> 2);
for(var i = 0; i < output.length; i++)
output[i] = 0;
for(var i = 0; i < input.length * 8; i += 8)
output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (i%32);
return output;
}
/*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input)
{
var output = "";
for(var i = 0; i < input.length * 32; i += 8)
output += String.fromCharCode((input[i>>5] >>> (i % 32)) & 0xFF);
return output;
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binl_md5(x, len)
{
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for(var i = 0; i < x.length; i += 16)
{
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t)
{
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y)
{
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt)
{
return (num << cnt) | (num >>> (32 - cnt));
}

View File

@ -0,0 +1,293 @@
#
# Copyright (c) 2009, 2010, 2011, B3log Team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Description: B3log Solo language configurations(en_US).
# Version: 2.0.5.7, Sep 5, 2011
# Author: Liang Ding
#
adminConsoleLabel=Admin
adminIndexLabel=Admin Index
postArticleLabel=Post
articleListLabel=Articles
commentListLabel=Comments
draftListLabel=Drafts
userManageLabel=Users
commonUserLabel=Common User
addUserLabel=Add User
updateUserLabel=Update User
linkManagementLabel=Links
pluginMgmtLabel=Plugins
pluginNameLabel=Name
versionLabel=Version
statusLabel=Status
enabledLabel=Enabled
disabledLabel=Disabled
enableLabel=Enable
disableLabel=Disable
preferenceLabel=Preference
localeString1Label=Language:
timeZoneId1Label=Time Zone:
adminLabel=Admin
administratorLabel=Administrator
loginLabel=Login
logoutLabel=Logout
initLabel=Initial
popTagsLabel=Popular Tags
tag1Label=Tag:
tags1Label=Tags:
recentArticlesLabel=Recent Articles
recentCommentsLabel=Recent Comments
postCommentsLabel=Post Comment
mostCommentArticlesLabel=Most Comment Articles
mostViewCountArticlesLabel=Most View Articles
em00Label=Smile
em01Label=Laughter
em02Label=Happy
em03Label=Sad
em04Label=Cry
em05Label=No Comments
em06Label=Fidget
em07Label=Angry
em08Label=Look Around
em09Label=Surprise
em10Label=Cool
em11Label=Cheeky
em12Label=Heart
em13Label=Heart Broken
em14Label=Devil
linkLabel=Friend Links
sumLabel=
pageLabel=Page
commentLabel=Comment
linkTitleLabel=Link Title
linkTitle1Label=Title:
updateLabel=Update
removeLabel=Remove
putTopLabel=Put Top
cancelPutTopLabel=Cancel Put Top
downloadCountLabel=Count
sizeLabel=Size
uploadDateLabel=Upload Date
downloadURLLabel=Download URL
downloadLabel=Download
createDateLabel=Create Date
updateDateLabel=Update Date
titleLabel=Title
title1Label=Title:
content1Label=Content:
abstract1Label=Summary:
publishLabel=Publish
unPublishLabel=Un Publish
urlLabel=URL
url1Label=URL (start protocol, e.g.: http://):
addLinkLabel=Add Link
updateLinkLabel=Update Link
archiveLabel=Archive
archive1Label=archive:
yearLabel=
monthLabel=
blogSyncLabel=Blog Sync
pageLabel=Page
pageMgmtLabel=Pages
othersLabel=Others
fileListLabel=Files
submitUploadLabel=Upload
fileNameLabel=File Name
paramSettingsLabel=Parameters
skinLabel=Skins
signLabel=Signs
sign1Label=Signs:
noSignLabel=No Signs
signIsNullLabel=This Sign is Null
statisticLabel=Blog Statistic
viewLabel=View
countLabel=Posts
viewCount1Label=View Count:
articleCount1Label=Article Count:
commentCountLabel=Comment Count
commentCount1Label=Comment Count:
commentEmotions1Label=Emotions:
commentEmotionsLabel=Emotions
commentName1Label=Name:
commentNameLabel=Name
commentEmail1Label=Email:
commentEmailLabel=Email
commentURL1Label=URL:
commentURLLabel=URL
commentContent1Label=Content:
commentContentLabel=Content
getDateLabel=Get Date
getArticleLabel=Get Article
selectDateLabel=Select Date
selectDate1Label=Select Date:
importLabel=Import
chooseBlog1Label=Choose Blog:
blogArticleImportLabel=Article Import
blogSyncMgmtLabel=Blog Sync Management
syncMgmtLabel=Sync manage Blog
userName1Label=Username:
userPassword1Label=Password:
syncPostLabel=Sync Post
syncUpdateLabel=Sync Update
syncRemoveLabel=Sync Remove
categoryLabel=Category
noticeBoard1Label=Notice Board:
noticeBoardLabel=Notice Board
htmlhead1Label=HTML head:
indexTagDisplayCnt1Label=Index Tag Display Count:
indexRecentArticleDisplayCnt1Label=Recent Article Display Count:
indexRecentCommentDisplayCnt1Label=Recent Comment Display Count:
indexMostCommentArticleDisplayCnt1Label=Most Comment Article Display Count:
indexMostViewArticleDisplayCnt1Label=Most View Article Display Count:
relevantArticlesDisplayCnt1Label=Relevant Article Display Count:
randomArticlesDisplayCnt1Label=Random Article Display Count:
externalRelevantArticlesDisplayCnt1Label=External Relevant Article Display Count:
windowSize1Label=Pagination Window Size:
pageSize1Label=Pagination Page Size:
blogTitle1Label=Blog Title:
blogSubtitle1Label=Blog Subtitle:
blogHost1Label=Blog Host:
submmitCommentLabel=Commit Comment
saveLabel=Save
tagLabel=Tag
tagsLabel=Tags
importedLabel=Imported
captcha1Label=Captcha:
captchaLabel=Captcha
clearAllCacheLabel=Clear all cache
clearCacheLabel=Clear cache
indexLabel=Index
nextArticle1Label=Next:
previousArticle1Label=Previous:
updatedLabel=Updated!
topArticleLabel=Top!
CSDNBlogLabel=CSDN Blog
BlogJavaLabel=BlogJava
CnBlogsLabel=CnBlogs
previousPageLabel=Previous Page
nextPagePabel=Next Page
firstPageLabel=First Page
lastPageLabel=Last Page
returnTo1Label=Return to:
tencentLabel=Tencent
appKey1Label=App Key:
appSecret1Label=App Secret:
postToTencentMicroblogWhilePublishArticleLabel=Post to Tencent microblog while publish an article:
postToCommunityLabel=Post to Community:
authorizeTencentMicroblog1Label=Click to authorize:
googleLabel=Google
OAuthConsumerSecret1Label=OAuth Consumer Secret:
atomLabel=Atom
relevantArticles1Label=Relevant Articles:
randomArticles1Label=Random Articles:
externalRelevantArticles1Label=External Relevant Articles:
metaKeywords1Label=Meta Keywords:
metaDescription1Label=Meta Description:
removeUnusedTagsLabel=Remove Unused Tags
goTopLabel=Top
permalink1Label=Permalink:
permalinkLabel=Permalink
welcomeToSoloLabel=Welcome to B3log Solo!
b3logLabel=<span style="color: orange;">B</span><span style="color: blue;"><sup>3</sup></span><span style="color: green;">L</span><span style="color: red;">O</span><span style="color: blue;">G</span>
killBrowserLabel=<h2>Let's kill outdated and insecure browser!</h2><p>Let's kill outdated and insecure browser for browser evolution, human progress and better experience.</p><p>You can download</p><ul><li><a href="http://www.mozilla.com/" target="_blank">Firefox</a></li><li><a href="http://www.google.com/chrome" target="_blank">Chrome</a></li><li><a href="http://windows.microsoft.com/en-US/internet-explorer/downloads/ie" target="_blank">IE8 / IE9</a></li><li><a href="http://www.maxthon.com/" target="_blank">Maxthon</a> and <a href="http://www.google.com" target="_blank">so on</a>.</li></ul>
readmoreLabel=Read more\u00bb
readmore2Label=Read more
replyLabel=Reply\u00bb
homeLabel=Home
enableArticleUpdateHint1Label=Enable Article Update Hint:
allowVisitDraftViaPermalink1Label=Allow Visit Draft Via Link:
author1Label=Author:
authorLabel=Author
keyOfSolo1Label=Solo Key:
articleLabel=Article
tagArticlesLabel=Tag Articles
dateArticlesLabel=Archive Date Articles
authorArticlesLabel=Author Articles
indexArticleLabel=Index Articles
allTagsLabel=Tag Cloud
customizedPageLabel=Customized Page
killBrowserPageLabel=Kill Browser Page
pageNumLabel=Page Number
####
forbiddenLabel=Forbidden Access!
sorryLabel=Sorry!
notFoundLabel=Not Found!
unPulbishSuccLabel=Un Publish Successfully
unPulbishFailLabel=Un Publish Fail
removeSuccLabel=Remove Successfully
removeFailLabel=Remove Fail
removeUserFailSkinNeedMulUsersLabel=Remove Fail, the current skin need multiple users!
putTopSuccLabel=Put Top Successfully
putTopFailLabel=Put Top Fail
cancelTopSuccLabel=Cancel Top Successfully
cancelTopFailLabel=Cancel Top Fail
addSuccLabel=Add Successfully
addFailLabel=Add Fail
updateSuccLabel=Update Successfully
updateFailLabel=Update Fail
updatePreferenceFailLabel=Update Fail, please check <b>Blog Host</b> configuration!
updatePreferenceFailNeedMulUsersLabel=Update Fail, the selected skin need multiple users!
setFailLabel=Set Fail
setSuccLabel=Set Successfully
getFailLabel=Get Fail
noSettingLabel=No Setting
getSuccLabel=Get Successfully
importSuccLabel=Import Successfully :-)
importFailLabel=Some Import Fail %>_<%
noCommentLabel=No Comment
captchaErrorLabel=Captcha Error
inputErrorLabel=Input Error!
gotoLabel=Go
nameEmptyLabel=Username is empty
passwordEmptyLabel=Password is empty
blogEmptyLabel=Blogging service is empty
blogArticleEmptyLabel=Please select articles
nameTooLongLabel=Sorry, your username must be between 2 and 20 characters long.
mailCannotEmptyLabel=Mail is empty
mailInvalidLabel=Mail is invalid
commentContentCannotEmptyLabel=Sorry, your content must be between 2 and 500 characters long.
captchaCannotEmptyLabel=Captcha is empty
loadingLabel=Loading....
titleEmptyLabel=Title is empty
contentEmptyLabel=Content is empty
orderEmptyLabel=Order is empty
abstractEmptyLabel=Abstract is empty
tagsEmptyLabel=Tags is empty
addressEmptyLabel=Address is empty
noAuthorizationURLLabel=Can not retrieve authorization URL from Google, please \
make sure the <em>Consumer Secret</em> you typed in and then try again.
exceedMaxUploadSizeLabel=Size exceed 1M :-(
uploadFailLabel=Upload Fail!
fileEmptyLabel=File is empty
duplicatedPermalinkLabel=Duplicated permalink!
invalidPermalinkFormatLabel=Invalid permalink format!
duplicatedEmailLabel=Duplicated email!
canntBeLocalhostOnProductionLabel=Can not set host as localhost on production!
refreshAndRetryLabel=Please refresh and try again!
noDataLable=NO Data
editorLeaveLabel=Content is not null, Do you leave\uff1f
editorPostLabel=Content is not null, Do you clear\uff1f
####
confirmRemoveLabel=Are You Sure?
confirmInitLabel=Are You Sure?
####
articleRightLabel=Articles on this site are copyright.
articleWelcomeCopyLabel=Please feel free to copy.
articleCopyNoteLabel=Please include the noteCopy from
articleTitleLabel=Title:
articleLinkLabel=Source:

View File

@ -0,0 +1,293 @@
#
# Copyright (c) 2009, 2010, 2011, B3log Team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Description: B3log Solo default language configurations(zh_CN).
# Version: 2.0.6.2, Sep 5, 2011
# Author: Liang Ding
#
adminConsoleLabel=\u540e\u53f0\u7ba1\u7406
adminIndexLabel=\u540e\u53f0\u9996\u9875
postArticleLabel=\u53d1\u5e03\u6587\u7ae0
articleListLabel=\u6587\u7ae0\u7ba1\u7406
commentListLabel=\u8bc4\u8bba\u7ba1\u7406
draftListLabel=\u8349\u7a3f\u5939
userManageLabel=\u7528\u6237\u7ba1\u7406
commonUserLabel=\u4e00\u822c\u7528\u6237
addUserLabel=\u6dfb\u52a0\u7528\u6237
updateUserLabel=\u66f4\u65b0\u7528\u6237
linkManagementLabel=\u94fe\u63a5\u7ba1\u7406
pluginMgmtLabel=\u63d2\u4ef6\u7ba1\u7406
pluginNameLabel=\u63d2\u4ef6\u540d
versionLabel=\u7248\u672c
statusLabel=\u72b6\u6001
enabledLabel=\u5df2\u542f\u7528
disabledLabel=\u5df2\u7981\u7528
enableLabel=\u542f\u7528
disableLabel=\u7981\u7528
preferenceLabel=\u504f\u597d\u8bbe\u5b9a
localeString1Label=\u8bed\u8a00\uff1a
timeZoneId1Label=\u65f6\u533a\uff1a
adminLabel=\u7ba1\u7406
administratorLabel=\u7ba1\u7406\u5458
loginLabel=\u767b\u5f55
logoutLabel=\u767b\u51fa
initLabel=\u521d\u59cb\u5316
popTagsLabel=\u5206\u7c7b\u6807\u7b7e
tag1Label=\u6807\u7b7e\uff1a
tags1Label=\u6807\u7b7e\uff1a
recentArticlesLabel=\u6700\u65b0\u6587\u7ae0
recentCommentsLabel=\u6700\u65b0\u8bc4\u8bba
postCommentsLabel=\u53d1\u8868\u8bc4\u8bba
mostCommentArticlesLabel=\u8bc4\u8bba\u6700\u591a\u7684\u6587\u7ae0
mostViewCountArticlesLabel=\u8bbf\u95ee\u6700\u591a\u7684\u6587\u7ae0
em00Label=\u5fae\u7b11
em01Label=\u5927\u7b11
em02Label=\u9ad8\u5174
em03Label=\u60b2\u4f24
em04Label=\u54ed\u6ce3
em05Label=\u65e0\u8bed
em06Label=\u70e6\u8e81
em07Label=\u751f\u6c14
em08Label=\u6211\u7785
em09Label=\u60ca\u8bb6
em10Label=\u9177
em11Label=\u987d\u76ae
em12Label=\u7231\u5fc3
em13Label=\u5fc3\u788e
em14Label=\u9b54\u9b3c
linkLabel=\u53cb\u60c5\u94fe\u63a5
sumLabel=\u5171
pageLabel=\u9875
commentLabel=\u8bc4\u8bba
linkTitleLabel=\u94fe\u63a5\u6807\u9898
linkTitle1Label=\u6807\u9898\uff1a
updateLabel=\u66f4\u65b0
removeLabel=\u5220\u9664
putTopLabel=\u7f6e\u9876
cancelPutTopLabel=\u53d6\u6d88\u7f6e\u9876
downloadCountLabel=\u4e0b\u8f7d\u6b21\u6570
sizeLabel=\u5927\u5c0f
uploadDateLabel=\u4e0a\u4f20\u65e5\u671f
downloadURLLabel=\u4e0b\u8f7d\u5730\u5740
downloadLabel=\u4e0b\u8f7d
createDateLabel=\u521b\u5efa\u65e5\u671f
updateDateLabel=\u66f4\u65b0\u65e5\u671f
titleLabel=\u6807\u9898
title1Label=\u6807\u9898\uff1a
content1Label=\u6b63\u6587\uff1a
abstract1Label=\u6458\u8981\uff1a
publishLabel=\u53d1\u5e03
unPublishLabel=\u53d6\u6d88\u53d1\u5e03
urlLabel=URL
url1Label=URL (\u8bf7\u4ee5\u534f\u8bae\u5f00\u5934\uff0c\u5982: http://)\uff1a
addLinkLabel=\u6dfb\u52a0\u94fe\u63a5
updateLinkLabel=\u66f4\u65b0\u94fe\u63a5
archiveLabel=\u5b58\u6863
archive1Label=\u5b58\u6863\uff1a
yearLabel=\u5e74
monthLabel=\u6708
blogSyncLabel=\u535a\u5ba2\u540c\u6b65
pageLabel=\u9875\u9762
pageMgmtLabel=\u9875\u9762\u7ba1\u7406
othersLabel=\u5176\u4ed6
fileListLabel=\u6587\u4ef6\u7ba1\u7406
submitUploadLabel=\u4e0a\u4f20
fileNameLabel=\u6587\u4ef6\u540d
paramSettingsLabel=\u53c2\u6570\u8bbe\u7f6e
skinLabel=\u76ae\u80a4
signLabel=\u7b7e\u540d\u6863
sign1Label=\u7b7e\u540d\u6863\uff1a
noSignLabel=\u4e0d\u4f7f\u7528\u7b7e\u540d\u6863
signIsNullLabel=\u8be5\u7b7e\u540d\u6863\u4e3a\u7a7a
statisticLabel=\u535a\u5ba2\u7edf\u8ba1
viewLabel=\u6d4f\u89c8
countLabel=\u7bc7
viewCount1Label=\u6d4f\u89c8\u6b21\u6570\uff1a
articleCount1Label=\u6587\u7ae0\u603b\u6570\uff1a
commentCountLabel=\u8bc4\u8bba\u6570
commentCount1Label=\u8bc4\u8bba\u603b\u6570\uff1a
commentEmotions1Label=\u8868\u60c5\uff1a
commentEmotionsLabel=\u8868\u60c5
commentName1Label=\u59d3\u540d\uff1a
commentNameLabel=\u59d3\u540d
commentEmail1Label=\u90ae\u7bb1\uff1a
commentEmailLabel=\u90ae\u7bb1
commentURL1Label=URL\uff1a
commentURLLabel=URL
commentContent1Label=\u8bc4\u8bba\u5185\u5bb9\uff1a
commentContentLabel=\u8bc4\u8bba\u5185\u5bb9
getDateLabel=\u83b7\u53d6\u65e5\u671f
getArticleLabel=\u83b7\u53d6\u6587\u7ae0
selectDateLabel=\u9009\u62e9\u65e5\u671f
selectDate1Label=\u9009\u62e9\u65e5\u671f\uff1a
importLabel=\u5bfc\u5165
chooseBlog1Label=\u8bf7\u9009\u62e9\u9700\u8981\u7ba1\u7406\u7684\u535a\u5ba2\uff1a
blogArticleImportLabel=\u6587\u7ae0\u5bfc\u5165
blogSyncMgmtLabel=\u535a\u5ba2\u540c\u6b65\u7ba1\u7406
syncMgmtLabel=\u540c\u6b65\u7ba1\u7406\u535a\u5ba2
userName1Label=\u7528\u6237\u540d\uff1a
userPassword1Label=\u5bc6\u7801\uff1a
syncPostLabel=\u540c\u6b65\u53d1\u5e03
syncUpdateLabel=\u540c\u6b65\u66f4\u65b0
syncRemoveLabel=\u540c\u6b65\u5220\u9664
categoryLabel=\u5206\u7c7b
noticeBoard1Label=\u516c\u544a\uff1a
noticeBoardLabel=\u516c\u544a
htmlhead1Label=HTML head\uff1a
indexTagDisplayCnt1Label= \u9996\u9875\u6807\u7b7e\u663e\u793a\u6570\uff1a
indexRecentArticleDisplayCnt1Label=\u6700\u65b0\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a
indexRecentCommentDisplayCnt1Label=\u6700\u65b0\u8bc4\u8bba\u663e\u793a\u6570\u76ee\uff1a
indexMostCommentArticleDisplayCnt1Label=\u8bc4\u8bba\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a
indexMostViewArticleDisplayCnt1Label=\u8bbf\u95ee\u6700\u591a\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a
relevantArticlesDisplayCnt1Label=\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a
randomArticlesDisplayCnt1Label=\u968f\u673a\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a
externalRelevantArticlesDisplayCnt1Label=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a
windowSize1Label=\u5206\u9875\u9875\u7801\u6700\u5927\u5bbd\u5ea6\uff1a
pageSize1Label=\u5206\u9875\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570\uff1a
blogTitle1Label=\u535a\u5ba2\u6807\u9898\uff1a
blogSubtitle1Label=\u535a\u5ba2\u5b50\u6807\u9898\uff1a
blogHost1Label=\u535a\u5ba2\u5730\u5740\uff1a
submmitCommentLabel=\u63d0\u4ea4\u8bc4\u8bba
saveLabel=\u4fdd\u5b58
tagLabel=\u6807\u7b7e
tagsLabel=\u6807\u7b7e
importedLabel=\u5df2\u5bfc\u5165
captcha1Label=\u9a8c\u8bc1\u7801\uff1a
captchaLabel=\u9a8c\u8bc1\u7801
clearAllCacheLabel=\u6e05\u9664\u6240\u6709\u9875\u9762\u7f13\u5b58
clearCacheLabel=\u6e05\u9664\u672c\u9875\u7f13\u5b58
indexLabel=\u9996\u9875
nextArticle1Label=\u65b0\u4e00\u7bc7\uff1a
previousArticle1Label=\u65e7\u4e00\u7bc7\uff1a
updatedLabel=\u6709\u66f4\u65b0\uff01
topArticleLabel=\u7f6e\u9876\uff01
CSDNBlogLabel=CSDN \u535a\u5ba2
BlogJavaLabel=BlogJava
CnBlogsLabel=\u535a\u5ba2\u56ed
previousPageLabel=\u4e0a\u4e00\u9875
nextPagePabel=\u4e0b\u4e00\u9875
firstPageLabel=\u7b2c\u4e00\u9875
lastPageLabel=\u6700\u540e\u4e00\u9875
returnTo1Label=\u8fd4\u56de\uff1a
tencentLabel=\u817e\u8baf
appKey1Label=App Key:
appSecret1Label=App Secret:
postToTencentMicroblogWhilePublishArticleLabel=\u53d1\u6587\u7ae0\u65f6\u540c\u6b65\u5230\u817e\u8baf\u5fae\u535a\uff1a
postToCommunityLabel=\u53d1\u5e03\u5230\u793e\u533a\uff1a
authorizeTencentMicroblog1Label=\u70b9\u51fb\u56fe\u6807\u8fdb\u884c\u6388\u6743:
googleLabel=Google
OAuthConsumerSecret1Label=OAuth Consumer Secret\uff1a
atomLabel=Atom
relevantArticles1Label=\u76f8\u5173\u9605\u8bfb\uff1a
randomArticles1Label=\u968f\u673a\u9605\u8bfb\uff1a
externalRelevantArticles1Label=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\uff1a
metaKeywords1Label=Meta Keywords:
metaDescription1Label=Meta Description:
removeUnusedTagsLabel=\u79fb\u9664\u672a\u4f7f\u7528\u6807\u7b7e
goTopLabel=\u9876\u90e8
permalink1Label=\u94fe\u63a5\uff1a
permalinkLabel=\u94fe\u63a5
welcomeToSoloLabel=\u6b22\u8fce\u4f7f\u7528 B3log Solo\uff01
b3logLabel=<span style="color: orange;">B</span><span style="color: blue;"><sup>3</sup></span><span style="color: green;">L</span><span style="color: red;">O</span><span style="color: blue;">G</span>
killBrowserLabel=<h2>\u8ba9\u6211\u4eec\u653e\u5f03\u4f7f\u7528\u90a3\u4e9b\u8fc7\u65f6\u3001\u4e0d\u5b89\u5168\u7684\u6d4f\u89c8\u5668\u5427\uff01</h2><p>\u4e3a\u4e86\u8ba9\u6d4f\u89c8\u5668\u66f4\u597d\u7684\u53d1\u5c55\uff0c\u4eba\u7c7b\u66f4\u52a0\u7684\u8fdb\u6b65\uff0c\u62e5\u6709\u66f4\u597d\u7684\u4f53\u9a8c\uff0c\u8ba9\u6211\u4eec\u653e\u5f03\u4f7f\u7528\u90a3\u4e9b\u8fc7\u65f6\u3001\u4e0d\u5b89\u5168\u7684\u6d4f\u89c8\u5668\u3002</p>\u60a8\u53ef\u4ee5\u4e0b\u8f7d<ul><li><a href="http://www.mozilla.com/" target="_blank">\u706b\u72d0</a></li><li><a href="http://www.google.com/chrome" target="_blank">\u8c37\u6b4c\u6d4f\u89c8\u5668</a></li><li><a href="http://windows.microsoft.com/en-US/internet-explorer/downloads/ie" target="_blank">IE8 / IE9</a></li><li><a href="http://www.maxthon.com/" target="_blank">\u9068\u6e38</a>\u6216\u8005<a href="http://www.google.com" target="_blank">\u5176\u5b83\u6d4f\u89c8\u5668</a>.</li></ul>
readmoreLabel=\u9605\u8bfb\u66f4\u591a\u00bb
readmore2Label=\u9605\u8bfb\u66f4\u591a
replyLabel=\u56de\u590d\u00bb
homeLabel=\u9996\u9875
enableArticleUpdateHint1Label=\u542f\u7528\u6587\u7ae0\u66f4\u65b0\u63d0\u793a\uff1a
allowVisitDraftViaPermalink1Label=\u5141\u8bb8\u901a\u8fc7\u94fe\u63a5\u8bbf\u95ee\u8349\u7a3f\uff1a
author1Label=\u4f5c\u8005\uff1a
authorLabel=\u4f5c\u8005
keyOfSolo1Label=Solo Key\uff1a
articleLabel=\u6587\u7ae0
tagArticlesLabel=\u6807\u7b7e\u6587\u7ae0\u5217\u8868
dateArticlesLabel=\u5b58\u6863\u6587\u7ae0\u5217\u8868
authorArticlesLabel=\u4f5c\u8005\u6587\u7ae0\u5217\u8868
indexArticleLabel=\u9996\u9875\u6587\u7ae0\u5217\u8868
allTagsLabel=\u6807\u7b7e\u5899
customizedPageLabel=\u81ea\u5b9a\u4e49\u9875\u9762
killBrowserPageLabel=Kill Browser Page
pageNumLabel=\u9875\u53f7
####
forbiddenLabel=\u64cd\u4f5c\u88ab\u7981\u6b62\uff01
sorryLabel=\u5bf9\u4e0d\u8d77\uff01
notFoundLabel=\u627e\u4e0d\u5230\uff01
unPulbishSuccLabel=\u53d6\u6d88\u53d1\u5e03\u6210\u529f
unPulbishFailLabel=\u53d6\u6d88\u53d1\u5e03\u5931\u8d25
removeSuccLabel=\u5220\u9664\u6210\u529f
removeFailLabel=\u5220\u9664\u5931\u8d25
removeUserFailSkinNeedMulUsersLabel=\u5220\u9664\u5931\u8d25\uff0c\u5f53\u524d\u4f7f\u7528\u7684\u76ae\u80a4\u9700\u8981\u591a\u7528\u6237\u652f\u6301
putTopSuccLabel=\u7f6e\u9876\u6210\u529f
putTopFailLabel=\u7f6e\u9876\u5931\u8d25
cancelTopSuccLabel=\u53d6\u6d88\u7f6e\u9876\u6210\u529f
cancelTopFailLabel=\u53d6\u6d88\u7f6e\u9876\u5931\u8d25
addSuccLabel=\u6dfb\u52a0\u6210\u529f
addFailLabel=\u6dfb\u52a0\u5931\u8d25
updateSuccLabel=\u66f4\u65b0\u6210\u529f
updateFailLabel=\u66f4\u65b0\u5931\u8d25
updatePreferenceFailLabel=\u66f4\u65b0\u5931\u8d25\uff0c\u8bf7\u4ed4\u7ec6\u68c0\u67e5\u201c\u535a\u5ba2\u5730\u5740\u201d\u7684\u914d\u7f6e\u662f\u5426\u6b63\u786e
updatePreferenceFailNeedMulUsersLabel=\u66f4\u65b0\u5931\u8d25\uff0c\u9700\u8981\u591a\u7528\u6237\u624d\u80fd\u4f7f\u7528\u9009\u62e9\u7684\u76ae\u80a4
setFailLabel=\u8bbe\u7f6e\u5931\u8d25
setSuccLabel=\u8bbe\u7f6e\u6210\u529f
getFailLabel=\u83b7\u53d6\u5931\u8d25
noSettingLabel=\u8be5\u535a\u5ba2\u65e0\u8d26\u53f7\uff0c\u8bf7\u6dfb\u52a0
getSuccLabel=\u83b7\u53d6\u6210\u529f
importSuccLabel=\u5bfc\u5165\u6210\u529f :-)
importFailLabel=\u90e8\u5206\u5bfc\u5165\u5931\u8d25 %>_<%
noCommentLabel=\u6682\u65e0\u8bc4\u8bba
captchaErrorLabel=\u9a8c\u8bc1\u7801\u9519\u8bef
inputErrorLabel=\u8f93\u5165\u9519\u8bef\uff01
gotoLabel=\u8df3\u8f6c
nameEmptyLabel=\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a\uff01
passwordEmptyLabel=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01
blogEmptyLabel=\u8bf7\u9009\u62e9\u535a\u5ba2\u670d\u52a1\uff01
blogArticleEmptyLabel=\u8bf7\u9009\u62e9\u9700\u8981\u5bfc\u5165\u7684\u6587\u7ae0
nameTooLongLabel=\u59d3\u540d\u53ea\u80fd\u4e3a 2 \u5230 20 \u4e2a\u5b57\u7b26\uff01
mailCannotEmptyLabel=\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a\uff01
mailInvalidLabel=\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e\uff01
commentContentCannotEmptyLabel=\u8bc4\u8bba\u5185\u5bb9\u53ea\u80fd\u4e3a 2 \u5230 500 \u4e2a\u5b57\u7b26\uff01
captchaCannotEmptyLabel=\u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01
loadingLabel=\u8f7d\u5165\u4e2d....
titleEmptyLabel=\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a\uff01
contentEmptyLabel=\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a\uff01
orderEmptyLabel=\u5e8f\u53f7\u4e0d\u80fd\u4e3a\u7a7a\uff01
abstractEmptyLabel=\u6458\u8981\u4e0d\u80fd\u4e3a\u7a7a\uff01
tagsEmptyLabel=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a\uff01
addressEmptyLabel=\u5730\u5740\u4e0d\u80fd\u4e3a\u7a7a\uff01
noAuthorizationURLLabel=\u4ece Google \u83b7\u53d6\u6388\u6743\u5730\u5740\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u60a8\u8f93\u5165\u7684 \
<em>Consumer Secret</em> \u662f\u6b63\u786e\u7684\uff0c\u7136\u540e\u8fdb\u884c\u91cd\u8bd5\u3002
exceedMaxUploadSizeLabel=\u76ee\u524d\u53ea\u80fd\u4e0a\u4f20\u5c0f\u4e8e 1M \u7684\u6587\u4ef6 :-(
uploadFailLabel=\u4e0a\u4f20\u5931\u8d25\uff01
fileEmptyLabel=\u6587\u4ef6\u4e3a\u7a7a\uff01
duplicatedPermalinkLabel=\u94fe\u63a5\u91cd\u590d\uff01
invalidPermalinkFormatLabel=\u975e\u6cd5\u7684\u94fe\u63a5\u683c\u5f0f\uff01
duplicatedEmailLabel=\u90ae\u4ef6\u5730\u5740\u91cd\u590d\uff01
canntBeLocalhostOnProductionLabel=GAE \u73af\u5883\u4e0a\u8bf7\u52ff\u6307\u5b9a\u535a\u5ba2\u5730\u5740\u4e3a localhost\uff01
refreshAndRetryLabel=\u8bf7\u5237\u65b0\u91cd\u8bd5\uff01
noDataLable=\u65e0\u6570\u636e
editorLeaveLabel=\u7f16\u8f91\u5668\u4e2d\u8fd8\u6709\u5185\u5bb9\uff0c\u662f\u5426\u79bb\u5f00\uff1f
editorPostLabel=\u7f16\u8f91\u5668\u4e2d\u8fd8\u6709\u5185\u5bb9\uff0c\u662f\u5426\u6e05\u7a7a\uff1f
####
confirmRemoveLabel=\u786e\u5b9a\u5220\u9664\uff1f
confirmInitLabel=\u786e\u5b9a\u8fdb\u884c\u521d\u59cb\u5316\u5417\uff1f
####
articleRightLabel=\u672C\u7AD9\u6587\u7AE0\u9664\u6CE8\u660E\u8F6C\u8F7D\u5916\uFF0C\u5747\u4E3A\u672C\u7AD9\u539F\u521B\u6216\u7F16\u8BD1
articleWelcomeCopyLabel=\u6B22\u8FCE\u4EFB\u4F55\u5F62\u5F0F\u7684\u8F6C\u8F7D\uFF0C\u4F46\u8BF7\u52A1\u5FC5\u6CE8\u660E\u51FA\u5904\uFF0C\u5C0A\u91CD\u4ED6\u4EBA\u52B3\u52A8
articleCopyNoteLabel=\u8F6C\u8F7D\u8BF7\u6CE8\u660E\uFF1A\u6587\u7AE0\u8F6C\u8F7D\u81EA\uFF1A
articleTitleLabel=\u672C\u6587\u6807\u9898\uFF1A
articleLinkLabel=\u672C\u6587\u5730\u5740\uFF1A

View File

@ -0,0 +1,185 @@
<#macro comments commentList article>
<div id="comments">
<#list commentList as comment>
<div id="${comment.oId}">
<img class="left" alt="${comment.commentName}" src="${comment.commentThumbnailURL}"/>
<div class="comment-panel left">
<div class="comment-top">
<#if "http://" == comment.commentURL>
<a>${comment.commentName}</a>
<#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}', 11);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')">
${comment.commentOriginalCommentName}</a>
</#if>
${comment.commentDate?string("yyyy-MM-dd HH:mm:ss")}
</div>
<div class="comment-content">
${comment.commentContent}
</div>
<div class="clear"></div>
<#if article.commentable>
<div class="reply">
<a rel="nofollow" href="javascript:replyTo('${comment.oId}');">${replyLabel}</a>
</div>
</#if>
</div>
<div class="clear"></div>
</div>
</#list>
</div>
<#if article.commentable>
<div class="comment-title">
${postCommentsLabel}
</div>
<table id="commentForm" class="comment" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<th width="200px">
<span class="comment-label">
${commentNameLabel}
</span>
<span class="arrow-right"></span>
</th>
<td colspan="2">
<input type="text" id="commentName"/>
</td>
</tr>
<tr>
<th>
<span class="comment-label">
${commentEmailLabel}
</span>
<span class="arrow-right"></span>
</th>
<td colspan="2">
<input type="text" id="commentEmail"/>
</td>
</tr>
<tr>
<th>
<span class="comment-label">
${commentURLLabel}
</span>
<span class="arrow-right"></span>
</th>
<td colspan="2">
<input type="text" id="commentURL"/>
</td>
</tr>
<tr>
<th>
<span class="comment-label">
${commentEmotionsLabel}
</span>
<span class="arrow-right"></span>
</th>
<td id="emotions" colspan="2">
<span class="em00" title="${em00Label}"></span>
<span class="em01" title="${em01Label}"></span>
<span class="em02" title="${em02Label}"></span>
<span class="em03" title="${em03Label}"></span>
<span class="em04" title="${em04Label}"></span>
<span class="em05" title="${em05Label}"></span>
<span class="em06" title="${em06Label}"></span>
<span class="em07" title="${em07Label}"></span>
<span class="em08" title="${em08Label}"></span>
<span class="em09" title="${em09Label}"></span>
<span class="em10" title="${em10Label}"></span>
<span class="em11" title="${em11Label}"></span>
<span class="em12" title="${em12Label}"></span>
<span class="em13" title="${em13Label}"></span>
<span class="em14" title="${em14Label}"></span>
</td>
</tr>
<tr>
<th valign="top">
<span class="comment-label">
${commentContentLabel}
</span>
<span class="arrow-right"></span>
</th>
<td colspan="2">
<textarea rows="10" id="comment"></textarea>
</td>
</tr>
<tr>
<th>
<span class="comment-label">
${captchaLabel}
</span>
<span class="arrow-right"></span>
</th>
<td>
<input type="text" id="commentValidate"/>
<img id="captcha" alt="validate" src="${servePath}/captcha.do" />
</td>
<th>
<span class="right error-msg" id="commentErrorTip"></span>
</th>
</tr>
<tr>
<td colspan="3">
<input id="submitCommentButton" type="button" onclick="page.submitComment();" value="${submmitCommentLabel}"/>
</td>
</tr>
</tbody>
</table>
</#if>
</#macro>
<#macro comment_script oId>
<script type="text/javascript" src="/js/page${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript">
var page = new Page({
"nameTooLongLabel": "${nameTooLongLabel}",
"mailCannotEmptyLabel": "${mailCannotEmptyLabel}",
"mailInvalidLabel": "${mailInvalidLabel}",
"commentContentCannotEmptyLabel": "${commentContentCannotEmptyLabel}",
"captchaCannotEmptyLabel": "${captchaCannotEmptyLabel}",
"captchaErrorLabel": "${captchaErrorLabel}",
"loadingLabel": "${loadingLabel}",
"oId": "${oId}",
"skinDirName": "${skinDirName}",
"blogHost": "${blogHost}",
"randomArticles1Label": "${randomArticles1Label}",
"externalRelevantArticles1Label": "${externalRelevantArticles1Label}"
});
var addComment = function (result, state) {
var commentHTML = '<div id="' + result.oId + '">'
+ '<img class="left" alt="' + $("#commentName" + state).val() + '" src="' + result.commentThumbnailURL
+ '"/><div class="comment-panel left"><div class="comment-top">' + result.replyNameHTML;
if (state !== "") {
var commentOriginalCommentName = $("#" + page.currentCommentId + " .comment-top a").first().text();
commentHTML += '&nbsp;@&nbsp;<a href="${servePath}' + result.commentSharpURL.split("#")[0] + '#' + page.currentCommentId + '"'
+ 'onmouseover="page.showComment(this, \'' + page.currentCommentId + '\', 11);"'
+ 'onmouseout="page.hideComment(\'' + page.currentCommentId + '\')">' + commentOriginalCommentName + '</a>';
}
commentHTML += '&nbsp;' + result.commentDate
+ '</div><div class="comment-content">' + Util.replaceEmString($("#comment" + state).val().replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\n/g,"<br/>"))
+ '</div><div class="clear"></div><div class="reply"><a rel="nofollow" href="javascript:replyTo(\'' + result.oId + '\');">${replyLabel}</a>'
+ '</div></div><div class="clear"></div></div>';
return commentHTML;
}
var replyTo = function (id) {
var commentFormHTML = "<table width='100%' cellspacing='0' cellpadding='0' class='comment' id='replyForm'>";
page.addReplyForm(id, commentFormHTML);
};
(function () {
page.load();
page.replaceCommentsEm("#comments .comment-content");
<#nested>
})();
</script>
</#macro>

View File

@ -0,0 +1,18 @@
<#macro head title>
<meta charset="utf-8" />
<title>${title}</title>
<#nested>
<meta name="author" content="Armstrong@sweelia.com" />
<meta name="generator" content="B3log" />
<meta name="copyright" content="B3log" />
<meta name="revised" content="Sweelia.com, ${year}" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-base${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/community-bubbles.css?${staticResourceVersion}" charset="utf-8" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/bubbles.css?${staticResourceVersion}" charset="utf-8" />
<link href="${servePath}/blog-articles-feed.do" title="ATOM" type="application/atom+xml" rel="alternate" charset="utf-8"/>
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/md5.js?${staticResourceVersion}"></script>
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/gravatar.js?${staticResourceVersion}"></script>
${htmlHead}
</#macro>

View File

@ -0,0 +1,15 @@
<div class="header-notice">
<div class="content">
<#if "" != noticeBoard>
<div>
<div class="header-cnt">
<div class="notice-cnt">
${noticeBoard}
</div>
</div>
</div>
<div class="clear"></div>
<div class="hr"></div>
</#if>
</div>
</div>

View File

@ -0,0 +1,30 @@
<#include "macro-head.ftl">
<#include "macro-comments.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${page.pageTitle} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${page.pageTitle}" />
<meta name="description" content="${metaDescription}" />
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div class="content">
<div class="article-body marginBottom40">
${page.pageContent}
</div>
<@comments commentList=pageComments article=page></@comments>
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
<@comment_script oId=page.oId></@comment_script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

114
community-bubbles/side.ftl Normal file
View File

@ -0,0 +1,114 @@
<div class="footer-secondary">
<div class="content">
<#if 0 != mostViewCountArticles?size>
<h4>${mostViewCountArticlesLabel}</h4>
<div class="arrow-right"></div>
<div class="most-view-count-articles">
<#list mostViewCountArticles as article>
<p><a rel="nofollow" title="${article.articleTitle}" href="${servePath}${article.articlePermalink}">
<sup>[${article.articleViewCount}]</sup>${article.articleTitle}
</a></p>
</#list>
</div>
<div class="clear"></div>
<#if 0 != recentComments?size>
<div class="hr"></div>
</#if>
</#if>
<#if 0 != recentComments?size>
<h4>${recentCommentsLabel}</h4>
<div class="arrow-right"></div>
<div class="recent-comments">
<#list recentComments as comment>
<div>
<a rel="nofollow" href="${servePath}${comment.commentSharpURL}">
<img class='left'
alt='${comment.commentName}'
src='${comment.commentThumbnailURL}'/>
</a>
<a title="${comment.commentName}" class="comment-author" target="_blank" href="${comment.commentURL}">
${comment.commentName}
</a>
</div>
</#list>
</div>
<div class="clear"></div>
</#if>
</div>
</div>
<div class="footer-widgets">
<div class="content">
<#if 0 != mostCommentArticles?size>
<div class="left footer-block">
<h4>${mostCommentArticlesLabel}</h4>
<ul>
<#list mostCommentArticles as article>
<li>
<sup>[${article.articleCommentCount}]</sup>
<a rel="nofollow" title="${article.articleTitle}" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
</li>
</#list>
</ul>
</div>
</#if>
<#if 0 != mostUsedTags?size>
<div class="left footer-block">
<h4><span class="left">${popTagsLabel}</span></h4>
<span class="clear"></span>
<ul>
<#list mostUsedTags as tag>
<li class="mostUsedTags">
<a rel="tag" title="${tag.tagTitle}(${tag.tagPublishedRefCount})" href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
${tag.tagTitle}(${tag.tagPublishedRefCount})
</a>
<img onclick="window.location='${servePath}/tag-articles-feed.do?oId=${tag.oId}'"
alt="${tag.tagTitle}" src="${staticServePath}/images/feed.png"/>
</li>
</#list>
</ul>
</div>
</#if>
<#if 0 != links?size>
<div class="left footer-block">
<h4><span class="left">${linkLabel}</span></h4>
<span class="clear"></span>
<ul id="sideLink">
<#list links as link>
<li class="mostUsedTags">
<a rel="friend" href="${link.linkAddress}" title="${link.linkTitle}" target="_blank">
${link.linkTitle}
</a>
<img onclick="window.location='${link.linkAddress}'"
alt="${link.linkTitle}"
src="http://www.google.com/s2/u/0/favicons?domain=<#list link.linkAddress?split('/') as x><#if x_index=2>${x}<#break></#if></#list>" />
</li>
</#list>
</ul>
</div>
</#if>
<#if 0 != archiveDates?size>
<div class="left footer-block" style="margin-right: 0px;">
<h4><span class="left">${archiveLabel}</span></h4>
<span class="clear"></span>
<ul>
<#list archiveDates as archiveDate>
<li>
<#if "en" == localeString?substring(0, 2)>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}"
title="${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})">
${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})</a>
<#else>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}"
title="${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})</a>
</#if>
</li>
</#list>
</ul>
</div>
</#if>
<div class="clear"></div>
</div>
</div>

View File

@ -0,0 +1,26 @@
#
# Copyright (C) 2011, B3log Team
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# Description: Community skin.
# Version: 1.0.0.9, Nov 21, 2012
# Author: Liyuan Li
#
name=Community-bubbles
version=0.0.1
forSolo=0.5.5
memo=Refers to http://demo.woothemes.com/skeptical/

View File

@ -0,0 +1,32 @@
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${tag.tagTitle} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${tag.tagTitle}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div class="content">
<h2>${tag1Label}
<a rel="alternate" href="${servePath}/tag-articles-feed.do?oId=${tag.oId}">
<span id="tagArticlesTag">
${tag.tagTitle}
</span>(${tag.tagPublishedRefCount})
</a>
</h2>
<#include "article-list.ftl">
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
</body>
</html>

View File

@ -0,0 +1,41 @@
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${allTagsLabel} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${allTagsLabel}"/>
<meta name="description" content="<#list tags as tag>${tag.tagTitle}<#if tag_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
${topBarReplacement}
<div class="header">
<#include "header.ftl">
</div>
<div class="content">
<div class="error-panel">
<ul id="tags">
<#list tags as tag>
<li>
<a rel="tag" data-count="${tag.tagPublishedRefCount}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}" title="${tag.tagTitle}">
<span>${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>)
</a>
</li>
</#list>
</ul>
<span class="clear"></span>
</div>
</div>
<div>
<#include "side.ftl">
</div>
<div class="footer">
<#include "footer.ftl">
</div>
<script type="text/javascript">
Util.buildTags();
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB