Commit b35caef2 authored by Liang Ding's avatar Liang Ding

Merge remote-tracking branch 'refs/remotes/origin/1.9.0-dev'

parents cb7b2364 6e342d37
...@@ -16,5 +16,5 @@ ...@@ -16,5 +16,5 @@
src/main/webapp/skins/* src/main/webapp/skins/*
!src/main/webapp/skins/mobile !src/main/webapp/skins/mobile
!src/main/webapp/skins/next !src/main/webapp/skins/9IPHP
**/.DS_Store **/.DS_Store
...@@ -25,7 +25,7 @@ import org.json.JSONObject; ...@@ -25,7 +25,7 @@ import org.json.JSONObject;
* This class defines option model relevant keys. * This class defines option model relevant keys.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.3.0.3, Nov 8, 2016 * @version 1.3.0.4, Feb 17, 2017
* @since 0.6.0 * @since 0.6.0
*/ */
public final class Option { public final class Option {
...@@ -355,7 +355,7 @@ public final class Option { ...@@ -355,7 +355,7 @@ public final class Option {
/** /**
* Default skin directory name. * Default skin directory name.
*/ */
public static final String DEFAULT_SKIN_DIR_NAME = "next"; public static final String DEFAULT_SKIN_DIR_NAME = "9IPHP";
/** /**
* Default language. * Default language.
......
...@@ -16,12 +16,7 @@ ...@@ -16,12 +16,7 @@
package org.b3log.solo.processor; package org.b3log.solo.processor;
import java.io.IOException; import freemarker.template.Template;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.logging.Level; import org.b3log.latke.logging.Level;
import org.b3log.latke.logging.Logger; import org.b3log.latke.logging.Logger;
...@@ -33,22 +28,32 @@ import org.b3log.latke.servlet.annotation.RequestProcessing; ...@@ -33,22 +28,32 @@ import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JSONRenderer; import org.b3log.latke.servlet.renderer.JSONRenderer;
import org.b3log.latke.util.Requests; import org.b3log.latke.util.Requests;
import org.b3log.solo.model.Article; import org.b3log.latke.util.freemarker.Templates;
import org.b3log.solo.model.Comment; import org.b3log.solo.model.*;
import org.b3log.solo.model.Common;
import org.b3log.solo.model.Page;
import org.b3log.solo.service.CommentMgmtService; import org.b3log.solo.service.CommentMgmtService;
import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.UserMgmtService; import org.b3log.solo.service.UserMgmtService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.b3log.solo.util.Skins;
import org.json.JSONObject; import org.json.JSONObject;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
/** /**
* Comment processor. * Comment processor.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author ArmstrongCN * @author ArmstrongCN
* @version 1.2.2.12, Dec 29, 2015 * @version 1.3.2.13, Feb 18, 2017
* @since 0.3.1 * @since 0.3.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -83,10 +88,16 @@ public class CommentProcessor { ...@@ -83,10 +88,16 @@ public class CommentProcessor {
@Inject @Inject
private UserMgmtService userMgmtService; private UserMgmtService userMgmtService;
/**
* Preference query service.
*/
@Inject
private PreferenceQueryService preferenceQueryService;
/** /**
* Adds a comment to a page. * Adds a comment to a page.
* * <p>
* <p> Renders the response with a json object, for example, * Renders the response with a json object, for example,
* <pre> * <pre>
* { * {
* "oId": generatedCommentId, * "oId": generatedCommentId,
...@@ -96,11 +107,10 @@ public class CommentProcessor { ...@@ -96,11 +107,10 @@ public class CommentProcessor {
* "commentThumbnailURL": "", * "commentThumbnailURL": "",
* "commentOriginalCommentName": "" // if exists this key, the comment is an reply * "commentOriginalCommentName": "" // if exists this key, the comment is an reply
* } * }
* </pre> </p> * </pre>
* </p>
* *
* @param context the specified context, including a request json object, for example, * @param context the specified context, including a request json object, for example,
* <pre>
* {
* "captcha": "", * "captcha": "",
* "oId": pageId, * "oId": pageId,
* "commentName": "", * "commentName": "",
...@@ -108,8 +118,6 @@ public class CommentProcessor { ...@@ -108,8 +118,6 @@ public class CommentProcessor {
* "commentURL": "", * "commentURL": "",
* "commentContent": "", // HTML * "commentContent": "", // HTML
* "commentOriginalCommentId": "" // optional, if exists this key, the comment is an reply * "commentOriginalCommentId": "" // optional, if exists this key, the comment is an reply
* }
* </pre>
* @throws ServletException servlet exception * @throws ServletException servlet exception
* @throws IOException io exception * @throws IOException io exception
*/ */
...@@ -119,15 +127,12 @@ public class CommentProcessor { ...@@ -119,15 +127,12 @@ public class CommentProcessor {
final HttpServletResponse httpServletResponse = context.getResponse(); final HttpServletResponse httpServletResponse = context.getResponse();
final JSONObject requestJSONObject = Requests.parseRequestJSONObject(httpServletRequest, httpServletResponse); final JSONObject requestJSONObject = Requests.parseRequestJSONObject(httpServletRequest, httpServletResponse);
requestJSONObject.put(Common.TYPE, Page.PAGE); requestJSONObject.put(Common.TYPE, Page.PAGE);
fillCommenter(requestJSONObject, httpServletRequest, httpServletResponse); fillCommenter(requestJSONObject, httpServletRequest, httpServletResponse);
final JSONObject jsonObject = commentMgmtService.checkAddCommentRequest(requestJSONObject); final JSONObject jsonObject = commentMgmtService.checkAddCommentRequest(requestJSONObject);
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setJSONObject(jsonObject); renderer.setJSONObject(jsonObject);
...@@ -146,11 +151,9 @@ public class CommentProcessor { ...@@ -146,11 +151,9 @@ public class CommentProcessor {
} }
final String storedCaptcha = (String) session.getAttribute(CaptchaProcessor.CAPTCHA); final String storedCaptcha = (String) session.getAttribute(CaptchaProcessor.CAPTCHA);
session.removeAttribute(CaptchaProcessor.CAPTCHA); session.removeAttribute(CaptchaProcessor.CAPTCHA);
if (!userQueryService.isLoggedIn(httpServletRequest, httpServletResponse)) { if (!userQueryService.isLoggedIn(httpServletRequest, httpServletResponse)) {
final String captcha = requestJSONObject.optString(CaptchaProcessor.CAPTCHA); final String captcha = requestJSONObject.optString(CaptchaProcessor.CAPTCHA);
if (null == storedCaptcha || !storedCaptcha.equals(captcha)) { if (null == storedCaptcha || !storedCaptcha.equals(captcha)) {
...@@ -159,12 +162,34 @@ public class CommentProcessor { ...@@ -159,12 +162,34 @@ public class CommentProcessor {
return; return;
} }
} }
try { try {
final JSONObject addResult = commentMgmtService.addPageComment(requestJSONObject); final JSONObject addResult = commentMgmtService.addPageComment(requestJSONObject);
final Map<String, Object> dataModel = new HashMap<>();
dataModel.put(Comment.COMMENT, addResult);
final JSONObject page = addResult.optJSONObject(Page.PAGE);
page.put(Common.COMMENTABLE, addResult.opt(Common.COMMENTABLE));
page.put(Common.PERMALINK, addResult.opt(Common.PERMALINK));
dataModel.put(Article.ARTICLE, page);
// https://github.com/b3log/solo/issues/12246
try {
final String skinDirName = (String) httpServletRequest.getAttribute(Keys.TEMAPLTE_DIR_NAME);
final Template template = Templates.MAIN_CFG.getTemplate("common-comment.ftl");
final JSONObject preference = preferenceQueryService.getPreference();
Skins.fillLangs(preference.optString(Option.ID_C_LOCALE_STRING), skinDirName, dataModel);
Keys.fillServer(dataModel);
final StringWriter stringWriter = new StringWriter();
template.process(dataModel, stringWriter);
stringWriter.close();
addResult.put("cmtTpl", stringWriter.toString());
} catch (final Exception e) {
// 1.9.0 向后兼容
}
addResult.put(Keys.STATUS_CODE, true); addResult.put(Keys.STATUS_CODE, true);
renderer.setJSONObject(addResult); renderer.setJSONObject(addResult);
...@@ -178,9 +203,8 @@ public class CommentProcessor { ...@@ -178,9 +203,8 @@ public class CommentProcessor {
/** /**
* Adds a comment to an article. * Adds a comment to an article.
* * <p>
* * Renders the response with a json object, for example,
* <p> Renders the response with a json object, for example,
* <pre> * <pre>
* { * {
* "oId": generatedCommentId, * "oId": generatedCommentId,
...@@ -192,10 +216,9 @@ public class CommentProcessor { ...@@ -192,10 +216,9 @@ public class CommentProcessor {
* "commentContent": "" // HTML * "commentContent": "" // HTML
* } * }
* </pre> * </pre>
* </p>
* *
* @param context the specified context, including a request json object, for example, * @param context the specified context, including a request json object, for example,
* <pre>
* {
* "captcha": "", * "captcha": "",
* "oId": articleId, * "oId": articleId,
* "commentName": "", * "commentName": "",
...@@ -203,8 +226,6 @@ public class CommentProcessor { ...@@ -203,8 +226,6 @@ public class CommentProcessor {
* "commentURL": "", * "commentURL": "",
* "commentContent": "", * "commentContent": "",
* "commentOriginalCommentId": "" // optional, if exists this key, the comment is an reply * "commentOriginalCommentId": "" // optional, if exists this key, the comment is an reply
* }
* </pre>
* @throws ServletException servlet exception * @throws ServletException servlet exception
* @throws IOException io exception * @throws IOException io exception
*/ */
...@@ -214,15 +235,12 @@ public class CommentProcessor { ...@@ -214,15 +235,12 @@ public class CommentProcessor {
final HttpServletResponse httpServletResponse = context.getResponse(); final HttpServletResponse httpServletResponse = context.getResponse();
final JSONObject requestJSONObject = Requests.parseRequestJSONObject(httpServletRequest, httpServletResponse); final JSONObject requestJSONObject = Requests.parseRequestJSONObject(httpServletRequest, httpServletResponse);
requestJSONObject.put(Common.TYPE, Article.ARTICLE); requestJSONObject.put(Common.TYPE, Article.ARTICLE);
fillCommenter(requestJSONObject, httpServletRequest, httpServletResponse); fillCommenter(requestJSONObject, httpServletRequest, httpServletResponse);
final JSONObject jsonObject = commentMgmtService.checkAddCommentRequest(requestJSONObject); final JSONObject jsonObject = commentMgmtService.checkAddCommentRequest(requestJSONObject);
final JSONRenderer renderer = new JSONRenderer(); final JSONRenderer renderer = new JSONRenderer();
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setJSONObject(jsonObject); renderer.setJSONObject(jsonObject);
...@@ -232,7 +250,6 @@ public class CommentProcessor { ...@@ -232,7 +250,6 @@ public class CommentProcessor {
} }
final HttpSession session = httpServletRequest.getSession(false); final HttpSession session = httpServletRequest.getSession(false);
if (null == session) { if (null == session) {
jsonObject.put(Keys.STATUS_CODE, false); jsonObject.put(Keys.STATUS_CODE, false);
jsonObject.put(Keys.MSG, langPropsService.get("captchaErrorLabel")); jsonObject.put(Keys.MSG, langPropsService.get("captchaErrorLabel"));
...@@ -241,26 +258,45 @@ public class CommentProcessor { ...@@ -241,26 +258,45 @@ public class CommentProcessor {
} }
final String storedCaptcha = (String) session.getAttribute(CaptchaProcessor.CAPTCHA); final String storedCaptcha = (String) session.getAttribute(CaptchaProcessor.CAPTCHA);
session.removeAttribute(CaptchaProcessor.CAPTCHA); session.removeAttribute(CaptchaProcessor.CAPTCHA);
if (!userQueryService.isLoggedIn(httpServletRequest, httpServletResponse)) { if (!userQueryService.isLoggedIn(httpServletRequest, httpServletResponse)) {
final String captcha = requestJSONObject.optString(CaptchaProcessor.CAPTCHA); final String captcha = requestJSONObject.optString(CaptchaProcessor.CAPTCHA);
if (null == storedCaptcha || !storedCaptcha.equals(captcha)) { if (null == storedCaptcha || !storedCaptcha.equals(captcha)) {
jsonObject.put(Keys.STATUS_CODE, false); jsonObject.put(Keys.STATUS_CODE, false);
jsonObject.put(Keys.MSG, langPropsService.get("captchaErrorLabel")); jsonObject.put(Keys.MSG, langPropsService.get("captchaErrorLabel"));
return; return;
} }
} }
try { try {
final JSONObject addResult = commentMgmtService.addArticleComment(requestJSONObject); final JSONObject addResult = commentMgmtService.addArticleComment(requestJSONObject);
final Map<String, Object> dataModel = new HashMap<>();
dataModel.put(Comment.COMMENT, addResult);
final JSONObject article = addResult.optJSONObject(Article.ARTICLE);
article.put(Common.COMMENTABLE, addResult.opt(Common.COMMENTABLE));
article.put(Common.PERMALINK, addResult.opt(Common.PERMALINK));
dataModel.put(Article.ARTICLE, article);
// https://github.com/b3log/solo/issues/12246
try {
final String skinDirName = (String) httpServletRequest.getAttribute(Keys.TEMAPLTE_DIR_NAME);
final Template template = Templates.MAIN_CFG.getTemplate("common-comment.ftl");
final JSONObject preference = preferenceQueryService.getPreference();
Skins.fillLangs(preference.optString(Option.ID_C_LOCALE_STRING), skinDirName, dataModel);
Keys.fillServer(dataModel);
final StringWriter stringWriter = new StringWriter();
template.process(dataModel, stringWriter);
stringWriter.close();
addResult.put("cmtTpl", stringWriter.toString());
} catch (final Exception e) {
// 1.9.0 向后兼容
}
addResult.put(Keys.STATUS_CODE, true); addResult.put(Keys.STATUS_CODE, true);
renderer.setJSONObject(addResult); renderer.setJSONObject(addResult);
} catch (final Exception e) { } catch (final Exception e) {
...@@ -282,7 +318,6 @@ public class CommentProcessor { ...@@ -282,7 +318,6 @@ public class CommentProcessor {
userMgmtService.tryLogInWithCookie(httpServletRequest, httpServletResponse); userMgmtService.tryLogInWithCookie(httpServletRequest, httpServletResponse);
final JSONObject currentUser = userQueryService.getCurrentUser(httpServletRequest); final JSONObject currentUser = userQueryService.getCurrentUser(httpServletRequest);
if (null == currentUser) { if (null == currentUser) {
return; return;
} }
......
...@@ -57,7 +57,7 @@ import org.jsoup.safety.Whitelist; ...@@ -57,7 +57,7 @@ import org.jsoup.safety.Whitelist;
* Comment management service. * Comment management service.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.3.2.8, May 10, 2016 * @version 1.3.2.10, Feb 18, 2017
* @since 0.3.5 * @since 0.3.5
*/ */
@Service @Service
...@@ -399,7 +399,13 @@ public class CommentMgmtService { ...@@ -399,7 +399,13 @@ public class CommentMgmtService {
* "commentThumbnailURL": "", * "commentThumbnailURL": "",
* "commentSharpURL": "", * "commentSharpURL": "",
* "commentContent": "", // processed XSS HTML * "commentContent": "", // processed XSS HTML
* "commentName": "" // processed XSS * "commentName": "", // processed XSS
* "commentURL": "", // optional
* "isReply": boolean,
* "page": {},
* "commentOriginalCommentId": "" // optional
* "commentable": boolean,
* "permalink": "" // page.pagePermalink
* } * }
* </pre> * </pre>
* *
...@@ -407,18 +413,21 @@ public class CommentMgmtService { ...@@ -407,18 +413,21 @@ public class CommentMgmtService {
*/ */
public JSONObject addPageComment(final JSONObject requestJSONObject) throws ServiceException { public JSONObject addPageComment(final JSONObject requestJSONObject) throws ServiceException {
final JSONObject ret = new JSONObject(); final JSONObject ret = new JSONObject();
ret.put(Common.IS_REPLY, false);
final Transaction transaction = commentRepository.beginTransaction(); final Transaction transaction = commentRepository.beginTransaction();
try { try {
final String pageId = requestJSONObject.getString(Keys.OBJECT_ID); final String pageId = requestJSONObject.getString(Keys.OBJECT_ID);
final JSONObject page = pageRepository.get(pageId); final JSONObject page = pageRepository.get(pageId);
ret.put(Page.PAGE, page);
final String commentName = requestJSONObject.getString(Comment.COMMENT_NAME); final String commentName = requestJSONObject.getString(Comment.COMMENT_NAME);
final String commentEmail = requestJSONObject.getString(Comment.COMMENT_EMAIL).trim().toLowerCase(); final String commentEmail = requestJSONObject.getString(Comment.COMMENT_EMAIL).trim().toLowerCase();
final String commentURL = requestJSONObject.optString(Comment.COMMENT_URL); final String commentURL = requestJSONObject.optString(Comment.COMMENT_URL);
final String commentContent = requestJSONObject.getString(Comment.COMMENT_CONTENT); final String commentContent = requestJSONObject.getString(Comment.COMMENT_CONTENT);
final String originalCommentId = requestJSONObject.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID); final String originalCommentId = requestJSONObject.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
ret.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, originalCommentId);
// Step 1: Add comment // Step 1: Add comment
final JSONObject comment = new JSONObject(); final JSONObject comment = new JSONObject();
...@@ -436,6 +445,11 @@ public class CommentMgmtService { ...@@ -436,6 +445,11 @@ public class CommentMgmtService {
comment.put(Comment.COMMENT_DATE, date); comment.put(Comment.COMMENT_DATE, date);
ret.put(Comment.COMMENT_DATE, DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss")); ret.put(Comment.COMMENT_DATE, DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss"));
ret.put("commentDate2", date);
ret.put(Common.COMMENTABLE, preference.getBoolean(Option.ID_C_COMMENTABLE) && page.getBoolean(Page.PAGE_COMMENTABLE));
ret.put(Common.PERMALINK, page.getString(Page.PAGE_PERMALINK));
if (!Strings.isEmptyOrNull(originalCommentId)) { if (!Strings.isEmptyOrNull(originalCommentId)) {
originalComment = commentRepository.get(originalCommentId); originalComment = commentRepository.get(originalCommentId);
if (null != originalComment) { if (null != originalComment) {
...@@ -444,6 +458,8 @@ public class CommentMgmtService { ...@@ -444,6 +458,8 @@ public class CommentMgmtService {
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName);
ret.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName); ret.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName);
ret.put(Common.IS_REPLY, true);
} else { } else {
LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]", originalCommentId, LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]", originalCommentId,
commentName, commentContent); commentName, commentContent);
...@@ -462,6 +478,7 @@ public class CommentMgmtService { ...@@ -462,6 +478,7 @@ public class CommentMgmtService {
ret.put(Comment.COMMENT_NAME, commentName); ret.put(Comment.COMMENT_NAME, commentName);
ret.put(Comment.COMMENT_CONTENT, commentContent); ret.put(Comment.COMMENT_CONTENT, commentContent);
ret.put(Comment.COMMENT_URL, commentURL);
ret.put(Comment.COMMENT_SHARP_URL, commentSharpURL); ret.put(Comment.COMMENT_SHARP_URL, commentSharpURL);
comment.put(Comment.COMMENT_SHARP_URL, commentSharpURL); comment.put(Comment.COMMENT_SHARP_URL, commentSharpURL);
...@@ -519,7 +536,13 @@ public class CommentMgmtService { ...@@ -519,7 +536,13 @@ public class CommentMgmtService {
* "commentThumbnailURL": "", * "commentThumbnailURL": "",
* "commentSharpURL": "", * "commentSharpURL": "",
* "commentContent": "", // processed XSS HTML * "commentContent": "", // processed XSS HTML
* "commentName": "" // processed XSS * "commentName": "", // processed XSS
* "commentURL": "", // optional
* "isReply": boolean,
* "article": {},
* "commentOriginalCommentId": "", // optional
* "commentable": boolean,
* "permalink": "" // article.articlePermalink
* } * }
* </pre> * </pre>
* *
...@@ -527,18 +550,21 @@ public class CommentMgmtService { ...@@ -527,18 +550,21 @@ public class CommentMgmtService {
*/ */
public JSONObject addArticleComment(final JSONObject requestJSONObject) throws ServiceException { public JSONObject addArticleComment(final JSONObject requestJSONObject) throws ServiceException {
final JSONObject ret = new JSONObject(); final JSONObject ret = new JSONObject();
ret.put(Common.IS_REPLY, false);
final Transaction transaction = commentRepository.beginTransaction(); final Transaction transaction = commentRepository.beginTransaction();
try { try {
final String articleId = requestJSONObject.getString(Keys.OBJECT_ID); final String articleId = requestJSONObject.getString(Keys.OBJECT_ID);
final JSONObject article = articleRepository.get(articleId); final JSONObject article = articleRepository.get(articleId);
ret.put(Article.ARTICLE, article);
final String commentName = requestJSONObject.getString(Comment.COMMENT_NAME); final String commentName = requestJSONObject.getString(Comment.COMMENT_NAME);
final String commentEmail = requestJSONObject.getString(Comment.COMMENT_EMAIL).trim().toLowerCase(); final String commentEmail = requestJSONObject.getString(Comment.COMMENT_EMAIL).trim().toLowerCase();
final String commentURL = requestJSONObject.optString(Comment.COMMENT_URL); final String commentURL = requestJSONObject.optString(Comment.COMMENT_URL);
final String commentContent = requestJSONObject.getString(Comment.COMMENT_CONTENT); final String commentContent = requestJSONObject.getString(Comment.COMMENT_CONTENT);
final String originalCommentId = requestJSONObject.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID); final String originalCommentId = requestJSONObject.optString(Comment.COMMENT_ORIGINAL_COMMENT_ID);
ret.put(Comment.COMMENT_ORIGINAL_COMMENT_ID, originalCommentId);
// Step 1: Add comment // Step 1: Add comment
final JSONObject comment = new JSONObject(); final JSONObject comment = new JSONObject();
...@@ -558,9 +584,14 @@ public class CommentMgmtService { ...@@ -558,9 +584,14 @@ public class CommentMgmtService {
comment.put(Comment.COMMENT_DATE, date); comment.put(Comment.COMMENT_DATE, date);
ret.put(Comment.COMMENT_DATE, DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss")); ret.put(Comment.COMMENT_DATE, DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss"));
ret.put("commentDate2", date);
ret.put(Common.COMMENTABLE, preference.getBoolean(Option.ID_C_COMMENTABLE) && article.getBoolean(Article.ARTICLE_COMMENTABLE));
ret.put(Common.PERMALINK, article.getString(Article.ARTICLE_PERMALINK));
ret.put(Comment.COMMENT_NAME, commentName); ret.put(Comment.COMMENT_NAME, commentName);
ret.put(Comment.COMMENT_CONTENT, commentContent); ret.put(Comment.COMMENT_CONTENT, commentContent);
ret.put(Comment.COMMENT_URL, commentURL);
if (!Strings.isEmptyOrNull(originalCommentId)) { if (!Strings.isEmptyOrNull(originalCommentId)) {
originalComment = commentRepository.get(originalCommentId); originalComment = commentRepository.get(originalCommentId);
...@@ -570,6 +601,8 @@ public class CommentMgmtService { ...@@ -570,6 +601,8 @@ public class CommentMgmtService {
comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName); comment.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName);
ret.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName); ret.put(Comment.COMMENT_ORIGINAL_COMMENT_NAME, originalCommentName);
ret.put(Common.IS_REPLY, true);
} else { } else {
LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]", LOGGER.log(Level.WARN, "Not found orginal comment[id={0}] of reply[name={1}, content={2}]",
new String[]{originalCommentId, commentName, commentContent}); new String[]{originalCommentId, commentName, commentContent});
......
...@@ -49,7 +49,7 @@ import org.json.JSONObject; ...@@ -49,7 +49,7 @@ import org.json.JSONObject;
* Comment query service. * Comment query service.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.3.0.8, Jun 28, 2016 * @version 1.3.0.9, Feb 18, 2017
* @since 0.3.5 * @since 0.3.5
*/ */
@Service @Service
...@@ -234,6 +234,7 @@ public class CommentQueryService { ...@@ -234,6 +234,7 @@ public class CommentQueryService {
for (final JSONObject comment : comments) { for (final JSONObject comment : comments) {
comment.put(Comment.COMMENT_TIME, ((Date) comment.get(Comment.COMMENT_DATE)).getTime()); comment.put(Comment.COMMENT_TIME, ((Date) comment.get(Comment.COMMENT_DATE)).getTime());
comment.put("commentDate2", comment.get(Comment.COMMENT_DATE)); // 1.9.0 向后兼容
comment.put(Comment.COMMENT_NAME, comment.getString(Comment.COMMENT_NAME)); comment.put(Comment.COMMENT_NAME, comment.getString(Comment.COMMENT_NAME));
String url = comment.getString(Comment.COMMENT_URL); String url = comment.getString(Comment.COMMENT_URL);
if (StringUtils.contains(url, "<")) { // legacy issue https://github.com/b3log/solo/issues/12091 if (StringUtils.contains(url, "<")) { // legacy issue https://github.com/b3log/solo/issues/12091
......
...@@ -16,12 +16,14 @@ ...@@ -16,12 +16,14 @@
# #
# Description: Solo language configurations(en_US). # Description: Solo language configurations(en_US).
# Version: 2.7.2.12, Nov 8, 2016 # Version: 2.8.2.12, Feb 18, 2017
# Author: Liang Ding # Author: Liang Ding
# Author: Liyuan Li # Author: Liyuan Li
# Author: Dongxu Wang # Author: Dongxu Wang
# #
searchLabel=Search
dynamicLabel=Dynamic
APILabel=Open API APILabel=Open API
exportSQLLabel=Export SQL file exportSQLLabel=Export SQL file
notAllowRegisterLabel=Not allow register notAllowRegisterLabel=Not allow register
...@@ -37,7 +39,7 @@ qiniuLabel=Qiniu ...@@ -37,7 +39,7 @@ qiniuLabel=Qiniu
contributorsLabel=Contributors contributorsLabel=Contributors
developersLabel=Developers developersLabel=Developers
staticErrorLabel=<h1>Latke Configuraton Error</h1>\ staticErrorLabel=<h1>Latke Configuraton Error</h1>\
<br>Please visit <a target='_blank' href='https://hacpai.com/article/1474087427032'>Latke \u914d\u7f6e\u5256\u6790</a> to solve it. <br>Please visit <a target='_blank' href='https://hacpai.com/article/1474087427032'>Latke \u914D\u7F6E\u5256\u6790</a> to solve it.
markdownHelpLabel=<dl><dt>Headings</dt><dd> # First-level heading</dd><dd> #### Fourth-level heading</dd></dl>\ markdownHelpLabel=<dl><dt>Headings</dt><dd> # First-level heading</dd><dd> #### Fourth-level heading</dd></dl>\
<dl><dt>Link</dt><dd>[link text here](link.address.here)</dd></dl>\ <dl><dt>Link</dt><dd>[link text here](link.address.here)</dd></dl>\
<dl><dt>Emphasized text</dt><dd>*italics* or _italics_</dd><dd>**boldface** or __boldface__</dd><dd>***boldface+italics*** or ___boldface+italics___</dd></dl>\ <dl><dt>Emphasized text</dt><dd>*italics* or _italics_</dd><dd>**boldface** or __boldface__</dd><dd>***boldface+italics*** or ___boldface+italics___</dd></dl>\
...@@ -71,7 +73,7 @@ aboutContentLabel=<p><a href="https://github.com/b3log/solo" target="_blank">Sol ...@@ -71,7 +73,7 @@ aboutContentLabel=<p><a href="https://github.com/b3log/solo" target="_blank">Sol
is an open source (<a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">Apache License 2.0</a>) blogging program, which can run on a standard Servlet container.</p>\ is an open source (<a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">Apache License 2.0</a>) blogging program, which can run on a standard Servlet container.</p>\
<p><a href="http://b3log.org" target="_blank">B3log</a> advocates the rights of equality, freedom and passion, and we are trying to create a bran-new experience about individual blogging + community. Sound interesting? <a href="https://github.com/b3log/solo/wiki/Join_us" target="_blank">Join us</a>!</p>\ <p><a href="http://b3log.org" target="_blank">B3log</a> advocates the rights of equality, freedom and passion, and we are trying to create a bran-new experience about individual blogging + community. Sound interesting? <a href="https://github.com/b3log/solo/wiki/Join_us" target="_blank">Join us</a>!</p>\
<a target="blank" href="http://b3log.org/donate.html">\ <a target="blank" href="http://b3log.org/donate.html">\
<div class="ico-alipay-me" alt="Alipay B3log" title="\u901a\u8fc7\u652f\u4ed8\u5b9d\u8fdb\u884c\u6350\u8d60"></div></a> <div class="ico-alipay-me" alt="Alipay B3log" title="\u901A\u8FC7\u652F\u4ED8\u5B9D\u8FDB\u884C\u6350\u8D60"></div></a>
confirmLabel=Confirm confirmLabel=Confirm
adminConsoleLabel=Admin adminConsoleLabel=Admin
adminIndexLabel=Admin Index adminIndexLabel=Admin Index
...@@ -287,9 +289,9 @@ Your posts and comments can <i>maintain bisynchronous</i> in the community and t ...@@ -287,9 +289,9 @@ Your posts and comments can <i>maintain bisynchronous</i> in the community and t
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><span style="font-size: 10px">Tip: Remove "Util.killIE();" in /js/common.js can support all browser.</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><span style="font-size: 10px">Tip: Remove "Util.killIE();" in /js/common.js can support all browser.</span>
closeLabel=Close closeLabel=Close
closeForeverLabel=Close Forever closeForeverLabel=Close Forever
readmoreLabel=Read more\u00bb readmoreLabel=Read more\u00BB
readmore2Label=Read more readmore2Label=Read more
replyLabel=Reply\u00bb replyLabel=Reply\u00BB
homeLabel=Home homeLabel=Home
enableArticleUpdateHint1Label=Enable Article Update Hint: enableArticleUpdateHint1Label=Enable Article Update Hint:
allowVisitDraftViaPermalink1Label=Allow Visit Draft Via Link: allowVisitDraftViaPermalink1Label=Allow Visit Draft Via Link:
......
...@@ -16,381 +16,382 @@ ...@@ -16,381 +16,382 @@
# #
# Description: Solo default language configurations(zh_CN). # Description: Solo default language configurations(zh_CN).
# Version: 2.7.4.20, Nov 9, 2016 # Version: 2.8.4.20, Feb 18, 2017
# Author: Liang Ding # Author: Liang Ding
# Author: Liyuan Li # Author: Liyuan Li
# Author: Dongxu Wang # Author: Dongxu Wang
# #
searchLabel=\u641C\u7D22
APILabel=\u5f00\u653e API\uff0c\u6b22\u8fce\u5404\u4f4d\u72ec\u7acb\u535a\u5ba2\u4e3b\u8fdb\u884c\u8fde\u63a5 dynamicLabel=\u52A8\u6001
exportSQLLabel=\u5bfc\u51fa SQL \u6587\u4ef6 APILabel=\u5F00\u653E API\uFF0C\u6B22\u8FCE\u5404\u4F4D\u72EC\u7ACB\u535A\u5BA2\u4E3B\u8FDB\u884C\u8FDE\u63A5
notAllowRegisterLabel=\u6682\u4e0d\u5f00\u653e\u6ce8\u518c\uff01 exportSQLLabel=\u5BFC\u51FA SQL \u6587\u4EF6
allowRegister1Label=\u5141\u8bb8\u6ce8\u518c\uff1a notAllowRegisterLabel=\u6682\u4E0D\u5F00\u653E\u6CE8\u518C\uFF01
footerContent1Label=\u9875\u811a\uff1a allowRegister1Label=\u5141\u8BB8\u6CE8\u518C\uFF1A
userAvatar1Label=\u5934\u50cf\uff1a footerContent1Label=\u9875\u811A\uFF1A
uploadFileLabel=\u6587\u4ef6\u4e0a\u4f20 <a href="https://hacpai.com/article/1442418791213" target="_blank">(?)</a> userAvatar1Label=\u5934\u50CF\uFF1A
accessKey1Label=Access Key\uff1a uploadFileLabel=\u6587\u4EF6\u4E0A\u4F20 <a href="https://hacpai.com/article/1442418791213" target="_blank">(?)</a>
secretKey1Label=Secret Key\uff1a accessKey1Label=Access Key\uFF1A
domain1Label=\u57df\u540d\uff1a secretKey1Label=Secret Key\uFF1A
bucket1Label=Bucket\uff1a domain1Label=\u57DF\u540D\uFF1A
qiniuLabel=\u4e03\u725b bucket1Label=Bucket\uFF1A
contributorsLabel=\u8d21\u732e\u8005 qiniuLabel=\u4E03\u725B
developersLabel=\u5f00\u53d1\u8005 contributorsLabel=\u8D21\u732E\u8005
staticErrorLabel=<h1><a href='https://hacpai.com/tag/Latke' target='_blank'>Latke</a> \u914d\u7f6e\u9519\u8bef</h1>\ developersLabel=\u5F00\u53D1\u8005
<br>\u8bf7\u6d4f\u89c8 <a target='_blank' href='https://hacpai.com/article/1474087427032'>Latke \u914d\u7f6e\u5256\u6790</a> \u4ee5\u89e3\u51b3\u8be5\u95ee\u9898\u3002 staticErrorLabel=<h1><a href='https://hacpai.com/tag/Latke' target='_blank'>Latke</a> \u914D\u7F6E\u9519\u8BEF</h1>\
markdownHelpLabel=<dl><dt>\u6807\u9898</dt><dd> # \u4e00\u7ea7\u6807\u9898</dd><dd> #### \u56db\u7ea7\u6807\u9898</dd></dl>\ <br>\u8BF7\u6D4F\u89C8 <a target='_blank' href='https://hacpai.com/article/1474087427032'>Latke \u914D\u7F6E\u5256\u6790</a> \u4EE5\u89E3\u51B3\u8BE5\u95EE\u9898\u3002
<dl><dt>\u94fe\u63a5</dt><dd>[\u94fe\u63a5\u6587\u5b57](\u94fe\u63a5\u5730\u5740)</dd></dl>\ markdownHelpLabel=<dl><dt>\u6807\u9898</dt><dd> # \u4E00\u7EA7\u6807\u9898</dd><dd> #### \u56DB\u7EA7\u6807\u9898</dd></dl>\
<dl><dt>\u5f3a\u8c03</dt><dd>*\u659c\u4f53* \u6216\u8005 _\u659c\u4f53_</dd><dd>**\u7c97\u4f53** \u6216\u8005 __\u7c97\u4f53__</dd><dd>***\u7c97\u4f53+\u659c\u4f53*** \u6216\u8005 ___\u7c97\u4f53+\u659c\u4f53___</dd></dl>\ <dl><dt>\u94FE\u63A5</dt><dd>[\u94FE\u63A5\u6587\u5B57](\u94FE\u63A5\u5730\u5740)</dd></dl>\
<dl><dt>\u5217\u8868</dt><dt></dt><dd>* \u65e0\u5e8f</dd><dd>1. \u6709\u5e8f</dd></dl>\ <dl><dt>\u5F3A\u8C03</dt><dd>*\u659C\u4F53* \u6216\u8005 _\u659C\u4F53_</dd><dd>**\u7C97\u4F53** \u6216\u8005 __\u7C97\u4F53__</dd><dd>***\u7C97\u4F53+\u659C\u4F53*** \u6216\u8005 ___\u7C97\u4F53+\u659C\u4F53___</dd></dl>\
<dl><dt>\u4ee3\u7801</dt><dd>`var markDown = undefined`</dd></dl>\ <dl><dt>\u5217\u8868</dt><dt></dt><dd>* \u65E0\u5E8F</dd><dd>1. \u6709\u5E8F</dd></dl>\
<dl><dt>\u56fe\u7247</dt><dd>![alt text](/path/to/img.jpg 'Title')</dd></dl>\ <dl><dt>\u4EE3\u7801</dt><dd>`var markDown = undefined`</dd></dl>\
<dl><dt><a href='http://daringfireball.net/projects/markdown/syntax' target='_blank'>\u5b8c\u6574\u8bed\u6cd5</a></dt></dl> <dl><dt>\u56FE\u7247</dt><dd>![alt text](/path/to/img.jpg 'Title')</dd></dl>\
editType1Label=\u7f16\u8f91\u5668\u7c7b\u578b\uff1a <dl><dt><a href='http://daringfireball.net/projects/markdown/syntax' target='_blank'>\u5B8C\u6574\u8BED\u6CD5</a></dt></dl>
pageLinkLabel=\u94fe\u63a5 editType1Label=\u7F16\u8F91\u5668\u7C7B\u578B\uFF1A
type1Label=\u7c7b\u578b\uff1a pageLinkLabel=\u94FE\u63A5
typeLabel=\u7c7b\u578b type1Label=\u7C7B\u578B\uFF1A
onlineVisitor1Label=\u5f53\u524d\u8bbf\u5ba2\uff1a typeLabel=\u7C7B\u578B
noDataLabel=\u8be5\u5217\u8868\u5f88\u61d2\uff0c\u4ec0\u4e48\u90fd\u6ca1\u6709\u7559\u4e0b\u3002\u3002\u3002 onlineVisitor1Label=\u5F53\u524D\u8BBF\u5BA2\uFF1A
replayEmailExplanationLabel=<b>\u53d8\u91cf\u8bf4\u660e</b><ul class="marginLeft12"><li><b>${blogTitle}:</b> \u535a\u5ba2\u6807\u9898</li><li><b>${postLink}:</b> \u539f\u6587\uff08\u6587\u7ae0/\u81ea\u5b9a\u4e49\u9875\u9762\uff09\u94fe\u63a5\u5730\u5740</li><li><b>${postTitle}:</b> \u539f\u6587\u6807\u9898</li><li><b>${replier}:</b> \u56de\u590d\u4eba\uff08\u5982\u679c\u56de\u590d\u4eba\u586b\u5199\u4e86\u4ed6\u7684\u94fe\u63a5\u5730\u5740\uff0c\u8fd9\u4e2a\u53d8\u91cf\u5c06\u5305\u542b\u94fe\u63a5\u5730\u5740\uff09</li><li><b>${replyURL}:</b> \u56de\u590d\u94fe\u63a5\uff08\u5e26 # \u951a\u70b9\uff09</li><li><b>${replyContent}:</b> \u56de\u590d\u5185\u5bb9</li></ul> noDataLabel=\u8BE5\u5217\u8868\u5F88\u61D2\uFF0C\u4EC0\u4E48\u90FD\u6CA1\u6709\u7559\u4E0B\u3002\u3002\u3002
emailSubject1Label=\u90ae\u4ef6\u4e3b\u9898\uff1a replayEmailExplanationLabel=<b>\u53D8\u91CF\u8BF4\u660E</b><ul class="marginLeft12"><li><b>${blogTitle}:</b> \u535A\u5BA2\u6807\u9898</li><li><b>${postLink}:</b> \u539F\u6587\uFF08\u6587\u7AE0/\u81EA\u5B9A\u4E49\u9875\u9762\uFF09\u94FE\u63A5\u5730\u5740</li><li><b>${postTitle}:</b> \u539F\u6587\u6807\u9898</li><li><b>${replier}:</b> \u56DE\u590D\u4EBA\uFF08\u5982\u679C\u56DE\u590D\u4EBA\u586B\u5199\u4E86\u4ED6\u7684\u94FE\u63A5\u5730\u5740\uFF0C\u8FD9\u4E2A\u53D8\u91CF\u5C06\u5305\u542B\u94FE\u63A5\u5730\u5740\uFF09</li><li><b>${replyURL}:</b> \u56DE\u590D\u94FE\u63A5\uFF08\u5E26 # \u951A\u70B9\uFF09</li><li><b>${replyContent}:</b> \u56DE\u590D\u5185\u5BB9</li></ul>
emailContent1Label=\u90ae\u4ef6\u5185\u5bb9\uff1a emailSubject1Label=\u90AE\u4EF6\u4E3B\u9898\uFF1A
linkDescriptionLabel=\u94fe\u63a5\u63cf\u8ff0 emailContent1Label=\u90AE\u4EF6\u5185\u5BB9\uFF1A
linkDescription1Label=\u63cf\u8ff0\uff1a linkDescriptionLabel=\u94FE\u63A5\u63CF\u8FF0
addressInvalidLabel=\u8bf7\u4ee5\u534f\u8bae\u5f00\u5934\uff0c\u5982: http:// linkDescription1Label=\u63CF\u8FF0\uFF1A
ToolLabel=\u5de5\u5177 addressInvalidLabel=\u8BF7\u4EE5\u534F\u8BAE\u5F00\u5934\uFF0C\u5982: http://
replayEmailTemplateLabel=\u56de\u590d\u63d0\u9192\u90ae\u4ef6\u6a21\u7248 ToolLabel=\u5DE5\u5177
titleAndContentLabel=\u6807\u9898+\u6b63\u6587 replayEmailTemplateLabel=\u56DE\u590D\u63D0\u9192\u90AE\u4EF6\u6A21\u7248
titleAndContentLabel=\u6807\u9898+\u6B63\u6587
titleAndAbstractLabel=\u6807\u9898+\u6458\u8981 titleAndAbstractLabel=\u6807\u9898+\u6458\u8981
titleOnlyLabel=\u4ec5\u6807\u9898 titleOnlyLabel=\u4EC5\u6807\u9898
articleListDisplay1Label=\u6587\u7ae0\u5217\u8868\u663e\u793a\u65b9\u5f0f\uff1a articleListDisplay1Label=\u6587\u7AE0\u5217\u8868\u663E\u793A\u65B9\u5F0F\uFF1A
checkingVersionLabel=\u6b63\u5728\u68c0\u67e5\u7248\u672c\u66f4\u65b0.... checkingVersionLabel=\u6B63\u5728\u68C0\u67E5\u7248\u672C\u66F4\u65B0....
upToDateLabel=\u60a8\u6b63\u5728\u4f7f\u7528\u6700\u65b0\u7684 Solo ;-) upToDateLabel=\u60A8\u6B63\u5728\u4F7F\u7528\u6700\u65B0\u7684 Solo ;-)
outOfDateLabel=\u60a8\u7684 Solo \u8fc7\u65f6\u4e86 ;-(\uff0c\u8bf7\u4e0b\u8f7d\u6700\u65b0\u7248\u672c\uff1a outOfDateLabel=\u60A8\u7684 Solo \u8FC7\u65F6\u4E86 ;-(\uFF0C\u8BF7\u4E0B\u8F7D\u6700\u65B0\u7248\u672C\uFF1A
aboutLabel=\u5173\u4e8e aboutLabel=\u5173\u4E8E
aboutContentLabel=<p><a href="https://github.com/b3log/solo" target="_blank">Solo</a> \ aboutContentLabel=<p><a href="https://github.com/b3log/solo" target="_blank">Solo</a> \
\u662f\u4e00\u6b3e\u5f00\u6e90\uff08<a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">Apache License 2.0</a>\uff09\u7684\u535a\u5ba2\u7a0b\u5e8f\uff0c\u4e0d\u4ec5\u53ef\u4ee5\u5728\u591a\u79cd\u4e91\u5e73\u53f0\u4e0a\u8fd0\u884c\uff0c\u4e5f\u53ef\u4ee5\u5728\u6807\u51c6 Servlet \u5bb9\u5668\u4e0a\u8fd0\u884c\u3002</p>\ \u662F\u4E00\u6B3E\u5F00\u6E90\uFF08<a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">Apache License 2.0</a>\uFF09\u7684\u535A\u5BA2\u7A0B\u5E8F\uFF0C\u4E0D\u4EC5\u53EF\u4EE5\u5728\u591A\u79CD\u4E91\u5E73\u53F0\u4E0A\u8FD0\u884C\uFF0C\u4E5F\u53EF\u4EE5\u5728\u6807\u51C6 Servlet \u5BB9\u5668\u4E0A\u8FD0\u884C\u3002</p>\
<p><a href="http://b3log.org" target="_blank">B3log</a> \u63d0\u5021\u5e73\u7b49\u3001\u81ea\u7531\u3001\u5954\u653e\uff0c\u5e76\u6b63\u5728\u5c1d\u8bd5\u6784\u5efa\u4e2a\u4eba\u535a\u5ba2+\u8bba\u575b\u7684\u4e92\u52a8\u4f53\u9a8c\u3002\u5982\u679c\u60a8\u6709\u5174\u8da3\uff0c<a href="https://github.com/b3log/solo/wiki/Join_us" target="_blank">\u52a0\u5165\u6211\u4eec</a>\u5427\uff01\ <p><a href="http://b3log.org" target="_blank">B3log</a> \u63D0\u5021\u5E73\u7B49\u3001\u81EA\u7531\u3001\u5954\u653E\uFF0C\u5E76\u6B63\u5728\u5C1D\u8BD5\u6784\u5EFA\u4E2A\u4EBA\u535A\u5BA2+\u8BBA\u575B\u7684\u4E92\u52A8\u4F53\u9A8C\u3002\u5982\u679C\u60A8\u6709\u5174\u8DA3\uFF0C<a href="https://github.com/b3log/solo/wiki/Join_us" target="_blank">\u52A0\u5165\u6211\u4EEC</a>\u5427\uFF01\
</p><a target="blank" href="http://b3log.org/donate.html">\ </p><a target="blank" href="http://b3log.org/donate.html">\
<div class="ico-alipay-me" alt="Alipay B3log" title="\u901a\u8fc7\u652f\u4ed8\u5b9d\u8fdb\u884c\u6350\u8d60"></div></a> <div class="ico-alipay-me" alt="Alipay B3log" title="\u901A\u8FC7\u652F\u4ED8\u5B9D\u8FDB\u884C\u6350\u8D60"></div></a>
confirmLabel=\u786e\u5b9a confirmLabel=\u786E\u5B9A
adminConsoleLabel=\u540e\u53f0\u7ba1\u7406 adminConsoleLabel=\u540E\u53F0\u7BA1\u7406
adminIndexLabel=\u540e\u53f0\u9996\u9875 adminIndexLabel=\u540E\u53F0\u9996\u9875
postArticleLabel=\u53d1\u5e03\u6587\u7ae0 postArticleLabel=\u53D1\u5E03\u6587\u7AE0
articleListLabel=\u6587\u7ae0\u7ba1\u7406 articleListLabel=\u6587\u7AE0\u7BA1\u7406
commentListLabel=\u8bc4\u8bba\u7ba1\u7406 commentListLabel=\u8BC4\u8BBA\u7BA1\u7406
draftListLabel=\u8349\u7a3f\u5939 draftListLabel=\u8349\u7A3F\u5939
userManageLabel=\u7528\u6237\u7ba1\u7406 userManageLabel=\u7528\u6237\u7BA1\u7406
commonUserLabel=\u4e00\u822c\u7528\u6237 commonUserLabel=\u4E00\u822C\u7528\u6237
visitorUserLabel=\u8bbf\u5ba2\u7528\u6237 visitorUserLabel=\u8BBF\u5BA2\u7528\u6237
addUserLabel=\u6dfb\u52a0\u7528\u6237 addUserLabel=\u6DFB\u52A0\u7528\u6237
updateUserLabel=\u66f4\u65b0\u7528\u6237 updateUserLabel=\u66F4\u65B0\u7528\u6237
linkManagementLabel=\u94fe\u63a5\u7ba1\u7406 linkManagementLabel=\u94FE\u63A5\u7BA1\u7406
pluginMgmtLabel=\u63d2\u4ef6\u7ba1\u7406 pluginMgmtLabel=\u63D2\u4EF6\u7BA1\u7406
pluginNameLabel=\u63d2\u4ef6\u540d pluginNameLabel=\u63D2\u4EF6\u540D
versionLabel=\u7248\u672c versionLabel=\u7248\u672C
statusLabel=\u72b6\u6001 statusLabel=\u72B6\u6001
enabledLabel=\u5df2\u542f\u7528 enabledLabel=\u5DF2\u542F\u7528
disabledLabel=\u5df2\u7981\u7528 disabledLabel=\u5DF2\u7981\u7528
enableLabel=\u542f\u7528 enableLabel=\u542F\u7528
disableLabel=\u7981\u7528 disableLabel=\u7981\u7528
settingLabel=\u8bbe\u7f6e settingLabel=\u8BBE\u7F6E
preferenceLabel=\u504f\u597d\u8bbe\u5b9a preferenceLabel=\u504F\u597D\u8BBE\u5B9A
localeString1Label=\u8bed\u8a00\uff1a localeString1Label=\u8BED\u8A00\uFF1A
timeZoneId1Label=\u65f6\u533a\uff1a timeZoneId1Label=\u65F6\u533A\uFF1A
adminLabel=\u7ba1\u7406 adminLabel=\u7BA1\u7406
roleLabel=\u89d2\u8272 roleLabel=\u89D2\u8272
administratorLabel=\u7ba1\u7406\u5458 administratorLabel=\u7BA1\u7406\u5458
loginLabel=\u767b\u5f55 loginLabel=\u767B\u5F55
loginFailLabel=\u767b\u5f55\u5931\u8d25 :-( loginFailLabel=\u767B\u5F55\u5931\u8D25 :-(
logoutLabel=\u767b\u51fa logoutLabel=\u767B\u51FA
initLabel=\u521d\u59cb\u5316 initLabel=\u521D\u59CB\u5316
popTagsLabel=\u5206\u7c7b\u6807\u7b7e popTagsLabel=\u5206\u7C7B\u6807\u7B7E
tag1Label=\u6807\u7b7e\uff1a tag1Label=\u6807\u7B7E\uFF1A
tags1Label=\u6807\u7b7e\uff1a tags1Label=\u6807\u7B7E\uFF1A
tags1WithTips1Label=\u6807\u7b7e\uff08\u4f7f\u7528\u82f1\u6587\u8f93\u5165\u72b6\u6001\u4e0b\u7684\u9017\u53f7\u8fdb\u884c\u5206\u9694\uff09\uff1a tags1WithTips1Label=\u6807\u7B7E\uFF08\u4F7F\u7528\u82F1\u6587\u8F93\u5165\u72B6\u6001\u4E0B\u7684\u9017\u53F7\u8FDB\u884C\u5206\u9694\uFF09\uFF1A
recentArticlesLabel=\u6700\u65b0\u6587\u7ae0 recentArticlesLabel=\u6700\u65B0\u6587\u7AE0
recentCommentsLabel=\u6700\u65b0\u8bc4\u8bba recentCommentsLabel=\u6700\u65B0\u8BC4\u8BBA
postCommentsLabel=\u53d1\u8868\u8bc4\u8bba postCommentsLabel=\u53D1\u8868\u8BC4\u8BBA
mostCommentArticlesLabel=\u8bc4\u8bba\u6700\u591a\u7684\u6587\u7ae0 mostCommentArticlesLabel=\u8BC4\u8BBA\u6700\u591A\u7684\u6587\u7AE0
mostViewCountArticlesLabel=\u8bbf\u95ee\u6700\u591a\u7684\u6587\u7ae0 mostViewCountArticlesLabel=\u8BBF\u95EE\u6700\u591A\u7684\u6587\u7AE0
em00Label=\u5fae\u7b11 em00Label=\u5FAE\u7B11
em01Label=\u5927\u7b11 em01Label=\u5927\u7B11
em02Label=\u9ad8\u5174 em02Label=\u9AD8\u5174
em03Label=\u60b2\u4f24 em03Label=\u60B2\u4F24
em04Label=\u54ed\u6ce3 em04Label=\u54ED\u6CE3
em05Label=\u65e0\u8bed em05Label=\u65E0\u8BED
em06Label=\u70e6\u8e81 em06Label=\u70E6\u8E81
em07Label=\u751f\u6c14 em07Label=\u751F\u6C14
em08Label=\u6211\u7785 em08Label=\u6211\u7785
em09Label=\u60ca\u8bb6 em09Label=\u60CA\u8BB6
em10Label=\u9177 em10Label=\u9177
em11Label=\u987d\u76ae em11Label=\u987D\u76AE
em12Label=\u7231\u5fc3 em12Label=\u7231\u5FC3
em13Label=\u5fc3\u788e em13Label=\u5FC3\u788E
em14Label=\u9b54\u9b3c em14Label=\u9B54\u9B3C
linkLabel=\u53cb\u60c5\u94fe\u63a5 linkLabel=\u53CB\u60C5\u94FE\u63A5
sumLabel=\u5171 sumLabel=\u5171
pageLabel=\u9875 pageLabel=\u9875
commentLabel=\u8bc4\u8bba commentLabel=\u8BC4\u8BBA
linkTitleLabel=\u94fe\u63a5\u6807\u9898 linkTitleLabel=\u94FE\u63A5\u6807\u9898
linkTitle1Label=\u6807\u9898\uff1a linkTitle1Label=\u6807\u9898\uFF1A
updateLabel=\u66f4\u65b0 updateLabel=\u66F4\u65B0
removeLabel=\u5220\u9664 removeLabel=\u5220\u9664
putTopLabel=\u7f6e\u9876 putTopLabel=\u7F6E\u9876
cancelPutTopLabel=\u53d6\u6d88\u7f6e\u9876 cancelPutTopLabel=\u53D6\u6D88\u7F6E\u9876
downloadCountLabel=\u4e0b\u8f7d\u6b21\u6570 downloadCountLabel=\u4E0B\u8F7D\u6B21\u6570
sizeLabel=\u5927\u5c0f sizeLabel=\u5927\u5C0F
uploadDateLabel=\u4e0a\u4f20\u65e5\u671f uploadDateLabel=\u4E0A\u4F20\u65E5\u671F
downloadURLLabel=\u4e0b\u8f7d\u5730\u5740 downloadURLLabel=\u4E0B\u8F7D\u5730\u5740
downloadLabel=\u4e0b\u8f7d downloadLabel=\u4E0B\u8F7D
createDateLabel=\u521b\u5efa\u65e5\u671f createDateLabel=\u521B\u5EFA\u65E5\u671F
updateDateLabel=\u66f4\u65b0\u65e5\u671f updateDateLabel=\u66F4\u65B0\u65E5\u671F
titleLabel=\u6807\u9898 titleLabel=\u6807\u9898
title1Label=\u6807\u9898\uff1a title1Label=\u6807\u9898\uFF1A
content1Label=\u6b63\u6587\uff1a content1Label=\u6B63\u6587\uFF1A
abstract1Label=\u6458\u8981\uff1a abstract1Label=\u6458\u8981\uFF1A
publishLabel=\u53d1\u5e03 publishLabel=\u53D1\u5E03
unPublishLabel=\u53d6\u6d88\u53d1\u5e03 unPublishLabel=\u53D6\u6D88\u53D1\u5E03
urlLabel=URL urlLabel=URL
url1Label=URL\uff1a url1Label=URL\uFF1A
addLinkLabel=\u6dfb\u52a0\u94fe\u63a5 addLinkLabel=\u6DFB\u52A0\u94FE\u63A5
updateLinkLabel=\u66f4\u65b0\u94fe\u63a5 updateLinkLabel=\u66F4\u65B0\u94FE\u63A5
archiveLabel=\u5b58\u6863 archiveLabel=\u5B58\u6863
archive1Label=\u5b58\u6863\uff1a archive1Label=\u5B58\u6863\uFF1A
yearLabel=\u5e74 yearLabel=\u5E74
monthLabel=\u6708 monthLabel=\u6708
pageLabel=\u9875\u9762 pageLabel=\u9875\u9762
navMgmtLabel=\u5bfc\u822a\u7ba1\u7406 navMgmtLabel=\u5BFC\u822A\u7BA1\u7406
navLabel=\u5bfc\u822a navLabel=\u5BFC\u822A
openMethod1Label=\u9875\u9762\u6253\u5f00\u65b9\u5f0f\uff1a openMethod1Label=\u9875\u9762\u6253\u5F00\u65B9\u5F0F\uFF1A
openMethodLabel=\u9875\u9762\u6253\u5f00\u65b9\u5f0f openMethodLabel=\u9875\u9762\u6253\u5F00\u65B9\u5F0F
linkEmptyLabel=\u94fe\u63a5\u4e0d\u80fd\u4e3a\u7a7a linkEmptyLabel=\u94FE\u63A5\u4E0D\u80FD\u4E3A\u7A7A
targetSelfLabel=\u5728\u5f53\u524d\u7a97\u53e3/\u6846\u67b6\u6253\u5f00 targetSelfLabel=\u5728\u5F53\u524D\u7A97\u53E3/\u6846\u67B6\u6253\u5F00
targetBlankLabel=\u5728\u65b0\u7a97\u53e3\u6253\u5f00 (_blank) targetBlankLabel=\u5728\u65B0\u7A97\u53E3\u6253\u5F00 (_blank)
targetParentLabel=\u5728\u7236\u7a97\u53e3/\u6846\u67b6\u6253\u5f00 (_parent) targetParentLabel=\u5728\u7236\u7A97\u53E3/\u6846\u67B6\u6253\u5F00 (_parent)
targetTopLabel=\u5728\u9876\u90e8\u6846\u67b6\u6253\u5f00\uff08\u91cd\u7f6e\u6240\u6709\u6846\u67b6\uff09 (_top) targetTopLabel=\u5728\u9876\u90E8\u6846\u67B6\u6253\u5F00\uFF08\u91CD\u7F6E\u6240\u6709\u6846\u67B6\uFF09 (_top)
othersLabel=\u5176\u4ed6 othersLabel=\u5176\u4ED6
fileListLabel=\u6587\u4ef6\u7ba1\u7406 fileListLabel=\u6587\u4EF6\u7BA1\u7406
submitUploadLabel=\u4e0a\u4f20 submitUploadLabel=\u4E0A\u4F20
fileNameLabel=\u6587\u4ef6\u540d fileNameLabel=\u6587\u4EF6\u540D
paramSettingsLabel=\u53c2\u6570\u8bbe\u7f6e paramSettingsLabel=\u53C2\u6570\u8BBE\u7F6E
configSettingsLabel=\u4fe1\u606f\u914d\u7f6e configSettingsLabel=\u4FE1\u606F\u914D\u7F6E
skinLabel=\u76ae\u80a4 skinLabel=\u76AE\u80A4
signLabel=\u7b7e\u540d\u6863 signLabel=\u7B7E\u540D\u6863
sign1Label=\u7b7e\u540d\u6863\uff1a sign1Label=\u7B7E\u540D\u6863\uFF1A
noSignLabel=\u4e0d\u4f7f\u7528\u7b7e\u540d\u6863 noSignLabel=\u4E0D\u4F7F\u7528\u7B7E\u540D\u6863
signIsNullLabel=\u8be5\u7b7e\u540d\u6863\u4e3a\u7a7a signIsNullLabel=\u8BE5\u7B7E\u540D\u6863\u4E3A\u7A7A
statisticLabel=\u535a\u5ba2\u7edf\u8ba1 statisticLabel=\u535A\u5BA2\u7EDF\u8BA1
viewLabel=\u6d4f\u89c8 viewLabel=\u6D4F\u89C8
countLabel=\u7bc7 countLabel=\u7BC7
viewCount1Label=\u6d4f\u89c8\u6b21\u6570\uff1a viewCount1Label=\u6D4F\u89C8\u6B21\u6570\uFF1A
articleCount1Label=\u6587\u7ae0\u603b\u6570\uff1a articleCount1Label=\u6587\u7AE0\u603B\u6570\uFF1A
commentCountLabel=\u8bc4\u8bba\u6570 commentCountLabel=\u8BC4\u8BBA\u6570
commentCount1Label=\u8bc4\u8bba\u603b\u6570\uff1a commentCount1Label=\u8BC4\u8BBA\u603B\u6570\uFF1A
commentEmotions1Label=\u8868\u60c5\uff1a commentEmotions1Label=\u8868\u60C5\uFF1A
commentEmotionsLabel=\u8868\u60c5 commentEmotionsLabel=\u8868\u60C5
commentName1Label=\u59d3\u540d\uff1a commentName1Label=\u59D3\u540D\uFF1A
commentNameLabel=\u59d3\u540d commentNameLabel=\u59D3\u540D
commentEmail1Label=\u90ae\u7bb1\uff1a commentEmail1Label=\u90AE\u7BB1\uFF1A
commentEmailLabel=\u90ae\u7bb1 commentEmailLabel=\u90AE\u7BB1
commentURL1Label=URL\uff1a commentURL1Label=URL\uFF1A
commentURLLabel=URL commentURLLabel=URL
commentContent1Label=\u8bc4\u8bba\u5185\u5bb9\uff1a commentContent1Label=\u8BC4\u8BBA\u5185\u5BB9\uFF1A
commentContentLabel=\u8bc4\u8bba\u5185\u5bb9 commentContentLabel=\u8BC4\u8BBA\u5185\u5BB9
getDateLabel=\u83b7\u53d6\u65e5\u671f getDateLabel=\u83B7\u53D6\u65E5\u671F
getArticleLabel=\u83b7\u53d6\u6587\u7ae0 getArticleLabel=\u83B7\u53D6\u6587\u7AE0
selectDateLabel=\u9009\u62e9\u65e5\u671f selectDateLabel=\u9009\u62E9\u65E5\u671F
selectDate1Label=\u9009\u62e9\u65e5\u671f\uff1a selectDate1Label=\u9009\u62E9\u65E5\u671F\uFF1A
selectLabel=\u9009\u62e9 selectLabel=\u9009\u62E9
importLabel=\u5bfc\u5165 importLabel=\u5BFC\u5165
chooseBlog1Label=\u8bf7\u9009\u62e9\u9700\u8981\u7ba1\u7406\u7684\u535a\u5ba2\uff1a chooseBlog1Label=\u8BF7\u9009\u62E9\u9700\u8981\u7BA1\u7406\u7684\u535A\u5BA2\uFF1A
blogArticleImportLabel=\u6587\u7ae0\u5bfc\u5165 blogArticleImportLabel=\u6587\u7AE0\u5BFC\u5165
userName1Label=\u7528\u6237\u540d\uff1a userName1Label=\u7528\u6237\u540D\uFF1A
userLabel=\u7528\u6237 userLabel=\u7528\u6237
userPassword1Label=\u5bc6\u7801\uff1a userPassword1Label=\u5BC6\u7801\uFF1A
userPasswordLabel=\u5bc6\u7801 userPasswordLabel=\u5BC6\u7801
userURL1Label=\u94fe\u63a5\uff1a userURL1Label=\u94FE\u63A5\uFF1A
userURLLabel=\u94fe\u63a5 userURLLabel=\u94FE\u63A5
categoryLabel=\u5206\u7c7b categoryLabel=\u5206\u7C7B
noticeBoard1Label=\u516c\u544a\uff1a noticeBoard1Label=\u516C\u544A\uFF1A
noticeBoardLabel=\u516c\u544a noticeBoardLabel=\u516C\u544A
htmlhead1Label=HTML head\uff1a htmlhead1Label=HTML head\uFF1A
indexTagDisplayCntLabel=\u9996\u9875\u6807\u7b7e\u663e\u793a\u6570 indexTagDisplayCntLabel=\u9996\u9875\u6807\u7B7E\u663E\u793A\u6570
indexTagDisplayCnt1Label=\u9996\u9875\u6807\u7b7e\u663e\u793a\u6570\uff1a indexTagDisplayCnt1Label=\u9996\u9875\u6807\u7B7E\u663E\u793A\u6570\uFF1A
indexRecentArticleDisplayCntLabel=\u6700\u65b0\u6587\u7ae0\u663e\u793a\u6570\u76ee indexRecentArticleDisplayCntLabel=\u6700\u65B0\u6587\u7AE0\u663E\u793A\u6570\u76EE
indexRecentArticleDisplayCnt1Label=\u6700\u65b0\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a indexRecentArticleDisplayCnt1Label=\u6700\u65B0\u6587\u7AE0\u663E\u793A\u6570\u76EE\uFF1A
indexRecentCommentDisplayCntLabel=\u6700\u65b0\u8bc4\u8bba\u663e\u793a\u6570\u76ee indexRecentCommentDisplayCntLabel=\u6700\u65B0\u8BC4\u8BBA\u663E\u793A\u6570\u76EE
indexRecentCommentDisplayCnt1Label=\u6700\u65b0\u8bc4\u8bba\u663e\u793a\u6570\u76ee\uff1a indexRecentCommentDisplayCnt1Label=\u6700\u65B0\u8BC4\u8BBA\u663E\u793A\u6570\u76EE\uFF1A
indexMostCommentArticleDisplayCntLabel=\u8bc4\u8bba\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee indexMostCommentArticleDisplayCntLabel=\u8BC4\u8BBA\u6700\u591A\u6587\u7AE0\u663E\u793A\u6570\u76EE
indexMostCommentArticleDisplayCnt1Label=\u8bc4\u8bba\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a indexMostCommentArticleDisplayCnt1Label=\u8BC4\u8BBA\u6700\u591A\u6587\u7AE0\u663E\u793A\u6570\u76EE\uFF1A
indexMostViewArticleDisplayCntLabel=\u8bbf\u95ee\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee indexMostViewArticleDisplayCntLabel=\u8BBF\u95EE\u6700\u591A\u6587\u7AE0\u663E\u793A\u6570\u76EE
indexMostViewArticleDisplayCnt1Label=\u8bbf\u95ee\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a indexMostViewArticleDisplayCnt1Label=\u8BBF\u95EE\u6700\u591A\u6587\u7AE0\u663E\u793A\u6570\u76EE\uFF1A
relevantArticlesDisplayCntLabel=\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee relevantArticlesDisplayCntLabel=\u76F8\u5173\u9605\u8BFB\u663E\u793A\u6570\u76EE
relevantArticlesDisplayCnt1Label=\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a relevantArticlesDisplayCnt1Label=\u76F8\u5173\u9605\u8BFB\u663E\u793A\u6570\u76EE\uFF1A
randomArticlesDisplayCntLabel=\u968f\u673a\u9605\u8bfb\u663e\u793a\u6570\u76ee randomArticlesDisplayCntLabel=\u968F\u673A\u9605\u8BFB\u663E\u793A\u6570\u76EE
randomArticlesDisplayCnt1Label=\u968f\u673a\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a randomArticlesDisplayCnt1Label=\u968F\u673A\u9605\u8BFB\u663E\u793A\u6570\u76EE\uFF1A
externalRelevantArticlesDisplayCntLabel=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee externalRelevantArticlesDisplayCntLabel=\u7AD9\u5916\u76F8\u5173\u9605\u8BFB\u663E\u793A\u6570\u76EE
externalRelevantArticlesDisplayCnt1Label=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a externalRelevantArticlesDisplayCnt1Label=\u7AD9\u5916\u76F8\u5173\u9605\u8BFB\u663E\u793A\u6570\u76EE\uFF1A
windowSizeLabel=\u5206\u9875\u9875\u7801\u6700\u5927\u5bbd\u5ea6 windowSizeLabel=\u5206\u9875\u9875\u7801\u6700\u5927\u5BBD\u5EA6
windowSize1Label=\u5206\u9875\u9875\u7801\u6700\u5927\u5bbd\u5ea6\uff1a windowSize1Label=\u5206\u9875\u9875\u7801\u6700\u5927\u5BBD\u5EA6\uFF1A
pageSizeLabel=\u5206\u9875\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570 pageSizeLabel=\u5206\u9875\u6BCF\u9875\u663E\u793A\u6587\u7AE0\u6570
pageSize1Label=\u5206\u9875\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570\uff1a pageSize1Label=\u5206\u9875\u6BCF\u9875\u663E\u793A\u6587\u7AE0\u6570\uFF1A
blogTitle1Label=\u535a\u5ba2\u6807\u9898\uff1a blogTitle1Label=\u535A\u5BA2\u6807\u9898\uFF1A
blogSubtitle1Label=\u535a\u5ba2\u5b50\u6807\u9898\uff1a blogSubtitle1Label=\u535A\u5BA2\u5B50\u6807\u9898\uFF1A
blogHost1Label=\u535a\u5ba2\u5730\u5740\uff1a blogHost1Label=\u535A\u5BA2\u5730\u5740\uFF1A
submmitCommentLabel=\u63d0\u4ea4\u8bc4\u8bba submmitCommentLabel=\u63D0\u4EA4\u8BC4\u8BBA
saveLabel=\u4fdd\u5b58 saveLabel=\u4FDD\u5B58
autoSaveLabel=\u81ea\u52a8\u4fdd\u5b58 autoSaveLabel=\u81EA\u52A8\u4FDD\u5B58
tagLabel=\u6807\u7b7e tagLabel=\u6807\u7B7E
tagsLabel=\u6807\u7b7e tagsLabel=\u6807\u7B7E
importedLabel=\u5df2\u5bfc\u5165 importedLabel=\u5DF2\u5BFC\u5165
captcha1Label=\u9a8c\u8bc1\u7801\uff1a captcha1Label=\u9A8C\u8BC1\u7801\uFF1A
captchaLabel=\u9a8c\u8bc1\u7801 captchaLabel=\u9A8C\u8BC1\u7801
indexLabel=\u9996\u9875 indexLabel=\u9996\u9875
nextArticle1Label=\u65b0\u4e00\u7bc7\uff1a nextArticle1Label=\u65B0\u4E00\u7BC7\uFF1A
previousArticle1Label=\u65e7\u4e00\u7bc7\uff1a previousArticle1Label=\u65E7\u4E00\u7BC7\uFF1A
updatedLabel=\u6709\u66f4\u65b0\uff01 updatedLabel=\u6709\u66F4\u65B0\uFF01
topArticleLabel=\u7f6e\u9876\uff01 topArticleLabel=\u7F6E\u9876\uFF01
previousPageLabel=\u4e0a\u4e00\u9875 previousPageLabel=\u4E0A\u4E00\u9875
nextPagePabel=\u4e0b\u4e00\u9875 nextPagePabel=\u4E0B\u4E00\u9875
firstPageLabel=\u7b2c\u4e00\u9875 firstPageLabel=\u7B2C\u4E00\u9875
lastPageLabel=\u6700\u540e\u4e00\u9875 lastPageLabel=\u6700\u540E\u4E00\u9875
returnTo1Label=\u8fd4\u56de\uff1a returnTo1Label=\u8FD4\u56DE\uFF1A
previousStepLabel=\u4e0a\u4e00\u6b65 previousStepLabel=\u4E0A\u4E00\u6B65
nextStepLabel=\u4e0b\u4e00\u6b65 nextStepLabel=\u4E0B\u4E00\u6B65
postToCommunityLabel=\u53d1\u5e03\u5230\u793e\u533a\uff1a postToCommunityLabel=\u53D1\u5E03\u5230\u793E\u533A\uFF1A
atomLabel=Atom atomLabel=Atom
relevantArticlesLabel=\u76f8\u5173\u9605\u8bfb relevantArticlesLabel=\u76F8\u5173\u9605\u8BFB
relevantArticles1Label=\u76f8\u5173\u9605\u8bfb\uff1a relevantArticles1Label=\u76F8\u5173\u9605\u8BFB\uFF1A
randomArticlesLabel=\u968f\u673a\u9605\u8bfb randomArticlesLabel=\u968F\u673A\u9605\u8BFB
randomArticles1Label=\u968f\u673a\u9605\u8bfb\uff1a randomArticles1Label=\u968F\u673A\u9605\u8BFB\uFF1A
externalRelevantArticlesLabel=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb externalRelevantArticlesLabel=\u7AD9\u5916\u76F8\u5173\u9605\u8BFB
externalRelevantArticles1Label=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\uff1a externalRelevantArticles1Label=\u7AD9\u5916\u76F8\u5173\u9605\u8BFB\uFF1A
metaKeywords1Label=Meta Keywords: metaKeywords1Label=Meta Keywords:
metaDescription1Label=Meta Description: metaDescription1Label=Meta Description:
removeUnusedTagsLabel=\u79fb\u9664\u672a\u4f7f\u7528\u6807\u7b7e removeUnusedTagsLabel=\u79FB\u9664\u672A\u4F7F\u7528\u6807\u7B7E
goTopLabel=\u9876\u90e8 goTopLabel=\u9876\u90E8
permalink1Label=\u94fe\u63a5\uff1a permalink1Label=\u94FE\u63A5\uFF1A
permalinkLabel=\u94fe\u63a5 permalinkLabel=\u94FE\u63A5
welcomeToSoloLabel=\u6b22\u8fce\u4f7f\u7528 welcomeToSoloLabel=\u6B22\u8FCE\u4F7F\u7528
forgotLabel=\u5fd8\u8bb0\u5bc6\u7801 forgotLabel=\u5FD8\u8BB0\u5BC6\u7801
sendLabel=\u53d1\u9001 sendLabel=\u53D1\u9001
userEmailNotFoundMsg=\u90ae\u7bb1\u5730\u5740\u6709\u8bef\uff0c\u8bf7\u91cd\u8bd5 userEmailNotFoundMsg=\u90AE\u7BB1\u5730\u5740\u6709\u8BEF\uFF0C\u8BF7\u91CD\u8BD5
resetPwdSuccessMsg=\u5bc6\u7801\u4fee\u6539\u6210\u529f resetPwdSuccessMsg=\u5BC6\u7801\u4FEE\u6539\u6210\u529F
resetPwdSuccessSend=\u66f4\u6539\u5bc6\u7801\u7684\u786e\u8ba4\u94fe\u63a5\u5df2\u53d1\u9001\u81f3\u6307\u5b9a\u90ae\u7bb1 resetPwdSuccessSend=\u66F4\u6539\u5BC6\u7801\u7684\u786E\u8BA4\u94FE\u63A5\u5DF2\u53D1\u9001\u81F3\u6307\u5B9A\u90AE\u7BB1
resetPwdMailSubject=[Solo]\u91cd\u7f6e\u5bc6\u7801 resetPwdMailSubject=[Solo]\u91CD\u7F6E\u5BC6\u7801
resetPwdMailBody=\u60f3\u66f4\u6539\u5bc6\u7801\uff0c\u8bf7\u6253\u5f00\u4e0b\u9762\u94fe\u63a5\uff1b\u82e5\u4e0d\u60f3\u4fee\u6539\uff0c\u53ea\u8981\u5ffd\u7565\u6b64\u6b21\u90ae\u4ef6\uff0c\u7cfb\u7edf\u5e76\u4e0d\u4f1a\u81ea\u52a8\u4fee\u6539\u60a8\u7684\u5bc6\u7801\u3002<p> resetPwdMailBody=\u60F3\u66F4\u6539\u5BC6\u7801\uFF0C\u8BF7\u6253\u5F00\u4E0B\u9762\u94FE\u63A5\uFF1B\u82E5\u4E0D\u60F3\u4FEE\u6539\uFF0C\u53EA\u8981\u5FFD\u7565\u6B64\u6B21\u90AE\u4EF6\uFF0C\u7CFB\u7EDF\u5E76\u4E0D\u4F1A\u81EA\u52A8\u4FEE\u6539\u60A8\u7684\u5BC6\u7801\u3002<p>
initIntroLabel=<p>\u8bf7\u70b9\u51fb\u4e0b\u9762\u7684\u201c\u521d\u59cb\u5316\u201d\u6309\u94ae\u8fdb\u884c\u521d\u59cb\u5316\uff0c\u7136\u540e\u7a0d\u7b49\u7247\u523b ;-)</br></br></br></br>\ initIntroLabel=<p>\u8BF7\u70B9\u51FB\u4E0B\u9762\u7684\u201C\u521D\u59CB\u5316\u201D\u6309\u94AE\u8FDB\u884C\u521D\u59CB\u5316\uFF0C\u7136\u540E\u7A0D\u7B49\u7247\u523B ;-)</br></br></br></br>\
\u540c\u65f6\uff0c\u6b22\u8fce\u60a8\u52a0\u5165\u9ed1\u5ba2\u4e0e\u753b\u5bb6\u7684\u805a\u96c6\u5730<a href="https://hacpai.com" target="_blank"><b>\u9ed1\u5ba2\u6d3e</b></a>\uff08\u4f7f\u7528\u60a8\u7684 Solo \u8d26\u53f7\u76f4\u63a5\u767b\u5f55\uff09\u3002</p> \u540C\u65F6\uFF0C\u6B22\u8FCE\u60A8\u52A0\u5165\u9ED1\u5BA2\u4E0E\u753B\u5BB6\u7684\u805A\u96C6\u5730<a href="https://hacpai.com" target="_blank"><b>\u9ED1\u5BA2\u6D3E</b></a>\uFF08\u4F7F\u7528\u60A8\u7684 Solo \u8D26\u53F7\u76F4\u63A5\u767B\u5F55\uFF09\u3002</p>
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><span style="font-size: 10px">\u6ce8\uff1a\u5220\u9664 /js/common.js \u4e2d\u7684 Util.killIE(); \u53ef\u5bf9\u6240\u6709\u6d4f\u89c8\u5668\u8fdb\u884c\u652f\u6301\u3002</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><span style="font-size: 10px">\u6CE8\uFF1A\u5220\u9664 /js/common.js \u4E2D\u7684 Util.killIE(); \u53EF\u5BF9\u6240\u6709\u6D4F\u89C8\u5668\u8FDB\u884C\u652F\u6301\u3002</span>
closeLabel=\u5173\u95ed closeLabel=\u5173\u95ED
closeForeverLabel=\u6c38\u4e45\u5173\u95ed closeForeverLabel=\u6C38\u4E45\u5173\u95ED
readmoreLabel=\u9605\u8bfb\u66f4\u591a\u00bb readmoreLabel=\u9605\u8BFB\u66F4\u591A\u00BB
readmore2Label=\u9605\u8bfb\u66f4\u591a readmore2Label=\u9605\u8BFB\u66F4\u591A
replyLabel=\u56de\u590d\u00bb replyLabel=\u56DE\u590D\u00BB
homeLabel=\u9996\u9875 homeLabel=\u9996\u9875
enableArticleUpdateHint1Label=\u542f\u7528\u6587\u7ae0\u66f4\u65b0\u63d0\u793a\uff1a enableArticleUpdateHint1Label=\u542F\u7528\u6587\u7AE0\u66F4\u65B0\u63D0\u793A\uFF1A
allowVisitDraftViaPermalink1Label=\u5141\u8bb8\u901a\u8fc7\u94fe\u63a5\u8bbf\u95ee\u8349\u7a3f\uff1a allowVisitDraftViaPermalink1Label=\u5141\u8BB8\u901A\u8FC7\u94FE\u63A5\u8BBF\u95EE\u8349\u7A3F\uFF1A
allowComment1Label=\u5141\u8bb8\u8bc4\u8bba\uff1a allowComment1Label=\u5141\u8BB8\u8BC4\u8BBA\uFF1A
feedOutputModel1Label=\u8ba2\u9605\u8f93\u51fa\u6a21\u5f0f\uff1a feedOutputModel1Label=\u8BA2\u9605\u8F93\u51FA\u6A21\u5F0F\uFF1A
feedOutputCntLabel=\u8ba2\u9605\u8f93\u51fa\u6587\u7ae0\u6570 feedOutputCntLabel=\u8BA2\u9605\u8F93\u51FA\u6587\u7AE0\u6570
feedOutputCnt1Label=\u8ba2\u9605\u8f93\u51fa\u6587\u7ae0\u6570\uff1a feedOutputCnt1Label=\u8BA2\u9605\u8F93\u51FA\u6587\u7AE0\u6570\uFF1A
abstractLabel=\u6458\u8981 abstractLabel=\u6458\u8981
fullContentLabel=\u5168\u6587 fullContentLabel=\u5168\u6587
author1Label=\u4f5c\u8005\uff1a author1Label=\u4F5C\u8005\uFF1A
authorLabel=\u4f5c\u8005 authorLabel=\u4F5C\u8005
keyOfSolo1Label=B3log Key\uff1a keyOfSolo1Label=B3log Key\uFF1A
articleLabel=\u6587\u7ae0 articleLabel=\u6587\u7AE0
tagArticlesLabel=\u6807\u7b7e\u6587\u7ae0\u5217\u8868 tagArticlesLabel=\u6807\u7B7E\u6587\u7AE0\u5217\u8868
dateArticlesLabel=\u5b58\u6863\u6587\u7ae0\u5217\u8868 dateArticlesLabel=\u5B58\u6863\u6587\u7AE0\u5217\u8868
authorArticlesLabel=\u4f5c\u8005\u6587\u7ae0\u5217\u8868 authorArticlesLabel=\u4F5C\u8005\u6587\u7AE0\u5217\u8868
indexArticleLabel=\u9996\u9875\u6587\u7ae0\u5217\u8868 indexArticleLabel=\u9996\u9875\u6587\u7AE0\u5217\u8868
userTemplatePageLabel=\u7528\u6237\u6a21\u7248\u9875\u9762 userTemplatePageLabel=\u7528\u6237\u6A21\u7248\u9875\u9762
allTagsLabel=\u6807\u7b7e\u5899 allTagsLabel=\u6807\u7B7E\u5899
customizedPageLabel=\u81ea\u5b9a\u4e49\u9875\u9762 customizedPageLabel=\u81EA\u5B9A\u4E49\u9875\u9762
killBrowserPageLabel=Kill Browser Page killBrowserPageLabel=Kill Browser Page
pageNumLabel=\u9875\u53f7 pageNumLabel=\u9875\u53F7
articleViewPwdLabel=\u8bbf\u95ee\u5bc6\u7801 articleViewPwdLabel=\u8BBF\u95EE\u5BC6\u7801
articleViewPwd1Label=\u8bbf\u95ee\u5bc6\u7801\uff1a articleViewPwd1Label=\u8BBF\u95EE\u5BC6\u7801\uFF1A
#### ####
forbiddenLabel=\u64cd\u4f5c\u88ab\u7981\u6b62\uff01 forbiddenLabel=\u64CD\u4F5C\u88AB\u7981\u6B62\uFF01
sorryLabel=\u5bf9\u4e0d\u8d77\uff01 sorryLabel=\u5BF9\u4E0D\u8D77\uFF01
notFoundLabel=\u627e\u4e0d\u5230\uff01 notFoundLabel=\u627E\u4E0D\u5230\uFF01
unPulbishSuccLabel=\u53d6\u6d88\u53d1\u5e03\u6210\u529f unPulbishSuccLabel=\u53D6\u6D88\u53D1\u5E03\u6210\u529F
unPulbishFailLabel=\u53d6\u6d88\u53d1\u5e03\u5931\u8d25 unPulbishFailLabel=\u53D6\u6D88\u53D1\u5E03\u5931\u8D25
removeSuccLabel=\u5220\u9664\u6210\u529f removeSuccLabel=\u5220\u9664\u6210\u529F
removeFailLabel=\u5220\u9664\u5931\u8d25 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 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 putTopSuccLabel=\u7F6E\u9876\u6210\u529F
putTopFailLabel=\u7f6e\u9876\u5931\u8d25 putTopFailLabel=\u7F6E\u9876\u5931\u8D25
cancelTopSuccLabel=\u53d6\u6d88\u7f6e\u9876\u6210\u529f cancelTopSuccLabel=\u53D6\u6D88\u7F6E\u9876\u6210\u529F
cancelTopFailLabel=\u53d6\u6d88\u7f6e\u9876\u5931\u8d25 cancelTopFailLabel=\u53D6\u6D88\u7F6E\u9876\u5931\u8D25
addSuccLabel=\u6dfb\u52a0\u6210\u529f addSuccLabel=\u6DFB\u52A0\u6210\u529F
addFailLabel=\u6dfb\u52a0\u5931\u8d25 addFailLabel=\u6DFB\u52A0\u5931\u8D25
updateSuccLabel=\u66f4\u65b0\u6210\u529f updateSuccLabel=\u66F4\u65B0\u6210\u529F
updateFailLabel=\u66f4\u65b0\u5931\u8d25 updateFailLabel=\u66F4\u65B0\u5931\u8D25
updatePreferenceFailNeedMulUsersLabel=\u66f4\u65b0\u5931\u8d25\uff0c\u9700\u8981\u591a\u7528\u6237\u624d\u80fd\u4f7f\u7528\u9009\u62e9\u7684\u76ae\u80a4 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 setFailLabel=\u8BBE\u7F6E\u5931\u8D25
setSuccLabel=\u8bbe\u7f6e\u6210\u529f setSuccLabel=\u8BBE\u7F6E\u6210\u529F
getFailLabel=\u83b7\u53d6\u5931\u8d25 getFailLabel=\u83B7\u53D6\u5931\u8D25
noSettingLabel=\u8be5\u535a\u5ba2\u65e0\u8d26\u53f7\uff0c\u8bf7\u6dfb\u52a0 noSettingLabel=\u8BE5\u535A\u5BA2\u65E0\u8D26\u53F7\uFF0C\u8BF7\u6DFB\u52A0
getSuccLabel=\u83b7\u53d6\u6210\u529f getSuccLabel=\u83B7\u53D6\u6210\u529F
importSuccLabel=\u5bfc\u5165\u6210\u529f :-) importSuccLabel=\u5BFC\u5165\u6210\u529F :-)
importFailLabel=\u90e8\u5206\u5bfc\u5165\u5931\u8d25 %>_<% importFailLabel=\u90E8\u5206\u5BFC\u5165\u5931\u8D25 %>_<%
noCommentLabel=\u6682\u65e0\u8bc4\u8bba noCommentLabel=\u6682\u65E0\u8BC4\u8BBA
captchaErrorLabel=\u9a8c\u8bc1\u7801\u9519\u8bef captchaErrorLabel=\u9A8C\u8BC1\u7801\u9519\u8BEF
inputErrorLabel=\u8f93\u5165\u9519\u8bef\uff01 inputErrorLabel=\u8F93\u5165\u9519\u8BEF\uFF01
gotoLabel=\u8df3\u8f6c gotoLabel=\u8DF3\u8F6C
nameEmptyLabel=\u59d3\u540d\u4e0d\u80fd\u4e3a\u7a7a\uff01 nameEmptyLabel=\u59D3\u540D\u4E0D\u80FD\u4E3A\u7A7A\uFF01
passwordEmptyLabel=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01 passwordEmptyLabel=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A\uFF01
passwordNotMatchLabel=\u5bc6\u7801\u4e0d\u5339\u914d\uff01 passwordNotMatchLabel=\u5BC6\u7801\u4E0D\u5339\u914D\uFF01
userPasswordConfirm1Label=\u518d\u6b21\u8f93\u5165\u5bc6\u7801\uff1a userPasswordConfirm1Label=\u518D\u6B21\u8F93\u5165\u5BC6\u7801\uFF1A
blogEmptyLabel=\u8bf7\u9009\u62e9\u535a\u5ba2\u670d\u52a1\uff01 blogEmptyLabel=\u8BF7\u9009\u62E9\u535A\u5BA2\u670D\u52A1\uFF01
blogArticleEmptyLabel=\u8bf7\u9009\u62e9\u9700\u8981\u5bfc\u5165\u7684\u6587\u7ae0 blogArticleEmptyLabel=\u8BF7\u9009\u62E9\u9700\u8981\u5BFC\u5165\u7684\u6587\u7AE0
notAllowCommentLabel=\u4e0d\u5141\u8bb8\u8bc4\u8bba\uff01 notAllowCommentLabel=\u4E0D\u5141\u8BB8\u8BC4\u8BBA\uFF01
nameTooLongLabel=\u59d3\u540d\u53ea\u80fd\u4e3a 2 \u5230 20 \u4e2a\u5b57\u7b26\uff01 nameTooLongLabel=\u59D3\u540D\u53EA\u80FD\u4E3A 2 \u5230 20 \u4E2A\u5B57\u7B26\uFF01
mailCannotEmptyLabel=\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a\uff01 mailCannotEmptyLabel=\u90AE\u7BB1\u4E0D\u80FD\u4E3A\u7A7A\uFF01
mailInvalidLabel=\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e\uff01 mailInvalidLabel=\u90AE\u7BB1\u683C\u5F0F\u4E0D\u6B63\u786E\uFF01
urlInvalidLabel=\u94fe\u63a5\u683c\u5f0f\u4e0d\u6b63\u786e\uff01 urlInvalidLabel=\u94FE\u63A5\u683C\u5F0F\u4E0D\u6B63\u786E\uFF01
nonNegativeIntegerOnlyLabel=\u53ea\u80fd\u4e3a\u975e\u8d1f\u6574\u6570\uff01 nonNegativeIntegerOnlyLabel=\u53EA\u80FD\u4E3A\u975E\u8D1F\u6574\u6570\uFF01
commentContentCannotEmptyLabel=\u8bc4\u8bba\u5185\u5bb9\u53ea\u80fd\u4e3a 2 \u5230 500 \u4e2a\u5b57\u7b26\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 captchaCannotEmptyLabel=\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A\uFF01
loadingLabel=\u8f7d\u5165\u4e2d.... loadingLabel=\u8F7D\u5165\u4E2D....
titleEmptyLabel=\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a\uff01 titleEmptyLabel=\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A\uFF01
contentEmptyLabel=\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a\uff01 contentEmptyLabel=\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A\uFF01
orderEmptyLabel=\u5e8f\u53f7\u4e0d\u80fd\u4e3a\u7a7a\uff01 orderEmptyLabel=\u5E8F\u53F7\u4E0D\u80FD\u4E3A\u7A7A\uFF01
abstractEmptyLabel=\u6458\u8981\u4e0d\u80fd\u4e3a\u7a7a\uff01 abstractEmptyLabel=\u6458\u8981\u4E0D\u80FD\u4E3A\u7A7A\uFF01
tagsEmptyLabel=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a\uff01 tagsEmptyLabel=\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A\uFF01
addressEmptyLabel=\u5730\u5740\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 \ 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 <em>Consumer Secret</em> \u662F\u6B63\u786E\u7684\uFF0C\u7136\u540E\u8FDB\u884C\u91CD\u8BD5\u3002
duplicatedPermalinkLabel=\u94fe\u63a5\u91cd\u590d\uff01 duplicatedPermalinkLabel=\u94FE\u63A5\u91CD\u590D\uFF01
invalidPermalinkFormatLabel=\u975e\u6cd5\u7684\u94fe\u63a5\u683c\u5f0f\uff01 invalidPermalinkFormatLabel=\u975E\u6CD5\u7684\u94FE\u63A5\u683C\u5F0F\uFF01
duplicatedEmailLabel=\u90ae\u4ef6\u5730\u5740\u91cd\u590d\uff01 duplicatedEmailLabel=\u90AE\u4EF6\u5730\u5740\u91CD\u590D\uFF01
refreshAndRetryLabel=\u8bf7\u5237\u65b0\u91cd\u8bd5\uff01 refreshAndRetryLabel=\u8BF7\u5237\u65B0\u91CD\u8BD5\uFF01
editorLeaveLabel=\u7f16\u8f91\u5668\u4e2d\u8fd8\u6709\u5185\u5bb9\uff0c\u662f\u5426\u79bb\u5f00\uff1f 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 editorPostLabel=\u7F16\u8F91\u5668\u4E2D\u8FD8\u6709\u5185\u5BB9\uFF0C\u662F\u5426\u6E05\u7A7A\uFF1F
registerSoloUserLabel=\u6ce8\u518c Solo \u7528\u6237 registerSoloUserLabel=\u6CE8\u518C Solo \u7528\u6237
registerLabel=\u6ce8\u518c registerLabel=\u6CE8\u518C
changeRoleLabel=\u6539\u53d8\u89d2\u8272 changeRoleLabel=\u6539\u53D8\u89D2\u8272
#### ####
confirmRemoveLabel=\u662f\u5426\u5220\u9664 confirmRemoveLabel=\u662F\u5426\u5220\u9664
confirmInitLabel=\u786e\u5b9a\u8fdb\u884c\u521d\u59cb\u5316\u5417\uff1f confirmInitLabel=\u786E\u5B9A\u8FDB\u884C\u521D\u59CB\u5316\u5417\uFF1F
###### Common ###### ###### Common ######
mobileLabel=\u79fb\u52a8\u7248 mobileLabel=\u79FB\u52A8\u7248
# Send an email to the user who upgrades Solo with a discontinuous version # # Send an email to the user who upgrades Solo with a discontinuous version #
skipVersionMailSubject=[\u65e0\u9700\u56de\u590d]\u8de8\u7248\u672c\u5347\u7ea7 Solo \u63d0\u9192 skipVersionMailSubject=[\u65E0\u9700\u56DE\u590D]\u8DE8\u7248\u672C\u5347\u7EA7 Solo \u63D0\u9192
skipVersionMailBody=Hey, \u60a8\u597d\uff01<p>\u975e\u5e38\u9ad8\u5174\u60a8\u51c6\u5907\u5347\u7ea7 Solo\uff0c\u4e0d\u8fc7\u76ee\u524d\u8fd8\u4e0d\u652f\u6301\u8de8\u7248\u672c\u5347\u7ea7\uff0c\u8bf7\u6309\u7167\u5386\u53f2\u7248\u672c\u4f9d\u6b21\u8fdb\u884c\u5347\u7ea7\u3002</p>\ skipVersionMailBody=Hey, \u60A8\u597D\uFF01<p>\u975E\u5E38\u9AD8\u5174\u60A8\u51C6\u5907\u5347\u7EA7 Solo\uFF0C\u4E0D\u8FC7\u76EE\u524D\u8FD8\u4E0D\u652F\u6301\u8DE8\u7248\u672C\u5347\u7EA7\uFF0C\u8BF7\u6309\u7167\u5386\u53F2\u7248\u672C\u4F9D\u6B21\u8FDB\u884C\u5347\u7EA7\u3002</p>\
<p>\u5bf9\u6b64\u7ed9\u60a8\u5e26\u6765\u7684\u4e0d\u4fbf\u6211\u4eec\u6df1\u8868\u6b49\u610f\uff0c\u8c22\u8c22\u60a8\u5bf9 <a href="http://b3log.org" target="_blank">B3log</a> \u7684\u652f\u6301\u3002</p> <p>\u5BF9\u6B64\u7ED9\u60A8\u5E26\u6765\u7684\u4E0D\u4FBF\u6211\u4EEC\u6DF1\u8868\u6B49\u610F\uFF0C\u8C22\u8C22\u60A8\u5BF9 <a href="http://b3log.org" target="_blank">B3log</a> \u7684\u652F\u6301\u3002</p>
skipVersionAlert=\u5bf9\u4e0d\u8d77\uff0cSolo \u76ee\u524d\u8fd8\u4e0d\u652f\u6301\u8de8\u7248\u672c\u5347\u7ea7\uff0c\u8bf7\u6309\u7167\u5386\u53f2\u7248\u672c\u4f9d\u6b21\u8fdb\u884c\u5347\u7ea7\uff0c\u6216\u76f4\u63a5\u8054\u7cfb B3log \u5f00\u53d1\u8005\u3002 skipVersionAlert=\u5BF9\u4E0D\u8D77\uFF0CSolo \u76EE\u524D\u8FD8\u4E0D\u652F\u6301\u8DE8\u7248\u672C\u5347\u7EA7\uFF0C\u8BF7\u6309\u7167\u5386\u53F2\u7248\u672C\u4F9D\u6B21\u8FDB\u884C\u5347\u7EA7\uFF0C\u6216\u76F4\u63A5\u8054\u7CFB B3log \u5F00\u53D1\u8005\u3002
helloWorld.title=\u4e16\u754c\uff0c\u4f60\u597d\uff01 helloWorld.title=\u4E16\u754C\uFF0C\u4F60\u597D\uFF01
helloWorld.content=\u6b22\u8fce\u4f7f\u7528 [Solo](https://github.com/b3log/solo) \u535a\u5ba2\u7cfb\u7edf\u3002\u8fd9\u662f\u7cfb\u7edf\u81ea\u52a8\u751f\u6210\u7684\u6f14\u793a\u6587\u7ae0\uff0c\u7f16\u8f91\u6216\u8005\u5220\u9664\u5b83\uff0c\u7136\u540e\u5f00\u59cb\u4f60\u7684\u72ec\u7acb\u535a\u5ba2\u4e4b\u65c5\uff01\n\ helloWorld.content=\u6B22\u8FCE\u4F7F\u7528 [Solo](https://github.com/b3log/solo) \u535A\u5BA2\u7CFB\u7EDF\u3002\u8FD9\u662F\u7CFB\u7EDF\u81EA\u52A8\u751F\u6210\u7684\u6F14\u793A\u6587\u7AE0\uFF0C\u7F16\u8F91\u6216\u8005\u5220\u9664\u5B83\uFF0C\u7136\u540E\u5F00\u59CB\u4F60\u7684\u72EC\u7ACB\u535A\u5BA2\u4E4B\u65C5\uFF01\n\
\n\ \n\
\u53e6\u5916\uff0c\u6b22\u8fce\u4f60\u52a0\u5165[\u9ed1\u5ba2\u4e0e\u753b\u5bb6\u7684\u793e\u533a](https://hacpai.com)\uff0c\u4f60\u53ef\u4ee5\u4f7f\u7528\u535a\u5ba2\u8d26\u53f7\u76f4\u63a5\u767b\u5f55\uff01\n\ \u53E6\u5916\uFF0C\u6B22\u8FCE\u4F60\u52A0\u5165[\u9ED1\u5BA2\u4E0E\u753B\u5BB6\u7684\u793E\u533A](https://hacpai.com)\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528\u535A\u5BA2\u8D26\u53F7\u76F4\u63A5\u767B\u5F55\uFF01\n\
\n\ \n\
----\n\ ----\n\
\n\ \n\
Solo \u535a\u5ba2\u7cfb\u7edf\u662f\u4e00\u4e2a\u5f00\u6e90\u9879\u76ee\uff0c\u5982\u679c\u4f60\u89c9\u5f97\u5b83\u5f88\u8d5e\uff0c\u8bf7\u5230[\u9879\u76ee\u9996\u9875](https://github.com/b3log/solo)\u7ed9\u9897\u661f\u9f13\u52b1\u4e00\u4e0b :heart: Solo \u535A\u5BA2\u7CFB\u7EDF\u662F\u4E00\u4E2A\u5F00\u6E90\u9879\u76EE\uFF0C\u5982\u679C\u4F60\u89C9\u5F97\u5B83\u5F88\u8D5E\uFF0C\u8BF7\u5230[\u9879\u76EE\u9996\u9875](https://github.com/b3log/solo)\u7ED9\u9897\u661F\u9F13\u52B1\u4E00\u4E0B :heart:
helloWorld.comment.content=\u5199\u535a\u5ba2\u9700\u8981\u575a\u6301\uff0c\u76f8\u4fe1\u79ef\u7d2f\u540e\u5fc5\u7136\u4f1a\u6709\u6536\u83b7\uff0c\u6211\u4eec\u4e00\u8d77\u52aa\u529b\u52a0\u6cb9 :smile: helloWorld.comment.content=\u5199\u535A\u5BA2\u9700\u8981\u575A\u6301\uFF0C\u76F8\u4FE1\u79EF\u7D2F\u540E\u5FC5\u7136\u4F1A\u6709\u6536\u83B7\uFF0C\u6211\u4EEC\u4E00\u8D77\u52AA\u529B\u52A0\u6CB9 :smile:
articleContentPwd=\u8be5\u6587\u7ae0\u5df2\u7ecf\u52a0\u5bc6\u3002 articleContentPwd=\u8BE5\u6587\u7AE0\u5DF2\u7ECF\u52A0\u5BC6\u3002
ok=\u786e\u5b9a ok=\u786E\u5B9A
\ No newline at end of file \ No newline at end of file
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
<label for="userPassword">${userPassword1Label}</label> <label for="userPassword">${userPassword1Label}</label>
</th> </th>
<td> <td>
<input id="userPassword" type="password"/> <input id="userPassword" type="password" autocomplete="new-password"/>
</td> </td>
</tr> </tr>
<tr> <tr>
......
...@@ -583,10 +583,11 @@ $.extend(Page.prototype, { ...@@ -583,10 +583,11 @@ $.extend(Page.prototype, {
contentType: "application/json", contentType: "application/json",
data: JSON.stringify(requestJSONObject), data: JSON.stringify(requestJSONObject),
success: function (result) { success: function (result) {
$("#submitCommentButton" + state).removeAttr("disabled");
if (!result.sc) { if (!result.sc) {
$("#commentErrorTip" + state).html(result.msg); $("#commentErrorTip" + state).html(result.msg);
$("#comment" + state).val("").focus(); $("#commentValidate" + state).val('');
$("#submitCommentButton" + state).removeAttr("disabled"); $("#captcha" + state).click();
if (!Util.isLoggedIn()) { if (!Util.isLoggedIn()) {
$("#captcha" + state).attr("src", latkeConfig.servePath + "/captcha.do?code=" + Math.random()); $("#captcha" + state).attr("src", latkeConfig.servePath + "/captcha.do?code=" + Math.random());
} }
...@@ -613,8 +614,11 @@ $.extend(Page.prototype, { ...@@ -613,8 +614,11 @@ $.extend(Page.prototype, {
result.userName = Util.getUserName(); result.userName = Util.getUserName();
} }
if (typeof(addComment) === "undefined") { // https://github.com/b3log/solo/issues/12246
that.addCommentAjax(result.cmtTpl, state);
} else { // 1.9.0 向后兼容
that.addCommentAjax(addComment(result, state), state); that.addCommentAjax(addComment(result, state), state);
$("#submitCommentButton" + state).removeAttr("disabled"); }
} }
}); });
} }
......
...@@ -13,4 +13,4 @@ ...@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
var Page=function(tips){this.currentCommentId="";this.tips=tips};$.extend(Page.prototype,{insertEmotions:function(name){var _it=this;if(name===undefined){name=""}$("#emotions"+name+" span").click(function(){var $comment=$("#comment"+name);var endPosition=_it._getCursorEndPosition($comment[0]);var key="["+this.className+"]",textValue=$comment[0].value;textValue=textValue.substring(0,endPosition)+key+textValue.substring(endPosition,textValue.length);$("#comment"+name).val(textValue);if($.browser.msie){endPosition-=textValue.split("\n").length-1;var oR=$comment[0].createTextRange();oR.collapse(true);oR.moveStart("character",endPosition+6);oR.select()}else{$comment[0].setSelectionRange(endPosition+6,endPosition+6)}})},_getCursorEndPosition:function(textarea){textarea.focus();if(textarea.setSelectionRange){return textarea.selectionEnd}else{if(document.selection){var i=0,oS=document.selection.createRange(),oR=document.body.createTextRange();oR.moveToElementText(textarea);oS.getBookmark();for(i=0;oR.compareEndPoints("StartToStart",oS)<0&&oS.moveStart("character",-1)!==0;i++){if(textarea.value.charAt(i)==="\n"){i++}}return i}}},validateComment:function(state){if(Util.isLoggedIn()){var commenterContent=$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,"");if(2>commenterContent.length||commenterContent.length>500){$("#commentErrorTip"+state).html(this.tips.commentContentCannotEmptyLabel);$("#comment"+state).focus()}else{return true}$("#commentErrorTip"+state).show();return false}var commentName=$("#commentName"+state).val().replace(/(^\s*)|(\s*$)/g,""),commenterContent=$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,"");if(2>commentName.length||commentName.length>20){$("#commentErrorTip"+state).html(this.tips.nameTooLongLabel);$("#commentName"+state).focus()}else{if($("#commentEmail"+state).val().replace(/\s/g,"")===""){$("#commentErrorTip"+state).html(this.tips.mailCannotEmptyLabel);$("#commentEmail"+state).focus()}else{if(!/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test($("#commentEmail"+state).val())){$("#commentErrorTip"+state).html(this.tips.mailInvalidLabel);$("#commentEmail"+state).focus()}else{if(2>commenterContent.length||commenterContent.length>500){$("#commentErrorTip"+state).html(this.tips.commentContentCannotEmptyLabel);$("#comment"+state).focus()}else{if($("#commentValidate"+state).val().replace(/\s/g,"")===""){$("#commentErrorTip"+state).html(this.tips.captchaCannotEmptyLabel);$("#commentValidate"+state).focus()}else{return true}}}}}$("#commentErrorTip"+state).show();return false},replaceCommentsEm:function(selector){var $commentContents=$(selector);for(var i=0;i<$commentContents.length;i++){var str=$commentContents[i].innerHTML;$commentContents[i].innerHTML=Util.replaceEmString(str)}},_initSyntaxHighlighter:function(languages){for(var i=0;i<languages.length;i++){switch(languages[i]){case"groovy":languages[i]="groovy "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushGroovy.js";break;case"java":languages[i]="java "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushJava.js";break;case"php":languages[i]="php "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPhp.js";break;case"scala":languages[i]="scala "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushScala.js";break;case"sql":languages[i]="sql "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushSql.js";break;case"applescript":languages[i]="applescript "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushAppleScript.js";break;case"as3":case"actionscript3":languages[i]="actionscript3 as3 "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushAS3.js";break;case"bash":case"shell":languages[i]="bash shell "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushBash.js";break;case"coldfusion":case"cf":languages[i]="coldfusion cf "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushColdFusion.js";break;case"c#":case"c-sharp":case"csharp":languages[i]="c# c-sharp csharp "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushCSharp.js";break;case"cpp":case"c":languages[i]="cpp c "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushCpp.js";break;case"css":languages[i]="css "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushCss.js";break;case"delphi":case"pascal":languages[i]="delphi pascal "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushDelphi.js";break;case"diff":case"patch":case"pas":languages[i]="diff patch pas "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushDiff.js";break;case"erl":case"erlang":languages[i]="erl erlang "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushErlang.js";break;case"js":case"jscript":case"javascript":languages[i]="js jscript javascript "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushJScript.js";break;case"jfx":case"javafx":languages[i]="jfx javafx "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushJavaFX.js";break;case"perl":case"pl":languages[i]="perl pl "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPerl.js";break;case"plain":case"text":languages[i]="text plain "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPlain.js";break;case"ps":case"powershell":languages[i]="ps powershell "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPowerShell.js";break;case"py":case"python":languages[i]="py python "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPython.js";break;case"rails":case"ror":case"ruby":case"rb":languages[i]="ruby rails ror rb "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushRuby.js";break;case"sass":case"scss":languages[i]="sass scss "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushSass.js";break;case"vb":case"vbnet":languages[i]="vb vbnet "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushVb.js";break;case"xml":case"xhtml":case"xslt":case"html":languages[i]="xml xhtml xslt html "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushXml.js";break;default:break}}SyntaxHighlighter.autoloader.apply(null,languages);SyntaxHighlighter.config.stripBrs=true;SyntaxHighlighter.all()},_loadSyntaxHighlighter:function(SHTheme){var cssName=SHTheme?SHTheme:"shCoreEclipse",that=this;if(document.createStyleSheet){document.createStyleSheet(latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/styles/"+cssName+".css")}else{$("head").append($("<link rel='stylesheet' href='"+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/styles/"+cssName+".css' type='text/css' charset='utf-8' />"))}$.ajax({url:latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shCore.js",dataType:"script",cache:true,success:function(){var languages=[],isScrip=false;$(".article-body pre, .code-highlight pre").each(function(){var name=this.className.split(";")[0];var language=name.substr(7,name.length-1);if(this.className.indexOf("html-script: true")>-1&&(language!=="xml"&&language!=="xhtml"&&language!=="xslt"&&language!="html")){isScrip=true}languages.push(language)});if(isScrip){$.ajax({url:latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushXml.js",dataType:"script",cache:true,success:function(){that._initSyntaxHighlighter(languages)}})}else{that._initSyntaxHighlighter(languages)}}})},parseLanguage:function(obj){var isPrettify=false,isSH=false;$(".article-body pre, .code-highlight pre").each(function(){if(this.className.indexOf("brush")>-1){isSH=true}if(this.className.indexOf("prettyprint")>-1){isPrettify=true}});if(isSH){this._loadSyntaxHighlighter(obj?(obj.SHTheme?obj.SHTheme:undefined):undefined);return false}if(isPrettify){if(document.createStyleSheet){document.createStyleSheet(latkeConfig.staticServePath+"/js/lib/google-code-prettify/prettify.css")}else{$("head").append($("<link rel='stylesheet' href='"+latkeConfig.staticServePath+"/js/lib/google-code-prettify/prettify.css'>"))}$.ajax({url:latkeConfig.staticServePath+"/js/lib/google-code-prettify/prettify.js",dataType:"script",cache:true,success:function(){prettyPrint()}});return false}if(document.createStyleSheet){document.createStyleSheet(latkeConfig.staticServePath+"/js/lib/highlight.js-9.6.0/styles/default.css")}else{$("head").append($("<link rel='stylesheet' href='"+latkeConfig.staticServePath+"/js/lib/highlight.js-9.6.0/styles/github.css'>"))}$.ajax({url:latkeConfig.staticServePath+"/js/lib/highlight.js-9.6.0/highlight.pack.js",dataType:"script",cache:true,success:function(){hljs.initHighlightingOnLoad()}})},load:function(obj){var that=this;that.insertEmotions();that.parseLanguage(obj?(obj.language?obj.language:undefined):undefined);$("#commentValidate").keypress(function(event){if(event.keyCode===13){that.submitComment()}});$("#comment").keypress(function(event){if(event.keyCode===13&&event.ctrlKey){that.submitComment()}});$("#captcha").click(function(){$(this).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())});if(!Util.isLoggedIn()){$("#commentEmail").val(Cookie.readCookie("commentEmail"));$("#commentURL").val(Cookie.readCookie("commentURL"));$("#commentName").val(Cookie.readCookie("commentName"))}try{JSON}catch(e){document.write('<script src="'+latkeConfig.staticServePath+'/js/lib/json2.js"><\/script>')}},loadRandomArticles:function(headTitle){var randomArticles1Label=this.tips.randomArticles1Label;$.ajax({url:latkeConfig.servePath+"/get-random-articles.do",type:"POST",success:function(result,textStatus){var randomArticles=result.randomArticles;if(!randomArticles||0===randomArticles.length){$("#randomArticles").remove();return}var listHtml="";for(var i=0;i<randomArticles.length;i++){var article=randomArticles[i];var title=article.articleTitle;var randomArticleLiHtml="<li><a rel='nofollow' title='"+title+"' href='"+latkeConfig.servePath+article.articlePermalink+"'>"+title+"</a></li>";listHtml+=randomArticleLiHtml}var titleHTML=headTitle?headTitle:"<h4>"+randomArticles1Label+"</h4>";var randomArticleListHtml=titleHTML+"<ul class='marginLeft12'>"+listHtml+"</ul>";$("#randomArticles").append(randomArticleListHtml)}})},loadRelevantArticles:function(id,headTitle){$.ajax({url:latkeConfig.servePath+"/article/id/"+id+"/relevant/articles",type:"GET",success:function(data,textStatus){var articles=data.relevantArticles;if(!articles||0===articles.length){$("#relevantArticles").remove();return}var listHtml="";for(var i=0;i<articles.length;i++){var article=articles[i];var title=article.articleTitle;var articleLiHtml="<li><a rel='nofollow' title='"+title+"' href='"+latkeConfig.servePath+article.articlePermalink+"'>"+title+"</a></li>";listHtml+=articleLiHtml}var relevantArticleListHtml=headTitle+"<ul class='marginLeft12'>"+listHtml+"</ul>";$("#relevantArticles").append(relevantArticleListHtml)},error:function(){$("#relevantArticles").remove()}})},loadExternalRelevantArticles:function(tags,headTitle){var tips=this.tips;try{$.ajax({url:"https://rhythm.b3log.org/get-articles-by-tags.do?tags="+tags+"&blogHost="+tips.blogHost+"&paginationPageSize="+tips.externalRelevantArticlesDisplayCount,type:"GET",cache:true,dataType:"jsonp",error:function(){$("#externalRelevantArticles").remove()},success:function(data,textStatus){var articles=data.articles;if(!articles||0===articles.length){$("#externalRelevantArticles").remove();return}var listHtml="";for(var i=0;i<articles.length;i++){var article=articles[i];var title=article.articleTitle;var articleLiHtml="<li><a rel='nofollow' title='"+title+"' target='_blank' href='"+article.articlePermalink+"'>"+title+"</a></li>";listHtml+=articleLiHtml}var titleHTML=headTitle?headTitle:"<h4>"+tips.externalRelevantArticles1Label+"</h4>";var randomArticleListHtml=titleHTML+"<ul class='marginLeft12'>"+listHtml+"</ul>";$("#externalRelevantArticles").append(randomArticleListHtml)}})}catch(e){}},submitComment:function(commentId,state){if(!state){state=""}var that=this,tips=this.tips,type="article";if(tips.externalRelevantArticlesDisplayCount===undefined){type="page"}if(this.validateComment(state)){$("#submitCommentButton"+state).attr("disabled","disabled");$("#commentErrorTip"+state).show().html(this.tips.loadingLabel);var requestJSONObject={oId:tips.oId,commentContent:$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,"")};if(!Util.isLoggedIn()){requestJSONObject={oId:tips.oId,commentContent:$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,""),commentEmail:$("#commentEmail"+state).val(),commentURL:Util.proessURL($("#commentURL"+state).val().replace(/(^\s*)|(\s*$)/g,"")),commentName:$("#commentName"+state).val().replace(/(^\s*)|(\s*$)/g,""),captcha:$("#commentValidate"+state).val()};Cookie.createCookie("commentName",requestJSONObject.commentName,365);Cookie.createCookie("commentEmail",requestJSONObject.commentEmail,365);Cookie.createCookie("commentURL",$("#commentURL"+state).val().replace(/(^\s*)|(\s*$)/g,""),365)}if(state==="Reply"){requestJSONObject.commentOriginalCommentId=commentId}$.ajax({type:"POST",url:latkeConfig.servePath+"/add-"+type+"-comment.do",cache:false,contentType:"application/json",data:JSON.stringify(requestJSONObject),success:function(result){if(!result.sc){$("#commentErrorTip"+state).html(result.msg);$("#comment"+state).val("").focus();$("#submitCommentButton"+state).removeAttr("disabled");if(!Util.isLoggedIn()){$("#captcha"+state).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())}return}$("#comment"+state).val(result.commentContent);$("#commentName"+state).val(result.commentName);result.replyNameHTML="";if(!Util.isLoggedIn()){$("#captcha"+state).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random());if($("#commentURL"+state).val().replace(/\s/g,"")===""){result.replyNameHTML="<a>"+$("#commentName"+state).val()+"</a>"}else{result.replyNameHTML='<a href="'+Util.proessURL($("#commentURL"+state).val())+'" target="_blank">'+$("#commentName"+state).val()+"</a>"}result.userName=result.commentName}else{result.replyNameHTML='<a href="'+window.location.host+'" target="_blank">'+Util.getUserName()+"</a>";result.userName=Util.getUserName()}that.addCommentAjax(addComment(result,state),state);$("#submitCommentButton"+state).removeAttr("disabled")}})}},addReplyForm:function(id,commentFormHTML,endHTML){var that=this;if(id===this.currentCommentId){if($("#commentNameReply").val()===""){$("#commentNameReply").focus()}else{if($("#commentEmailReply").val()===""){$("#commentEmailReply").focus()}else{$("#commentReply").focus()}}return}$("#replyForm").remove();endHTML=endHTML?endHTML:"";if(endHTML==="</div>"){$("#"+id).append(commentFormHTML+$("#commentForm").html()+endHTML)}else{$("#"+id).append(commentFormHTML+$("#commentForm").html()+"</table>"+endHTML)}$("#replyForm input, #replyForm textarea").each(function(){this.id=this.id+"Reply"});$("#commentNameReply").val(Cookie.readCookie("commentName"));$("#commentEmailReply").val(Cookie.readCookie("commentEmail"));var $label=$("#replyForm #commentURLLabel");if($label.length===1){$label.attr("id","commentURLLabelReply")}$("#commentURLReply").val(Cookie.readCookie("commentURL"));$("#replyForm #emotions").attr("id","emotionsReply");this.insertEmotions("Reply");$("#commentReply").unbind().keypress(function(event){if(event.keyCode===13&&event.ctrlKey){that.submitComment(id,"Reply");event.preventDefault()}});$("#commentValidateReply").unbind().keypress(function(event){if(event.keyCode===13){that.submitComment(id,"Reply");event.preventDefault()}});$("#replyForm #captcha").attr("id","captchaReply").attr("src",latkeConfig.servePath+"/captcha.do?"+new Date().getTime()).click(function(){$(this).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())});$("#replyForm #commentErrorTip").attr("id","commentErrorTipReply").html("").hide();$("#replyForm #submitCommentButton").attr("id","submitCommentButtonReply");$("#replyForm #submitCommentButtonReply").unbind("click").removeAttr("onclick").click(function(){that.submitComment(id,"Reply")});if($("#commentNameReply").val()===""){$("#commentNameReply").focus()}else{if($("#commentEmailReply").val()===""){$("#commentEmailReply").focus()}else{$("#commentReply").focus()}}this.currentCommentId=id},hideComment:function(id){$("#commentRef"+id).hide()},showComment:function(it,id,top,parentTag){var positionTop=parseInt($(it).position().top);if(parentTag){positionTop=parseInt($(it).parents(parentTag).position().top)}if($("#commentRef"+id).length>0){$("#commentRef"+id).show().css("top",(positionTop+top)+"px")}else{var $refComment=$("#"+id).clone();$refComment.addClass("comment-body-ref").attr("id","commentRef"+id);$refComment.find("#replyForm").remove();$("#comments").append($refComment);$("#commentRef"+id).css("top",(positionTop+top)+"px")}},addCommentAjax:function(commentHTML,state){if($("#comments").children().length>0){$($("#comments").children()[0]).before(commentHTML)}else{$("#comments").html(commentHTML)}if(state===""){$("#commentErrorTip").html("").hide();$("#comment").val("");$("#commentValidate").val("");$("#captcha").attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())}else{$("#replyForm").remove()}window.location.hash="#comments"}}); var Page=function(tips){this.currentCommentId="";this.tips=tips};$.extend(Page.prototype,{insertEmotions:function(name){var _it=this;if(name===undefined){name=""}$("#emotions"+name+" span").click(function(){var $comment=$("#comment"+name);var endPosition=_it._getCursorEndPosition($comment[0]);var key="["+this.className+"]",textValue=$comment[0].value;textValue=textValue.substring(0,endPosition)+key+textValue.substring(endPosition,textValue.length);$("#comment"+name).val(textValue);if($.browser.msie){endPosition-=textValue.split("\n").length-1;var oR=$comment[0].createTextRange();oR.collapse(true);oR.moveStart("character",endPosition+6);oR.select()}else{$comment[0].setSelectionRange(endPosition+6,endPosition+6)}})},_getCursorEndPosition:function(textarea){textarea.focus();if(textarea.setSelectionRange){return textarea.selectionEnd}else{if(document.selection){var i=0,oS=document.selection.createRange(),oR=document.body.createTextRange();oR.moveToElementText(textarea);oS.getBookmark();for(i=0;oR.compareEndPoints("StartToStart",oS)<0&&oS.moveStart("character",-1)!==0;i++){if(textarea.value.charAt(i)==="\n"){i++}}return i}}},validateComment:function(state){if(Util.isLoggedIn()){var commenterContent=$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,"");if(2>commenterContent.length||commenterContent.length>500){$("#commentErrorTip"+state).html(this.tips.commentContentCannotEmptyLabel);$("#comment"+state).focus()}else{return true}$("#commentErrorTip"+state).show();return false}var commentName=$("#commentName"+state).val().replace(/(^\s*)|(\s*$)/g,""),commenterContent=$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,"");if(2>commentName.length||commentName.length>20){$("#commentErrorTip"+state).html(this.tips.nameTooLongLabel);$("#commentName"+state).focus()}else{if($("#commentEmail"+state).val().replace(/\s/g,"")===""){$("#commentErrorTip"+state).html(this.tips.mailCannotEmptyLabel);$("#commentEmail"+state).focus()}else{if(!/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test($("#commentEmail"+state).val())){$("#commentErrorTip"+state).html(this.tips.mailInvalidLabel);$("#commentEmail"+state).focus()}else{if(2>commenterContent.length||commenterContent.length>500){$("#commentErrorTip"+state).html(this.tips.commentContentCannotEmptyLabel);$("#comment"+state).focus()}else{if($("#commentValidate"+state).val().replace(/\s/g,"")===""){$("#commentErrorTip"+state).html(this.tips.captchaCannotEmptyLabel);$("#commentValidate"+state).focus()}else{return true}}}}}$("#commentErrorTip"+state).show();return false},replaceCommentsEm:function(selector){var $commentContents=$(selector);for(var i=0;i<$commentContents.length;i++){var str=$commentContents[i].innerHTML;$commentContents[i].innerHTML=Util.replaceEmString(str)}},_initSyntaxHighlighter:function(languages){for(var i=0;i<languages.length;i++){switch(languages[i]){case"groovy":languages[i]="groovy "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushGroovy.js";break;case"java":languages[i]="java "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushJava.js";break;case"php":languages[i]="php "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPhp.js";break;case"scala":languages[i]="scala "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushScala.js";break;case"sql":languages[i]="sql "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushSql.js";break;case"applescript":languages[i]="applescript "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushAppleScript.js";break;case"as3":case"actionscript3":languages[i]="actionscript3 as3 "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushAS3.js";break;case"bash":case"shell":languages[i]="bash shell "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushBash.js";break;case"coldfusion":case"cf":languages[i]="coldfusion cf "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushColdFusion.js";break;case"c#":case"c-sharp":case"csharp":languages[i]="c# c-sharp csharp "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushCSharp.js";break;case"cpp":case"c":languages[i]="cpp c "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushCpp.js";break;case"css":languages[i]="css "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushCss.js";break;case"delphi":case"pascal":languages[i]="delphi pascal "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushDelphi.js";break;case"diff":case"patch":case"pas":languages[i]="diff patch pas "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushDiff.js";break;case"erl":case"erlang":languages[i]="erl erlang "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushErlang.js";break;case"js":case"jscript":case"javascript":languages[i]="js jscript javascript "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushJScript.js";break;case"jfx":case"javafx":languages[i]="jfx javafx "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushJavaFX.js";break;case"perl":case"pl":languages[i]="perl pl "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPerl.js";break;case"plain":case"text":languages[i]="text plain "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPlain.js";break;case"ps":case"powershell":languages[i]="ps powershell "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPowerShell.js";break;case"py":case"python":languages[i]="py python "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushPython.js";break;case"rails":case"ror":case"ruby":case"rb":languages[i]="ruby rails ror rb "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushRuby.js";break;case"sass":case"scss":languages[i]="sass scss "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushSass.js";break;case"vb":case"vbnet":languages[i]="vb vbnet "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushVb.js";break;case"xml":case"xhtml":case"xslt":case"html":languages[i]="xml xhtml xslt html "+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushXml.js";break;default:break}}SyntaxHighlighter.autoloader.apply(null,languages);SyntaxHighlighter.config.stripBrs=true;SyntaxHighlighter.all()},_loadSyntaxHighlighter:function(SHTheme){var cssName=SHTheme?SHTheme:"shCoreEclipse",that=this;if(document.createStyleSheet){document.createStyleSheet(latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/styles/"+cssName+".css")}else{$("head").append($("<link rel='stylesheet' href='"+latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/styles/"+cssName+".css' type='text/css' charset='utf-8' />"))}$.ajax({url:latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shCore.js",dataType:"script",cache:true,success:function(){var languages=[],isScrip=false;$(".article-body pre, .code-highlight pre").each(function(){var name=this.className.split(";")[0];var language=name.substr(7,name.length-1);if(this.className.indexOf("html-script: true")>-1&&(language!=="xml"&&language!=="xhtml"&&language!=="xslt"&&language!="html")){isScrip=true}languages.push(language)});if(isScrip){$.ajax({url:latkeConfig.staticServePath+"/js/lib/SyntaxHighlighter/scripts/shBrushXml.js",dataType:"script",cache:true,success:function(){that._initSyntaxHighlighter(languages)}})}else{that._initSyntaxHighlighter(languages)}}})},parseLanguage:function(obj){var isPrettify=false,isSH=false;$(".article-body pre, .code-highlight pre").each(function(){if(this.className.indexOf("brush")>-1){isSH=true}if(this.className.indexOf("prettyprint")>-1){isPrettify=true}});if(isSH){this._loadSyntaxHighlighter(obj?(obj.SHTheme?obj.SHTheme:undefined):undefined);return false}if(isPrettify){if(document.createStyleSheet){document.createStyleSheet(latkeConfig.staticServePath+"/js/lib/google-code-prettify/prettify.css")}else{$("head").append($("<link rel='stylesheet' href='"+latkeConfig.staticServePath+"/js/lib/google-code-prettify/prettify.css'>"))}$.ajax({url:latkeConfig.staticServePath+"/js/lib/google-code-prettify/prettify.js",dataType:"script",cache:true,success:function(){prettyPrint()}});return false}if(document.createStyleSheet){document.createStyleSheet(latkeConfig.staticServePath+"/js/lib/highlight.js-9.6.0/styles/default.css")}else{$("head").append($("<link rel='stylesheet' href='"+latkeConfig.staticServePath+"/js/lib/highlight.js-9.6.0/styles/github.css'>"))}$.ajax({url:latkeConfig.staticServePath+"/js/lib/highlight.js-9.6.0/highlight.pack.js",dataType:"script",cache:true,success:function(){hljs.initHighlightingOnLoad()}})},load:function(obj){var that=this;that.insertEmotions();that.parseLanguage(obj?(obj.language?obj.language:undefined):undefined);$("#commentValidate").keypress(function(event){if(event.keyCode===13){that.submitComment()}});$("#comment").keypress(function(event){if(event.keyCode===13&&event.ctrlKey){that.submitComment()}});$("#captcha").click(function(){$(this).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())});if(!Util.isLoggedIn()){$("#commentEmail").val(Cookie.readCookie("commentEmail"));$("#commentURL").val(Cookie.readCookie("commentURL"));$("#commentName").val(Cookie.readCookie("commentName"))}try{JSON}catch(e){document.write('<script src="'+latkeConfig.staticServePath+'/js/lib/json2.js"><\/script>')}},loadRandomArticles:function(headTitle){var randomArticles1Label=this.tips.randomArticles1Label;$.ajax({url:latkeConfig.servePath+"/get-random-articles.do",type:"POST",success:function(result,textStatus){var randomArticles=result.randomArticles;if(!randomArticles||0===randomArticles.length){$("#randomArticles").remove();return}var listHtml="";for(var i=0;i<randomArticles.length;i++){var article=randomArticles[i];var title=article.articleTitle;var randomArticleLiHtml="<li><a rel='nofollow' title='"+title+"' href='"+latkeConfig.servePath+article.articlePermalink+"'>"+title+"</a></li>";listHtml+=randomArticleLiHtml}var titleHTML=headTitle?headTitle:"<h4>"+randomArticles1Label+"</h4>";var randomArticleListHtml=titleHTML+"<ul class='marginLeft12'>"+listHtml+"</ul>";$("#randomArticles").append(randomArticleListHtml)}})},loadRelevantArticles:function(id,headTitle){$.ajax({url:latkeConfig.servePath+"/article/id/"+id+"/relevant/articles",type:"GET",success:function(data,textStatus){var articles=data.relevantArticles;if(!articles||0===articles.length){$("#relevantArticles").remove();return}var listHtml="";for(var i=0;i<articles.length;i++){var article=articles[i];var title=article.articleTitle;var articleLiHtml="<li><a rel='nofollow' title='"+title+"' href='"+latkeConfig.servePath+article.articlePermalink+"'>"+title+"</a></li>";listHtml+=articleLiHtml}var relevantArticleListHtml=headTitle+"<ul class='marginLeft12'>"+listHtml+"</ul>";$("#relevantArticles").append(relevantArticleListHtml)},error:function(){$("#relevantArticles").remove()}})},loadExternalRelevantArticles:function(tags,headTitle){var tips=this.tips;try{$.ajax({url:"https://rhythm.b3log.org/get-articles-by-tags.do?tags="+tags+"&blogHost="+tips.blogHost+"&paginationPageSize="+tips.externalRelevantArticlesDisplayCount,type:"GET",cache:true,dataType:"jsonp",error:function(){$("#externalRelevantArticles").remove()},success:function(data,textStatus){var articles=data.articles;if(!articles||0===articles.length){$("#externalRelevantArticles").remove();return}var listHtml="";for(var i=0;i<articles.length;i++){var article=articles[i];var title=article.articleTitle;var articleLiHtml="<li><a rel='nofollow' title='"+title+"' target='_blank' href='"+article.articlePermalink+"'>"+title+"</a></li>";listHtml+=articleLiHtml}var titleHTML=headTitle?headTitle:"<h4>"+tips.externalRelevantArticles1Label+"</h4>";var randomArticleListHtml=titleHTML+"<ul class='marginLeft12'>"+listHtml+"</ul>";$("#externalRelevantArticles").append(randomArticleListHtml)}})}catch(e){}},submitComment:function(commentId,state){if(!state){state=""}var that=this,tips=this.tips,type="article";if(tips.externalRelevantArticlesDisplayCount===undefined){type="page"}if(this.validateComment(state)){$("#submitCommentButton"+state).attr("disabled","disabled");$("#commentErrorTip"+state).show().html(this.tips.loadingLabel);var requestJSONObject={oId:tips.oId,commentContent:$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,"")};if(!Util.isLoggedIn()){requestJSONObject={oId:tips.oId,commentContent:$("#comment"+state).val().replace(/(^\s*)|(\s*$)/g,""),commentEmail:$("#commentEmail"+state).val(),commentURL:Util.proessURL($("#commentURL"+state).val().replace(/(^\s*)|(\s*$)/g,"")),commentName:$("#commentName"+state).val().replace(/(^\s*)|(\s*$)/g,""),captcha:$("#commentValidate"+state).val()};Cookie.createCookie("commentName",requestJSONObject.commentName,365);Cookie.createCookie("commentEmail",requestJSONObject.commentEmail,365);Cookie.createCookie("commentURL",$("#commentURL"+state).val().replace(/(^\s*)|(\s*$)/g,""),365)}if(state==="Reply"){requestJSONObject.commentOriginalCommentId=commentId}$.ajax({type:"POST",url:latkeConfig.servePath+"/add-"+type+"-comment.do",cache:false,contentType:"application/json",data:JSON.stringify(requestJSONObject),success:function(result){$("#submitCommentButton"+state).removeAttr("disabled");if(!result.sc){$("#commentErrorTip"+state).html(result.msg);$("#commentValidate"+state).val("");$("#captcha"+state).click();if(!Util.isLoggedIn()){$("#captcha"+state).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())}return}$("#comment"+state).val(result.commentContent);$("#commentName"+state).val(result.commentName);result.replyNameHTML="";if(!Util.isLoggedIn()){$("#captcha"+state).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random());if($("#commentURL"+state).val().replace(/\s/g,"")===""){result.replyNameHTML="<a>"+$("#commentName"+state).val()+"</a>"}else{result.replyNameHTML='<a href="'+Util.proessURL($("#commentURL"+state).val())+'" target="_blank">'+$("#commentName"+state).val()+"</a>"}result.userName=result.commentName}else{result.replyNameHTML='<a href="'+window.location.host+'" target="_blank">'+Util.getUserName()+"</a>";result.userName=Util.getUserName()}if(typeof(addComment)==="undefined"){that.addCommentAjax(result.cmtTpl,state)}else{that.addCommentAjax(addComment(result,state),state)}}})}},addReplyForm:function(id,commentFormHTML,endHTML){var that=this;if(id===this.currentCommentId){if($("#commentNameReply").val()===""){$("#commentNameReply").focus()}else{if($("#commentEmailReply").val()===""){$("#commentEmailReply").focus()}else{$("#commentReply").focus()}}return}$("#replyForm").remove();endHTML=endHTML?endHTML:"";if(endHTML==="</div>"){$("#"+id).append(commentFormHTML+$("#commentForm").html()+endHTML)}else{$("#"+id).append(commentFormHTML+$("#commentForm").html()+"</table>"+endHTML)}$("#replyForm input, #replyForm textarea").each(function(){this.id=this.id+"Reply"});$("#commentNameReply").val(Cookie.readCookie("commentName"));$("#commentEmailReply").val(Cookie.readCookie("commentEmail"));var $label=$("#replyForm #commentURLLabel");if($label.length===1){$label.attr("id","commentURLLabelReply")}$("#commentURLReply").val(Cookie.readCookie("commentURL"));$("#replyForm #emotions").attr("id","emotionsReply");this.insertEmotions("Reply");$("#commentReply").unbind().keypress(function(event){if(event.keyCode===13&&event.ctrlKey){that.submitComment(id,"Reply");event.preventDefault()}});$("#commentValidateReply").unbind().keypress(function(event){if(event.keyCode===13){that.submitComment(id,"Reply");event.preventDefault()}});$("#replyForm #captcha").attr("id","captchaReply").attr("src",latkeConfig.servePath+"/captcha.do?"+new Date().getTime()).click(function(){$(this).attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())});$("#replyForm #commentErrorTip").attr("id","commentErrorTipReply").html("").hide();$("#replyForm #submitCommentButton").attr("id","submitCommentButtonReply");$("#replyForm #submitCommentButtonReply").unbind("click").removeAttr("onclick").click(function(){that.submitComment(id,"Reply")});if($("#commentNameReply").val()===""){$("#commentNameReply").focus()}else{if($("#commentEmailReply").val()===""){$("#commentEmailReply").focus()}else{$("#commentReply").focus()}}this.currentCommentId=id},hideComment:function(id){$("#commentRef"+id).hide()},showComment:function(it,id,top,parentTag){var positionTop=parseInt($(it).position().top);if(parentTag){positionTop=parseInt($(it).parents(parentTag).position().top)}if($("#commentRef"+id).length>0){$("#commentRef"+id).show().css("top",(positionTop+top)+"px")}else{var $refComment=$("#"+id).clone();$refComment.addClass("comment-body-ref").attr("id","commentRef"+id);$refComment.find("#replyForm").remove();$("#comments").append($refComment);$("#commentRef"+id).css("top",(positionTop+top)+"px")}},addCommentAjax:function(commentHTML,state){if($("#comments").children().length>0){$($("#comments").children()[0]).before(commentHTML)}else{$("#comments").html(commentHTML)}if(state===""){$("#commentErrorTip").html("").hide();$("#comment").val("");$("#commentValidate").val("");$("#captcha").attr("src",latkeConfig.servePath+"/captcha.do?code="+Math.random())}else{$("#replyForm").remove()}window.location.hash="#comments"}});
\ No newline at end of file \ No newline at end of file
...@@ -9,24 +9,26 @@ ...@@ -9,24 +9,26 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content page-archive"> <div class="main-wrap">
<section class="posts-collapse"> <main>
<span class="archive-move-on"></span> <div class="title">
<span class="archive-page-counter"> <h2 style="border-bottom:0">
${ohLabel}..! <i class="icon-inbox"></i>
&nbsp;
<#if "en" == localeString?substring(0, 2)> <#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} ${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear}
<#else> <#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} ${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if> </#if>
${sumLabel} ${archiveDate.archiveDatePublishedArticleCount} ${fightLabel} - ${archiveDate.archiveDatePublishedArticleCount} ${articleLabel}
</span> </h2>
</section>
<#include "article-list.ftl">
</div> </div>
<#include "side.ftl"> <#include "article-list.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
</body> </body>
</html> </html>
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="other">
<span class="title">
<h2><i class="icon-inbox"></i>
&nbsp;${statistic.statisticPublishedBlogArticleCount} ${articleLabel}</h2>
</span>
<#if 0 != archiveDates?size>
<ul class="list">
<#list archiveDates as archiveDate>
<li>
<#if "en" == localeString?substring(0, 2)>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})
</a>
<#else>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})
</a>
</#if>
</li>
</#list>
</ul>
</#if>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
</body>
</html>
<div>
<#list articles as article>
<article class="post">
<header>
<h1>
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="meta">
<span class="tooltipped tooltipped-n" aria-label="${createDateLabel}">
<i class="icon-date"></i>
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${commentCountLabel}">
<i class="icon-comments"></i>
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${commentLabel}</a>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${viewCountLabel}">
<i class="icon-views"></i>
${article.articleViewCount} ${viewLabel}
</span>
</div>
</header>
<div class="content-reset">
${article.articleAbstract}
</div>
<footer class="fn-clear tags">
<#list article.articleTags?split(",") as articleTag>
<a class="tag" rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
<a href="${servePath}${article.articlePermalink}#more" rel="contents" class="fn-right">
${readLabel} &raquo;
</a>
</footer>
</article>
</#list>
<#if 0 != paginationPageCount>
<div class="fn-clear">
<nav class="pagination fn-right">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="page-number">&laquo;</a>
<a class="page-number" href="${servePath}${path}/1">1</a> <span class="page-number">...</span>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> <span class="page-number">...</span>
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="page-number">&raquo;</a>
</#if>
</nav>
</div>
</#if>
</div>
\ No newline at end of file
<#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>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main>
<article class="post">
<header>
<h1>
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="meta">
<span class="tooltipped tooltipped-n" aria-label="${createDateLabel}">
<i class="icon-date"></i>
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${commentCountLabel}">
<i class="icon-comments"></i>
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${commentLabel}</a>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${viewCountLabel}">
<i class="icon-views"></i>
${article.articleViewCount} ${viewLabel}
</span>
</div>
</header>
<div class="content-reset">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</div>
<footer class="tags">
<#list article.articleTags?split(",") as articleTag>
<a class="tag" rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
<#-- div class="copyright">
${articleCP1Label}
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a> -
<a href="${servePath}">
${blogTitle}
</a>
</div -->
<div class="rel fn-clear">
<#if previousArticlePermalink??>
<a href="${servePath}${previousArticlePermalink}" rel="prev"
class="fn-left tooltipped tooltipped-n"
aria-label="${previousArticleTitle}">
${previousArticleLabel}
</a>
</#if>
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" rel="next"
class="fn-right tooltipped tooltipped-n"
aria-label="${nextArticleTitle}">
${nextArticleLabel}
</a>
</#if>
</div>
</footer>
<div id="externalRelevantArticles" class="list"></div>
<@comments commentList=articleComments article=article></@comments>
</article>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>"
, "<header class='title'><h2>${externalRelevantArticlesLabel}</h2></header>");
</#if>
</@comment_script>
</body>
</html>
<li id="${comment.oId}">
<div>
<div class="avatar tooltipped tooltipped-n" aria-label="${comment.commentName}"
style="background-image: url(${comment.commentThumbnailURL})"></div>
<main>
<div class="fn-clear">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a class="user-name" href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<#if comment.isReply>
@<a class="user-name" href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 23);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
>${comment.commentOriginalCommentName}</a>
</#if>
<time class="ft-gray">${comment.commentDate2?string("yyyy-MM-dd HH:mm")}</time>
<#if article.commentable>
<a class="reply-btn" href="javascript:replyTo('${comment.oId}')">${replyLabel}</a>
</#if>
</div>
<div class="content-reset">
${comment.commentContent}
</div>
</main>
</div>
</li>
\ No newline at end of file
...@@ -13,166 +13,507 @@ ...@@ -13,166 +13,507 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
@charset "utf-8";
/* /*
* skin next style * skin style
* *
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a> * @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.3.2.1, Dec 17, 2016 * @version 0.1.1.0, Feb 18, 2017
*/ */
/* start reset */ /* start common */
html { html {
background-color: #f5f5f5; -webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%
} }
body { body {
margin: 0; margin: 0;
font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif; font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
font-size: 14px; font-size: 14px;
color: #555; color: #333
background: #fff; }
::-moz-selection {
text-shadow: none;
background: rgba(65, 131, 196, 0.4)
}
::selection {
text-shadow: none;
background: rgba(66, 133, 244, 0.4)
}
ul,
ol {
margin: 0;
padding: 0
}
h1,
h2,
h3,
h4,
h5,
h6,
dl,
dd,
p {
margin: 0
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section {
display: block
}
audio,
canvas,
video {
display: inline-block
}
audio:not([controls]) {
display: none
} }
a { a {
color: #555; outline: 0;
text-decoration: none; text-decoration: none;
border-bottom: 1px solid #999; color: #383838;
} }
a:active,
a:hover { a:hover {
outline: 0; color: #ff4d3a;
text-decoration: underline;
} }
sub,
a:hover { sup {
color: #222; position: relative;
border-bottom-color: #222; font-size: 75%;
line-height: 0;
vertical-align: baseline
} }
sup {
hr { top: -0.5em
margin: 40px 0;
height: 3px;
border: none;
background-color: #ddd;
background-image: repeating-linear-gradient(-45deg, #fff, #fff 4px, transparent 4px, transparent 8px);
} }
sub {
blockquote { bottom: -0.25em
padding: 0 15px;
color: #666;
border-left: 4px solid #ddd;
} }
img { img {
max-width: 100%; max-width: 100%;
vertical-align: middle;
border: 0;
height: auto; height: auto;
-ms-interpolation-mode: bicubic
}
button,
input,
select,
textarea {
margin: 0;
font-size: 100%;
vertical-align: middle;
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
outline: none
}
button,
input {
line-height: normal
}
button::-moz-focus-inner,
input::-moz-focus-inner {
padding: 0;
border: 0
}
button,
input[type="button"],
input[type="reset"],
input[type="submit"] {
cursor: pointer;
-webkit-appearance: button
}
input[type="search"] {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
-webkit-appearance: textfield
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none
}
textarea {
overflow: auto;
resize: vertical
}
svg {
vertical-align: text-top;
fill: currentColor
}
blockquote {
margin: 0
}
.content-reset {
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
word-wrap: break-word;
overflow: auto;
line-height: 1.5;
font-size: 16px;
word-break: break-all
}
.content-reset a {
color: #ff4d3a;
}
.content-reset ul,
.content-reset ol {
padding-left: 2em;
margin-top: 0;
margin-bottom: 16px
}
.content-reset li {
margin-top: 0.25em
}
.content-reset h1,
.content-reset h2,
.content-reset h3,
.content-reset h4,
.content-reset h5,
.content-reset h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25
}
.content-reset h1 {
padding-bottom: 0.3em;
font-size: 2em;
border-bottom: 1px solid #eee
}
.content-reset h2 {
padding-bottom: 0.3em;
font-size: 1.5em;
border-bottom: 1px solid #eee
}
.content-reset h3 {
font-size: 1.25em
}
.content-reset h4 {
font-size: 1em
}
.content-reset h5 {
font-size: 0.875em
}
.content-reset h6 {
font-size: 0.85em
}
.content-reset hr {
height: 0.25em;
padding: 0;
margin: 24px 0;
background-color: #e7e7e7;
border: 0
}
.content-reset p {
margin-top: 0;
margin-bottom: 16px
}
.content-reset blockquote {
padding: 0 1em;
color: #777;
border-left: 0.25em solid #ddd;
margin-bottom: 16px
}
.content-reset blockquote p {
margin: 0
}
.content-reset iframe {
border: 1px solid #ccc
}
.content-reset table {
width: 100%;
border: 1px solid #dedede;
margin: 15px auto;
border-collapse: collapse;
empty-cells: show
}
.content-reset thead {
text-align: center
}
.content-reset td,
.content-reset th {
height: 35px;
border: 1px solid #dedede;
padding: 0 10px
}
.content-reset th {
font-weight: bold;
text-align: center !important;
background: rgba(158, 188, 226, 0.2)
}
.content-reset tbody tr:nth-child(2n) {
background: rgba(158, 188, 226, 0.12)
}
.content-reset tr:hover {
background: #efefef
}
.content-reset code {
padding: 0.2em 0.4em;
margin: 0;
font-size: 85%;
background-color: rgba(252, 41, 41, 0.12);
border-radius: 3px;
color: #d23f31;
font-family: mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace
}
.content-reset pre>code {
padding: 0.5em;
border-radius: 0;
color: #333;
background-color: rgba(0, 0, 0, 0.04);
background-image: url(../images/code-bg.png);
background-size: 20px 20px;
border-radius: 5px
}
.content-reset kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb
}
.fn-pointer {
cursor: pointer
}
.fn-inline {
display: inline;
} }
/* end reset */
/* start function */
.fn-clear:before, .fn-clear:before,
.fn-clear:after { .fn-clear:after {
display: table; display: table;
content: ""; content: ""
line-height: 0;
} }
.fn-clear:after { .fn-clear:after {
clear: both; clear: both
line-height: 0;
} }
.fn-left { .fn-left {
float: left; float: left
} }
.fn-right { .fn-right {
float: right; float: right
} }
.fn-none { .fn-none {
display: none; display: none
} }
/* end function */ .fn-hidden {
visibility: hidden
/* start common */ }
@font-face { .fn-ellipsis {
font-family: 'icomoon'; overflow: hidden;
src: url('fonts/icomoon.eot?a0psdo'); text-overflow: ellipsis;
src: url('fonts/icomoon.eot?a0psdo#iefix') format('embedded-opentype'), white-space: nowrap;
url('fonts/icomoon.ttf?a0psdo') format('truetype'), word-wrap: normal
url('fonts/icomoon.woff?a0psdo') format('woff'), }
url('fonts/icomoon.svg?a0psdo#icomoon') format('svg'); .tooltipped {
font-weight: normal; position: relative;
font-style: normal; cursor: pointer;
} }
[class^="icon-"], [class*=" icon-"] { .tooltipped::after {
/* use !important to prevent issues with browser extensions that change fonts */ position: absolute;
font-family: 'icomoon' !important; z-index: 1000000;
speak: none; display: none;
font-style: normal; padding: 5px 8px;
font-size: 11px;
font-weight: normal; font-weight: normal;
font-variant: normal; -webkit-font-smoothing: subpixel-antialiased;
color: #fff;
text-align: center;
text-decoration: none;
text-shadow: none;
text-transform: none; text-transform: none;
line-height: 1; letter-spacing: normal;
word-wrap: break-word;
white-space: pre;
pointer-events: none;
content: attr(aria-label);
background: rgba(0,0,0,0.8);
border-radius: 3px;
line-height: 16px;
opacity: 0
}
/* Better Font Rendering =========== */ .tooltipped::before {
-webkit-font-smoothing: antialiased; position: absolute;
-moz-osx-font-smoothing: grayscale; z-index: 1000001;
display: none;
width: 0;
height: 0;
color: rgba(0,0,0,0.8);
pointer-events: none;
content: "";
border: 5px solid transparent;
opacity: 0
} }
.icon-register:before { @-webkit-keyframes tooltip-appear {
content: "\e973"; from {
opacity: 0
}
to {
opacity: 1
}
} }
.icon-setting:before {
content: "\e994"; @keyframes tooltip-appear {
from {
opacity: 0
}
to {
opacity: 1
}
} }
.icon-login:before {
content: "\ea13"; .tooltipped-hover::before,
.tooltipped-hover::after,
.tooltipped:hover::before,
.tooltipped:hover::after,
.tooltipped:active::before,
.tooltipped:active::after,
.tooltipped:focus::before,
.tooltipped:focus::after {
display: inline-block;
text-decoration: none;
-webkit-animation-name: tooltip-appear;
animation-name: tooltip-appear;
-webkit-animation-duration: 0.1s;
animation-duration: 0.1s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in;
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s
} }
.icon-logout:before {
content: "\ea14"; .tooltipped-s::after,.tooltipped-se::after,.tooltipped-sw::after {
top: 100%;
right: 50%;
margin-top: 5px
} }
.icon-rss:before {
content: "\e901"; .tooltipped-s::before,.tooltipped-se::before,.tooltipped-sw::before {
top: auto;
right: 50%;
bottom: -5px;
margin-right: -5px;
border-bottom-color: rgba(0,0,0,0.8)
} }
.form {
width: 100%; .tooltipped-se::after {
margin-top: 50px; right: auto;
left: 50%;
margin-left: -15px
} }
.form input, .tooltipped-sw::after {
.form textarea, margin-right: -15px
.form button {
border: 1px solid #CCCCCC;
background-color: #FAFAFA;
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
padding: 7px 8px;
width: 100%;
box-sizing: border-box;
outline: none;
} }
.form button { .tooltipped-n::after,.tooltipped-ne::after,.tooltipped-nw::after {
width: auto; right: 50%;
bottom: 100%;
margin-bottom: 5px
} }
.form input:focus, .tooltipped-n::before,.tooltipped-ne::before,.tooltipped-nw::before {
.form textarea:focus { top: -5px;
background-color: #FFF; right: 50%;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset, 0 0 5px rgba(81, 167, 232, 0.5); bottom: auto;
border: 1px solid #51A7E8; margin-right: -5px;
border-top-color: rgba(0,0,0,0.8)
} }
.error-msg { .tooltipped-ne::after {
color: #9EABB3; right: auto;
margin-right: 10px; left: 50%;
margin-left: -15px
}
.tooltipped-nw::after {
margin-right: -15px
}
.tooltipped-s::after,.tooltipped-n::after {
-webkit-transform: translateX(50%);
transform: translateX(50%)
}
.tooltipped-w::after {
right: 100%;
bottom: 50%;
margin-right: 5px;
-webkit-transform: translateY(50%);
transform: translateY(50%);
}
.tooltipped-w::before {
top: 50%;
bottom: 50%;
left: -5px;
margin-top: -5px;
border-left-color: rgba(0,0,0,0.8);
}
.tooltipped-e::after {
bottom: 50%;
left: 100%;
margin-left: 5px;
-webkit-transform: translateY(50%);
transform: translateY(50%)
}
.tooltipped-e::before {
top: 50%;
right: -5px;
bottom: 50%;
margin-top: -5px;
border-right-color: rgba(0,0,0,0.8)
} }
/* end common */
/* start emotions */ a[class^="icon-"],
a[class*=" icon-"] {
color: #333
}
a[class^="icon-"]:hover,
a[class*=" icon-"]:hover {
text-decoration: none;
color: #4285f4
}
@font-face {
font-family: 'icomoon';
src: url("fonts/icomoon.eot?68j667");
src: url("fonts/icomoon.eot?68j667#iefix") format("embedded-opentype"), url("fonts/icomoon.ttf?68j667") format("truetype"), url("fonts/icomoon.woff?68j667") format("woff"), url("fonts/icomoon.svg?68j667#icomoon") format("svg");
font-weight: normal;
font-style: normal
}
[class^="icon-"],
[class*=" icon-"] {
font-family: 'icomoon' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale
}
.em00, .em01, .em02, .em03, .em04, .em05, .em06, .em07, .em08, .em09, .em00, .em01, .em02, .em03, .em04, .em05, .em06, .em07, .em08, .em09,
.em10, .em11, .em12, .em13, .em14 { .em10, .em11, .em12, .em13, .em14 {
cursor: pointer; cursor: pointer;
...@@ -185,1027 +526,641 @@ img { ...@@ -185,1027 +526,641 @@ img {
-webkit-transition: all .2s ease-out; -webkit-transition: all .2s ease-out;
-moz-transition: all .2s ease-out; -moz-transition: all .2s ease-out;
} }
.emotions span:hover {
#emotions span:hover {
transform: scale(1.2) rotate(360deg); transform: scale(1.2) rotate(360deg);
-webkit-transform: scale(1.2) rotate(360deg); -webkit-transform: scale(1.2) rotate(360deg);
-moz-transform: scale(1.2) rotate(360deg); -moz-transform: scale(1.2) rotate(360deg);
} }
.em01 { .em01 {
background-position: -24px 0; background-position: -24px 0;
} }
.em02 { .em02 {
background-position: -48px 0; background-position: -48px 0;
} }
.em03 { .em03 {
background-position: -72px 0; background-position: -72px 0;
} }
.em04 { .em04 {
background-position: -96px 0; background-position: -96px 0;
} }
.em05 { .em05 {
background-position: 0px -24px; background-position: 0px -24px;
} }
.em06 { .em06 {
background-position: -24px -24px; background-position: -24px -24px;
} }
.em07 { .em07 {
background-position: -48px -24px; background-position: -48px -24px;
} }
.em08 { .em08 {
background-position: -72px -24px; background-position: -72px -24px;
} }
.em09 { .em09 {
background-position: -96px -24px; background-position: -96px -24px;
} }
.em10 { .em10 {
background-position: 0 -48px; background-position: 0 -48px;
} }
.em11 { .em11 {
background-position: -24px -48px ; background-position: -24px -48px ;
} }
.em12 { .em12 {
background-position: -48px -48px; background-position: -48px -48px;
} }
.em13 { .em13 {
background-position: -72px -48px; background-position: -72px -48px;
} }
.em14 { .em14 {
background-position: -96px -48px; background-position: -96px -48px;
} }
/* end emotions */
/* start framework */
.wrapper {
max-width: 700px;
min-width: 600px;
margin: 0 auto;
padding: 0 10px;
}
.main {
position: relative;
top: -50px;
opacity: 0;
}
.header {
background: #f5f5f5;
margin-bottom: 80px;
padding: 40px 0px;
}
.logo-wrap {
float: left;
overflow: hidden;
top: 0;
opacity: 0;
}
.logo-line-before,
.logo-line-after {
display: block;
overflow: hidden;
margin: 0 auto;
width: 75%;
}
.logo-line-before i,
.logo-line-after i {
position: relative;
display: block;
height: 2px;
background: #222;
left: -100%;
}
.logo-line-after i {
left: auto;
right: -100%;
}
.logo-wrap .site-title {
font-size: 22px;
font-weight: bolder;
opacity: 0;
top: -10px;
position: relative;
}
.logo-wrap > a {
position: relative;
display: inline-block;
padding: 2px 1px;
color: #222;
line-height: 2;
border-bottom: none;
font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
}
.site-nav-toggle { .b3-solo-list {
display: none; display: none;
} }
.menu { #commentForm,
float: left; #replyForm {
margin: 5px 0 0 20px;
padding: 0 20px;
opacity: 0;
}
.menu .menu-item {
display: inline-block;
}
.menu .menu-item a {
padding: 5px 10px;
border: none;
transition-property: background;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.menu .menu-item a:hover {
background: #e1e1e1;
}
.site-search {
float: right;
margin-top: 15px;
}
.site-search input {
padding: 3px;
border: none;
padding-left: 18px;
border-radius: 0;
width: 140px;
background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGhlaWdodD0iMTZweCIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNnB4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNMTUuNywxNC4zbC0zLjEwNS0zLjEwNUMxMy40NzMsMTAuMDI0LDE0LDguNTc2LDE0LDdjMC0zLjg2Ni0zLjEzNC03LTctN1MwLDMuMTM0LDAsN3MzLjEzNCw3LDcsNyAgYzEuNTc2LDAsMy4wMjQtMC41MjcsNC4xOTQtMS40MDVMMTQuMywxNS43YzAuMTg0LDAuMTg0LDAuMzgsMC4zLDAuNywwLjNjMC41NTMsMCwxLTAuNDQ3LDEtMUMxNiwxNC43ODEsMTUuOTQ2LDE0LjU0NiwxNS43LDE0LjN6ICAgTTIsN2MwLTIuNzYyLDIuMjM4LTUsNS01czUsMi4yMzgsNSw1cy0yLjIzOCw1LTUsNVMyLDkuNzYyLDIsN3oiLz48L3N2Zz4=") no-repeat 0 50%;
background-size: 12px 12px;
outline: none;
border-bottom: 1px solid #999;
opacity: 0.5;
}
.site-search input:focus {
opacity: 1;
}
.footer {
margin-top: 80px;
padding: 10px 20px;
background: #f5f5f5;
color: #666;
line-height: 2;
}
.sidebar-toggle {
position: fixed;
right: 50px;
bottom: 45px;
width: 15px;
height: 15px;
padding: 5px;
background: #222;
line-height: 0;
z-index: 1050;
cursor: pointer;
-webkit-transform: translateZ(0);
}
.sidebar-toggle.has-toc .sidebar-toggle-line{
background: #87daff;
}
.sidebar-toggle-line {
position: relative;
display: inline-block;
vertical-align: top;
height: 2px;
width: 100%;
background: #fff;
margin-top: 4px;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.sidebar-toggle-line:first-child {
margin-top: 0;
}
.sidebar-toggle:hover .sidebar-toggle-line-first {
width: 50%;
transform: rotateZ(-45deg);
top: 3px;
}
.sidebar-toggle:hover .sidebar-toggle-line-middle {
width: 90%;
}
.sidebar-toggle:hover .sidebar-toggle-line-last {
width: 50%;
transform: rotateZ(45deg);
top: -3px;
}
.sidebar-toggle.sidebar-active .sidebar-toggle-line-first {
width: 100%;
transform: rotateZ(-45deg);
top: 6px;
}
.sidebar-toggle.sidebar-active .sidebar-toggle-line-middle {
opacity: 0;
}
.sidebar-toggle.sidebar-active .sidebar-toggle-line-last {
width: 100%; width: 100%;
transform: rotateZ(45deg);
top: -6px;
}
.back-to-top {
position: fixed;
bottom: 19px;
right: 50px;
z-index: 1050;
width: 15px;
height: 13px;
padding: 5px;
background: #222;
color: #fff;
cursor: pointer;
-webkit-transform: translateZ(0);
}
.back-to-top:before {
display: block;
content: " ";
margin-top: 2px;
width: 0;
height: 0;
border-width: 0 7px 8px 7px;
border-color: transparent transparent #fff transparent;
border-style: solid;
}
/* end framework */
/* start side */
.sidebar {
width: 320px;
position: fixed;
right: -320px;
top: 0;
bottom: 0;
z-index: 1040;
box-shadow: inset 0 2px 6px #000;
background: #222;
-webkit-transform: translateZ(0);
padding: 20px 10px;
color: #999;
text-align: center;
box-sizing: border-box;
}
.sidebar a {
color: #999;
border-bottom-color: #555;
}
.sidebar a:hover {
color: #eee;
}
.sidebar .site-author-image {
display: block;
margin: 20px auto 0;
max-width: 96px;
height: auto;
border: 2px solid #333;
padding: 2px;
} }
.sidebar .site-author-name { .comments {
margin: 5px 0 0; position: relative;
color: #f5f5f5;
}
.sidebar .site-description {
margin-top: 5px;
font-size: 14px;
color: #555;
} }
.sidebar .site-state-item { .comment-body-ref {
display: inline-block; position: absolute;
padding: 0 15px; width: 80%;
border-left: 1px solid #333; background-color: #fff;
} right: 0;
.sidebar .site-state-item:first-child { border: 1px solid #eee;
border-left: none;
}
.sidebar .site-state-item a {
border-bottom: none;
}
.sidebar .site-state-item-count {
display: block;
text-align: center;
font-size: 18px;
}
.sidebar .site-state-item-name {
font-size: 13px;
} }
/* end common */
.sidebar .feed-link { /* start reset common */
margin-top: 20px; .icon-list:before {
content: "\f0ca";
} }
.sidebar .feed-link a { .icon-home:before {
display: inline-block; content: "\f015";
padding: 3px 15px;
color: #fc6423;
border: 1px solid #fc6423;
border-radius: 4px;
} }
.sidebar .feed-link a:hover { .icon-comments:before {
color: #fff; content: "\f0e6";
background: #fc6423;
} }
.icon-date:before {
.sidebar .links-of-author { content: "\f073";
margin-top: 20px;
} }
.sidebar .links-of-author a { .icon-search:before {
display: inline-block; content: "\f002";
vertical-align: middle;
margin-right: 10px;
margin-bottom: 10px;
border-bottom-color: #555;
font-size: 13px;
} }
.sidebar .links-of-author a:before { .icon-up:before {
display: inline-block; content: "\f077";
vertical-align: middle;
margin-right: 3px;
content: " ";
width: 4px;
height: 4px;
border-radius: 50%;
background: #0dd5ff;
} }
.icon-inbox:before {
.sidebar .b3-solo-list { content: "\f01c";
margin: 20px;
list-style: none;
text-align: left;
padding: 0;
font-size: 14px;
line-height: 2;
} }
.icon-tags:before {
.sidebar section { content: "\f02c";
opacity: 0;
position: relative;
overflow: auto;
} }
.icon-link:before {
.sidebar > ul > li { content: "\f0c1";
display: inline-block;
cursor: pointer;
border-bottom: 1px solid transparent;
font-size: 14px;
color: #555;
} }
.icon-refresh:before {
.sidebar > ul > li:hover { content: "\f021";
color: #f5f5f5;
} }
.icon-logout:before {
.sidebar > ul > li.current { content: "\ea14";
color: #87daff;
border-bottom-color: #87daff;
} }
.icon-views:before {
.sidebar > ul > li:last-child { content: "\e900";
margin-left: 10px;
} }
.icon-register:before {
content: "\e973";
/* end side */
/* start list*/
.posts-expand .post-item {
margin-top: 120px;
} }
.posts-expand .post-item:first-child { .icon-setting:before {
margin-top: 0; content: "\e994";
} }
.icon-login:before {
.post-title-link { content: "\ea13";
display: inline-block;
position: relative;
color: #555;
border-bottom: none;
line-height: 1.2;
vertical-align: top;
font-size: 26px;
font-weight: 400;
} }
.icon-rss:before {
.post-title-link::before { content: "\e901";
content: "";
position: absolute;
width: 100%;
height: 2px;
bottom: 0;
left: 0;
background-color: #000;
visibility: hidden;
transform: scaleX(0);
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
} }
*::selection {
.post-title-link:hover::before { background: none repeat scroll 0% 0% #3D4450;
visibility: visible; color: #FFF;
transform: scaleX(1); outline: none;
} }
.posts-expand .post-meta { a {
margin: 3px 0 60px 0; transition: all .3s;
color: #999; outline: none;
font-size: 12px;
} }
.post-more-link a { .pagination {
color: #666; margin-bottom: 30px;
border: none; line-height: 30px;
border-bottom: 2px solid #666; font-family: Georgia;
transition-property: border;
} }
.post-more-link a:hover { .pagination .page-number:first-child {
border-bottom-color: #222; border-left: 1px solid #ddd;
} }
.pagination {
border-top: 1px solid #eee;
margin: 120px 0 0;
text-align: left;
}
.pagination .next,
.pagination .page-number { .pagination .page-number {
display: inline-block; display: inline-block;
position: relative;
top: -1px;
margin: 0 5px;
padding: 0 10px; padding: 0 10px;
line-height: 30px; border: 1px solid #ddd;
border-bottom: 0; border-left:0;
border-top: 1px solid #eee; text-decoration: none;
transition-property: border-color; float: left;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
} }
.pagination .next:hover,
.pagination .page-number:hover { .pagination a.page-number:hover {
border-top-color: #222; color: #ff4d3a;
background-color: #eee;
} }
.pagination .page-number.current { .pagination .page-number.current {
color: #fff; color: #fff;
background: #ccc; background: #ff4d3a;
border-top-color: #ccc; border-color: #ff4d3a;
margin-left: -1px;
} }
/* end list*/
/* start article */ .module {
.article-body { box-shadow: .0 1px 1px rgba(0,0,0,0.05);
font-family: "Helvetica Neue","Luxi Sans","DejaVu Sans",Tahoma,"Hiragino Sans GB","Microsoft Yahei",sans-serif; margin-bottom: 20px;
word-wrap: break-word;
overflow: hidden;
line-height: 1.5
} }
.article-body ul,.article-body ol { .module header h2 {
padding-left: 2em; border-bottom: 1px solid #ff4d3a;
margin-top: 0; padding: 10px;
margin-bottom: 16px line-height: 18px;
font-size: 16px;
font-weight: 400;
} }
.article-body li { .module main {
margin-top: 0.25em; padding: 20px;
} }
.article-body h1,.article-body h2,.article-body h3,.article-body h4,.article-body h5,.article-body h6 { .ft-warn {
margin-top: 24px; color: #ff4d3a;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25
} }
.article-body h1 { .ft-gray {
padding-bottom: 0.3em; color: #aaa;
font-size: 2em
} }
.article-body h2 { .list,
padding-bottom: 0.3em; .module main.list {
font-size: 1.5em padding: 0;
} }
.article-body h3 { .list li {
font-size: 1.25em list-style: none;
border-bottom: 1px solid #eee;
line-height: 40px;
padding: 0 20px;
} }
.article-body h4 { .list li:last-child {
font-size: 1em border-bottom: 0;
} }
.article-body h5 { .list a {
font-size: 0.875em color: #666;
text-decoration: none;
display: block;
} }
.article-body h6 { .list a:hover {
font-size: 0.85em color: #ff4d3a;
} }
.article-body p { .form input,
margin-top: 0; .form textarea {
margin-bottom: 16px border: 1px solid #ccc;
background-color: #FAFAFA;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
padding: 0 10px;
width: 100%;
line-height: 28px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box
} }
.article-body blockquote { .form input:focus,
padding: 0 1em; .form textarea:focus {
color: #777; background-color: #FFF;
border-left: 0.25em solid #ddd; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset, 0 0 5px rgba(81, 167, 232, 0.5);
margin-bottom: 16px border: 1px solid #51A7E8
} }
.article-body blockquote p { .form button {
margin: 0 background-color: #EB5750;
border: 0;
color: #fff;
} }
.article-body iframe { .form button:hover {
border: 1px solid #ccc background-color: #e42f19;
} }
/* end reset common */
.article-body table { /* start framework */
width: 100%; .wrapper {
border: 1px solid #dedede; width: 90%;
margin: 15px auto; margin: 0 auto;
border-collapse: collapse; min-width: 720px;
empty-cells: show max-width: 1300px;
} }
.article-body thead { aside {
text-align: center width: 28%;
min-width: 236px;
} }
.article-body td,.article-body th { .main-wrap {
height: 35px; display: flex;
border: 1px solid #dedede;
padding: 0 10px
} }
.article-body th { .main-wrap > main {
font-weight: bold; margin-right: 30px;
text-align: center !important; flex: 1;
background: rgba(158,188,226,0.2) min-width: 1px;
} }
/* end framework */
.article-body tbody tr:nth-child(2n) { /* start header */
background: rgba(158,188,226,0.12) .banner {
background-color: #393939;
height: 75px;
} }
.article-body tr:hover { .banner h1 a {
background: #efefef color: #fff;
line-height: 75px;
text-decoration: none;
} }
.article-body code { .banner small {
padding: 0.2em 0.4em; color: #DFDFDF;
margin: 0; font-size: 15px;
font-size: 85%;
background-color: rgba(252,41,41,0.12);
border-radius: 3px;
color: #d23f31;
font-family: mononoki,Consolas,"Liberation Mono",Menlo,Courier,monospace
} }
.article-body pre>code { .banner .fn-right a {
padding: 0.5em; line-height: 75px;
border-radius: 0; color: #DFDFDF;
color: #333; text-decoration: none;
background-color: rgba(0,0,0,0.04); margin-left: 10px;
background-image: url(../images/code-bg.png); opacity: 0.6;
background-size: 20px 20px;
border-radius: 5px
} }
.article-body kbd { .banner .fn-right a:hover {
display: inline-block; opacity: 1;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb
} }
.navbar {
border-bottom: 1px solid #eee;
.post-header { height: 50px;
text-align: center; margin-bottom: 30px;
} }
.post-body { .navbar.pin {
word-wrap: break-word; position: fixed;
width: 100%;
background-color: rgba(255, 255, 255, 0.95);
top: 0;
z-index: 10;
} }
.post-body img { .navbar nav a {
box-sizing: border-box; color: #555;
margin: auto; text-decoration: none;
} line-height: 50px;
.posts-expand .post-tags { padding: 0 10px;
margin-top: 40px; display: inline-block;
} }
.posts-expand .post-tags a {
padding: 1px 5px; .navbar nav a:hover {
background: #f5f5f5; color: #333;
border-bottom: none;
} }
.posts-expand .post-tags a:hover {
background: #ccc; .navbar nav a.current {
background-color: #eee;
} }
.posts-expand .post-nav {
margin-top: 40px; .navbar form {
overflow: hidden; position: relative;
padding: 10px; margin-top: 8px;
white-space: nowrap;
border-top: 1px solid #eee;
} }
.post-nav-item a:hover {
color: #222; .navbar .form input {
border-bottom: none; padding-right: 40px;
} }
.post-nav-item a {
position: relative; .navbar button {
display: inline-block; background-color: #EB5750;
line-height: 25px; border: 0;
font-size: 14px; color: #fff;
color: #555; position: absolute;
border-bottom: none; top: 0;
width: 50%; right: 0;
height: 30px;
width: 30px;
} }
#externalRelevantArticles h4 { .navbar button:hover {
margin-bottom: 0; background-color: #e42f19;
} }
/* end header */
#externalRelevantArticles ul { /* start footer */
margin-top: 5px; .footer {
padding: 30px 0;
text-align: center;
background: #111;
margin-top: 30px;
color: #fff;
} }
.article-body { .footer a {
text-align: justify; color: #ff4d3a;
text-decoration: none;
} }
.article-body p { .icon-up {
margin: 0 0 25px 0; position: fixed;
bottom: 122px;
right: 20px;
color: #fff;
background-color: #111;
height: 30px;
width: 30px;
text-align: center;
line-height: 28px;
border-radius: 15px;
transition: all .3s;
cursor: pointer;
display: none;
} }
/* end article */
/* start comments */ .icon-up:hover {
ul.comments { background-color: #ff4d3a;
padding: 0;
list-style: none;
margin-top: 50px;
position: relative;
} }
/* end footer */
ul.comments li { /* start side */
padding: 10px; aside .ad {
white-space: normal; background-color: #3cbc8d;
word-wrap: break-word; border-color: #36a96b;
position: relative; color: #fff;
border-bottom: #EBF2F6 1px solid; padding: 20px;
margin-bottom: 20px;
border: 1px solid transparent;
box-sizing: border-box;
} }
ul.comments li:hover { aside .meta main {
background-color: #F7F7F7; text-align: right;
line-height: 20px;
} }
ul.comments .avatar-48 { aside .meta img {
position: absolute; float: left;
box-shadow: 0 0 2px #ddd; height: 80px;
height: 48px; width: 80px;
width: 48px; border-radius: 5px;
margin: 8px 10px 0 0;
border-radius: 24px;
} }
ul.comments .comment-body { aside .tag.tooltipped {
margin: 8px 0 0 60px; display: inline-block;
min-height: 50px; padding: 2px 5px;
margin-bottom: 10px;
border: 1px solid #e1e1e1;
text-decoration: none;
margin-right: 10px;
line-height: 22px;
} }
/* end side */
ul.comments li.comment-body-ref { /* start article list */
position: absolute; .post {
z-index: 10; border: 1px solid #ededed;
background-color: #EBF2F6; margin-bottom: 20px;
border: #d5dbde 1px solid; padding: 20px;
width: 80%; box-sizing: border-box;
left: 69px;
} }
ul.comments .comment-meta { .post h1 {
font-family: "Open Sans","Microsoft Yahei",Helvetica; margin-bottom: 10px;
color: #9eabb3;
font-size: 13px;
} }
ul.comments .comment-meta a { .post h1 a {
color: #9EABB3; font-size: 30px;
font-weight: 500;
text-decoration: none; text-decoration: none;
border-bottom-width: 0;
} }
ul.comments .post-meta a:hover { .post sup {
text-decoration: underline; color: #aaa;
font-weight: 300;
} }
ul.comments .comment-meta time { .post .meta {
border-left: 1px solid #d5dbde; color: #aaa;
margin-left: 8px; margin-bottom: 10px;
padding-left: 12px;
} }
#captcha, .post .meta a {
#captchaReply { color: #aaa;
height: 27px; text-decoration: none;
vertical-align: inherit;
} }
/* end comments */ .post .meta a:hover {
color: #ff4d3a;
}
/* start tags */ .tags > a.tag {
.tag-cloud { color: #fff;
text-align: center; font-size: 12px;
display: inline-block;
background-color: #bbb;
margin-right: 10px;
padding: 0 5px;
line-height: 22px;
text-decoration: none;
margin-top: 10px;
}
.tags > a.tag:before {
content: "#";
}
.tags > a.tag:hover {
background: #999;
} }
.tag-cloud ul.tag-cloud-tags { .post footer .copyright {
padding-left: 0; padding: 10px;
font-size: 14px;
line-height: 16px;
border: 1px solid #ff4d3a;
border-left-width: 20px;
margin: 20px 0;
} }
#tags li { .post .rel a {
list-style: none;
display: inline-block; display: inline-block;
margin: 10px; padding: 5px 14px;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 15px;
text-decoration: none;
margin: 20px 0;
} }
#tags .tags1 { .post .rel a:hover {
font-size: 12px; background-color: #eee;
color: #CCC;
} }
#tags .tags2 { .title h2 {
font-size: 16px; font-size: 16px;
color: #999; font-weight: bold;
padding-bottom: 10px;
border-bottom: 1px solid #f1f1f1;
margin-top: 20px;
} }
/* end article list */
#tags .tags3 { /* start comments */
font-size: 21px; .comments > li {
color: #6f6f6f; list-style: none;
border-bottom: 1px solid #f1f1f1;
padding: 10px;
} }
#tags .tags4 { .comments > li > div {
font-size: 24px; display: flex;
color: #333;
} }
#tags .tags5 { .comments .avatar {
font-size: 30px; width: 50px;
color: #111; height: 50px;
border-radius: 100%;
margin-right: 20px;
background-size: contain;
} }
/* end tags */
/* start archives */ .comments main {
.posts-collapse .collection-title::before { flex: 1;
content: " "; min-width: 1px;
position: absolute;
left: 0;
top: 50%;
margin-left: -4px;
margin-top: -4px;
width: 8px;
height: 8px;
background: #bbb;
border-radius: 50%;
}
.posts-collapse .collection-title {
position: relative;
margin: 60px 0;
}
.posts-collapse .collection-title h2 {
margin-left: 20px;
}
.posts-collapse .collection-title small {
color: #bbb;
} }
.posts-collapse .post-header::before {
content: " "; .comments .content-reset {
position: absolute; margin-top: 10px;
left: 0;
top: 12px;
width: 6px;
height: 6px;
margin-left: -4px;
background: #bbb;
border-radius: 50%;
border: 1px solid #fff;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: background;
}
.posts-collapse .post-header {
position: relative;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: border;
border-bottom: 1px dashed #ccc;
text-align: left;
}
.posts-collapse .post-header:hover {
border-bottom-color: #666;
} }
.posts-collapse .post-header:hover::before {
background: #222; .comments .user-name {
color: #666;
text-decoration: none;
} }
.posts-collapse .post-time {
position: absolute; .comments .user-name:hover {
font-size: 12px; color: #ff4d3a;
left: 20px;
top: 8px;
} }
.posts-collapse .post-title {
margin-left: 70px; .comments .reply-btn {
font-size: 16px; float: right;
font-weight: normal; background-color: #ff4d3a;
font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif; color: #fff;
line-height: inherit;
text-decoration: none; text-decoration: none;
border-bottom: 0; font-size: 12px;
color: #666; padding: 2px 5px;
}
.page-archive .archive-page-counter {
position: relative;
top: 7px;
left: 20px;
margin-bottom: 50px;
display: block;
} }
.page-archive .posts-collapse .archive-move-on {
position: absolute; .comments .reply-btn:hover {
top: 11px; background-color: #e42f19;
left: 0;
margin-left: -6px;
width: 10px;
height: 10px;
opacity: 0.5;
background: #555;
border: 1px solid #fff;
border-radius: 50%;
} }
.page-archive .post-title {
margin-left: 20px; #commentForm {
margin-top: 20px;
} }
.page-archive .posts-collapse .post-header::before {
top: 8px; .form .captcha {
height: 28px;
} }
.page-archive .posts-collapse::after { /* end comments */
top: 20px;
left: 0; /* start other */
margin-left: -2px; .other {
width: 4px; border: 1px solid #ededed;
height: 100%; margin-bottom: 20px;
background: #f5f5f5; padding: 0 20px 20px;
z-index: -1;
content: " ";
position: absolute;
} }
/* end archives */ /* end other */
/* start responsive */ /* start responsive */
@media (max-width: 1000px) { @media (max-width: 900px) {
.sidebar-toggle, .navbar .form {
.sidebar {
display: none; display: none;
} }
body {
padding-right: 0 !important;
}
} }
@media (max-width: 700px) { @media (max-width: 700px) {
.page-archive .posts-collapse .archive-move-on { .wrapper {
margin-left: 5px; width: 100%;
} min-width: auto;
padding: 0 10px;
.posts-collapse { box-sizing: border-box;
margin-left: 10px;
}
pre {
word-wrap: break-word;
word-break: break-all;
white-space: normal;
} }
.page-archive .archive-page-counter { .main-wrap > main {
margin-right: 10px; margin-right: 0;
} }
.site-nav-toggle { .main-wrap,
.responsive {
display: block; display: block;
margin-top: 16px;
} }
.logo-line-before, aside {
.logo-line-after, width: 100%;
.menu, box-sizing: border-box;
.site-search,
.back-to-top {
display: none;
} }
.header { .banner {
margin-bottom: 50px; margin-bottom: 20px;
padding: 5px 0px;
} }
.header-line { .banner small,
position: relative; .banner .fn-right,
top: 52px; .navbar {
height: 1px;
width: 100%;
background-color: #ddd;
display: none; display: none;
} }
.wrapper { .icon-list {
min-width: inherit; position: absolute;
} right: 10px;
top: 20px;
.btn-bar { background-color: #fff;
display: block; font-size: 20px;
width: 22px; padding: 8px 6px;
height: 2px; cursor: pointer;
background: #555;
border-radius: 1px;
}
.btn-bar+.btn-bar {
margin-top: 4px;
} }
.menu { .responsive .list {
background-color: #fff;
position: absolute;
width: 100%; width: 100%;
margin: 0 0 0 -20px; border: 1px solid #eee;
padding: 0 5px; left: 0;
line-height: 26px; display: none;
} z-index: 10;
top: 75px;
.menu .menu-item {
display: block;
}
.footer {
text-align: center;
font-size: 12px;
padding: 10px 0;
} }
.footer .fn-right { .responsive .list li.current {
float: none; background-color: #eee;
} }
} }
/* end responsive */ /* end responsive */
\ No newline at end of file
/**
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
blockquote,body,dd,dl,h1,h2,h3,h4,h5,h6,ol,p,ul{margin:0}.content-reset,body,button,input,select,textarea{font-family:"Helvetica Neue","Luxi Sans","DejaVu Sans",Tahoma,"Hiragino Sans GB","Microsoft Yahei",sans-serif}html{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{font-size:14px;color:#333}::-moz-selection{text-shadow:none;background:rgba(65,131,196,.4)}ol,ul{padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none}a{text-decoration:none;color:#383838}.content-reset a,a:hover{color:#ff4d3a}a:hover{text-decoration:underline}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{max-width:100%;vertical-align:middle;border:0;height:auto;-ms-interpolation-mode:bicubic}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;outline:0}button,input{line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}.content-reset h1,.content-reset h2{padding-bottom:.3em;border-bottom:1px solid #eee}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}svg{vertical-align:text-top;fill:currentColor}.content-reset{word-wrap:break-word;overflow:auto;line-height:1.5;font-size:16px;word-break:break-all}.content-reset ol,.content-reset ul{padding-left:2em;margin-top:0;margin-bottom:16px}.content-reset li{margin-top:.25em}.content-reset h1,.content-reset h2,.content-reset h3,.content-reset h4,.content-reset h5,.content-reset h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.content-reset h1{font-size:2em}.content-reset h2{font-size:1.5em}.content-reset h3{font-size:1.25em}.content-reset h4{font-size:1em}.content-reset h5{font-size:.875em}.content-reset h6{font-size:.85em}.content-reset hr{height:.25em;padding:0;margin:24px 0;background-color:#e7e7e7;border:0}.content-reset p{margin-top:0;margin-bottom:16px}.content-reset blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd;margin-bottom:16px}.content-reset blockquote p{margin:0}.content-reset iframe{border:1px solid #ccc}.content-reset table{width:100%;border:1px solid #dedede;margin:15px auto;border-collapse:collapse;empty-cells:show}.content-reset thead{text-align:center}.content-reset td,.content-reset th{height:35px;border:1px solid #dedede;padding:0 10px}.content-reset th{font-weight:700;text-align:center!important;background:rgba(158,188,226,.2)}.footer,.icon-up{text-align:center}.content-reset tbody tr:nth-child(2n){background:rgba(158,188,226,.12)}.content-reset tr:hover{background:#efefef}.content-reset code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(252,41,41,.12);border-radius:3px;color:#d23f31;font-family:mononoki,Consolas,"Liberation Mono",Menlo,Courier,monospace}.content-reset pre>code{padding:.5em;color:#333;background-color:rgba(0,0,0,.04);background-image:url(../images/code-bg.png);background-size:20px 20px;border-radius:5px}.content-reset kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.fn-pointer{cursor:pointer}.fn-inline{display:inline}.fn-clear:after,.fn-clear:before{display:table;content:""}.fn-clear:after{clear:both}.fn-left{float:left}.fn-right{float:right}.fn-none{display:none}.fn-hidden{visibility:hidden}.fn-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.tooltipped{position:relative;cursor:pointer}.tooltipped::after,.tooltipped::before{position:absolute;display:none;pointer-events:none}.tooltipped::after{z-index:1000000;padding:5px 8px;font-size:11px;font-weight:400;-webkit-font-smoothing:subpixel-antialiased;color:#fff;text-align:center;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-wrap:break-word;white-space:pre;content:attr(aria-label);background:rgba(0,0,0,.8);border-radius:3px;line-height:16px;opacity:0}.tooltipped::before{z-index:1000001;width:0;height:0;color:rgba(0,0,0,.8);content:"";border:5px solid transparent;opacity:0}@-webkit-keyframes tooltip-appear{from{opacity:0}to{opacity:1}}@keyframes tooltip-appear{from{opacity:0}to{opacity:1}}.tooltipped-hover::after,.tooltipped-hover::before,.tooltipped:active::after,.tooltipped:active::before,.tooltipped:focus::after,.tooltipped:focus::before,.tooltipped:hover::after,.tooltipped:hover::before{display:inline-block;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:.4s;animation-delay:.4s}.tooltipped-s::after,.tooltipped-se::after,.tooltipped-sw::after{top:100%;right:50%;margin-top:5px}.tooltipped-s::before,.tooltipped-se::before,.tooltipped-sw::before{top:auto;right:50%;bottom:-5px;margin-right:-5px;border-bottom-color:rgba(0,0,0,.8)}.tooltipped-se::after{right:auto;left:50%;margin-left:-15px}.tooltipped-sw::after{margin-right:-15px}.tooltipped-n::after,.tooltipped-ne::after,.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:5px}.tooltipped-n::before,.tooltipped-ne::before,.tooltipped-nw::before{top:-5px;right:50%;bottom:auto;margin-right:-5px;border-top-color:rgba(0,0,0,.8)}.tooltipped-ne::after{right:auto;left:50%;margin-left:-15px}.tooltipped-nw::after{margin-right:-15px}.tooltipped-n::after,.tooltipped-s::after{-webkit-transform:translateX(50%);transform:translateX(50%)}.tooltipped-w::after{right:100%;bottom:50%;margin-right:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-w::before{top:50%;bottom:50%;left:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8)}.tooltipped-e::after{bottom:50%;left:100%;margin-left:5px;-webkit-transform:translateY(50%);transform:translateY(50%)}.tooltipped-e::before{top:50%;right:-5px;bottom:50%;margin-top:-5px;border-right-color:rgba(0,0,0,.8)}a[class*=" icon-"],a[class^=icon-]{color:#333}a[class*=" icon-"]:hover,a[class^=icon-]:hover{text-decoration:none;color:#4285f4}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot?68j667);src:url(fonts/icomoon.eot?68j667#iefix) format("embedded-opentype"),url(fonts/icomoon.ttf?68j667) format("truetype"),url(fonts/icomoon.woff?68j667) format("woff"),url(fonts/icomoon.svg?68j667#icomoon) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.em00,.em01,.em02,.em03,.em04,.em05,.em06,.em07,.em08,.em09,.em10,.em11,.em12,.em13,.em14{cursor:pointer;background-image:url(../images/emotions/emotions-ease.png);float:left;height:24px;margin-right:5px;width:24px;transition:all .2s ease-out;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out}.icon-up,a{transition:all .3s}.emotions span:hover{transform:scale(1.2) rotate(360deg);-webkit-transform:scale(1.2) rotate(360deg);-moz-transform:scale(1.2) rotate(360deg)}.em01{background-position:-24px 0}.em02{background-position:-48px 0}.em03{background-position:-72px 0}.em04{background-position:-96px 0}.em05{background-position:0 -24px}.em06{background-position:-24px -24px}.em07{background-position:-48px -24px}.em08{background-position:-72px -24px}.em09{background-position:-96px -24px}.em10{background-position:0 -48px}.em11{background-position:-24px -48px}.em12{background-position:-48px -48px}.em13{background-position:-72px -48px}.em14{background-position:-96px -48px}.b3-solo-list{display:none}#commentForm,#replyForm{width:100%}.comments{position:relative}.comment-body-ref{position:absolute;width:80%;background-color:#fff;right:0;border:1px solid #eee}.icon-list:before{content:"\f0ca"}.icon-home:before{content:"\f015"}.icon-comments:before{content:"\f0e6"}.icon-date:before{content:"\f073"}.icon-search:before{content:"\f002"}.icon-up:before{content:"\f077"}.icon-inbox:before{content:"\f01c"}.icon-tags:before{content:"\f02c"}.icon-link:before{content:"\f0c1"}.icon-refresh:before{content:"\f021"}.icon-logout:before{content:"\ea14"}.icon-views:before{content:"\e900"}.icon-register:before{content:"\e973"}.icon-setting:before{content:"\e994"}.icon-login:before{content:"\ea13"}.icon-rss:before{content:"\e901"}::selection{text-shadow:none;background:#3D4450;color:#FFF;outline:0}a{outline:0}.pagination{margin-bottom:30px;line-height:30px;font-family:Georgia}.pagination .page-number:first-child{border-left:1px solid #ddd}.pagination .page-number{display:inline-block;padding:0 10px;border:1px solid #ddd;border-left:0;text-decoration:none;float:left}.pagination a.page-number:hover{color:#ff4d3a;background-color:#eee}.pagination .page-number.current{color:#fff;background:#ff4d3a;border-color:#ff4d3a;margin-left:-1px}.module{box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:20px}.module header h2{border-bottom:1px solid #ff4d3a;padding:10px;line-height:18px;font-size:16px;font-weight:400}.module main{padding:20px}.ft-warn{color:#ff4d3a}.ft-gray{color:#aaa}.list,.module main.list{padding:0}.list li{list-style:none;border-bottom:1px solid #eee;line-height:40px;padding:0 20px}.list li:last-child{border-bottom:0}.list a{color:#666;text-decoration:none;display:block}.list a:hover{color:#ff4d3a}.form input,.form textarea{border:1px solid #ccc;background-color:#FAFAFA;box-shadow:0 1px 2px rgba(0,0,0,.075) inset;padding:0 10px;width:100%;line-height:28px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.banner .fn-right a,.banner h1 a{line-height:75px;text-decoration:none}.post,aside .ad{box-sizing:border-box}.form input:focus,.form textarea:focus{background-color:#FFF;box-shadow:0 1px 2px rgba(0,0,0,.075) inset,0 0 5px rgba(81,167,232,.5);border:1px solid #51A7E8}.form button{background-color:#EB5750;border:0;color:#fff}.form button:hover{background-color:#e42f19}.wrapper{width:90%;margin:0 auto;min-width:720px;max-width:1300px}aside{width:28%;min-width:236px}.main-wrap{display:flex}.main-wrap>main{margin-right:30px;flex:1;min-width:1px}.banner{background-color:#393939;height:75px}.banner h1 a{color:#fff}.banner small{color:#DFDFDF;font-size:15px}.banner .fn-right a{color:#DFDFDF;margin-left:10px;opacity:.6}.banner .fn-right a:hover{opacity:1}.navbar{border-bottom:1px solid #eee;height:50px;margin-bottom:30px}.navbar.pin{position:fixed;width:100%;background-color:rgba(255,255,255,.95);top:0;z-index:10}.navbar nav a{color:#555;text-decoration:none;line-height:50px;padding:0 10px;display:inline-block}.navbar nav a:hover{color:#333}.navbar nav a.current{background-color:#eee}.navbar form{position:relative;margin-top:8px}.navbar .form input{padding-right:40px}.navbar button{background-color:#EB5750;border:0;color:#fff;position:absolute;top:0;right:0;height:30px;width:30px}.navbar button:hover{background-color:#e42f19}.footer{padding:30px 0;background:#111;margin-top:30px;color:#fff}.footer a{color:#ff4d3a;text-decoration:none}.icon-up{position:fixed;bottom:122px;right:20px;color:#fff;background-color:#111;height:30px;width:30px;line-height:28px;border-radius:15px;cursor:pointer;display:none}.icon-up:hover{background-color:#ff4d3a}aside .ad{background-color:#3cbc8d;color:#fff;padding:20px;margin-bottom:20px;border:1px solid transparent}.post .meta,.post sup{color:#aaa}aside .meta main{text-align:right;line-height:20px}.tags>a.tag,aside .tag.tooltipped{margin-right:10px;line-height:22px;display:inline-block;text-decoration:none}aside .meta img{float:left;height:80px;width:80px;border-radius:5px}aside .tag.tooltipped{padding:2px 5px;margin-bottom:10px;border:1px solid #e1e1e1}.post{border:1px solid #ededed;margin-bottom:20px;padding:20px}.post .meta,.post h1{margin-bottom:10px}.post h1 a{font-size:30px;font-weight:500;text-decoration:none}.post sup{font-weight:300}.post .meta a{color:#aaa;text-decoration:none}.post .meta a:hover{color:#ff4d3a}.tags>a.tag{color:#fff;font-size:12px;background-color:#bbb;padding:0 5px;margin-top:10px}.tags>a.tag:before{content:"#"}.tags>a.tag:hover{background:#999}.post footer .copyright{padding:10px;font-size:14px;line-height:16px;border:1px solid #ff4d3a;border-left-width:20px;margin:20px 0}.post .rel a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px;text-decoration:none;margin:20px 0}.comments>li,.title h2{border-bottom:1px solid #f1f1f1}.post .rel a:hover{background-color:#eee}.title h2{font-size:16px;font-weight:700;padding-bottom:10px;margin-top:20px}.comments>li{list-style:none;padding:10px}.comments>li>div{display:flex}.comments .avatar{width:50px;height:50px;border-radius:100%;margin-right:20px;background-size:contain}.comments main{flex:1;min-width:1px}.comments .content-reset{margin-top:10px}.comments .user-name{color:#666;text-decoration:none}.comments .user-name:hover{color:#ff4d3a}.comments .reply-btn{float:right;background-color:#ff4d3a;color:#fff;text-decoration:none;font-size:12px;padding:2px 5px}.comments .reply-btn:hover{background-color:#e42f19}#commentForm{margin-top:20px}.form .captcha{height:28px}.other{border:1px solid #ededed;margin-bottom:20px;padding:0 20px 20px}@media (max-width:900px){.navbar .form{display:none}}@media (max-width:700px){.wrapper,aside{box-sizing:border-box;width:100%}.icon-list,.responsive .list{background-color:#fff;position:absolute}.wrapper{min-width:auto;padding:0 10px}.main-wrap>main{margin-right:0}.main-wrap,.responsive{display:block}.banner{margin-bottom:20px}.banner .fn-right,.banner small,.navbar{display:none}.icon-list{right:10px;top:20px;font-size:20px;padding:8px 6px;cursor:pointer}.responsive .list{width:100%;border:1px solid #eee;left:0;display:none;z-index:10;top:75px}.responsive .list li.current{background-color:#eee}}
\ No newline at end of file
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="views" d="M512 768c-282.784 0-512-320-512-320s229.216-320 512-320 512 320 512 320-229.216 320-512 320zM512 256c-106.016 0-192 85.984-192 192s85.984 192 192 192 192-85.984 192-192-85.984-192-192-192zM512 576c-70.688 0-128-57.312-128-128s57.312-128 128-128 128 57.312 128 128-57.312 128-128 128z" />
<glyph unicode="&#xe901;" glyph-name="rss" d="M136.294 209.070c-75.196 0-136.292-61.334-136.292-136.076 0-75.154 61.1-135.802 136.292-135.802 75.466 0 136.494 60.648 136.494 135.802-0.002 74.742-61.024 136.076-136.494 136.076zM0.156 612.070v-196.258c127.784 0 247.958-49.972 338.458-140.512 90.384-90.318 140.282-211.036 140.282-339.3h197.122c-0.002 372.82-303.282 676.070-675.862 676.070zM0.388 960v-196.356c455.782 0 826.756-371.334 826.756-827.644h196.856c0 564.47-459.254 1024-1023.612 1024z" />
<glyph unicode="&#xe973;" glyph-name="register" d="M384 224c0 151.234 95.874 280.486 230.032 330.2 16.28 36.538 25.968 77.164 25.968 117.8 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h397.306c-8.664 30.53-13.306 62.732-13.306 96zM736 512c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.056 0 288 128.942 288 288s-128.942 288-288 288zM896 192h-128v-128h-64v128h-128v64h128v128h64v-128h128v-64z" />
<glyph unicode="&#xe994;" glyph-name="setting" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
<glyph unicode="&#xea13;" glyph-name="login" d="M384 448h-320v128h320v128l192-192-192-192zM1024 960v-832l-384-192v192h-384v256h64v-192h320v576l256 128h-576v-256h-64v320z" />
<glyph unicode="&#xea14;" glyph-name="logout" d="M768 320v128h-320v128h320v128l192-192zM704 384v-256h-320v-192l-384 192v832h704v-320h-64v256h-512l256-128v-576h256v192z" />
<glyph unicode="&#xf002;" glyph-name="search" horiz-adv-x="951" d="M658.286 475.428c0 141.143-114.857 256-256 256s-256-114.857-256-256 114.857-256 256-256 256 114.857 256 256zM950.857 0c0-40-33.143-73.143-73.143-73.143-19.429 0-38.286 8-51.429 21.714l-196 195.429c-66.857-46.286-146.857-70.857-228-70.857-222.286 0-402.286 180-402.286 402.286s180 402.286 402.286 402.286 402.286-180 402.286-402.286c0-81.143-24.571-161.143-70.857-228l196-196c13.143-13.143 21.143-32 21.143-51.429z" />
<glyph unicode="&#xf015;" glyph-name="home" horiz-adv-x="951" d="M804.571 384v-274.286c0-20-16.571-36.571-36.571-36.571h-219.429v219.429h-146.286v-219.429h-219.429c-20 0-36.571 16.571-36.571 36.571v274.286c0 1.143 0.571 2.286 0.571 3.429l328.571 270.857 328.571-270.857c0.571-1.143 0.571-2.286 0.571-3.429zM932 423.428l-35.429-42.286c-2.857-3.429-7.429-5.714-12-6.286h-1.714c-4.571 0-8.571 1.143-12 4l-395.429 329.714-395.429-329.714c-4-2.857-8.571-4.571-13.714-4-4.571 0.571-9.143 2.857-12 6.286l-35.429 42.286c-6.286 7.429-5.143 19.429 2.286 25.714l410.857 342.286c24 20 62.857 20 86.857 0l139.429-116.571v111.429c0 10.286 8 18.286 18.286 18.286h109.714c10.286 0 18.286-8 18.286-18.286v-233.143l125.143-104c7.429-6.286 8.571-18.286 2.286-25.714z" />
<glyph unicode="&#xf01c;" glyph-name="inbox" horiz-adv-x="878" d="M584.571 402.286h180.571c-1.143 2.857-1.714 6.286-2.857 9.143l-121.143 283.429h-404.571l-121.143-283.429c-1.143-2.857-1.714-6.286-2.857-9.143h180.571l54.286-109.714h182.857zM877.714 385.143v-275.429c0-20-16.571-36.571-36.571-36.571h-804.571c-20 0-36.571 16.571-36.571 36.571v275.429c0 20.571 6.286 50.857 14.286 70.286l136 315.429c8 18.857 30.857 33.714 50.857 33.714h475.429c20 0 42.857-14.857 50.857-33.714l136-315.429c8-19.429 14.286-49.714 14.286-70.286z" />
<glyph unicode="&#xf021;" glyph-name="refresh" horiz-adv-x="878" d="M863.429 347.428c0-1.143 0-2.857-0.571-4-48.571-202.286-215.429-343.429-426.286-343.429-111.429 0-219.429 44-300.571 121.143l-73.714-73.714c-6.857-6.857-16-10.857-25.714-10.857-20 0-36.571 16.571-36.571 36.571v256c0 20 16.571 36.571 36.571 36.571h256c20 0 36.571-16.571 36.571-36.571 0-9.714-4-18.857-10.857-25.714l-78.286-78.286c53.714-50.286 125.143-78.857 198.857-78.857 101.714 0 196 52.571 249.143 139.429 13.714 22.286 20.571 44 30.286 66.857 2.857 8 8.571 13.143 17.143 13.143h109.714c10.286 0 18.286-8.571 18.286-18.286zM877.714 804.571v-256c0-20-16.571-36.571-36.571-36.571h-256c-20 0-36.571 16.571-36.571 36.571 0 9.714 4 18.857 10.857 25.714l78.857 78.857c-54.286 50.286-125.714 78.286-199.429 78.286-101.714 0-196-52.571-249.143-139.429-13.714-22.286-20.571-44-30.286-66.857-2.857-8-8.571-13.143-17.143-13.143h-113.714c-10.286 0-18.286 8.571-18.286 18.286v4c49.143 202.857 217.714 343.429 428.571 343.429 112 0 221.143-44.571 302.286-121.143l74.286 73.714c6.857 6.857 16 10.857 25.714 10.857 20 0 36.571-16.571 36.571-36.571z" />
<glyph unicode="&#xf02c;" glyph-name="tags" horiz-adv-x="1085" d="M256 694.857c0 40.571-32.571 73.143-73.143 73.143s-73.143-32.571-73.143-73.143 32.571-73.143 73.143-73.143 73.143 32.571 73.143 73.143zM865.714 365.714c0-19.429-8-38.286-21.143-51.429l-280.571-281.143c-13.714-13.143-32.571-21.143-52-21.143s-38.286 8-51.429 21.143l-408.571 409.143c-29.143 28.571-52 84-52 124.571v237.714c0 40 33.143 73.143 73.143 73.143h237.714c40.571 0 96-22.857 125.143-52l408.571-408c13.143-13.714 21.143-32.571 21.143-52zM1085.143 365.714c0-19.429-8-38.286-21.143-51.429l-280.571-281.143c-13.714-13.143-32.571-21.143-52-21.143-29.714 0-44.571 13.714-64 33.714l268.571 268.571c13.143 13.143 21.143 32 21.143 51.429s-8 38.286-21.143 52l-408.571 408c-29.143 29.143-84.571 52-125.143 52h128c40.571 0 96-22.857 125.143-52l408.571-408c13.143-13.714 21.143-32.571 21.143-52z" />
<glyph unicode="&#xf073;" glyph-name="date" horiz-adv-x="951" d="M73.143 0h164.571v164.571h-164.571v-164.571zM274.286 0h182.857v164.571h-182.857v-164.571zM73.143 201.143h164.571v182.857h-164.571v-182.857zM274.286 201.143h182.857v182.857h-182.857v-182.857zM73.143 420.571h164.571v164.571h-164.571v-164.571zM493.714 0h182.857v164.571h-182.857v-164.571zM274.286 420.571h182.857v164.571h-182.857v-164.571zM713.143 0h164.571v164.571h-164.571v-164.571zM493.714 201.143h182.857v182.857h-182.857v-182.857zM292.571 694.857v164.571c0 9.714-8.571 18.286-18.286 18.286h-36.571c-9.714 0-18.286-8.571-18.286-18.286v-164.571c0-9.714 8.571-18.286 18.286-18.286h36.571c9.714 0 18.286 8.571 18.286 18.286zM713.143 201.143h164.571v182.857h-164.571v-182.857zM493.714 420.571h182.857v164.571h-182.857v-164.571zM713.143 420.571h164.571v164.571h-164.571v-164.571zM731.429 694.857v164.571c0 9.714-8.571 18.286-18.286 18.286h-36.571c-9.714 0-18.286-8.571-18.286-18.286v-164.571c0-9.714 8.571-18.286 18.286-18.286h36.571c9.714 0 18.286 8.571 18.286 18.286zM950.857 731.428v-731.429c0-40-33.143-73.143-73.143-73.143h-804.571c-40 0-73.143 33.143-73.143 73.143v731.429c0 40 33.143 73.143 73.143 73.143h73.143v54.857c0 50.286 41.143 91.429 91.429 91.429h36.571c50.286 0 91.429-41.143 91.429-91.429v-54.857h219.429v54.857c0 50.286 41.143 91.429 91.429 91.429h36.571c50.286 0 91.429-41.143 91.429-91.429v-54.857h73.143c40 0 73.143-33.143 73.143-73.143z" />
<glyph unicode="&#xf077;" glyph-name="up" d="M961.714 190.286l-94.857-94.286c-14.286-14.286-37.143-14.286-51.429 0l-303.429 303.429-303.429-303.429c-14.286-14.286-37.143-14.286-51.429 0l-94.857 94.286c-14.286 14.286-14.286 37.714 0 52l424 423.429c14.286 14.286 37.143 14.286 51.429 0l424-423.429c14.286-14.286 14.286-37.714 0-52z" />
<glyph unicode="&#xf0c1;" glyph-name="link" horiz-adv-x="951" d="M832 256c0 14.857-5.714 28.571-16 38.857l-118.857 118.857c-10.286 10.286-24.571 16-38.857 16-16.571 0-29.714-6.286-41.143-18.286 18.857-18.857 41.143-34.857 41.143-64 0-30.286-24.571-54.857-54.857-54.857-29.143 0-45.143 22.286-64 41.143-12-11.429-18.857-24.571-18.857-41.714 0-14.286 5.714-28.571 16-38.857l117.714-118.286c10.286-10.286 24.571-15.429 38.857-15.429s28.571 5.143 38.857 14.857l84 83.429c10.286 10.286 16 24 16 38.286zM430.286 658.857c0 14.286-5.714 28.571-16 38.857l-117.714 118.286c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-15.429l-84-83.429c-10.286-10.286-16-24-16-38.286 0-14.857 5.714-28.571 16-38.857l118.857-118.857c10.286-10.286 24.571-15.429 38.857-15.429 16.571 0 29.714 5.714 41.143 17.714-18.857 18.857-41.143 34.857-41.143 64 0 30.286 24.571 54.857 54.857 54.857 29.143 0 45.143-22.286 64-41.143 12 11.429 18.857 24.571 18.857 41.714zM941.714 256c0-43.429-17.714-85.714-48.571-116l-84-83.429c-30.857-30.857-72.571-47.429-116-47.429-44 0-85.714 17.143-116.571 48.571l-117.714 118.286c-30.857 30.857-47.429 72.571-47.429 116 0 45.143 18.286 88 50.286 119.429l-50.286 50.286c-31.429-32-73.714-50.286-118.857-50.286-43.429 0-85.714 17.143-116.571 48l-118.857 118.857c-31.429 31.429-48 72.571-48 116.571 0 43.429 17.714 85.714 48.571 116l84 83.429c30.857 30.857 72.571 47.429 116 47.429 44 0 85.714-17.143 116.571-48.571l117.714-118.286c30.857-30.857 47.429-72.571 47.429-116 0-45.143-18.286-88-50.286-119.429l50.286-50.286c31.429 32 73.714 50.286 118.857 50.286 43.429 0 85.714-17.143 116.571-48l118.857-118.857c31.429-31.429 48-72.571 48-116.571z" />
<glyph unicode="&#xf0ca;" glyph-name="list" d="M219.429 146.286c0-60.571-49.143-109.714-109.714-109.714s-109.714 49.143-109.714 109.714 49.143 109.714 109.714 109.714 109.714-49.143 109.714-109.714zM219.429 438.857c0-60.571-49.143-109.714-109.714-109.714s-109.714 49.143-109.714 109.714 49.143 109.714 109.714 109.714 109.714-49.143 109.714-109.714zM1024 201.143v-109.714c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v109.714c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286zM219.429 731.428c0-60.571-49.143-109.714-109.714-109.714s-109.714 49.143-109.714 109.714 49.143 109.714 109.714 109.714 109.714-49.143 109.714-109.714zM1024 493.714v-109.714c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v109.714c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286zM1024 786.286v-109.714c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v109.714c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286z" />
<glyph unicode="&#xf0e6;" glyph-name="comments" d="M402.286 731.428c-178.286 0-329.143-100.571-329.143-219.429 0-62.857 42.286-123.429 115.429-165.714l55.429-32-20-48c12 6.857 24 14.286 35.429 22.286l25.143 17.714 30.286-5.714c28.571-5.143 57.714-8 87.429-8 178.286 0 329.143 100.571 329.143 219.429s-150.857 219.429-329.143 219.429zM402.286 804.571c222.286 0 402.286-130.857 402.286-292.571s-180-292.571-402.286-292.571c-34.857 0-68.571 3.429-100.571 9.143-47.429-33.714-101.143-58.286-158.857-73.143-15.429-4-32-6.857-49.143-9.143h-1.714c-8.571 0-16.571 6.857-18.286 16.571v0c-2.286 10.857 5.143 17.714 11.429 25.143 22.286 25.143 47.429 47.429 66.857 94.857-92.571 53.714-152 136.571-152 229.143 0 161.714 180 292.571 402.286 292.571zM872 136.571c19.429-47.429 44.571-69.714 66.857-94.857 6.286-7.429 13.714-14.286 11.429-25.143v0c-2.286-10.286-10.857-17.714-20-16.571-17.143 2.286-33.714 5.143-49.143 9.143-57.714 14.857-111.429 39.429-158.857 73.143-32-5.714-65.714-9.143-100.571-9.143-103.429 0-198.286 28.571-269.714 75.429 16.571-1.143 33.714-2.286 50.286-2.286 122.857 0 238.857 35.429 327.429 99.429 95.429 69.714 148 164 148 266.286 0 29.714-4.571 58.857-13.143 86.857 96.571-53.143 159.429-137.714 159.429-233.143 0-93.143-59.429-175.429-152-229.143z" />
</font></defs></svg>
\ No newline at end of file
{
"IcoMoonType": "selection",
"icons": [
{
"icon": {
"paths": [
"M219.429 804.571c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM219.429 512c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM1024 749.714v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286zM219.429 219.429c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM1024 457.143v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286zM1024 164.571v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"list-ul"
],
"defaultCode": 61642,
"grid": 14
},
"attrs": [],
"properties": {
"name": "list",
"id": 290,
"order": 106,
"prevSize": 28,
"code": 61642
},
"setIdx": 1,
"setId": 1,
"iconIdx": 0
},
{
"icon": {
"paths": [
"M804.571 566.857v274.286c0 20-16.571 36.571-36.571 36.571h-219.429v-219.429h-146.286v219.429h-219.429c-20 0-36.571-16.571-36.571-36.571v-274.286c0-1.143 0.571-2.286 0.571-3.429l328.571-270.857 328.571 270.857c0.571 1.143 0.571 2.286 0.571 3.429zM932 527.429l-35.429 42.286c-2.857 3.429-7.429 5.714-12 6.286h-1.714c-4.571 0-8.571-1.143-12-4l-395.429-329.714-395.429 329.714c-4 2.857-8.571 4.571-13.714 4-4.571-0.571-9.143-2.857-12-6.286l-35.429-42.286c-6.286-7.429-5.143-19.429 2.286-25.714l410.857-342.286c24-20 62.857-20 86.857 0l139.429 116.571v-111.429c0-10.286 8-18.286 18.286-18.286h109.714c10.286 0 18.286 8 18.286 18.286v233.143l125.143 104c7.429 6.286 8.571 18.286 2.286 25.714z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"home"
],
"defaultCode": 61461,
"grid": 14
},
"attrs": [],
"properties": {
"name": "home",
"id": 289,
"order": 107,
"prevSize": 28,
"code": 61461
},
"setIdx": 1,
"setId": 1,
"iconIdx": 1
},
{
"icon": {
"paths": [
"M402.286 219.429c-178.286 0-329.143 100.571-329.143 219.429 0 62.857 42.286 123.429 115.429 165.714l55.429 32-20 48c12-6.857 24-14.286 35.429-22.286l25.143-17.714 30.286 5.714c28.571 5.143 57.714 8 87.429 8 178.286 0 329.143-100.571 329.143-219.429s-150.857-219.429-329.143-219.429zM402.286 146.286c222.286 0 402.286 130.857 402.286 292.571s-180 292.571-402.286 292.571c-34.857 0-68.571-3.429-100.571-9.143-47.429 33.714-101.143 58.286-158.857 73.143-15.429 4-32 6.857-49.143 9.143h-1.714c-8.571 0-16.571-6.857-18.286-16.571v0c-2.286-10.857 5.143-17.714 11.429-25.143 22.286-25.143 47.429-47.429 66.857-94.857-92.571-53.714-152-136.571-152-229.143 0-161.714 180-292.571 402.286-292.571zM872 814.286c19.429 47.429 44.571 69.714 66.857 94.857 6.286 7.429 13.714 14.286 11.429 25.143v0c-2.286 10.286-10.857 17.714-20 16.571-17.143-2.286-33.714-5.143-49.143-9.143-57.714-14.857-111.429-39.429-158.857-73.143-32 5.714-65.714 9.143-100.571 9.143-103.429 0-198.286-28.571-269.714-75.429 16.571 1.143 33.714 2.286 50.286 2.286 122.857 0 238.857-35.429 327.429-99.429 95.429-69.714 148-164 148-266.286 0-29.714-4.571-58.857-13.143-86.857 96.571 53.143 159.429 137.714 159.429 233.143 0 93.143-59.429 175.429-152 229.143z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"comments-o"
],
"defaultCode": 61670,
"grid": 14
},
"attrs": [],
"properties": {
"name": "comments",
"id": 286,
"order": 110,
"prevSize": 28,
"code": 61670
},
"setIdx": 1,
"setId": 1,
"iconIdx": 4
},
{
"icon": {
"paths": [
"M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"calendar"
],
"defaultCode": 61555,
"grid": 14
},
"attrs": [],
"properties": {
"name": "date",
"id": 285,
"order": 111,
"prevSize": 28,
"code": 61555
},
"setIdx": 1,
"setId": 1,
"iconIdx": 5
},
{
"icon": {
"paths": [
"M658.286 475.429c0-141.143-114.857-256-256-256s-256 114.857-256 256 114.857 256 256 256 256-114.857 256-256zM950.857 950.857c0 40-33.143 73.143-73.143 73.143-19.429 0-38.286-8-51.429-21.714l-196-195.429c-66.857 46.286-146.857 70.857-228 70.857-222.286 0-402.286-180-402.286-402.286s180-402.286 402.286-402.286 402.286 180 402.286 402.286c0 81.143-24.571 161.143-70.857 228l196 196c13.143 13.143 21.143 32 21.143 51.429z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"search"
],
"defaultCode": 61442,
"grid": 14
},
"attrs": [],
"properties": {
"name": "search",
"id": 284,
"order": 112,
"prevSize": 28,
"code": 61442
},
"setIdx": 1,
"setId": 1,
"iconIdx": 6
},
{
"icon": {
"paths": [
"M961.714 760.571l-94.857 94.286c-14.286 14.286-37.143 14.286-51.429 0l-303.429-303.429-303.429 303.429c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.286c-14.286-14.286-14.286-37.714 0-52l424-423.429c14.286-14.286 37.143-14.286 51.429 0l424 423.429c14.286 14.286 14.286 37.714 0 52z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"chevron-up"
],
"defaultCode": 61559,
"grid": 14
},
"attrs": [],
"properties": {
"name": "up",
"id": 283,
"order": 113,
"prevSize": 28,
"code": 61559
},
"setIdx": 1,
"setId": 1,
"iconIdx": 7
},
{
"icon": {
"paths": [
"M584.571 548.571h180.571c-1.143-2.857-1.714-6.286-2.857-9.143l-121.143-283.429h-404.571l-121.143 283.429c-1.143 2.857-1.714 6.286-2.857 9.143h180.571l54.286 109.714h182.857zM877.714 565.714v275.429c0 20-16.571 36.571-36.571 36.571h-804.571c-20 0-36.571-16.571-36.571-36.571v-275.429c0-20.571 6.286-50.857 14.286-70.286l136-315.429c8-18.857 30.857-33.714 50.857-33.714h475.429c20 0 42.857 14.857 50.857 33.714l136 315.429c8 19.429 14.286 49.714 14.286 70.286z"
],
"width": 877.7142857142857,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"inbox"
],
"defaultCode": 61468,
"grid": 14
},
"attrs": [],
"properties": {
"name": "inbox",
"id": 280,
"order": 114,
"prevSize": 28,
"code": 61468
},
"setIdx": 1,
"setId": 1,
"iconIdx": 8
},
{
"icon": {
"paths": [
"M256 256c0-40.571-32.571-73.143-73.143-73.143s-73.143 32.571-73.143 73.143 32.571 73.143 73.143 73.143 73.143-32.571 73.143-73.143zM865.714 585.143c0 19.429-8 38.286-21.143 51.429l-280.571 281.143c-13.714 13.143-32.571 21.143-52 21.143s-38.286-8-51.429-21.143l-408.571-409.143c-29.143-28.571-52-84-52-124.571v-237.714c0-40 33.143-73.143 73.143-73.143h237.714c40.571 0 96 22.857 125.143 52l408.571 408c13.143 13.714 21.143 32.571 21.143 52zM1085.143 585.143c0 19.429-8 38.286-21.143 51.429l-280.571 281.143c-13.714 13.143-32.571 21.143-52 21.143-29.714 0-44.571-13.714-64-33.714l268.571-268.571c13.143-13.143 21.143-32 21.143-51.429s-8-38.286-21.143-52l-408.571-408c-29.143-29.143-84.571-52-125.143-52h128c40.571 0 96 22.857 125.143 52l408.571 408c13.143 13.714 21.143 32.571 21.143 52z"
],
"width": 1085.1474285714285,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"tags"
],
"defaultCode": 61484,
"grid": 14
},
"attrs": [],
"properties": {
"name": "tags",
"id": 279,
"order": 115,
"prevSize": 28,
"code": 61484
},
"setIdx": 1,
"setId": 1,
"iconIdx": 9
},
{
"icon": {
"paths": [
"M832 694.857c0-14.857-5.714-28.571-16-38.857l-118.857-118.857c-10.286-10.286-24.571-16-38.857-16-16.571 0-29.714 6.286-41.143 18.286 18.857 18.857 41.143 34.857 41.143 64 0 30.286-24.571 54.857-54.857 54.857-29.143 0-45.143-22.286-64-41.143-12 11.429-18.857 24.571-18.857 41.714 0 14.286 5.714 28.571 16 38.857l117.714 118.286c10.286 10.286 24.571 15.429 38.857 15.429s28.571-5.143 38.857-14.857l84-83.429c10.286-10.286 16-24 16-38.286zM430.286 292c0-14.286-5.714-28.571-16-38.857l-117.714-118.286c-10.286-10.286-24.571-16-38.857-16s-28.571 5.714-38.857 15.429l-84 83.429c-10.286 10.286-16 24-16 38.286 0 14.857 5.714 28.571 16 38.857l118.857 118.857c10.286 10.286 24.571 15.429 38.857 15.429 16.571 0 29.714-5.714 41.143-17.714-18.857-18.857-41.143-34.857-41.143-64 0-30.286 24.571-54.857 54.857-54.857 29.143 0 45.143 22.286 64 41.143 12-11.429 18.857-24.571 18.857-41.714zM941.714 694.857c0 43.429-17.714 85.714-48.571 116l-84 83.429c-30.857 30.857-72.571 47.429-116 47.429-44 0-85.714-17.143-116.571-48.571l-117.714-118.286c-30.857-30.857-47.429-72.571-47.429-116 0-45.143 18.286-88 50.286-119.429l-50.286-50.286c-31.429 32-73.714 50.286-118.857 50.286-43.429 0-85.714-17.143-116.571-48l-118.857-118.857c-31.429-31.429-48-72.571-48-116.571 0-43.429 17.714-85.714 48.571-116l84-83.429c30.857-30.857 72.571-47.429 116-47.429 44 0 85.714 17.143 116.571 48.571l117.714 118.286c30.857 30.857 47.429 72.571 47.429 116 0 45.143-18.286 88-50.286 119.429l50.286 50.286c31.429-32 73.714-50.286 118.857-50.286 43.429 0 85.714 17.143 116.571 48l118.857 118.857c31.429 31.429 48 72.571 48 116.571z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"chain",
"link"
],
"defaultCode": 61633,
"grid": 14
},
"attrs": [],
"properties": {
"name": "link",
"id": 278,
"order": 116,
"prevSize": 28,
"code": 61633
},
"setIdx": 1,
"setId": 1,
"iconIdx": 10
},
{
"icon": {
"paths": [
"M863.429 603.429c0 1.143 0 2.857-0.571 4-48.571 202.286-215.429 343.429-426.286 343.429-111.429 0-219.429-44-300.571-121.143l-73.714 73.714c-6.857 6.857-16 10.857-25.714 10.857-20 0-36.571-16.571-36.571-36.571v-256c0-20 16.571-36.571 36.571-36.571h256c20 0 36.571 16.571 36.571 36.571 0 9.714-4 18.857-10.857 25.714l-78.286 78.286c53.714 50.286 125.143 78.857 198.857 78.857 101.714 0 196-52.571 249.143-139.429 13.714-22.286 20.571-44 30.286-66.857 2.857-8 8.571-13.143 17.143-13.143h109.714c10.286 0 18.286 8.571 18.286 18.286zM877.714 146.286v256c0 20-16.571 36.571-36.571 36.571h-256c-20 0-36.571-16.571-36.571-36.571 0-9.714 4-18.857 10.857-25.714l78.857-78.857c-54.286-50.286-125.714-78.286-199.429-78.286-101.714 0-196 52.571-249.143 139.429-13.714 22.286-20.571 44-30.286 66.857-2.857 8-8.571 13.143-17.143 13.143h-113.714c-10.286 0-18.286-8.571-18.286-18.286v-4c49.143-202.857 217.714-343.429 428.571-343.429 112 0 221.143 44.571 302.286 121.143l74.286-73.714c6.857-6.857 16-10.857 25.714-10.857 20 0 36.571 16.571 36.571 36.571z"
],
"width": 877.7142857142857,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"refresh"
],
"defaultCode": 61473,
"grid": 14
},
"attrs": [],
"properties": {
"name": "refresh",
"id": 277,
"order": 117,
"prevSize": 28,
"code": 61473
},
"setIdx": 1,
"setId": 1,
"iconIdx": 11
},
{
"icon": {
"paths": [
"M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"exit",
"signout",
"logout",
"quit",
"close"
],
"defaultCode": 59924,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "exit, signout",
"name": "logout",
"id": 288,
"order": 108,
"prevSize": 32,
"code": 59924
},
"setIdx": 1,
"setId": 1,
"iconIdx": 2
},
{
"icon": {
"paths": [
"M512 192c-282.784 0-512 320-512 320s229.216 320 512 320 512-320 512-320-229.216-320-512-320zM512 704c-106.016 0-192-85.984-192-192s85.984-192 192-192 192 85.984 192 192-85.984 192-192 192zM512 384c-70.688 0-128 57.312-128 128s57.312 128 128 128 128-57.312 128-128-57.312-128-128-128z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"eye",
"views"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 109,
"id": 287,
"name": "views",
"prevSize": 32,
"code": 59648
},
"setIdx": 1,
"setId": 1,
"iconIdx": 3
},
{
"icon": {
"paths": [
"M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z",
"M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"user-plus",
"user",
"user-add",
"profile",
"avatar",
"person",
"member"
],
"defaultCode": 59763,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "user-plus, user2",
"name": "register",
"id": 115,
"order": 118,
"prevSize": 32,
"code": 59763
},
"setIdx": 1,
"setId": 1,
"iconIdx": 12
},
{
"icon": {
"paths": [
"M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"cog",
"gear",
"preferences",
"settings",
"generate",
"control",
"options"
],
"defaultCode": 59796,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "cog, gear",
"name": "setting",
"id": 148,
"order": 119,
"prevSize": 32,
"code": 59796
},
"setIdx": 1,
"setId": 1,
"iconIdx": 13
},
{
"icon": {
"paths": [
"M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"enter",
"signin",
"login"
],
"defaultCode": 59923,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "enter, signin",
"name": "login",
"id": 275,
"order": 120,
"prevSize": 32,
"code": 59923
},
"setIdx": 1,
"setId": 1,
"iconIdx": 14
},
{
"icon": {
"paths": [
"M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"feed",
"rss",
"social"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 121,
"id": 0,
"prevSize": 32,
"code": 59649,
"name": "rss"
},
"setIdx": 1,
"setId": 1,
"iconIdx": 15
}
],
"height": 1024,
"metadata": {
"name": "icomoon"
},
"preferences": {
"showGlyphs": true,
"showQuickUse": true,
"showQuickUse2": true,
"showSVGs": true,
"fontPref": {
"prefix": "icon-",
"metadata": {
"fontFamily": "icomoon"
},
"metrics": {
"emSize": 1024,
"baseline": 6.25,
"whitespace": 50
},
"embed": false
},
"imagePref": {
"prefix": "icon-",
"png": true,
"useClassSelector": true,
"color": 4473924,
"bgColor": 16777215
},
"historySize": 100,
"showCodes": false,
"gridSize": 16
}
}
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${dynamicLabel}"/>
<meta name="description" content="${metaDescription},${dynamicLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="post">
<#if 0 != recentComments?size>
<ul class="comments" id="comments">
<#list recentComments as comment>
<li id="${comment.oId}">
<div>
<div class="avatar tooltipped tooltipped-n" aria-label="${comment.commentName}"
style="background-image: url(${comment.commentThumbnailURL})"></div>
<main>
<div class="fn-clear">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a class="user-name" href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<time class="ft-gray">${comment.commentDate?string("yyyy-MM-dd HH:mm")}</time>
<a class="reply-btn" href="${servePath}${comment.commentSharpURL}">${viewLabel}»</a>
</div>
<div class="content-reset">
${comment.commentContent}
</div>
</main>
</div>
</li>
</#list>
</ul>
</#if>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
<script>
var $commentContents = $(".comments .content-reset");
for (var i = 0; i < $commentContents.length; i++) {
var str = $commentContents[i].innerHTML;
$commentContents[i].innerHTML = Util.replaceEmString(str);
}
</script>
</body>
</html>
<footer class="footer"> <footer class="footer fn-clear">
<div class="wrapper fn-clear">
<a href="${servePath}">${blogTitle}</a> •
${onlineVisitor1Label}${onlineVisitorCnt} <br/>
&copy; ${year} &copy; ${year}
${footerContent} ${footerContent}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a> • <a href="${servePath}">${blogTitle}</a> &nbsp; • &nbsp;
<a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version} <a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version} <br/>
<div class="fn-right">Theme by <a href="http://iissnan.com/" target="_blank">IIssNan</a> & <a href="http://vanessa.b3log.org" target="_blank">Vanessa</a>.</div> Powered by <a href="http://b3log.org" target="_blank">B3log</a> 开源 &nbsp;
</div> <span class="ft-warn">&heartsuit;</span>
Theme by <a href="https://github.com/9IPHP/9IPHP" target="_blank">9IPHP</a> & <a href="http://vanessa.b3log.org" target="_blank">Vanessa</a>
</footer> </footer>
<div class="back-to-top" onclick="Util.goTop()"></div> <div class="icon-up" onclick="Util.goTop()"></div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script> <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" src="${staticServePath}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/${skinDirName}${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script> <script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript"> <script type="text/javascript">
var latkeConfig = { var latkeConfig = {
"servePath": "${servePath}", "servePath": "${servePath}",
...@@ -39,9 +37,7 @@ ...@@ -39,9 +37,7 @@
"em11Label": "${em11Label}", "em11Label": "${em11Label}",
"em12Label": "${em12Label}", "em12Label": "${em12Label}",
"em13Label": "${em13Label}", "em13Label": "${em13Label}",
"em14Label": "${em14Label}", "em14Label": "${em14Label}"
"tocLabel": "${tocLabel}",
"siteViewLabel": "${siteViewLabel}"
}; };
</script> </script>
${plugins} ${plugins}
<header>
<div class="banner">
<div class="fn-clear wrapper">
<h1 class="fn-inline">
<a href="${servePath}" rel="start">
${blogTitle}
</a>
</h1>
<small> &nbsp; ${blogSubtitle}</small>
<div class="fn-right">
<#if isLoggedIn>
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
<i class="icon-setting"></i> ${adminLabel}
</a>
<a href="${logoutURL}">
<i class="icon-logout"></i> ${logoutLabel}
</a>
<#else>
<a href="${loginURL}">
<i class="icon-login"></i> ${loginLabel}
</a>
<a href="${servePath}/register">
<i class="icon-register"></i> ${registerLabel}
</a>
</#if>
</div>
</div>
</div>
<div class="navbar">
<div class="fn-clear wrapper">
<nav class="fn-left">
<a href="${servePath}">
<i class="icon-home"></i>
${indexLabel}
</a>
<#list pageNavigations as page>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
${page.pageTitle}
</a>
</#list>
<a href="${servePath}/dynamic.html" rel="section">
<i class="icon-refresh"></i> ${dynamicLabel}
</a>
<a href="${servePath}/tags.html" rel="section">
<i class="icon-tags"></i> ${allTagsLabel}
</a>
<a href="${servePath}/archives.html">
<i class="icon-inbox"></i> ${archiveLabel}
</a>
<a rel="archive" href="${servePath}/links.html">
<i class="icon-link"></i> ${linkLabel}
</a>
<a rel="alternate" href="${servePath}/blog-articles-rss.do" rel="section">
<i class="icon-rss"></i> RSS
</a>
</nav>
<div class="fn-right">
<form class="form" target="_blank" action="http://zhannei.baidu.com/cse/site">
<input placeholder="${searchLabel}" id="search" type="text" name="q"/>
<button type="submit"><i class="icon-search"></i></button>
<input type="hidden" name="cc" value="${serverHost}">
</form>
</div>
</div>
</div>
</header>
<div class="responsive fn-none">
<i class="icon-list"></i>
<ul class="list">
<#if isLoggedIn>
<li>
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
<i class="icon-setting"></i> ${adminLabel}
</a>
</li>
<li>
<a href="${logoutURL}">
<i class="icon-logout"></i> ${logoutLabel}
</a>
</li>
<#else>
<li>
<a href="${loginURL}">
<i class="icon-login"></i> ${loginLabel}
</a>
</li>
<li>
<a href="${servePath}/register">
<i class="icon-register"></i> ${registerLabel}
</a>
</li>
</#if>
<li>
<a href="${servePath}">
<i class="icon-home"></i>
${indexLabel}
</a>
</li>
<#list pageNavigations as page>
<li>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
${page.pageTitle}
</a>
</li>
</#list>
<li>
<a href="${servePath}/dynamic.html" rel="section">
<i class="icon-refresh"></i> ${dynamicLabel}
</a>
</li>
<li>
<a href="${servePath}/tags.html" rel="section">
<i class="icon-tags"></i> ${allTagsLabel}
</a>
</li>
<li>
<a href="${servePath}/archives.html">
<i class="icon-inbox"></i> ${archiveLabel}
</a>
</li>
<li>
<a rel="archive" href="${servePath}/links.html">
<i class="icon-link"></i> ${linkLabel}
</a>
</li>
<li>
<a rel="alternate" href="${servePath}/blog-articles-rss.do" rel="section">
<i class="icon-rss"></i> RSS
</a>
</li>
</ul>
</div>
\ No newline at end of file
...@@ -13,12 +13,14 @@ ...@@ -13,12 +13,14 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content"> <div class="main-wrap">
<main>
<#include "article-list.ftl"> <#include "article-list.ftl">
</div>
<#include "side.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
</body> </body>
</html> </html>
\ No newline at end of file
...@@ -17,79 +17,63 @@ ...@@ -17,79 +17,63 @@
* @fileoverview util and every page should be used. * @fileoverview util and every page should be used.
* *
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a> * @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.2.1.0, Sep 6, 2016 * @version 0.1.0.0, Feb 17, 2017
*/ */
/** /**
* @description next 皮肤脚本 * @description 皮肤脚本
* @static * @static
*/ */
var NexT = { var Skin = {
init: function () { _initCommon: function ($goTop) {
$('.sidebar-toggle').click(function () { $('body').on('click', '.content-reset img', function () {
var $sidebar = $('.sidebar'); window.open(this.src);
if ($(this).hasClass('sidebar-active')) {
$(this).removeClass('sidebar-active');
$('body').animate({
'padding-right': 0
});
$sidebar.animate({
right: -320
}); });
$sidebar.find('section').css('opacity', 0);
var $banner = $('header .banner'),
$navbar = $('header .navbar');
$(window).scroll(function () {
if ($(window).scrollTop() > 125) {
$goTop.show();
} else { } else {
$(this).addClass('sidebar-active'); $goTop.hide();
$('body').animate({
'padding-right': 320
});
$sidebar.animate({
right: 0
}, function () {
$sidebar.find('section:first').animate({
'opacity': 1
});
});
} }
});
$('.site-nav-toggle').click(function () { if ($(window).width() < 701) {
$('.site-nav').slideToggle(); return false;
}); }
$(document).ready(function () { if ($(window).scrollTop() > $banner.height()) {
setTimeout(function () { $navbar.addClass('pin');
// logo animate $('.main-wrap').parent().css('margin-top', '86px')
$('.logo-wrap').css('opacity', 1); } else {
$('.logo-line-before i').animate({ $navbar.removeClass('pin');
'left': '0' $('.main-wrap').parent().css('margin-top', '0')
}, function () {
$('.site-title').css('opacity', 1).animate({
'top': 0
}, function () {
$('.menu').css('opacity', 1).animate({
'margin-top': '15px'
});
$('.main').css('opacity', 1).animate({
'top': '0'
}, function () {
// 当有文章页面有目录时,回调不放这里,侧边栏就会一片空白
if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) {
$('.sidebar-toggle').click();
} }
}); });
}); },
init: function () {
this._initCommon($('.icon-up'));
$('.navbar nav a').each(function () {
if (this.href === location.href) {
this.className = 'current'
}
}); });
$('.logo-line-after i').animate({ $('.responsive .list a').each(function () {
'right': '0' if (this.href === location.href) {
$(this).parent().addClass('current');
}
}); });
}, 500);
$('.responsive .icon-list').click(function () {
$('.responsive .list').slideToggle();
}); });
}, },
initArticle: function () { _initArticleCommon: function () {
// TOC
if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) { if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) {
// add color to sidebar menu // add color to sidebar menu
$('.sidebar-toggle').addClass('has-toc'); $('.sidebar-toggle').addClass('has-toc');
...@@ -129,6 +113,9 @@ var NexT = { ...@@ -129,6 +113,9 @@ var NexT = {
$(this).addClass('current'); $(this).addClass('current');
}); });
} }
},
initArticle: function () {
this._initArticleCommon();
} }
}; };
NexT.init(); Skin.init();
\ No newline at end of file \ No newline at end of file
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
var Skin={_initCommon:function(i){$("body").on("click",".content-reset img",function(){window.open(this.src)});var t=$("header .banner"),n=$("header .navbar");$(window).scroll(function(){return $(window).scrollTop()>125?i.show():i.hide(),!($(window).width()<701)&&void($(window).scrollTop()>t.height()?(n.addClass("pin"),$(".main-wrap").parent().css("margin-top","86px")):(n.removeClass("pin"),$(".main-wrap").parent().css("margin-top","0")))})},init:function(){this._initCommon($(".icon-up")),$(".navbar nav a").each(function(){this.href===location.href&&(this.className="current")}),$(".responsive .list a").each(function(){this.href===location.href&&$(this).parent().addClass("current")}),$(".responsive .icon-list").click(function(){$(".responsive .list").slideToggle()})},_initArticleCommon:function(){if($(".b3-solo-list li").length>0&&$(window).width()>1e3){$(".sidebar-toggle").addClass("has-toc");var i='<ul><li class="current" data-tab="toc">'+Label.tocLabel+'</li><li data-tab="site">'+Label.siteViewLabel+"</li></ul><section></section>";$(".sidebar").prepend(i);var t=$(".sidebar section:first").html($(".b3-solo-list")),n=$(".sidebar section:last");t.height($(window).height()-90),$(".sidebar > ul > li").click(function(){"toc"===$(this).data("tab")?n.animate({opacity:"0",top:"-50px"},300,function(){t.show().css("top","-50px"),t.animate({opacity:"1",top:"0"},300)}):t.animate({opacity:"0",top:"-50px"},300,function(){t.hide().css("top","-50px"),n.animate({opacity:"1",top:"0"},300)}),$(".sidebar > ul > li").removeClass("current"),$(this).addClass("current")})}},initArticle:function(){this._initArticleCommon()}};Skin.init();
\ No newline at end of file
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
!function(t,e){"use strict";"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function u(t,e,n){var o,s="$()."+i+'("'+e+'")';return t.each(function(t,u){var h=a.data(u,i);if(!h)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var d=h[e];if(!d||"_"==e.charAt(0))return void r(s+" is not a valid method");var l=d.apply(h,n);o=void 0===o?l:o}),void 0!==o?o:t}function h(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new s(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return u(this,t,e)}return h(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var s=this._onceEvents&&this._onceEvents[t];o;){var r=s&&s[o];r&&(this.off(t,o),delete s[o]),o.apply(this,e),n+=r?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("get-size/get-size",[],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;h>e;e++){var i=u[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s.isBoxSizeOuter=r=200==t(o.width),i.removeChild(e)}}function s(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var s=n(e);if("none"==s.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==s.boxSizing,l=0;h>l;l++){var f=u[l],c=s[f],m=parseFloat(c);a[f]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,y=a.paddingTop+a.paddingBottom,g=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,I=a.borderTopWidth+a.borderBottomWidth,z=d&&r,x=t(s.width);x!==!1&&(a.width=x+(z?0:p+_));var S=t(s.height);return S!==!1&&(a.height=S+(z?0:y+I)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(y+I),a.outerWidth=a.width+g,a.outerHeight=a.height+v,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},u=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],h=u.length,d=!1;return s}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i<e.length;i++){var n=e[i],o=n+"MatchesSelector";if(t[o])return o}}();return function(e,i){return e[t](i)}}),function(t,e){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["desandro-matches-selector/matches-selector"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("desandro-matches-selector")):t.fizzyUIUtils=e(t,t.matchesSelector)}(window,function(t,e){var i={};i.extend=function(t,e){for(var i in e)t[i]=e[i];return t},i.modulo=function(t,e){return(t%e+e)%e},i.makeArray=function(t){var e=[];if(Array.isArray(t))e=t;else if(t&&"number"==typeof t.length)for(var i=0;i<t.length;i++)e.push(t[i]);else e.push(t);return e},i.removeFrom=function(t,e){var i=t.indexOf(e);-1!=i&&t.splice(i,1)},i.getParent=function(t,i){for(;t!=document.body;)if(t=t.parentNode,e(t,i))return t},i.getQueryElement=function(t){return"string"==typeof t?document.querySelector(t):t},i.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},i.filterFindElements=function(t,n){t=i.makeArray(t);var o=[];return t.forEach(function(t){if(t instanceof HTMLElement){if(!n)return void o.push(t);e(t,n)&&o.push(t);for(var i=t.querySelectorAll(n),s=0;s<i.length;s++)o.push(i[s])}}),o},i.debounceMethod=function(t,e,i){var n=t.prototype[e],o=e+"Timeout";t.prototype[e]=function(){var t=this[o];t&&clearTimeout(t);var e=arguments,s=this;this[o]=setTimeout(function(){n.apply(s,e),delete s[o]},i||100)}},i.docReady=function(t){var e=document.readyState;"complete"==e||"interactive"==e?t():document.addEventListener("DOMContentLoaded",t)},i.toDashed=function(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()};var n=t.console;return i.htmlInit=function(e,o){i.docReady(function(){var s=i.toDashed(o),r="data-"+s,a=document.querySelectorAll("["+r+"]"),u=document.querySelectorAll(".js-"+s),h=i.makeArray(a).concat(i.makeArray(u)),d=r+"-options",l=t.jQuery;h.forEach(function(t){var i,s=t.getAttribute(r)||t.getAttribute(d);try{i=s&&JSON.parse(s)}catch(a){return void(n&&n.error("Error parsing "+r+" on "+t.className+": "+a))}var u=new e(t,i);l&&l.data(t,o,u)})})},i}),function(t,e){"function"==typeof define&&define.amd?define("outlayer/item",["ev-emitter/ev-emitter","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("ev-emitter"),require("get-size")):(t.Outlayer={},t.Outlayer.Item=e(t.EvEmitter,t.getSize))}(window,function(t,e){"use strict";function i(t){for(var e in t)return!1;return e=null,!0}function n(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}function o(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}var s=document.documentElement.style,r="string"==typeof s.transition?"transition":"WebkitTransition",a="string"==typeof s.transform?"transform":"WebkitTransform",u={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[r],h={transform:a,transition:r,transitionDuration:r+"Duration",transitionProperty:r+"Property",transitionDelay:r+"Delay"},d=n.prototype=Object.create(t.prototype);d.constructor=n,d._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},d.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},d.getSize=function(){this.size=e(this.element)},d.css=function(t){var e=this.element.style;for(var i in t){var n=h[i]||i;e[n]=t[i]}},d.getPosition=function(){var t=getComputedStyle(this.element),e=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),n=t[e?"left":"right"],o=t[i?"top":"bottom"],s=this.layout.size,r=-1!=n.indexOf("%")?parseFloat(n)/100*s.width:parseInt(n,10),a=-1!=o.indexOf("%")?parseFloat(o)/100*s.height:parseInt(o,10);r=isNaN(r)?0:r,a=isNaN(a)?0:a,r-=e?s.paddingLeft:s.paddingRight,a-=i?s.paddingTop:s.paddingBottom,this.position.x=r,this.position.y=a},d.layoutPosition=function(){var t=this.layout.size,e={},i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),o=i?"paddingLeft":"paddingRight",s=i?"left":"right",r=i?"right":"left",a=this.position.x+t[o];e[s]=this.getXValue(a),e[r]="";var u=n?"paddingTop":"paddingBottom",h=n?"top":"bottom",d=n?"bottom":"top",l=this.position.y+t[u];e[h]=this.getYValue(l),e[d]="",this.css(e),this.emitEvent("layout",[this])},d.getXValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!e?t/this.layout.size.width*100+"%":t+"px"},d.getYValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&e?t/this.layout.size.height*100+"%":t+"px"},d._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=parseInt(t,10),s=parseInt(e,10),r=o===this.position.x&&s===this.position.y;if(this.setPosition(t,e),r&&!this.isTransitioning)return void this.layoutPosition();var a=t-i,u=e-n,h={};h.transform=this.getTranslate(a,u),this.transition({to:h,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},d.getTranslate=function(t,e){var i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop");return t=i?t:-t,e=n?e:-e,"translate3d("+t+"px, "+e+"px, 0)"},d.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},d.moveTo=d._transitionTo,d.setPosition=function(t,e){this.position.x=parseInt(t,10),this.position.y=parseInt(e,10)},d._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},d.transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(t);var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var l="opacity,"+o(a);d.enableTransition=function(){if(!this.isTransitioning){var t=this.layout.options.transitionDuration;t="number"==typeof t?t+"ms":t,this.css({transitionProperty:l,transitionDuration:t,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(u,this,!1)}},d.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},d.onotransitionend=function(t){this.ontransitionend(t)};var f={"-webkit-transform":"transform"};d.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=f[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},d.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(u,this,!1),this.isTransitioning=!1},d._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var c={transitionProperty:"",transitionDuration:"",transitionDelay:""};return d.removeTransitionStyles=function(){this.css(c)},d.stagger=function(t){t=isNaN(t)?0:t,this.staggerDelay=t+"ms"},d.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},d.remove=function(){return r&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",function(){this.removeElem()}),void this.hide()):void this.removeElem()},d.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("visibleStyle");e[i]=this.onRevealTransitionEnd,this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0,onTransitionEnd:e})},d.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},d.getHideRevealTransitionEndProperty=function(t){var e=this.layout.options[t];if(e.opacity)return"opacity";for(var i in e)return i},d.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("hiddenStyle");e[i]=this.onHideTransitionEnd,this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:e})},d.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},d.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},n}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("outlayer/outlayer",["ev-emitter/ev-emitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(i,n,o,s){return e(t,i,n,o,s)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):t.Outlayer=e(t,t.EvEmitter,t.getSize,t.fizzyUIUtils,t.Outlayer.Item)}(window,function(t,e,i,n,o){"use strict";function s(t,e){var i=n.getQueryElement(t);if(!i)return void(u&&u.error("Bad element for "+this.constructor.namespace+": "+(i||t)));this.element=i,h&&(this.$element=h(this.element)),this.options=n.extend({},this.constructor.defaults),this.option(e);var o=++l;this.element.outlayerGUID=o,f[o]=this,this._create();var s=this._getOption("initLayout");s&&this.layout()}function r(t){function e(){t.apply(this,arguments)}return e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e}function a(t){if("number"==typeof t)return t;var e=t.match(/(^\d*\.?\d*)(\w*)/),i=e&&e[1],n=e&&e[2];if(!i.length)return 0;i=parseFloat(i);var o=m[n]||1;return i*o}var u=t.console,h=t.jQuery,d=function(){},l=0,f={};s.namespace="outlayer",s.Item=o,s.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var c=s.prototype;n.extend(c,e.prototype),c.option=function(t){n.extend(this.options,t)},c._getOption=function(t){var e=this.constructor.compatOptions[t];return e&&void 0!==this.options[e]?this.options[e]:this.options[t]},s.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},c._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),n.extend(this.element.style,this.options.containerStyle);var t=this._getOption("resize");t&&this.bindResize()},c.reloadItems=function(){this.items=this._itemize(this.element.children)},c._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0;o<e.length;o++){var s=e[o],r=new i(s,this);n.push(r)}return n},c._filterFindItemElements=function(t){return n.filterFindElements(t,this.options.itemSelector)},c.getItemElements=function(){return this.items.map(function(t){return t.element})},c.layout=function(){this._resetLayout(),this._manageStamps();var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;this.layoutItems(this.items,e),this._isLayoutInited=!0},c._init=c.layout,c._resetLayout=function(){this.getSize()},c.getSize=function(){this.size=i(this.element)},c._getMeasurement=function(t,e){var n,o=this.options[t];o?("string"==typeof o?n=this.element.querySelector(o):o instanceof HTMLElement&&(n=o),this[t]=n?i(n)[e]:o):this[t]=0},c.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},c._getItemsForLayout=function(t){return t.filter(function(t){return!t.isIgnored})},c._layoutItems=function(t,e){if(this._emitCompleteOnItems("layout",t),t&&t.length){var i=[];t.forEach(function(t){var n=this._getItemLayoutPosition(t);n.item=t,n.isInstant=e||t.isLayoutInstant,i.push(n)},this),this._processLayoutQueue(i)}},c._getItemLayoutPosition=function(){return{x:0,y:0}},c._processLayoutQueue=function(t){this.updateStagger(),t.forEach(function(t,e){this._positionItem(t.item,t.x,t.y,t.isInstant,e)},this)},c.updateStagger=function(){var t=this.options.stagger;return null===t||void 0===t?void(this.stagger=0):(this.stagger=a(t),this.stagger)},c._positionItem=function(t,e,i,n,o){n?t.goTo(e,i):(t.stagger(o*this.stagger),t.moveTo(e,i))},c._postLayout=function(){this.resizeContainer()},c.resizeContainer=function(){var t=this._getOption("resizeContainer");if(t){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},c._getContainerSize=d,c._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},c._emitCompleteOnItems=function(t,e){function i(){o.dispatchEvent(t+"Complete",null,[e])}function n(){r++,r==s&&i()}var o=this,s=e.length;if(!e||!s)return void i();var r=0;e.forEach(function(e){e.once(t,n)})},c.dispatchEvent=function(t,e,i){var n=e?[e].concat(i):i;if(this.emitEvent(t,n),h)if(this.$element=this.$element||h(this.element),e){var o=h.Event(e);o.type=t,this.$element.trigger(o,i)}else this.$element.trigger(t,i)},c.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},c.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},c.stamp=function(t){t=this._find(t),t&&(this.stamps=this.stamps.concat(t),t.forEach(this.ignore,this))},c.unstamp=function(t){t=this._find(t),t&&t.forEach(function(t){n.removeFrom(this.stamps,t),this.unignore(t)},this)},c._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n.makeArray(t)):void 0},c._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},c._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},c._manageStamp=d,c._getElementOffset=function(t){var e=t.getBoundingClientRect(),n=this._boundingRect,o=i(t),s={left:e.left-n.left-o.marginLeft,top:e.top-n.top-o.marginTop,right:n.right-e.right-o.marginRight,bottom:n.bottom-e.bottom-o.marginBottom};return s},c.handleEvent=n.handleEvent,c.bindResize=function(){t.addEventListener("resize",this),this.isResizeBound=!0},c.unbindResize=function(){t.removeEventListener("resize",this),this.isResizeBound=!1},c.onresize=function(){this.resize()},n.debounceMethod(s,"onresize",100),c.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},c.needsResizeLayout=function(){var t=i(this.element),e=this.size&&t;return e&&t.innerWidth!==this.size.innerWidth},c.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},c.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},c.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},c.reveal=function(t){if(this._emitCompleteOnItems("reveal",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.reveal()})}},c.hide=function(t){if(this._emitCompleteOnItems("hide",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.hide()})}},c.revealItemElements=function(t){var e=this.getItems(t);this.reveal(e)},c.hideItemElements=function(t){var e=this.getItems(t);this.hide(e)},c.getItem=function(t){for(var e=0;e<this.items.length;e++){var i=this.items[e];if(i.element==t)return i}},c.getItems=function(t){t=n.makeArray(t);var e=[];return t.forEach(function(t){var i=this.getItem(t);i&&e.push(i)},this),e},c.remove=function(t){var e=this.getItems(t);this._emitCompleteOnItems("remove",e),e&&e.length&&e.forEach(function(t){t.remove(),n.removeFrom(this.items,t)},this)},c.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="",this.items.forEach(function(t){t.destroy()}),this.unbindResize();var e=this.element.outlayerGUID;delete f[e],delete this.element.outlayerGUID,h&&h.removeData(this.element,this.constructor.namespace)},s.data=function(t){t=n.getQueryElement(t);var e=t&&t.outlayerGUID;return e&&f[e]},s.create=function(t,e){var i=r(s);return i.defaults=n.extend({},s.defaults),n.extend(i.defaults,e),i.compatOptions=n.extend({},s.compatOptions),i.namespace=t,i.data=s.data,i.Item=r(o),n.htmlInit(i,t),h&&h.bridget&&h.bridget(t,i),i};var m={ms:1,s:1e3};return s.Item=o,s}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/item",["outlayer/outlayer"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer")):(t.Isotope=t.Isotope||{},t.Isotope.Item=e(t.Outlayer))}(window,function(t){"use strict";function e(){t.Item.apply(this,arguments)}var i=e.prototype=Object.create(t.Item.prototype),n=i._create;i._create=function(){this.id=this.layout.itemGUID++,n.call(this),this.sortData={}},i.updateSortData=function(){if(!this.isIgnored){this.sortData.id=this.id,this.sortData["original-order"]=this.id,this.sortData.random=Math.random();var t=this.layout.options.getSortData,e=this.layout._sorters;for(var i in t){var n=e[i];this.sortData[i]=n(this.element,this)}}};var o=i.destroy;return i.destroy=function(){o.apply(this,arguments),this.css({display:""})},e}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-mode",["get-size/get-size","outlayer/outlayer"],e):"object"==typeof module&&module.exports?module.exports=e(require("get-size"),require("outlayer")):(t.Isotope=t.Isotope||{},t.Isotope.LayoutMode=e(t.getSize,t.Outlayer))}(window,function(t,e){"use strict";function i(t){this.isotope=t,t&&(this.options=t.options[this.namespace],this.element=t.element,this.items=t.filteredItems,this.size=t.size)}var n=i.prototype,o=["_resetLayout","_getItemLayoutPosition","_manageStamp","_getContainerSize","_getElementOffset","needsResizeLayout","_getOption"];return o.forEach(function(t){n[t]=function(){return e.prototype[t].apply(this.isotope,arguments)}}),n.needsVerticalResizeLayout=function(){var e=t(this.isotope.element),i=this.isotope.size&&e;return i&&e.innerHeight!=this.isotope.size.innerHeight},n._getMeasurement=function(){this.isotope._getMeasurement.apply(this,arguments)},n.getColumnWidth=function(){this.getSegmentSize("column","Width")},n.getRowHeight=function(){this.getSegmentSize("row","Height")},n.getSegmentSize=function(t,e){var i=t+e,n="outer"+e;if(this._getMeasurement(i,n),!this[i]){var o=this.getFirstItemSize();this[i]=o&&o[n]||this.isotope.size["inner"+e]}},n.getFirstItemSize=function(){var e=this.isotope.filteredItems[0];return e&&e.element&&t(e.element)},n.layout=function(){this.isotope.layout.apply(this.isotope,arguments)},n.getSize=function(){this.isotope.getSize(),this.size=this.isotope.size},i.modes={},i.create=function(t,e){function o(){i.apply(this,arguments)}return o.prototype=Object.create(n),o.prototype.constructor=o,e&&(o.options=e),o.prototype.namespace=t,i.modes[t]=o,o},i}),function(t,e){"function"==typeof define&&define.amd?define("masonry/masonry",["outlayer/outlayer","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer"),require("get-size")):t.Masonry=e(t.Outlayer,t.getSize)}(window,function(t,e){var i=t.create("masonry");return i.compatOptions.fitWidth="isFitWidth",i.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var t=0;t<this.cols;t++)this.colYs.push(0);this.maxY=0},i.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}var n=this.columnWidth+=this.gutter,o=this.containerWidth+this.gutter,s=o/n,r=n-o%n,a=r&&1>r?"round":"floor";s=Math[a](s),this.cols=Math.max(s,1)},i.prototype.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},i.prototype._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this._getColGroup(n),s=Math.min.apply(Math,o),r=o.indexOf(s),a={x:this.columnWidth*r,y:s},u=s+t.size.outerHeight,h=this.cols+1-o.length,d=0;h>d;d++)this.colYs[r+d]=u;return a},i.prototype._getColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++){var o=this.colYs.slice(n,n+t);e[n]=Math.max.apply(Math,o)}return e},i.prototype._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),s=o?n.left:n.right,r=s+i.outerWidth,a=Math.floor(s/this.columnWidth);a=Math.max(0,a);var u=Math.floor(r/this.columnWidth);u-=r%this.columnWidth?0:1,u=Math.min(this.cols-1,u);for(var h=this._getOption("originTop"),d=(h?n.top:n.bottom)+i.outerHeight,l=a;u>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},i.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},i.prototype._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},i.prototype.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/masonry",["../layout-mode","masonry/masonry"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode"),require("masonry-layout")):e(t.Isotope.LayoutMode,t.Masonry)}(window,function(t,e){"use strict";var i=t.create("masonry"),n=i.prototype,o={_getElementOffset:!0,layout:!0,_getMeasurement:!0};for(var s in e.prototype)o[s]||(n[s]=e.prototype[s]);var r=n.measureColumns;n.measureColumns=function(){this.items=this.isotope.filteredItems,r.call(this)};var a=n._getOption;return n._getOption=function(t){return"fitWidth"==t?void 0!==this.options.isFitWidth?this.options.isFitWidth:this.options.fitWidth:a.apply(this.isotope,arguments)},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/fit-rows",["../layout-mode"],e):"object"==typeof exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("fitRows"),i=e.prototype;return i._resetLayout=function(){this.x=0,this.y=0,this.maxY=0,this._getMeasurement("gutter","outerWidth")},i._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth+this.gutter,i=this.isotope.size.innerWidth+this.gutter;0!==this.x&&e+this.x>i&&(this.x=0,this.y=this.maxY);var n={x:this.x,y:this.y};return this.maxY=Math.max(this.maxY,this.y+t.size.outerHeight),this.x+=e,n},i._getContainerSize=function(){return{height:this.maxY}},e}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/vertical",["../layout-mode"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("vertical",{horizontalAlignment:0}),i=e.prototype;return i._resetLayout=function(){this.y=0},i._getItemLayoutPosition=function(t){t.getSize();var e=(this.isotope.size.innerWidth-t.size.outerWidth)*this.options.horizontalAlignment,i=this.y;return this.y+=t.size.outerHeight,{x:e,y:i}},i._getContainerSize=function(){return{height:this.y}},e}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","desandro-matches-selector/matches-selector","fizzy-ui-utils/utils","isotope/js/item","isotope/js/layout-mode","isotope/js/layout-modes/masonry","isotope/js/layout-modes/fit-rows","isotope/js/layout-modes/vertical"],function(i,n,o,s,r,a){return e(t,i,n,o,s,r,a)}):"object"==typeof module&&module.exports?module.exports=e(t,require("outlayer"),require("get-size"),require("desandro-matches-selector"),require("fizzy-ui-utils"),require("isotope/js/item"),require("isotope/js/layout-mode"),require("isotope/js/layout-modes/masonry"),require("isotope/js/layout-modes/fit-rows"),require("isotope/js/layout-modes/vertical")):t.Isotope=e(t,t.Outlayer,t.getSize,t.matchesSelector,t.fizzyUIUtils,t.Isotope.Item,t.Isotope.LayoutMode)}(window,function(t,e,i,n,o,s,r){function a(t,e){return function(i,n){for(var o=0;o<t.length;o++){var s=t[o],r=i.sortData[s],a=n.sortData[s];if(r>a||a>r){var u=void 0!==e[s]?e[s]:e,h=u?1:-1;return(r>a?1:-1)*h}}return 0}}var u=t.jQuery,h=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/g,"")},d=e.create("isotope",{layoutMode:"masonry",isJQueryFiltering:!0,sortAscending:!0});d.Item=s,d.LayoutMode=r;var l=d.prototype;l._create=function(){this.itemGUID=0,this._sorters={},this._getSorters(),e.prototype._create.call(this),this.modes={},this.filteredItems=this.items,this.sortHistory=["original-order"];for(var t in r.modes)this._initLayoutMode(t)},l.reloadItems=function(){this.itemGUID=0,e.prototype.reloadItems.call(this)},l._itemize=function(){for(var t=e.prototype._itemize.apply(this,arguments),i=0;i<t.length;i++){var n=t[i];n.id=this.itemGUID++}return this._updateItemsSortData(t),t},l._initLayoutMode=function(t){var e=r.modes[t],i=this.options[t]||{};this.options[t]=e.options?o.extend(e.options,i):i,this.modes[t]=new e(this)},l.layout=function(){return!this._isLayoutInited&&this._getOption("initLayout")?void this.arrange():void this._layout()},l._layout=function(){var t=this._getIsInstant();this._resetLayout(),this._manageStamps(),this.layoutItems(this.filteredItems,t),this._isLayoutInited=!0},l.arrange=function(t){this.option(t),this._getIsInstant();var e=this._filter(this.items);this.filteredItems=e.matches,this._bindArrangeComplete(),this._isInstant?this._noTransition(this._hideReveal,[e]):this._hideReveal(e),this._sort(),this._layout()},l._init=l.arrange,l._hideReveal=function(t){this.reveal(t.needReveal),this.hide(t.needHide)},l._getIsInstant=function(){var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;return this._isInstant=e,e},l._bindArrangeComplete=function(){function t(){e&&i&&n&&o.dispatchEvent("arrangeComplete",null,[o.filteredItems])}var e,i,n,o=this;this.once("layoutComplete",function(){e=!0,t()}),this.once("hideComplete",function(){i=!0,t()}),this.once("revealComplete",function(){n=!0,t()})},l._filter=function(t){var e=this.options.filter;e=e||"*";for(var i=[],n=[],o=[],s=this._getFilterTest(e),r=0;r<t.length;r++){var a=t[r];if(!a.isIgnored){var u=s(a);u&&i.push(a),u&&a.isHidden?n.push(a):u||a.isHidden||o.push(a)}}return{matches:i,needReveal:n,needHide:o}},l._getFilterTest=function(t){return u&&this.options.isJQueryFiltering?function(e){return u(e.element).is(t)}:"function"==typeof t?function(e){return t(e.element)}:function(e){return n(e.element,t)}},l.updateSortData=function(t){var e;t?(t=o.makeArray(t),e=this.getItems(t)):e=this.items,this._getSorters(),this._updateItemsSortData(e)},l._getSorters=function(){var t=this.options.getSortData;for(var e in t){var i=t[e];this._sorters[e]=f(i)}},l._updateItemsSortData=function(t){for(var e=t&&t.length,i=0;e&&e>i;i++){var n=t[i];n.updateSortData()}};var f=function(){function t(t){if("string"!=typeof t)return t;var i=h(t).split(" "),n=i[0],o=n.match(/^\[(.+)\]$/),s=o&&o[1],r=e(s,n),a=d.sortDataParsers[i[1]];
return t=a?function(t){return t&&a(r(t))}:function(t){return t&&r(t)}}function e(t,e){return t?function(e){return e.getAttribute(t)}:function(t){var i=t.querySelector(e);return i&&i.textContent}}return t}();d.sortDataParsers={parseInt:function(t){return parseInt(t,10)},parseFloat:function(t){return parseFloat(t)}},l._sort=function(){var t=this.options.sortBy;if(t){var e=[].concat.apply(t,this.sortHistory),i=a(e,this.options.sortAscending);this.filteredItems.sort(i),t!=this.sortHistory[0]&&this.sortHistory.unshift(t)}},l._mode=function(){var t=this.options.layoutMode,e=this.modes[t];if(!e)throw new Error("No layout mode: "+t);return e.options=this.options[t],e},l._resetLayout=function(){e.prototype._resetLayout.call(this),this._mode()._resetLayout()},l._getItemLayoutPosition=function(t){return this._mode()._getItemLayoutPosition(t)},l._manageStamp=function(t){this._mode()._manageStamp(t)},l._getContainerSize=function(){return this._mode()._getContainerSize()},l.needsResizeLayout=function(){return this._mode().needsResizeLayout()},l.appended=function(t){var e=this.addItems(t);if(e.length){var i=this._filterRevealAdded(e);this.filteredItems=this.filteredItems.concat(i)}},l.prepended=function(t){var e=this._itemize(t);if(e.length){this._resetLayout(),this._manageStamps();var i=this._filterRevealAdded(e);this.layoutItems(this.filteredItems),this.filteredItems=i.concat(this.filteredItems),this.items=e.concat(this.items)}},l._filterRevealAdded=function(t){var e=this._filter(t);return this.hide(e.needHide),this.reveal(e.matches),this.layoutItems(e.matches,!0),e.matches},l.insert=function(t){var e=this.addItems(t);if(e.length){var i,n,o=e.length;for(i=0;o>i;i++)n=e[i],this.element.appendChild(n.element);var s=this._filter(e).matches;for(i=0;o>i;i++)e[i].isLayoutInstant=!0;for(this.arrange(),i=0;o>i;i++)delete e[i].isLayoutInstant;this.reveal(s)}};var c=l.remove;return l.remove=function(t){t=o.makeArray(t);var e=this.getItems(t);c.call(this,t);for(var i=e&&e.length,n=0;i&&i>n;n++){var s=e[n];o.removeFrom(this.filteredItems,s)}},l.shuffle=function(){for(var t=0;t<this.items.length;t++){var e=this.items[t];e.sortData.random=Math.random()}this.options.sortBy="random",this._sort(),this._layout()},l._noTransition=function(t,e){var i=this.options.transitionDuration;this.options.transitionDuration=0;var n=t.apply(this,e);return this.options.transitionDuration=i,n},l.getFilteredItemElements=function(){return this.filteredItems.map(function(t){return t.element})},d});
\ No newline at end of file
#
# Copyright (c) 2010-2017, b3log.org & hacpai.com
#
# 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: 1.0.0.0, Feb 17, 2017
# Author: Liyuan Li
#
onlineVisitorLabel=Visitor
tocLabel=Article ToC
readLabel=Read More
nextArticleLabel=Next
previousArticleLabel=Previous
articleCP1Label=Please indicate the source:
viewCountLabel=View Count
\ No newline at end of file
#
# Copyright (c) 2010-2017, b3log.org & hacpai.com
#
# 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: 1.0.0.0, Feb 17, 2017
# Author: Liyuan Li
#
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
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="other">
<div class="title">
<h2><i class="icon-link"></i>
&nbsp;${linkLabel}</h2>
</div>
<#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>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
</body>
</html>
<#macro comments commentList article>
<header class='title'><h2>${commentLabel}</h2></header>
<ul class="comments" id="comments">
<#list commentList as comment>
<#include 'common-comment.ftl'/>
</#list>
</ul>
<#if article.commentable>
<header class='title'><h2>${postCommentsLabel}</h2></header>
<table id="commentForm" class="form">
<tbody>
<#if !isLoggedIn>
<tr>
<td>
<input placeholder="${commentNameLabel}" type="text" class="normalInput" id="commentName"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentEmailLabel}" type="email" class="normalInput" id="commentEmail"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentURLLabel}" type="url" id="commentURL"/>
</td>
</tr>
</#if>
<tr>
<td id="emotions" class="emotions">
<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>
<td>
<textarea rows="5" cols="96" id="comment"></textarea>
</td>
</tr>
<#if !isLoggedIn>
<tr>
<td>
<input style="width:50%" placeholder="${captchaLabel}" type="text" class="normalInput" id="commentValidate"/>
<img class="captcha" id="captcha" alt="validate" src="${servePath}/captcha.do" />
</td>
</tr>
</#if>
<tr>
<td colspan="2" align="right">
<span class="error-msg" id="commentErrorTip"></span>
<button id="submitCommentButton" onclick="page.submitComment();">${submmitCommentLabel}</button>
</td>
</tr>
</tbody>
</table>
</#if>
</#macro>
<#macro comment_script oId>
<script type="text/javascript" src="${staticServePath}/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}",
"loadingLabel": "${loadingLabel}",
"oId": "${oId}",
"skinDirName": "${skinDirName}",
"blogHost": "${blogHost}",
"randomArticles1Label": "${randomArticles1Label}",
"externalRelevantArticles1Label": "${externalRelevantArticles1Label}"
});
var replyTo = function (id) {
var commentFormHTML = "<table class='form comment-reply' id='replyForm'>";
page.addReplyForm(id, commentFormHTML);
};
(function () {
page.load();
Skin.initArticle();
// emotions
page.replaceCommentsEm("#comments .comment-content");
<#nested>
})();
</script>
</#macro>
\ No newline at end of file
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<meta name="revised" content="${blogTitle?html}, ${year}" /> <meta name="revised" content="${blogTitle?html}, ${year}" />
<meta name="copyright" content="B3log" /> <meta name="copyright" content="B3log" />
<meta http-equiv="Window-target" content="_top" /> <meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/${skinDirName}${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" /> <link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" /> <link href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" />
<link rel="icon" type="image/png" href="${servePath}/favicon.png" /> <link rel="icon" type="image/png" href="${servePath}/favicon.png" />
${htmlHead} ${htmlHead}
......
...@@ -10,15 +10,17 @@ ...@@ -10,15 +10,17 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content"> <div class="main-wrap">
<article class="post-body"> <main>
<article class="post">
${page.pageContent} ${page.pageContent}
</article>
<@comments commentList=pageComments article=page></@comments> <@comments commentList=pageComments article=page></@comments>
</div> </article>
<#include "side.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
<@comment_script oId=page.oId></@comment_script> <@comment_script oId=page.oId></@comment_script>
</body> </body>
......
<aside>
<#if noticeBoard??>
<div class="ad content-reset">
${noticeBoard}
</div>
</#if>
<#if 0 != mostUsedTags?size>
<div class="module">
<header><h2>${popTagsLabel}</h2></header>
<main>
<#list mostUsedTags as tag>
<a rel="tag" title="${tag.tagTitle}(${tag.tagPublishedRefCount})"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}"
class="tag tooltipped tooltipped-n" aria-label="${tag.tagPublishedRefCount} ${countLabel}${articleLabel}">
${tag.tagTitle}</a>
</#list>
</main>
</div>
</#if>
<div class="module meta">
<header>
<h2>${adminUser.userName}</h2>
</header>
<main class="fn-clear">
<img src="${adminUser.userAvatar}" aria-label="${adminUser.userName}"/>
<div class="fn-right">
<a href="${servePath}/archives.html">
${statistic.statisticPublishedBlogArticleCount}
<span class="ft-gray">${articleLabel}</span></a><br/>
<a href="${servePath}/dynamic.html">
${statistic.statisticPublishedBlogCommentCount}
<span class="ft-gray">${commentLabel}</span></a><br/>
${statistic.statisticBlogViewCount} <span class="ft-gray">${viewLabel}</span><br/>
${onlineVisitorCnt} <span class="ft-gray">${onlineVisitorLabel}</span>
</div>
</main>
</div>
<#if 0 != mostCommentArticles?size>
<div class="module">
<header><h2>${mostCommentArticlesLabel}</h2></header>
<main class="list">
<ul>
<#list mostCommentArticles as article>
<li>
<a rel="nofollow" aria-label="${article.articleCommentCount} ${commentLabel}"
class="tooltipped tooltipped-e"
href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
</li>
</#list>
</ul>
</main>
</div>
</#if>
<#if 0 != mostViewCountArticles?size>
<div class="module">
<header><h2>${mostViewCountArticlesLabel}</h2></header>
<main class="list">
<ul>
<#list mostViewCountArticles as article>
<li>
<a rel="nofollow" aria-label="${article.articleCommentCount} ${commentLabel}"
class="tooltipped tooltipped-e"
href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
</li>
</#list>
</ul>
</main>
</div>
</#if>
</aside>
\ No newline at end of file
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
# #
# #
# Description: next skin. # Description: Spaces skin.
# Version: 0.1.1.0, Jun 29, 2016 # Version: 1.0.0.0, Feb 17, 2017
# Author: Liyuan Li # Author: Liyuan Li
# #
name=next name=9IPHP
version=1.0.0 version=1.0.0
forSolo=1.8.0 forSolo=1.9.0
memo=https://github.com/iissnan/hexo-theme-next memo=https://github.com/9IPHP
<#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>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="other">
<div class="title">
<h2><i class="icon-tags"></i>
&nbsp;${tag.tagTitle}
<small>${tagLabel}</small>
</div>
<ul class="list">
<#list articles as article>
<li>
<a class="post-title" href="${servePath}${article.articlePermalink}">
<span>${article.articleTitle}</span>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
<time class="fn-right">
<i class="icon-date"></i> ${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</a>
</li>
</#list>
</ul>
<#if 0 != paginationPageCount>
<div class="fn-clear">
<nav class="pagination fn-right">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="page-number">&laquo;</a>
<a class="page-number" href="${servePath}${path}/1">1</a> <span class="page-number">...</span>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> <span class="page-number">...</span>
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="page-number">&raquo;</a>
</#if>
</nav>
</div>
</#if>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
</body>
</html>
...@@ -9,28 +9,37 @@ ...@@ -9,28 +9,37 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content"> <div class="main-wrap">
<div class="tag-cloud"> <main class="other">
${sumLabel} ${tags?size} ${tagLabel} <div class="title">
<ul class="tag-cloud-tags fn-clear" id="tags"> <h2><i class="icon-tags"></i>
&nbsp; ${sumLabel} ${tags?size} ${tagLabel}
</div>
<div class="tags">
<#list tags as tag> <#list tags as tag>
<li> <a rel="tag" data-count="${tag.tagPublishedRefCount}" class="tag"
<a rel="tag" data-count="${tag.tagPublishedRefCount}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}"> href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
<span>${tag.tagTitle}</span> <span>${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>) (<b>${tag.tagPublishedRefCount}</b>)
</a> </a>
</li>
</#list> </#list>
</ul>
</div>
</div> </div>
<#include "side.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/isotope.pkgd.min.js" charset="utf-8"></script>
<script> <script>
Util.buildTags(); $('.tags').isotope({
transitionDuration: '1.5s',
filter: 'a',
layoutMode: 'fitRows'
});
$('.tags').isotope({
sortBy: 'random'
});
</script> </script>
</body> </body>
</html> </html>
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content page-archive">
<section class="posts-collapse">
<span class="archive-move-on"></span>
<span class="archive-page-counter">
${ohLabel}..! ${sumLabel} ${statistic.statisticPublishedBlogArticleCount} ${fightLabel}
</span>
<#if 0 != archiveDates?size>
<#list archiveDates as archiveDate>
<article>
<header class="post-header">
<h1>
<#if "en" == localeString?substring(0, 2)>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})
</a>
<#else>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})
</a>
</#if>
</h1>
</header>
</article>
</#list>
</#if>
</section>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
</body>
</html>
<section class="posts-expand">
<#list articles as article>
<article class="post-item">
<header>
<h1>
<a class="post-title-link" rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="post-meta">
<span>
${postTimeLabel}
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
<span>
&nbsp; | &nbsp;
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${cmtLabel}</a>
</span>
&nbsp; | &nbsp;${viewsLabel} ${article.articleViewCount}°C
</div>
</header>
<div class="article-body">
${article.articleAbstract}
</div>
<div class="post-more-link">
<a href="${servePath}${article.articlePermalink}#more" rel="contents">
${readLabel} &raquo;
</a>
</div>
</article>
</#list>
</section>
<#if 0 != paginationPageCount>
<nav class="pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="extend next"><<</a>
<a class="page-number" href="${servePath}${path}/1">1</a> ...
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> ...
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="extend next">>></a>
</#if>
</nav>
</#if>
\ No newline at end of file
<#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>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<article class="posts-expand">
<header class="post-header">
<h1 class="post-title">
${article.articleTitle}
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="post-meta">
<span class="post-time">
${postTimeLabel}
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
<span class="post-comments-count">
&nbsp; | &nbsp;
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${cmtLabel}</a>
</span>
&nbsp; | &nbsp; ${viewsLabel}
${article.articleViewCount}°C
</div>
</header>
<div class="post-body article-body">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</div>
<footer>
<div class="post-tags">
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
</div>
<div class="post-nav fn-clear">
<#if previousArticlePermalink??>
<div class="post-nav-prev post-nav-item fn-right">
<a href="${servePath}${previousArticlePermalink}" rel="next" title="${previousArticleTitle}">
${previousArticleTitle} >
</a>
</div>
</#if>
<#if nextArticlePermalink??>
<div class="post-nav-next post-nav-item fn-left">
<a href="${servePath}${nextArticlePermalink}" rel="prev" title="${nextArticleTitle}">
< ${nextArticleTitle}
</a>
</div>
</#if>
</div>
</footer>
</article>
</div>
<@comments commentList=articleComments article=article></@comments>
<div id="externalRelevantArticles"></div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>");
</#if>
</@comment_script>
</body>
</html>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe901;" glyph-name="rss" d="M136.294 209.070c-75.196 0-136.292-61.334-136.292-136.076 0-75.154 61.1-135.802 136.292-135.802 75.466 0 136.494 60.648 136.494 135.802-0.002 74.742-61.024 136.076-136.494 136.076zM0.156 612.070v-196.258c127.784 0 247.958-49.972 338.458-140.512 90.384-90.318 140.282-211.036 140.282-339.3h197.122c-0.002 372.82-303.282 676.070-675.862 676.070zM0.388 960v-196.356c455.782 0 826.756-371.334 826.756-827.644h196.856c0 564.47-459.254 1024-1023.612 1024z" />
<glyph unicode="&#xe973;" glyph-name="register" d="M384 224c0 151.234 95.874 280.486 230.032 330.2 16.28 36.538 25.968 77.164 25.968 117.8 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h397.306c-8.664 30.53-13.306 62.732-13.306 96zM736 512c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.056 0 288 128.942 288 288s-128.942 288-288 288zM896 192h-128v-128h-64v128h-128v64h128v128h64v-128h128v-64z" />
<glyph unicode="&#xe994;" glyph-name="setting" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
<glyph unicode="&#xea13;" glyph-name="login" d="M384 448h-320v128h320v128l192-192-192-192zM1024 960v-832l-384-192v192h-384v256h64v-192h320v576l256 128h-576v-256h-64v320z" />
<glyph unicode="&#xea14;" glyph-name="logout" d="M768 320v128h-320v128h320v128l192-192zM704 384v-256h-320v-192l-384 192v832h704v-320h-64v256h-512l256-128v-576h256v192z" />
</font></defs></svg>
\ No newline at end of file
{
"IcoMoonType": "selection",
"icons": [
{
"icon": {
"paths": [
"M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z",
"M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"user-plus",
"user",
"user-add",
"profile",
"avatar",
"person",
"member"
],
"defaultCode": 59763,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "user-plus, user2",
"name": "register",
"id": 115,
"order": 42,
"prevSize": 32,
"code": 59763
},
"setIdx": 0,
"setId": 1,
"iconIdx": 115
},
{
"icon": {
"paths": [
"M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"cog",
"gear",
"preferences",
"settings",
"generate",
"control",
"options"
],
"defaultCode": 59796,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "cog, gear",
"name": "setting",
"id": 148,
"order": 40,
"prevSize": 32,
"code": 59796
},
"setIdx": 0,
"setId": 1,
"iconIdx": 148
},
{
"icon": {
"paths": [
"M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"enter",
"signin",
"login"
],
"defaultCode": 59923,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "enter, signin",
"name": "login",
"id": 275,
"order": 38,
"prevSize": 32,
"code": 59923
},
"setIdx": 0,
"setId": 1,
"iconIdx": 275
},
{
"icon": {
"paths": [
"M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"exit",
"signout",
"logout",
"quit",
"close"
],
"defaultCode": 59924,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "exit, signout",
"name": "logout",
"id": 276,
"order": 39,
"prevSize": 32,
"code": 59924
},
"setIdx": 0,
"setId": 1,
"iconIdx": 276
},
{
"icon": {
"paths": [
"M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"feed",
"rss",
"social"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 1,
"id": 0,
"prevSize": 32,
"code": 59649,
"name": "rss"
},
"setIdx": 1,
"setId": 0,
"iconIdx": 1
}
],
"height": 1024,
"metadata": {
"name": "icomoon"
},
"preferences": {
"showGlyphs": true,
"showQuickUse": true,
"showQuickUse2": true,
"showSVGs": true,
"fontPref": {
"prefix": "icon-",
"metadata": {
"fontFamily": "icomoon"
},
"metrics": {
"emSize": 1024,
"baseline": 6.25,
"whitespace": 50
},
"embed": false
},
"imagePref": {
"prefix": "icon-",
"png": true,
"useClassSelector": true,
"color": 4473924,
"bgColor": 16777215
},
"historySize": 100,
"showCodes": false,
"gridSize": 16
}
}
\ No newline at end of file
/**
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
@charset "utf-8";a,body{color:#555}.article-body,.post-body,ul.comments li{word-wrap:break-word}html{background-color:#f5f5f5}body{margin:0;font-family:Lato,"PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;background:#fff}a{text-decoration:none;border-bottom:1px solid #999}a:active,a:hover{outline:0}a:hover{color:#222;border-bottom-color:#222}hr{margin:40px 0;height:3px;border:none;background-color:#ddd;background-image:repeating-linear-gradient(-45deg,#fff,#fff 4px,transparent 4px,transparent 8px)}blockquote{padding:0 15px;color:#666;border-left:4px solid #ddd}img{max-width:100%;height:auto}.fn-clear:after,.fn-clear:before{display:table;content:"";line-height:0}.fn-clear:after{clear:both;line-height:0}.fn-left{float:left}.fn-right{float:right}.fn-none{display:none}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot?a0psdo);src:url(fonts/icomoon.eot?a0psdo#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?a0psdo) format('truetype'),url(fonts/icomoon.woff?a0psdo) format('woff'),url(fonts/icomoon.svg?a0psdo#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-register:before{content:"\e973"}.icon-setting:before{content:"\e994"}.icon-login:before{content:"\ea13"}.icon-logout:before{content:"\ea14"}.icon-rss:before{content:"\e901"}.form{width:100%;margin-top:50px}.form button,.form input,.form textarea{border:1px solid #CCC;background-color:#FAFAFA;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.075) inset;padding:7px 8px;width:100%;box-sizing:border-box;outline:0}.form button{width:auto}.form input:focus,.form textarea:focus{background-color:#FFF;box-shadow:0 1px 2px rgba(0,0,0,.075) inset,0 0 5px rgba(81,167,232,.5);border:1px solid #51A7E8}.error-msg{color:#9EABB3;margin-right:10px}.em00,.em01,.em02,.em03,.em04,.em05,.em06,.em07,.em08,.em09,.em10,.em11,.em12,.em13,.em14{cursor:pointer;background-image:url(../images/emotions/emotions-ease.png);float:left;height:24px;margin-right:5px;width:24px;transition:all .2s ease-out;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out}.menu .menu-item a,.pagination .next,.pagination .page-number,.post-title-link::before,.posts-collapse .post-header,.posts-collapse .post-header::before,.sidebar-toggle-line{transition-duration:.2s;transition-timing-function:ease-in-out;transition-delay:0s}#emotions span:hover{transform:scale(1.2) rotate(360deg);-webkit-transform:scale(1.2) rotate(360deg);-moz-transform:scale(1.2) rotate(360deg)}.em01{background-position:-24px 0}.em02{background-position:-48px 0}.em03{background-position:-72px 0}.em04{background-position:-96px 0}.em05{background-position:0 -24px}.em06{background-position:-24px -24px}.em07{background-position:-48px -24px}.em08{background-position:-72px -24px}.em09{background-position:-96px -24px}.em10{background-position:0 -48px}.em11{background-position:-24px -48px}.em12{background-position:-48px -48px}.em13{background-position:-72px -48px}.em14{background-position:-96px -48px}.wrapper{max-width:700px;min-width:600px;margin:0 auto;padding:0 10px}.main{position:relative;top:-50px;opacity:0}.header{background:#f5f5f5;margin-bottom:80px;padding:40px 0}.logo-wrap{float:left;overflow:hidden;top:0;opacity:0}.logo-line-after,.logo-line-before{display:block;overflow:hidden;margin:0 auto;width:75%}.logo-line-after i,.logo-line-before i{position:relative;display:block;height:2px;background:#222;left:-100%}.logo-line-after i{left:auto;right:-100%}.logo-wrap .site-title{font-size:22px;font-weight:bolder;opacity:0;top:-10px;position:relative}.logo-wrap>a{position:relative;display:inline-block;padding:2px 1px;color:#222;line-height:2;border-bottom:none;font-family:Lato,"PingFang SC","Microsoft YaHei",sans-serif}.site-nav-toggle{display:none}.menu .menu-item,.sidebar-toggle-line{display:inline-block}.menu{float:left;margin:5px 0 0 20px;padding:0 20px;opacity:0}.menu .menu-item a{padding:5px 10px;border:none;transition-property:background}.menu .menu-item a:hover{background:#e1e1e1}.site-search{float:right;margin-top:15px}.site-search input{padding:3px 3px 3px 18px;border:none;border-radius:0;width:140px;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGhlaWdodD0iMTZweCIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNnB4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNMTUuNywxNC4zbC0zLjEwNS0zLjEwNUMxMy40NzMsMTAuMDI0LDE0LDguNTc2LDE0LDdjMC0zLjg2Ni0zLjEzNC03LTctN1MwLDMuMTM0LDAsN3MzLjEzNCw3LDcsNyAgYzEuNTc2LDAsMy4wMjQtMC41MjcsNC4xOTQtMS40MDVMMTQuMywxNS43YzAuMTg0LDAuMTg0LDAuMzgsMC4zLDAuNywwLjNjMC41NTMsMCwxLTAuNDQ3LDEtMUMxNiwxNC43ODEsMTUuOTQ2LDE0LjU0NiwxNS43LDE0LjN6ICAgTTIsN2MwLTIuNzYyLDIuMjM4LTUsNS01czUsMi4yMzgsNSw1cy0yLjIzOCw1LTUsNVMyLDkuNzYyLDIsN3oiLz48L3N2Zz4=) 0 50% no-repeat;background-size:12px 12px;outline:0;border-bottom:1px solid #999;opacity:.5}.site-search input:focus{opacity:1}.footer{margin-top:80px;padding:10px 20px;background:#f5f5f5;color:#666;line-height:2}.back-to-top,.sidebar-toggle{right:50px;z-index:1050;padding:5px;cursor:pointer}.sidebar-toggle{position:fixed;bottom:45px;width:15px;height:15px;background:#222;line-height:0;-webkit-transform:translateZ(0)}.sidebar-toggle.has-toc .sidebar-toggle-line{background:#87daff}.sidebar-toggle-line{position:relative;vertical-align:top;height:2px;width:100%;background:#fff;margin-top:4px}.sidebar-toggle-line:first-child{margin-top:0}.sidebar-toggle:hover .sidebar-toggle-line-first{width:50%;transform:rotateZ(-45deg);top:3px}.sidebar-toggle:hover .sidebar-toggle-line-middle{width:90%}.sidebar-toggle:hover .sidebar-toggle-line-last{width:50%;transform:rotateZ(45deg);top:-3px}.sidebar-toggle.sidebar-active .sidebar-toggle-line-first{width:100%;transform:rotateZ(-45deg);top:6px}.sidebar-toggle.sidebar-active .sidebar-toggle-line-middle{opacity:0}.sidebar-toggle.sidebar-active .sidebar-toggle-line-last{width:100%;transform:rotateZ(45deg);top:-6px}.back-to-top,.sidebar{position:fixed;background:#222;-webkit-transform:translateZ(0)}.back-to-top{bottom:19px;width:15px;height:13px;color:#fff}.back-to-top:before{display:block;content:" ";margin-top:2px;width:0;height:0;border-width:0 7px 8px;border-color:transparent transparent #fff;border-style:solid}.sidebar{width:320px;right:-320px;top:0;bottom:0;z-index:1040;box-shadow:inset 0 2px 6px #000;padding:20px 10px;color:#999;text-align:center;box-sizing:border-box}.sidebar a{color:#999;border-bottom-color:#555}.sidebar a:hover{color:#eee}.sidebar .site-author-image{display:block;margin:20px auto 0;max-width:96px;height:auto;border:2px solid #333;padding:2px}.sidebar .site-author-name{margin:5px 0 0;color:#f5f5f5}.sidebar .site-description{margin-top:5px;font-size:14px;color:#555}.sidebar .feed-link,.sidebar .links-of-author{margin-top:20px}.sidebar .site-state-item{display:inline-block;padding:0 15px;border-left:1px solid #333}.sidebar .site-state-item:first-child{border-left:none}.sidebar .site-state-item a{border-bottom:none}.sidebar .site-state-item-count{display:block;text-align:center;font-size:18px}.sidebar .site-state-item-name{font-size:13px}.sidebar .feed-link a{display:inline-block;padding:3px 15px;color:#fc6423;border:1px solid #fc6423;border-radius:4px}.sidebar .feed-link a:hover{color:#fff;background:#fc6423}.sidebar .links-of-author a{display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;border-bottom-color:#555;font-size:13px}.sidebar .links-of-author a:before{display:inline-block;vertical-align:middle;margin-right:3px;content:" ";width:4px;height:4px;border-radius:50%;background:#0dd5ff}.sidebar .b3-solo-list{margin:20px;list-style:none;text-align:left;padding:0;font-size:14px;line-height:2}.sidebar section{opacity:0;position:relative;overflow:auto}.sidebar>ul>li{display:inline-block;cursor:pointer;border-bottom:1px solid transparent;font-size:14px;color:#555}.sidebar>ul>li:hover{color:#f5f5f5}.sidebar>ul>li.current{color:#87daff;border-bottom-color:#87daff}.sidebar>ul>li:last-child{margin-left:10px}.posts-expand .post-item{margin-top:120px}.posts-expand .post-item:first-child{margin-top:0}.post-title-link{display:inline-block;position:relative;color:#555;border-bottom:none;line-height:1.2;vertical-align:top;font-size:26px;font-weight:400}.post-title-link::before{content:"";position:absolute;width:100%;height:2px;bottom:0;left:0;background-color:#000;visibility:hidden;transform:scaleX(0)}.post-title-link:hover::before{visibility:visible;transform:scaleX(1)}.posts-expand .post-meta{margin:3px 0 60px;color:#999;font-size:12px}.post-more-link a{color:#666;border:none;border-bottom:2px solid #666;transition-property:border}.post-more-link a:hover{border-bottom-color:#222}.pagination{border-top:1px solid #eee;margin:120px 0 0;text-align:left}.pagination .next,.pagination .page-number{display:inline-block;position:relative;top:-1px;margin:0 5px;padding:0 10px;line-height:30px;border-bottom:0;border-top:1px solid #eee;transition-property:border-color}.pagination .next:hover,.pagination .page-number:hover{border-top-color:#222}.pagination .page-number.current{color:#fff;background:#ccc;border-top-color:#ccc}.article-body{font-family:"Helvetica Neue","Luxi Sans","DejaVu Sans",Tahoma,"Hiragino Sans GB","Microsoft Yahei",sans-serif;overflow:hidden;line-height:1.5}.article-body ol,.article-body ul{padding-left:2em;margin-top:0;margin-bottom:16px}.article-body li{margin-top:.25em}.article-body h1,.article-body h2,.article-body h3,.article-body h4,.article-body h5,.article-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.article-body h1{padding-bottom:.3em;font-size:2em}.article-body h2{padding-bottom:.3em;font-size:1.5em}.article-body h3{font-size:1.25em}.article-body h4{font-size:1em}.article-body h5{font-size:.875em}.article-body h6{font-size:.85em}.article-body p{margin-top:0;margin-bottom:16px}.article-body blockquote{padding:0 1em;color:#777;border-left:.25em solid #ddd;margin-bottom:16px}.article-body blockquote p{margin:0}.article-body iframe{border:1px solid #ccc}.article-body table{width:100%;border:1px solid #dedede;margin:15px auto;border-collapse:collapse;empty-cells:show}.article-body thead{text-align:center}.article-body td,.article-body th{height:35px;border:1px solid #dedede;padding:0 10px}.article-body th{font-weight:700;text-align:center!important;background:rgba(158,188,226,.2)}.article-body tbody tr:nth-child(2n){background:rgba(158,188,226,.12)}.article-body tr:hover{background:#efefef}.article-body code{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(252,41,41,.12);border-radius:3px;color:#d23f31;font-family:mononoki,Consolas,"Liberation Mono",Menlo,Courier,monospace}.article-body pre>code{padding:.5em;color:#333;background-color:rgba(0,0,0,.04);background-image:url(../images/code-bg.png);background-size:20px 20px;border-radius:5px}.article-body kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}.post-header{text-align:center}.post-body img{box-sizing:border-box;margin:auto}.posts-expand .post-tags{margin-top:40px}.posts-expand .post-tags a{padding:1px 5px;background:#f5f5f5;border-bottom:none}.posts-expand .post-tags a:hover{background:#ccc}.posts-expand .post-nav{margin-top:40px;overflow:hidden;padding:10px;white-space:nowrap;border-top:1px solid #eee}.post-nav-item a:hover{color:#222;border-bottom:none}.post-nav-item a{position:relative;display:inline-block;line-height:25px;font-size:14px;color:#555;border-bottom:none;width:50%}#externalRelevantArticles h4{margin-bottom:0}#externalRelevantArticles ul{margin-top:5px}.article-body{text-align:justify}.article-body p{margin:0 0 25px}ul.comments{padding:0;list-style:none;margin-top:50px;position:relative}ul.comments li{padding:10px;white-space:normal;position:relative;border-bottom:#EBF2F6 1px solid}ul.comments li:hover{background-color:#F7F7F7}ul.comments .avatar-48{position:absolute;box-shadow:0 0 2px #ddd;height:48px;width:48px;margin:8px 10px 0 0;border-radius:24px}ul.comments .comment-body{margin:8px 0 0 60px;min-height:50px}ul.comments li.comment-body-ref{position:absolute;z-index:10;background-color:#EBF2F6;border:1px solid #d5dbde;width:80%;left:69px}.posts-collapse .collection-title::before,.posts-collapse .post-header::before{left:0;background:#bbb;border-radius:50%;content:" "}ul.comments .comment-meta{font-family:"Open Sans","Microsoft Yahei",Helvetica;color:#9eabb3;font-size:13px}ul.comments .comment-meta a{color:#9EABB3;text-decoration:none;border-bottom-width:0}ul.comments .post-meta a:hover{text-decoration:underline}ul.comments .comment-meta time{border-left:1px solid #d5dbde;margin-left:8px;padding-left:12px}#captcha,#captchaReply{height:27px;vertical-align:inherit}.tag-cloud{text-align:center}.tag-cloud ul.tag-cloud-tags{padding-left:0}#tags li{list-style:none;display:inline-block;margin:10px}#tags .tags1{font-size:12px;color:#CCC}#tags .tags2{font-size:16px;color:#999}#tags .tags3{font-size:21px;color:#6f6f6f}#tags .tags4{font-size:24px;color:#333}#tags .tags5{font-size:30px;color:#111}.posts-collapse .collection-title::before{position:absolute;top:50%;margin-left:-4px;margin-top:-4px;width:8px;height:8px}.posts-collapse .collection-title{position:relative;margin:60px 0}.posts-collapse .collection-title h2{margin-left:20px}.posts-collapse .collection-title small{color:#bbb}.posts-collapse .post-header::before{position:absolute;top:12px;width:6px;height:6px;margin-left:-4px;border:1px solid #fff;transition-property:background}.posts-collapse .post-header{position:relative;transition-property:border;border-bottom:1px dashed #ccc;text-align:left}.posts-collapse .post-header:hover{border-bottom-color:#666}.posts-collapse .post-header:hover::before{background:#222}.posts-collapse .post-time{position:absolute;font-size:12px;left:20px;top:8px}.posts-collapse .post-title{margin-left:70px;font-size:16px;font-weight:400;font-family:Lato,"PingFang SC","Microsoft YaHei",sans-serif;line-height:inherit;text-decoration:none;border-bottom:0;color:#666}.page-archive .archive-page-counter{position:relative;top:7px;left:20px;margin-bottom:50px;display:block}.page-archive .posts-collapse .archive-move-on{position:absolute;top:11px;left:0;margin-left:-6px;width:10px;height:10px;opacity:.5;background:#555;border:1px solid #fff;border-radius:50%}.page-archive .post-title{margin-left:20px}.page-archive .posts-collapse .post-header::before{top:8px}.page-archive .posts-collapse::after{top:20px;left:0;margin-left:-2px;width:4px;height:100%;background:#f5f5f5;z-index:-1;content:" ";position:absolute}@media (max-width:1000px){.sidebar,.sidebar-toggle{display:none}body{padding-right:0!important}}@media (max-width:700px){.page-archive .posts-collapse .archive-move-on{margin-left:5px}.posts-collapse{margin-left:10px}pre{word-wrap:break-word;word-break:break-all;white-space:normal}.page-archive .archive-page-counter{margin-right:10px}.site-nav-toggle{display:block;margin-top:16px}.back-to-top,.header-line,.logo-line-after,.logo-line-before,.menu,.site-search{display:none}.header{margin-bottom:50px;padding:5px 0}.header-line{position:relative;top:52px;height:1px;width:100%;background-color:#ddd}.btn-bar,.menu .menu-item{display:block}.wrapper{min-width:inherit}.btn-bar{width:22px;height:2px;background:#555;border-radius:1px}.btn-bar+.btn-bar{margin-top:4px}.menu{width:100%;margin:0 0 0 -20px;padding:0 5px;line-height:26px}.footer{text-align:center;font-size:12px;padding:10px 0}.footer .fn-right{float:none}}
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${dynamicLabel}"/>
<meta name="description" content="${metaDescription},${dynamicLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<#if 0 != recentComments?size>
<ul class="comments" id="comments">
<#list recentComments as comment>
<li class="fn-clear">
<img class="avatar-48" title="${comment.commentName}" src="${comment.commentThumbnailURL}">
<div class="comment-body">
<div class="fn-clear comment-meta">
<span class="fn-left">
<#if "http://" == comment.commentURL>
<span>${comment.commentName}</span>
<#else>
<a href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<time>${comment.commentDate?string("yyyy-MM-dd HH:mm")}</time>
</span>
<a class="fn-right" href="${servePath}${comment.commentSharpURL}">${viewLabel}»</a>
</div>
<div class="comment-content post-body article-body">
${comment.commentContent}
</div>
</div>
</li>
</#list>
</ul>
</#if>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
<script>
var $commentContents = $(".comments .comment-content");
for (var i = 0; i < $commentContents.length; i++) {
var str = $commentContents[i].innerHTML;
$commentContents[i].innerHTML = Util.replaceEmString(str);
}
</script>
</body>
</html>
<header class="header">
<div class="header-line"></div>
<div class="fn-clear wrapper">
<div class="logo-wrap">
<a href="${servePath}" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">${blogTitle}</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<div class="site-nav-toggle fn-right" onclick="$('.header-line').toggle();$('nav').children('.menu').slideToggle();">
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</div>
<nav>
<ul class="menu">
<#list pageNavigations as page>
<li class="menu-item">
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
${page.pageTitle}
</a>
</li>
</#list>
<li class="menu-item">
<a href="${servePath}/dynamic.html" rel="section">
${dynamicLabel}
</a>
</li>
<li class="menu-item">
<a href="${servePath}/tags.html" rel="section">
${allTagsLabel}
</a>
</li>
<li class="menu-item">
<a href="${servePath}/archives.html">
${archiveLabel}
</a>
</li>
<li class="menu-item">
<a rel="alternate" href="${servePath}/blog-articles-rss.do" rel="section">
RSS
</a>
</li>
</ul>
<div class="site-search">
<form target="_blank" action="http://zhannei.baidu.com/cse/site">
<input placeholder="${searchLabel}" id="search" type="text" name="q"/>
<input type="submit" value="" class="fn-none" />
<input type="hidden" name="cc" value="${serverHost}">
</form>
</div>
</nav>
</div>
</header>
\ No newline at end of file
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
var NexT={init:function(){$(".sidebar-toggle").click(function(){var i=$(".sidebar");$(this).hasClass("sidebar-active")?($(this).removeClass("sidebar-active"),$("body").animate({"padding-right":0}),i.animate({right:-320}),i.find("section").css("opacity",0)):($(this).addClass("sidebar-active"),$("body").animate({"padding-right":320}),i.animate({right:0},function(){i.find("section:first").animate({opacity:1})}))}),$(".site-nav-toggle").click(function(){$(".site-nav").slideToggle()}),$(document).ready(function(){setTimeout(function(){$(".logo-wrap").css("opacity",1),$(".logo-line-before i").animate({left:"0"},function(){$(".site-title").css("opacity",1).animate({top:0},function(){$(".menu").css("opacity",1).animate({"margin-top":"15px"}),$(".main").css("opacity",1).animate({top:"0"},function(){$(".b3-solo-list li").length>0&&$(window).width()>1e3&&$(".sidebar-toggle").click()})})}),$(".logo-line-after i").animate({right:"0"})},500)})},initArticle:function(){if($(".b3-solo-list li").length>0&&$(window).width()>1e3){$(".sidebar-toggle").addClass("has-toc");var i='<ul><li class="current" data-tab="toc">'+Label.tocLabel+'</li><li data-tab="site">'+Label.siteViewLabel+"</li></ul><section></section>";$(".sidebar").prepend(i);var t=$(".sidebar section:first").html($(".b3-solo-list")),a=$(".sidebar section:last");t.height($(window).height()-90),$(".sidebar > ul > li").click(function(){"toc"===$(this).data("tab")?a.animate({opacity:"0",top:"-50px"},300,function(){t.show().css("top","-50px"),t.animate({opacity:"1",top:"0"},300)}):t.animate({opacity:"0",top:"-50px"},300,function(){t.hide().css("top","-50px"),a.animate({opacity:"1",top:"0"},300)}),$(".sidebar > ul > li").removeClass("current"),$(this).addClass("current")})}}};NexT.init();
\ No newline at end of file
#
# Copyright (c) 2010-2017, b3log.org & hacpai.com
#
# 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: 1.1.1.2, Sep 6, 2016
# Author: Liyuan Li
#
tocLabel=\u6587\u7ae0\u76ee\u5f55
siteViewLabel=\u7ad9\u70b9\u6982\u89c8
viewsLabel=\u70ed\u5ea6
cmtLabel=\u6761\u8bc4\u8bba
postTimeLabel=\u53d1\u8868\u4e8e
readLabel=\u9605\u8bfb\u5168\u6587
fightLabel=\u7bc7\u65e5\u5fd7\u3002 \u7ee7\u7eed\u52aa\u529b\u3002
ohLabel=\u55ef
searchLabel=\u641c\u7d22
subscribeLabel=\u8ba2\u9605
dynamicLabel=\u52a8\u6001
adminConsoleLabel=\u540e\u53f0\u7ba1\u7406
adminIndexLabel=\u540e\u53f0\u9996\u9875
postArticleLabel=\u53d1\u5e03\u65e5\u5fd7
articleListLabel=\u65e5\u5fd7\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\u65e5\u5fd7
recentCommentsLabel=\u6700\u65b0\u8bc4\u8bba
postCommentsLabel=\u53d1\u8868\u8bc4\u8bba
mostCommentArticlesLabel=\u8bc4\u8bba\u6700\u591a\u7684\u65e5\u5fd7
mostViewCountArticlesLabel=\u8bbf\u95ee\u6700\u591a\u7684\u65e5\u5fd7
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=\u65e5\u5fd7\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\u65e5\u5fd7
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=\u65e5\u5fd7\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\u65e5\u5fd7\u663e\u793a\u6570\u76ee\uff1a
indexRecentCommentDisplayCnt1Label=\u6700\u65b0\u8bc4\u8bba\u663e\u793a\u6570\u76ee\uff1a
indexMostCommentArticleDisplayCnt1Label=\u8bc4\u8bba\u6700\u591a\u65e5\u5fd7\u663e\u793a\u6570\u76ee\uff1a
indexMostViewArticleDisplayCnt1Label=\u8bbf\u95ee\u6700\u591a\u6700\u591a\u65e5\u5fd7\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\u65e5\u5fd7\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
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\u65e5\u5fd7\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
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\u65e5\u5fd7\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=\u65e5\u5fd7
tagArticlesLabel=\u6807\u7b7e\u65e5\u5fd7\u5217\u8868
dateArticlesLabel=\u5b58\u6863\u65e5\u5fd7\u5217\u8868
authorArticlesLabel=\u4f5c\u8005\u65e5\u5fd7\u5217\u8868
indexArticleLabel=\u9996\u9875\u65e5\u5fd7\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
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\u65e5\u5fd7
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
duplicatedPermalinkLabel=\u94fe\u63a5\u91cd\u590d\uff01
invalidPermalinkFormatLabel=\u975e\u6cd5\u7684\u94fe\u63a5\u683c\u5f0f\uff01
duplicatedEmailLabel=\u90ae\u4ef6\u5730\u5740\u91cd\u590d\uff01
refreshAndRetryLabel=\u8bf7\u5237\u65b0\u91cd\u8bd5\uff01
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
<#macro comments commentList article>
<ul class="comments" id="comments">
<#list commentList as comment>
<li id="${comment.oId}" class="fn-clear">
<img class="avatar-48" title="${comment.commentName}" src="${comment.commentThumbnailURL}">
<div class="comment-body">
<div class="fn-clear comment-meta">
<span class="fn-left">
<#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}', 23);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
>${comment.commentOriginalCommentName}</a>
</#if>
<time>${comment.commentDate?string("yyyy-MM-dd HH:mm")}</time>
</span>
<#if article.commentable>
<a class="fn-right" href="javascript:replyTo('${comment.oId}')">${replyLabel}</a>
</#if>
</div>
<div class="comment-content post-body article-body">
${comment.commentContent}
</div>
</div>
</li>
</#list>
</ul>
<#if article.commentable>
<div class="comment-body fn-wrap">
<table id="commentForm" class="form">
<tbody>
<#if !isLoggedIn>
<tr>
<td>
<input placeholder="${commentNameLabel}" type="text" class="normalInput" id="commentName"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentEmailLabel}" type="email" class="normalInput" id="commentEmail"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentURLLabel}" type="url" id="commentURL"/>
</td>
</tr>
</#if>
<tr>
<td id="emotions">
<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>
<td>
<textarea rows="10" cols="96" id="comment"></textarea>
</td>
</tr>
<#if !isLoggedIn>
<tr>
<td>
<input style="width:50%" placeholder="${captchaLabel}" type="text" class="normalInput" id="commentValidate"/>
<img id="captcha" alt="validate" src="${servePath}/captcha.do" />
</td>
</tr>
</#if>
<tr>
<td colspan="2" align="right">
<span class="error-msg" id="commentErrorTip"></span>
<button id="submitCommentButton" onclick="page.submitComment();">${submmitCommentLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
</#if>
</#macro>
<#macro comment_script oId>
<script type="text/javascript" src="${staticServePath}/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}",
"loadingLabel": "${loadingLabel}",
"oId": "${oId}",
"skinDirName": "${skinDirName}",
"blogHost": "${blogHost}",
"randomArticles1Label": "${randomArticles1Label}",
"externalRelevantArticles1Label": "${externalRelevantArticles1Label}"
});
var addComment = function (result, state) {
var commentable = $("#commentForm").length === 0 ? false : true;
var commentHTML = '<li class="fn-clear" id="' + result.oId +
'"><img class="avatar-48" title="'
+ result.userName + '" src="' + result.commentThumbnailURL + '"><div class="comment-body">'
+ '<div class="fn-clear comment-meta"><span class="fn-left">' + result.replyNameHTML;
if (state !== "") {
var commentOriginalCommentName = $("#" + page.currentCommentId).find(".comment-meta a").first().text();
commentHTML += '&nbsp;@&nbsp;<a href="${servePath}' + result.commentSharpURL.split("#")[0] + '#' + page.currentCommentId + '"'
+ 'onmouseover="page.showComment(this, \'' + page.currentCommentId + '\', 23);"'
+ 'onmouseout="page.hideComment(\'' + page.currentCommentId + '\')">' + commentOriginalCommentName + '</a>';
}
commentHTML += '<time>' + result.commentDate
+ '</time></span>';
if (commentable) {
commentHTML += '<a class="fn-right" href="javascript:replyTo(\'' + result.oId + '\');">${replyLabel}</a>';
}
commentHTML += '</div><div class="comment-content">' +
Util.replaceEmString($("#comment" + state).val())
+ '</div></div></li>';
return commentHTML;
};
var replyTo = function (id) {
var commentFormHTML = "<table class='form comment-reply' id='replyForm'>";
page.addReplyForm(id, commentFormHTML);
};
(function () {
page.load();
NexT.initArticle();
// emotions
page.replaceCommentsEm("#comments .comment-content");
<#nested>
})();
</script>
</#macro>
\ No newline at end of file
<div class="sidebar-toggle">
<span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
</div>
<aside class="sidebar">
<section>
<img class="site-author-image" src="${adminUser.userAvatar}" title="${userName}"/>
<p class="site-author-name">${userName}</p>
<#if "" != noticeBoard>
<p class="site-description motion-element">${blogSubtitle}</p>
</#if>
<nav>
<div class="site-state-item">
<a href="${servePath}/archives.html">
<span class="site-state-item-count">${statistic.statisticPublishedBlogArticleCount}</span>
<span class="site-state-item-name">${articleLabel}</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<span class="site-state-item-count">${statistic.statisticBlogViewCount}</span>
<span class="site-state-item-name">${viewLabel}</span>
</div>
<div class="site-state-item site-state-tags">
<a href="${servePath}/dynamic.html">
<span class="site-state-item-count">${statistic.statisticPublishedBlogCommentCount}</span>
<span class="site-state-item-name">${commentLabel}</span>
</a>
</div>
</nav>
<div class="feed-link">
<a href="${servePath}/blog-articles-rss.do" rel="alternate">
<i class="icon-rss"></i>
RSS
</a>
</div>
<div class="links-of-author">
<#if isLoggedIn>
<span class="links-of-author-item">
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
<i class="icon-setting"></i> ${adminLabel}
</a>
</span>
<span class="links-of-author-item">
<a href="${logoutURL}">
<i class="icon-logout"></i> ${logoutLabel}
</a>
</span>
<#else>
<span class="links-of-author-item">
<a href="${loginURL}">
<i class="fa fa-github"></i> ${loginLabel}
</a>
</span>
<span class="links-of-author-item">
<a href="${servePath}/register">
<i class="icon-register"></i> ${registerLabel}
</a>
</span>
</#if>
</div>
<#if noticeBoard??>
<div class="links-of-author">
${noticeBoard}
</div>
</#if>
<#if 0 != links?size>
<div class="links-of-author">
<p class="site-author-name">Links</p>
<#list links as link>
<span class="links-of-author-item">
<a rel="friend" href="${link.linkAddress}"
title="${link.linkDescription}" target="_blank">
${link.linkTitle}
</a>
</span>
</#list>
</div>
</#if>
</section>
</aside>
\ No newline at end of file
<#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>
<#include "header.ftl">
<main class="main wrapper">
<div class="content posts-collapse">
<div class="collection-title">
<h2>
${tag.tagTitle}
<small>${tagLabel}</small>
</h2>
</div>
<#list articles as article>
<article>
<header class="post-header">
<h1>
<a class="post-title" href="${servePath}${article.articlePermalink}">
<span>${article.articleTitle}</span>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</a>
</h1>
<time class="post-time">
${article.articleCreateDate?string("MM-dd")}
</time>
</header>
</article>
</#list>
<#if 0 != paginationPageCount>
<nav class="pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="extend next"><<</a>
<a class="page-number" href="${servePath}${path}/1">1</a> ...
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> ...
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="extend next">>></a>
</#if>
</nav>
</#if>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
</body>
</html>
...@@ -30,6 +30,7 @@ import org.b3log.latke.repository.Query; ...@@ -30,6 +30,7 @@ import org.b3log.latke.repository.Query;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Option;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -41,7 +42,7 @@ import org.testng.annotations.Test; ...@@ -41,7 +42,7 @@ import org.testng.annotations.Test;
* {@link ArticleProcessor} test case. * {@link ArticleProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 8, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -79,7 +80,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -79,7 +80,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getRequestURI()).thenReturn("/articles/archives/" when(request.getRequestURI()).thenReturn("/articles/archives/"
+ DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM") + "/1"); + DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM") + "/1");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -112,7 +113,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -112,7 +113,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getRequestURI()).thenReturn("/get-article-content"); when(request.getRequestURI()).thenReturn("/get-article-content");
when(request.getParameter("id")).thenReturn(articleId); when(request.getParameter("id")).thenReturn(articleId);
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -141,7 +142,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -141,7 +142,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/articles/1"); when(request.getRequestURI()).thenReturn("/articles/1");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -173,7 +174,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -173,7 +174,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/articles/authors/" + userId + "/1"); when(request.getRequestURI()).thenReturn("/articles/authors/" + userId + "/1");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -202,7 +203,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -202,7 +203,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/get-random-articles.do"); when(request.getRequestURI()).thenReturn("/get-random-articles.do");
when(request.getMethod()).thenReturn("POST"); when(request.getMethod()).thenReturn("POST");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -234,7 +235,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -234,7 +235,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/article/id/" + articleId + "/relevant/articles"); when(request.getRequestURI()).thenReturn("/article/id/" + articleId + "/relevant/articles");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -263,7 +264,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -263,7 +264,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/articles/tags/Solo/1"); when(request.getRequestURI()).thenReturn("/articles/tags/Solo/1");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -293,7 +294,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -293,7 +294,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getRequestURI()).thenReturn("/archives/" when(request.getRequestURI()).thenReturn("/archives/"
+ DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM") + "/1"); + DateFormatUtils.format(System.currentTimeMillis(), "yyyy/MM") + "/1");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -324,7 +325,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -324,7 +325,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/pagepermalink"); when(request.getRequestURI()).thenReturn("/pagepermalink");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
when(request.getAttribute(Article.ARTICLE)).thenReturn(article); when(request.getAttribute(Article.ARTICLE)).thenReturn(article);
...@@ -361,7 +362,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -361,7 +362,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getRequestURI()).thenReturn("/console/article-pwd"); when(request.getRequestURI()).thenReturn("/console/article-pwd");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getParameter("articleId")).thenReturn(articleId); when(request.getParameter("articleId")).thenReturn(articleId);
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -393,7 +394,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase { ...@@ -393,7 +394,7 @@ public class ArticleProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/authors/" + userId + "/1"); when(request.getRequestURI()).thenReturn("/authors/" + userId + "/1");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
......
...@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils; ...@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -35,7 +36,7 @@ import org.testng.annotations.Test; ...@@ -35,7 +36,7 @@ import org.testng.annotations.Test;
* {@link ErrorProcessor} test case. * {@link ErrorProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 5, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -71,7 +72,7 @@ public class ErrorProcessorTestCase extends AbstractTestCase { ...@@ -71,7 +72,7 @@ public class ErrorProcessorTestCase extends AbstractTestCase {
final HttpServletRequest request = mock(HttpServletRequest.class); final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/error/403.html"); when(request.getRequestURI()).thenReturn("/error/403.html");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
......
...@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils; ...@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -35,7 +36,7 @@ import org.testng.annotations.Test; ...@@ -35,7 +36,7 @@ import org.testng.annotations.Test;
* {@link IndexProcessor} test case. * {@link IndexProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 2, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -72,7 +73,7 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -72,7 +73,7 @@ public class IndexProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn(""); when(request.getRequestURI()).thenReturn("");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -101,7 +102,7 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -101,7 +102,7 @@ public class IndexProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/kill-browser"); when(request.getRequestURI()).thenReturn("/kill-browser");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
...@@ -130,7 +131,7 @@ public class IndexProcessorTestCase extends AbstractTestCase { ...@@ -130,7 +131,7 @@ public class IndexProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/register"); when(request.getRequestURI()).thenReturn("/register");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
......
...@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.json.JSONObject; import org.json.JSONObject;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import org.testng.Assert; import org.testng.Assert;
...@@ -34,7 +35,7 @@ import org.testng.annotations.Test; ...@@ -34,7 +35,7 @@ import org.testng.annotations.Test;
* {@link IndexProcessor} test case. * {@link IndexProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.1, Nov 5, 2016 * @version 1.0.1.1, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -50,7 +51,7 @@ public class InitProcessorTestCase extends AbstractTestCase { ...@@ -50,7 +51,7 @@ public class InitProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/init"); when(request.getRequestURI()).thenReturn("/init");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
......
...@@ -26,6 +26,7 @@ import org.apache.commons.lang.StringUtils; ...@@ -26,6 +26,7 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -37,7 +38,7 @@ import org.testng.annotations.Test; ...@@ -37,7 +38,7 @@ import org.testng.annotations.Test;
* {@link LoginProcessor} test case. * {@link LoginProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 5, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -73,7 +74,7 @@ public class LoginProcessorTestCase extends AbstractTestCase { ...@@ -73,7 +74,7 @@ public class LoginProcessorTestCase extends AbstractTestCase {
final HttpServletRequest request = mock(HttpServletRequest.class); final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/login"); when(request.getRequestURI()).thenReturn("/login");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
...@@ -136,7 +137,7 @@ public class LoginProcessorTestCase extends AbstractTestCase { ...@@ -136,7 +137,7 @@ public class LoginProcessorTestCase extends AbstractTestCase {
final HttpServletRequest request = mock(HttpServletRequest.class); final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/logout"); when(request.getRequestURI()).thenReturn("/logout");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
...@@ -164,7 +165,7 @@ public class LoginProcessorTestCase extends AbstractTestCase { ...@@ -164,7 +165,7 @@ public class LoginProcessorTestCase extends AbstractTestCase {
final HttpServletRequest request = mock(HttpServletRequest.class); final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/forgot"); when(request.getRequestURI()).thenReturn("/forgot");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
......
...@@ -28,6 +28,7 @@ import org.b3log.latke.model.User; ...@@ -28,6 +28,7 @@ import org.b3log.latke.model.User;
import org.b3log.latke.service.ServiceException; import org.b3log.latke.service.ServiceException;
import org.b3log.latke.servlet.HTTPRequestContext; import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
import org.b3log.solo.repository.PageRepository; import org.b3log.solo.repository.PageRepository;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
...@@ -42,7 +43,7 @@ import org.testng.annotations.Test; ...@@ -42,7 +43,7 @@ import org.testng.annotations.Test;
* {@link PageProcessor} test case. * {@link PageProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 5, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -81,7 +82,7 @@ public class PageProcessorTestCase extends AbstractTestCase { ...@@ -81,7 +82,7 @@ public class PageProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/pagepermalink"); when(request.getRequestURI()).thenReturn("/pagepermalink");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
when(request.getAttribute(Page.PAGE)).thenReturn(page); when(request.getAttribute(Page.PAGE)).thenReturn(page);
......
...@@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletResponse;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import org.b3log.solo.service.StatisticMgmtService; import org.b3log.solo.service.StatisticMgmtService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
...@@ -35,7 +36,7 @@ import org.testng.annotations.Test; ...@@ -35,7 +36,7 @@ import org.testng.annotations.Test;
* {@link StatProcessor} test case. * {@link StatProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 5, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -72,7 +73,7 @@ public class StatProcessorTestCase extends AbstractTestCase { ...@@ -72,7 +73,7 @@ public class StatProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/console/stat/onlineVisitorRefresh"); when(request.getRequestURI()).thenReturn("/console/stat/onlineVisitorRefresh");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
......
...@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils; ...@@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys; import org.b3log.latke.Keys;
import org.b3log.latke.model.User; import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase; import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Option;
import org.b3log.solo.service.InitService; import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService; import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -35,7 +36,7 @@ import org.testng.annotations.Test; ...@@ -35,7 +36,7 @@ import org.testng.annotations.Test;
* {@link TagProcessor} test case. * {@link TagProcessor} test case.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 8, 2016 * @version 1.0.1.0, Feb 18, 2017
* @since 1.7.0 * @since 1.7.0
*/ */
@Test(suiteName = "processor") @Test(suiteName = "processor")
...@@ -72,7 +73,7 @@ public class TagProcessorTestCase extends AbstractTestCase { ...@@ -72,7 +73,7 @@ public class TagProcessorTestCase extends AbstractTestCase {
when(request.getServletContext()).thenReturn(mock(ServletContext.class)); when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/tags/Solo"); when(request.getRequestURI()).thenReturn("/tags/Solo");
when(request.getMethod()).thenReturn("GET"); when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next"); when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn(Option.DefaultPreference.DEFAULT_SKIN_DIR_NAME);
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis()); when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet(); final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
......
...@@ -9,24 +9,26 @@ ...@@ -9,24 +9,26 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content page-archive"> <div class="main-wrap">
<section class="posts-collapse"> <main>
<span class="archive-move-on"></span> <div class="title">
<span class="archive-page-counter"> <h2 style="border-bottom:0">
${ohLabel}..! <i class="icon-inbox"></i>
&nbsp;
<#if "en" == localeString?substring(0, 2)> <#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} ${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear}
<#else> <#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} ${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if> </#if>
${sumLabel} ${archiveDate.archiveDatePublishedArticleCount} ${fightLabel} - ${archiveDate.archiveDatePublishedArticleCount} ${articleLabel}
</span> </h2>
</section>
<#include "article-list.ftl">
</div> </div>
<#include "side.ftl"> <#include "article-list.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
</body> </body>
</html> </html>
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="other">
<span class="title">
<h2><i class="icon-inbox"></i>
&nbsp;${statistic.statisticPublishedBlogArticleCount} ${articleLabel}</h2>
</span>
<#if 0 != archiveDates?size>
<ul class="list">
<#list archiveDates as archiveDate>
<li>
<#if "en" == localeString?substring(0, 2)>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})
</a>
<#else>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})
</a>
</#if>
</li>
</#list>
</ul>
</#if>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
</body>
</html>
<div>
<#list articles as article>
<article class="post">
<header>
<h1>
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="meta">
<span class="tooltipped tooltipped-n" aria-label="${createDateLabel}">
<i class="icon-date"></i>
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${commentCountLabel}">
<i class="icon-comments"></i>
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${commentLabel}</a>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${viewCountLabel}">
<i class="icon-views"></i>
${article.articleViewCount} ${viewLabel}
</span>
</div>
</header>
<div class="content-reset">
${article.articleAbstract}
</div>
<footer class="fn-clear tags">
<#list article.articleTags?split(",") as articleTag>
<a class="tag" rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
<a href="${servePath}${article.articlePermalink}#more" rel="contents" class="fn-right">
${readLabel} &raquo;
</a>
</footer>
</article>
</#list>
<#if 0 != paginationPageCount>
<div class="fn-clear">
<nav class="pagination fn-right">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="page-number">&laquo;</a>
<a class="page-number" href="${servePath}${path}/1">1</a> <span class="page-number">...</span>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> <span class="page-number">...</span>
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="page-number">&raquo;</a>
</#if>
</nav>
</div>
</#if>
</div>
\ No newline at end of file
<#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>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main>
<article class="post">
<header>
<h1>
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="meta">
<span class="tooltipped tooltipped-n" aria-label="${createDateLabel}">
<i class="icon-date"></i>
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${commentCountLabel}">
<i class="icon-comments"></i>
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${commentLabel}</a>
</span>
&nbsp; | &nbsp;
<span class="tooltipped tooltipped-n" aria-label="${viewCountLabel}">
<i class="icon-views"></i>
${article.articleViewCount} ${viewLabel}
</span>
</div>
</header>
<div class="content-reset">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</div>
<footer class="tags">
<#list article.articleTags?split(",") as articleTag>
<a class="tag" rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
<#-- div class="copyright">
${articleCP1Label}
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a> -
<a href="${servePath}">
${blogTitle}
</a>
</div -->
<div class="rel fn-clear">
<#if previousArticlePermalink??>
<a href="${servePath}${previousArticlePermalink}" rel="prev"
class="fn-left tooltipped tooltipped-n"
aria-label="${previousArticleTitle}">
${previousArticleLabel}
</a>
</#if>
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" rel="next"
class="fn-right tooltipped tooltipped-n"
aria-label="${nextArticleTitle}">
${nextArticleLabel}
</a>
</#if>
</div>
</footer>
<div id="externalRelevantArticles" class="list"></div>
<@comments commentList=articleComments article=article></@comments>
</article>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>"
, "<header class='title'><h2>${externalRelevantArticlesLabel}</h2></header>");
</#if>
</@comment_script>
</body>
</html>
<li id="${comment.oId}">
<div>
<div class="avatar tooltipped tooltipped-n" aria-label="${comment.commentName}"
style="background-image: url(${comment.commentThumbnailURL})"></div>
<main>
<div class="fn-clear">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a class="user-name" href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<#if comment.isReply>
@<a class="user-name" href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 23);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
>${comment.commentOriginalCommentName}</a>
</#if>
<time class="ft-gray">${comment.commentDate2?string("yyyy-MM-dd HH:mm")}</time>
<#if article.commentable>
<a class="reply-btn" href="javascript:replyTo('${comment.oId}')">${replyLabel}</a>
</#if>
</div>
<div class="content-reset">
${comment.commentContent}
</div>
</main>
</div>
</li>
\ No newline at end of file
/**
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
/*
* skin style
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.1.0.0, Feb 16, 2017
*/
/* start common */
html {
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%
}
body {
margin: 0;
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
font-size: 14px;
color: #333
}
::-moz-selection {
text-shadow: none;
background: rgba(65, 131, 196, 0.4)
}
::selection {
text-shadow: none;
background: rgba(66, 133, 244, 0.4)
}
ul,
ol {
margin: 0;
padding: 0
}
h1,
h2,
h3,
h4,
h5,
h6,
dl,
dd,
p {
margin: 0
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section {
display: block
}
audio,
canvas,
video {
display: inline-block
}
audio:not([controls]) {
display: none
}
a {
outline: 0;
text-decoration: none;
color: #383838;
}
a:hover {
color: #ff4d3a;
text-decoration: underline;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline
}
sup {
top: -0.5em
}
sub {
bottom: -0.25em
}
img {
max-width: 100%;
vertical-align: middle;
border: 0;
height: auto;
-ms-interpolation-mode: bicubic
}
button,
input,
select,
textarea {
margin: 0;
font-size: 100%;
vertical-align: middle;
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
outline: none
}
button,
input {
line-height: normal
}
button::-moz-focus-inner,
input::-moz-focus-inner {
padding: 0;
border: 0
}
button,
input[type="button"],
input[type="reset"],
input[type="submit"] {
cursor: pointer;
-webkit-appearance: button
}
input[type="search"] {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
-webkit-appearance: textfield
}
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none
}
textarea {
overflow: auto;
resize: vertical
}
svg {
vertical-align: text-top;
fill: currentColor
}
blockquote {
margin: 0
}
.content-reset {
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
word-wrap: break-word;
overflow: auto;
line-height: 1.5;
font-size: 16px;
word-break: break-all
}
.content-reset a {
color: #ff4d3a;
}
.content-reset ul,
.content-reset ol {
padding-left: 2em;
margin-top: 0;
margin-bottom: 16px
}
.content-reset li {
margin-top: 0.25em
}
.content-reset h1,
.content-reset h2,
.content-reset h3,
.content-reset h4,
.content-reset h5,
.content-reset h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25
}
.content-reset h1 {
padding-bottom: 0.3em;
font-size: 2em;
border-bottom: 1px solid #eee
}
.content-reset h2 {
padding-bottom: 0.3em;
font-size: 1.5em;
border-bottom: 1px solid #eee
}
.content-reset h3 {
font-size: 1.25em
}
.content-reset h4 {
font-size: 1em
}
.content-reset h5 {
font-size: 0.875em
}
.content-reset h6 {
font-size: 0.85em
}
.content-reset hr {
height: 0.25em;
padding: 0;
margin: 24px 0;
background-color: #e7e7e7;
border: 0
}
.content-reset p {
margin-top: 0;
margin-bottom: 16px
}
.content-reset blockquote {
padding: 0 1em;
color: #777;
border-left: 0.25em solid #ddd;
margin-bottom: 16px
}
.content-reset blockquote p {
margin: 0
}
.content-reset iframe {
border: 1px solid #ccc
}
.content-reset table {
width: 100%;
border: 1px solid #dedede;
margin: 15px auto;
border-collapse: collapse;
empty-cells: show
}
.content-reset thead {
text-align: center
}
.content-reset td,
.content-reset th {
height: 35px;
border: 1px solid #dedede;
padding: 0 10px
}
.content-reset th {
font-weight: bold;
text-align: center !important;
background: rgba(158, 188, 226, 0.2)
}
.content-reset tbody tr:nth-child(2n) {
background: rgba(158, 188, 226, 0.12)
}
.content-reset tr:hover {
background: #efefef
}
.content-reset code {
padding: 0.2em 0.4em;
margin: 0;
font-size: 85%;
background-color: rgba(252, 41, 41, 0.12);
border-radius: 3px;
color: #d23f31;
font-family: mononoki, Consolas, "Liberation Mono", Menlo, Courier, monospace
}
.content-reset pre>code {
padding: 0.5em;
border-radius: 0;
color: #333;
background-color: rgba(0, 0, 0, 0.04);
background-image: url(../images/code-bg.png);
background-size: 20px 20px;
border-radius: 5px
}
.content-reset kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb
}
.fn-pointer {
cursor: pointer
}
.fn-inline {
display: inline;
}
.fn-clear:before,
.fn-clear:after {
display: table;
content: ""
}
.fn-clear:after {
clear: both
}
.fn-left {
float: left
}
.fn-right {
float: right
}
.fn-none {
display: none
}
.fn-hidden {
visibility: hidden
}
.fn-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-wrap: normal
}
.tooltipped {
position: relative;
cursor: pointer;
}
.tooltipped::after {
position: absolute;
z-index: 1000000;
display: none;
padding: 5px 8px;
font-size: 11px;
font-weight: normal;
-webkit-font-smoothing: subpixel-antialiased;
color: #fff;
text-align: center;
text-decoration: none;
text-shadow: none;
text-transform: none;
letter-spacing: normal;
word-wrap: break-word;
white-space: pre;
pointer-events: none;
content: attr(aria-label);
background: rgba(0,0,0,0.8);
border-radius: 3px;
line-height: 16px;
opacity: 0
}
.tooltipped::before {
position: absolute;
z-index: 1000001;
display: none;
width: 0;
height: 0;
color: rgba(0,0,0,0.8);
pointer-events: none;
content: "";
border: 5px solid transparent;
opacity: 0
}
@-webkit-keyframes tooltip-appear {
from {
opacity: 0
}
to {
opacity: 1
}
}
@keyframes tooltip-appear {
from {
opacity: 0
}
to {
opacity: 1
}
}
.tooltipped-hover::before,
.tooltipped-hover::after,
.tooltipped:hover::before,
.tooltipped:hover::after,
.tooltipped:active::before,
.tooltipped:active::after,
.tooltipped:focus::before,
.tooltipped:focus::after {
display: inline-block;
text-decoration: none;
-webkit-animation-name: tooltip-appear;
animation-name: tooltip-appear;
-webkit-animation-duration: 0.1s;
animation-duration: 0.1s;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in;
animation-timing-function: ease-in;
-webkit-animation-delay: 0.4s;
animation-delay: 0.4s
}
.tooltipped-s::after,.tooltipped-se::after,.tooltipped-sw::after {
top: 100%;
right: 50%;
margin-top: 5px
}
.tooltipped-s::before,.tooltipped-se::before,.tooltipped-sw::before {
top: auto;
right: 50%;
bottom: -5px;
margin-right: -5px;
border-bottom-color: rgba(0,0,0,0.8)
}
.tooltipped-se::after {
right: auto;
left: 50%;
margin-left: -15px
}
.tooltipped-sw::after {
margin-right: -15px
}
.tooltipped-n::after,.tooltipped-ne::after,.tooltipped-nw::after {
right: 50%;
bottom: 100%;
margin-bottom: 5px
}
.tooltipped-n::before,.tooltipped-ne::before,.tooltipped-nw::before {
top: -5px;
right: 50%;
bottom: auto;
margin-right: -5px;
border-top-color: rgba(0,0,0,0.8)
}
.tooltipped-ne::after {
right: auto;
left: 50%;
margin-left: -15px
}
.tooltipped-nw::after {
margin-right: -15px
}
.tooltipped-s::after,.tooltipped-n::after {
-webkit-transform: translateX(50%);
transform: translateX(50%)
}
.tooltipped-w::after {
right: 100%;
bottom: 50%;
margin-right: 5px;
-webkit-transform: translateY(50%);
transform: translateY(50%);
}
.tooltipped-w::before {
top: 50%;
bottom: 50%;
left: -5px;
margin-top: -5px;
border-left-color: rgba(0,0,0,0.8);
}
.tooltipped-e::after {
bottom: 50%;
left: 100%;
margin-left: 5px;
-webkit-transform: translateY(50%);
transform: translateY(50%)
}
.tooltipped-e::before {
top: 50%;
right: -5px;
bottom: 50%;
margin-top: -5px;
border-right-color: rgba(0,0,0,0.8)
}
a[class^="icon-"],
a[class*=" icon-"] {
color: #333
}
a[class^="icon-"]:hover,
a[class*=" icon-"]:hover {
text-decoration: none;
color: #4285f4
}
@font-face {
font-family: 'icomoon';
src: url("fonts/icomoon.eot?68j667");
src: url("fonts/icomoon.eot?68j667#iefix") format("embedded-opentype"), url("fonts/icomoon.ttf?68j667") format("truetype"), url("fonts/icomoon.woff?68j667") format("woff"), url("fonts/icomoon.svg?68j667#icomoon") format("svg");
font-weight: normal;
font-style: normal
}
[class^="icon-"],
[class*=" icon-"] {
font-family: 'icomoon' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale
}
.em00, .em01, .em02, .em03, .em04, .em05, .em06, .em07, .em08, .em09,
.em10, .em11, .em12, .em13, .em14 {
cursor: pointer;
background-image: url("../images/emotions/emotions-ease.png");
float: left;
height: 24px;
margin-right: 5px;
width: 24px;
transition: all .2s ease-out;
-webkit-transition: all .2s ease-out;
-moz-transition: all .2s ease-out;
}
.emotions span:hover {
transform: scale(1.2) rotate(360deg);
-webkit-transform: scale(1.2) rotate(360deg);
-moz-transform: scale(1.2) rotate(360deg);
}
.em01 {
background-position: -24px 0;
}
.em02 {
background-position: -48px 0;
}
.em03 {
background-position: -72px 0;
}
.em04 {
background-position: -96px 0;
}
.em05 {
background-position: 0px -24px;
}
.em06 {
background-position: -24px -24px;
}
.em07 {
background-position: -48px -24px;
}
.em08 {
background-position: -72px -24px;
}
.em09 {
background-position: -96px -24px;
}
.em10 {
background-position: 0 -48px;
}
.em11 {
background-position: -24px -48px ;
}
.em12 {
background-position: -48px -48px;
}
.em13 {
background-position: -72px -48px;
}
.em14 {
background-position: -96px -48px;
}
#commentForm,
#replyForm {
width: 100%;
}
.comments {
position: relative;
}
.comment-body-ref {
position: absolute;
width: 80%;
background-color: #fff;
right: 0;
border: 1px solid #eee;
}
/* end common */
/* start reset common */
.icon-list:before {
content: "\f0ca";
}
.icon-home:before {
content: "\f015";
}
.icon-comments:before {
content: "\f0e6";
}
.icon-date:before {
content: "\f073";
}
.icon-search:before {
content: "\f002";
}
.icon-up:before {
content: "\f077";
}
.icon-inbox:before {
content: "\f01c";
}
.icon-tags:before {
content: "\f02c";
}
.icon-link:before {
content: "\f0c1";
}
.icon-refresh:before {
content: "\f021";
}
.icon-logout:before {
content: "\ea14";
}
.icon-views:before {
content: "\e900";
}
.icon-register:before {
content: "\e973";
}
.icon-setting:before {
content: "\e994";
}
.icon-login:before {
content: "\ea13";
}
.icon-rss:before {
content: "\e901";
}
*::selection {
background: none repeat scroll 0% 0% #3D4450;
color: #FFF;
outline: none;
}
a {
transition: all .3s;
outline: none;
}
.pagination {
margin-bottom: 30px;
line-height: 30px;
font-family: Georgia;
}
.pagination .page-number:first-child {
border-left: 1px solid #ddd;
}
.pagination .page-number {
display: inline-block;
padding: 0 10px;
border: 1px solid #ddd;
border-left:0;
text-decoration: none;
float: left;
}
.pagination a.page-number:hover {
color: #ff4d3a;
background-color: #eee;
}
.pagination .page-number.current {
color: #fff;
background: #ff4d3a;
border-color: #ff4d3a;
margin-left: -1px;
}
.module {
box-shadow: .0 1px 1px rgba(0,0,0,0.05);
margin-bottom: 20px;
}
.module header h2 {
border-bottom: 1px solid #ff4d3a;
padding: 10px;
line-height: 18px;
font-size: 16px;
font-weight: 400;
}
.module main {
padding: 20px;
}
.ft-warn {
color: #ff4d3a;
}
.ft-gray {
color: #aaa;
}
.list,
.module main.list {
padding: 0;
}
.list li {
list-style: none;
border-bottom: 1px solid #eee;
line-height: 40px;
padding: 0 20px;
}
.list li:last-child {
border-bottom: 0;
}
.list a {
color: #666;
text-decoration: none;
display: block;
}
.list a:hover {
color: #ff4d3a;
}
.form input,
.form textarea {
border: 1px solid #ccc;
background-color: #FAFAFA;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
padding: 0 10px;
width: 100%;
line-height: 28px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box
}
.form input:focus,
.form textarea:focus {
background-color: #FFF;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset, 0 0 5px rgba(81, 167, 232, 0.5);
border: 1px solid #51A7E8
}
.form button {
background-color: #EB5750;
border: 0;
color: #fff;
}
.form button:hover {
background-color: #e42f19;
}
/* end reset common */
/* start framework */
.wrapper {
width: 90%;
margin: 0 auto;
min-width: 720px;
max-width: 1300px;
}
aside {
width: 28%;
min-width: 236px;
}
.main-wrap {
display: flex;
}
.main-wrap > main {
margin-right: 30px;
flex: 1;
min-width: 1px;
}
/* end framework */
/* start header */
.banner {
background-color: #393939;
height: 75px;
}
.banner h1 a {
color: #fff;
line-height: 75px;
text-decoration: none;
}
.banner small {
color: #DFDFDF;
font-size: 15px;
}
.banner .fn-right a {
line-height: 75px;
color: #DFDFDF;
text-decoration: none;
margin-left: 10px;
opacity: 0.6;
}
.banner .fn-right a:hover {
opacity: 1;
}
.navbar {
border-bottom: 1px solid #eee;
height: 50px;
margin-bottom: 30px;
}
.navbar.pin {
position: fixed;
width: 100%;
background-color: rgba(255, 255, 255, 0.95);
top: 0;
z-index: 10;
}
.navbar nav a {
color: #555;
text-decoration: none;
line-height: 50px;
padding: 0 10px;
display: inline-block;
}
.navbar nav a:hover {
color: #333;
}
.navbar nav a.current {
background-color: #eee;
}
.navbar form {
position: relative;
margin-top: 8px;
}
.navbar .form input {
padding-right: 40px;
}
.navbar button {
background-color: #EB5750;
border: 0;
color: #fff;
position: absolute;
top: 0;
right: 0;
height: 30px;
width: 30px;
}
.navbar button:hover {
background-color: #e42f19;
}
/* end header */
/* start footer */
.footer {
padding: 30px 0;
text-align: center;
background: #111;
margin-top: 30px;
color: #fff;
}
.footer a {
color: #ff4d3a;
text-decoration: none;
}
.icon-up {
position: fixed;
bottom: 122px;
right: 20px;
color: #fff;
background-color: #111;
height: 30px;
width: 30px;
text-align: center;
line-height: 28px;
border-radius: 15px;
transition: all .3s;
cursor: pointer;
display: none;
}
.icon-up:hover {
background-color: #ff4d3a;
}
/* end footer */
/* start side */
aside .ad {
background-color: #3cbc8d;
border-color: #36a96b;
color: #fff;
padding: 20px;
margin-bottom: 20px;
border: 1px solid transparent;
box-sizing: border-box;
}
aside .meta main {
text-align: right;
line-height: 20px;
}
aside .meta img {
float: left;
height: 80px;
width: 80px;
border-radius: 5px;
}
aside .tag.tooltipped {
display: inline-block;
padding: 2px 5px;
margin-bottom: 10px;
border: 1px solid #e1e1e1;
text-decoration: none;
margin-right: 10px;
line-height: 22px;
}
/* end side */
/* start article list */
.post {
border: 1px solid #ededed;
margin-bottom: 20px;
padding: 20px;
box-sizing: border-box;
}
.post h1 {
margin-bottom: 10px;
}
.post h1 a {
font-size: 30px;
font-weight: 500;
text-decoration: none;
}
.post sup {
color: #aaa;
font-weight: 300;
}
.post .meta {
color: #aaa;
margin-bottom: 10px;
}
.post .meta a {
color: #aaa;
text-decoration: none;
}
.post .meta a:hover {
color: #ff4d3a;
}
.tags > a.tag {
color: #fff;
font-size: 12px;
display: inline-block;
background-color: #bbb;
margin-right: 10px;
padding: 0 5px;
line-height: 22px;
text-decoration: none;
margin-top: 10px;
}
.tags > a.tag:before {
content: "#";
}
.tags > a.tag:hover {
background: #999;
}
.post footer .copyright {
padding: 10px;
font-size: 14px;
line-height: 16px;
border: 1px solid #ff4d3a;
border-left-width: 20px;
margin: 20px 0;
}
.post .rel a {
display: inline-block;
padding: 5px 14px;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 15px;
text-decoration: none;
margin: 20px 0;
}
.post .rel a:hover {
background-color: #eee;
}
.title h2 {
font-size: 16px;
font-weight: bold;
padding-bottom: 10px;
border-bottom: 1px solid #f1f1f1;
margin-top: 20px;
}
/* end article list */
/* start comments */
.comments > li {
list-style: none;
border-bottom: 1px solid #f1f1f1;
padding: 10px;
}
.comments > li > div {
display: flex;
}
.comments .avatar {
width: 50px;
height: 50px;
border-radius: 100%;
margin-right: 20px;
background-size: contain;
}
.comments main {
flex: 1;
min-width: 1px;
}
.comments .content-reset {
margin-top: 10px;
}
.comments .user-name {
color: #666;
text-decoration: none;
}
.comments .user-name:hover {
color: #ff4d3a;
}
.comments .reply-btn {
float: right;
background-color: #ff4d3a;
color: #fff;
text-decoration: none;
font-size: 12px;
padding: 2px 5px;
}
.comments .reply-btn:hover {
background-color: #e42f19;
}
#commentForm {
margin-top: 20px;
}
.form .captcha {
height: 28px;
}
/* end comments */
/* start other */
.other {
border: 1px solid #ededed;
margin-bottom: 20px;
padding: 0 20px 20px;
}
/* end other */
/* start responsive */
@media (max-width: 900px) {
.navbar .form {
display: none;
}
}
@media (max-width: 700px) {
.wrapper {
width: 100%;
min-width: auto;
padding: 0 10px;
box-sizing: border-box;
}
.main-wrap > main {
margin-right: 0;
}
.main-wrap,
.responsive {
display: block;
}
aside {
width: 100%;
box-sizing: border-box;
}
.banner {
margin-bottom: 20px;
}
.banner small,
.banner .fn-right,
.navbar {
display: none;
}
.icon-list {
position: absolute;
right: 10px;
top: 20px;
background-color: #fff;
font-size: 20px;
padding: 8px 6px;
cursor: pointer;
}
.responsive .list {
background-color: #fff;
position: absolute;
width: 100%;
border: 1px solid #eee;
left: 0;
display: none;
z-index: 10;
top: 75px;
}
.responsive .list li.current {
background-color: #eee;
}
}
/* end responsive */
\ No newline at end of file
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="views" d="M512 768c-282.784 0-512-320-512-320s229.216-320 512-320 512 320 512 320-229.216 320-512 320zM512 256c-106.016 0-192 85.984-192 192s85.984 192 192 192 192-85.984 192-192-85.984-192-192-192zM512 576c-70.688 0-128-57.312-128-128s57.312-128 128-128 128 57.312 128 128-57.312 128-128 128z" />
<glyph unicode="&#xe901;" glyph-name="rss" d="M136.294 209.070c-75.196 0-136.292-61.334-136.292-136.076 0-75.154 61.1-135.802 136.292-135.802 75.466 0 136.494 60.648 136.494 135.802-0.002 74.742-61.024 136.076-136.494 136.076zM0.156 612.070v-196.258c127.784 0 247.958-49.972 338.458-140.512 90.384-90.318 140.282-211.036 140.282-339.3h197.122c-0.002 372.82-303.282 676.070-675.862 676.070zM0.388 960v-196.356c455.782 0 826.756-371.334 826.756-827.644h196.856c0 564.47-459.254 1024-1023.612 1024z" />
<glyph unicode="&#xe973;" glyph-name="register" d="M384 224c0 151.234 95.874 280.486 230.032 330.2 16.28 36.538 25.968 77.164 25.968 117.8 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h397.306c-8.664 30.53-13.306 62.732-13.306 96zM736 512c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.056 0 288 128.942 288 288s-128.942 288-288 288zM896 192h-128v-128h-64v128h-128v64h128v128h64v-128h128v-64z" />
<glyph unicode="&#xe994;" glyph-name="setting" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
<glyph unicode="&#xea13;" glyph-name="login" d="M384 448h-320v128h320v128l192-192-192-192zM1024 960v-832l-384-192v192h-384v256h64v-192h320v576l256 128h-576v-256h-64v320z" />
<glyph unicode="&#xea14;" glyph-name="logout" d="M768 320v128h-320v128h320v128l192-192zM704 384v-256h-320v-192l-384 192v832h704v-320h-64v256h-512l256-128v-576h256v192z" />
<glyph unicode="&#xf002;" glyph-name="search" horiz-adv-x="951" d="M658.286 475.428c0 141.143-114.857 256-256 256s-256-114.857-256-256 114.857-256 256-256 256 114.857 256 256zM950.857 0c0-40-33.143-73.143-73.143-73.143-19.429 0-38.286 8-51.429 21.714l-196 195.429c-66.857-46.286-146.857-70.857-228-70.857-222.286 0-402.286 180-402.286 402.286s180 402.286 402.286 402.286 402.286-180 402.286-402.286c0-81.143-24.571-161.143-70.857-228l196-196c13.143-13.143 21.143-32 21.143-51.429z" />
<glyph unicode="&#xf015;" glyph-name="home" horiz-adv-x="951" d="M804.571 384v-274.286c0-20-16.571-36.571-36.571-36.571h-219.429v219.429h-146.286v-219.429h-219.429c-20 0-36.571 16.571-36.571 36.571v274.286c0 1.143 0.571 2.286 0.571 3.429l328.571 270.857 328.571-270.857c0.571-1.143 0.571-2.286 0.571-3.429zM932 423.428l-35.429-42.286c-2.857-3.429-7.429-5.714-12-6.286h-1.714c-4.571 0-8.571 1.143-12 4l-395.429 329.714-395.429-329.714c-4-2.857-8.571-4.571-13.714-4-4.571 0.571-9.143 2.857-12 6.286l-35.429 42.286c-6.286 7.429-5.143 19.429 2.286 25.714l410.857 342.286c24 20 62.857 20 86.857 0l139.429-116.571v111.429c0 10.286 8 18.286 18.286 18.286h109.714c10.286 0 18.286-8 18.286-18.286v-233.143l125.143-104c7.429-6.286 8.571-18.286 2.286-25.714z" />
<glyph unicode="&#xf01c;" glyph-name="inbox" horiz-adv-x="878" d="M584.571 402.286h180.571c-1.143 2.857-1.714 6.286-2.857 9.143l-121.143 283.429h-404.571l-121.143-283.429c-1.143-2.857-1.714-6.286-2.857-9.143h180.571l54.286-109.714h182.857zM877.714 385.143v-275.429c0-20-16.571-36.571-36.571-36.571h-804.571c-20 0-36.571 16.571-36.571 36.571v275.429c0 20.571 6.286 50.857 14.286 70.286l136 315.429c8 18.857 30.857 33.714 50.857 33.714h475.429c20 0 42.857-14.857 50.857-33.714l136-315.429c8-19.429 14.286-49.714 14.286-70.286z" />
<glyph unicode="&#xf021;" glyph-name="refresh" horiz-adv-x="878" d="M863.429 347.428c0-1.143 0-2.857-0.571-4-48.571-202.286-215.429-343.429-426.286-343.429-111.429 0-219.429 44-300.571 121.143l-73.714-73.714c-6.857-6.857-16-10.857-25.714-10.857-20 0-36.571 16.571-36.571 36.571v256c0 20 16.571 36.571 36.571 36.571h256c20 0 36.571-16.571 36.571-36.571 0-9.714-4-18.857-10.857-25.714l-78.286-78.286c53.714-50.286 125.143-78.857 198.857-78.857 101.714 0 196 52.571 249.143 139.429 13.714 22.286 20.571 44 30.286 66.857 2.857 8 8.571 13.143 17.143 13.143h109.714c10.286 0 18.286-8.571 18.286-18.286zM877.714 804.571v-256c0-20-16.571-36.571-36.571-36.571h-256c-20 0-36.571 16.571-36.571 36.571 0 9.714 4 18.857 10.857 25.714l78.857 78.857c-54.286 50.286-125.714 78.286-199.429 78.286-101.714 0-196-52.571-249.143-139.429-13.714-22.286-20.571-44-30.286-66.857-2.857-8-8.571-13.143-17.143-13.143h-113.714c-10.286 0-18.286 8.571-18.286 18.286v4c49.143 202.857 217.714 343.429 428.571 343.429 112 0 221.143-44.571 302.286-121.143l74.286 73.714c6.857 6.857 16 10.857 25.714 10.857 20 0 36.571-16.571 36.571-36.571z" />
<glyph unicode="&#xf02c;" glyph-name="tags" horiz-adv-x="1085" d="M256 694.857c0 40.571-32.571 73.143-73.143 73.143s-73.143-32.571-73.143-73.143 32.571-73.143 73.143-73.143 73.143 32.571 73.143 73.143zM865.714 365.714c0-19.429-8-38.286-21.143-51.429l-280.571-281.143c-13.714-13.143-32.571-21.143-52-21.143s-38.286 8-51.429 21.143l-408.571 409.143c-29.143 28.571-52 84-52 124.571v237.714c0 40 33.143 73.143 73.143 73.143h237.714c40.571 0 96-22.857 125.143-52l408.571-408c13.143-13.714 21.143-32.571 21.143-52zM1085.143 365.714c0-19.429-8-38.286-21.143-51.429l-280.571-281.143c-13.714-13.143-32.571-21.143-52-21.143-29.714 0-44.571 13.714-64 33.714l268.571 268.571c13.143 13.143 21.143 32 21.143 51.429s-8 38.286-21.143 52l-408.571 408c-29.143 29.143-84.571 52-125.143 52h128c40.571 0 96-22.857 125.143-52l408.571-408c13.143-13.714 21.143-32.571 21.143-52z" />
<glyph unicode="&#xf073;" glyph-name="date" horiz-adv-x="951" d="M73.143 0h164.571v164.571h-164.571v-164.571zM274.286 0h182.857v164.571h-182.857v-164.571zM73.143 201.143h164.571v182.857h-164.571v-182.857zM274.286 201.143h182.857v182.857h-182.857v-182.857zM73.143 420.571h164.571v164.571h-164.571v-164.571zM493.714 0h182.857v164.571h-182.857v-164.571zM274.286 420.571h182.857v164.571h-182.857v-164.571zM713.143 0h164.571v164.571h-164.571v-164.571zM493.714 201.143h182.857v182.857h-182.857v-182.857zM292.571 694.857v164.571c0 9.714-8.571 18.286-18.286 18.286h-36.571c-9.714 0-18.286-8.571-18.286-18.286v-164.571c0-9.714 8.571-18.286 18.286-18.286h36.571c9.714 0 18.286 8.571 18.286 18.286zM713.143 201.143h164.571v182.857h-164.571v-182.857zM493.714 420.571h182.857v164.571h-182.857v-164.571zM713.143 420.571h164.571v164.571h-164.571v-164.571zM731.429 694.857v164.571c0 9.714-8.571 18.286-18.286 18.286h-36.571c-9.714 0-18.286-8.571-18.286-18.286v-164.571c0-9.714 8.571-18.286 18.286-18.286h36.571c9.714 0 18.286 8.571 18.286 18.286zM950.857 731.428v-731.429c0-40-33.143-73.143-73.143-73.143h-804.571c-40 0-73.143 33.143-73.143 73.143v731.429c0 40 33.143 73.143 73.143 73.143h73.143v54.857c0 50.286 41.143 91.429 91.429 91.429h36.571c50.286 0 91.429-41.143 91.429-91.429v-54.857h219.429v54.857c0 50.286 41.143 91.429 91.429 91.429h36.571c50.286 0 91.429-41.143 91.429-91.429v-54.857h73.143c40 0 73.143-33.143 73.143-73.143z" />
<glyph unicode="&#xf077;" glyph-name="up" d="M961.714 190.286l-94.857-94.286c-14.286-14.286-37.143-14.286-51.429 0l-303.429 303.429-303.429-303.429c-14.286-14.286-37.143-14.286-51.429 0l-94.857 94.286c-14.286 14.286-14.286 37.714 0 52l424 423.429c14.286 14.286 37.143 14.286 51.429 0l424-423.429c14.286-14.286 14.286-37.714 0-52z" />
<glyph unicode="&#xf0c1;" glyph-name="link" horiz-adv-x="951" d="M832 256c0 14.857-5.714 28.571-16 38.857l-118.857 118.857c-10.286 10.286-24.571 16-38.857 16-16.571 0-29.714-6.286-41.143-18.286 18.857-18.857 41.143-34.857 41.143-64 0-30.286-24.571-54.857-54.857-54.857-29.143 0-45.143 22.286-64 41.143-12-11.429-18.857-24.571-18.857-41.714 0-14.286 5.714-28.571 16-38.857l117.714-118.286c10.286-10.286 24.571-15.429 38.857-15.429s28.571 5.143 38.857 14.857l84 83.429c10.286 10.286 16 24 16 38.286zM430.286 658.857c0 14.286-5.714 28.571-16 38.857l-117.714 118.286c-10.286 10.286-24.571 16-38.857 16s-28.571-5.714-38.857-15.429l-84-83.429c-10.286-10.286-16-24-16-38.286 0-14.857 5.714-28.571 16-38.857l118.857-118.857c10.286-10.286 24.571-15.429 38.857-15.429 16.571 0 29.714 5.714 41.143 17.714-18.857 18.857-41.143 34.857-41.143 64 0 30.286 24.571 54.857 54.857 54.857 29.143 0 45.143-22.286 64-41.143 12 11.429 18.857 24.571 18.857 41.714zM941.714 256c0-43.429-17.714-85.714-48.571-116l-84-83.429c-30.857-30.857-72.571-47.429-116-47.429-44 0-85.714 17.143-116.571 48.571l-117.714 118.286c-30.857 30.857-47.429 72.571-47.429 116 0 45.143 18.286 88 50.286 119.429l-50.286 50.286c-31.429-32-73.714-50.286-118.857-50.286-43.429 0-85.714 17.143-116.571 48l-118.857 118.857c-31.429 31.429-48 72.571-48 116.571 0 43.429 17.714 85.714 48.571 116l84 83.429c30.857 30.857 72.571 47.429 116 47.429 44 0 85.714-17.143 116.571-48.571l117.714-118.286c30.857-30.857 47.429-72.571 47.429-116 0-45.143-18.286-88-50.286-119.429l50.286-50.286c31.429 32 73.714 50.286 118.857 50.286 43.429 0 85.714-17.143 116.571-48l118.857-118.857c31.429-31.429 48-72.571 48-116.571z" />
<glyph unicode="&#xf0ca;" glyph-name="list" d="M219.429 146.286c0-60.571-49.143-109.714-109.714-109.714s-109.714 49.143-109.714 109.714 49.143 109.714 109.714 109.714 109.714-49.143 109.714-109.714zM219.429 438.857c0-60.571-49.143-109.714-109.714-109.714s-109.714 49.143-109.714 109.714 49.143 109.714 109.714 109.714 109.714-49.143 109.714-109.714zM1024 201.143v-109.714c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v109.714c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286zM219.429 731.428c0-60.571-49.143-109.714-109.714-109.714s-109.714 49.143-109.714 109.714 49.143 109.714 109.714 109.714 109.714-49.143 109.714-109.714zM1024 493.714v-109.714c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v109.714c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286zM1024 786.286v-109.714c0-9.714-8.571-18.286-18.286-18.286h-694.857c-9.714 0-18.286 8.571-18.286 18.286v109.714c0 9.714 8.571 18.286 18.286 18.286h694.857c9.714 0 18.286-8.571 18.286-18.286z" />
<glyph unicode="&#xf0e6;" glyph-name="comments" d="M402.286 731.428c-178.286 0-329.143-100.571-329.143-219.429 0-62.857 42.286-123.429 115.429-165.714l55.429-32-20-48c12 6.857 24 14.286 35.429 22.286l25.143 17.714 30.286-5.714c28.571-5.143 57.714-8 87.429-8 178.286 0 329.143 100.571 329.143 219.429s-150.857 219.429-329.143 219.429zM402.286 804.571c222.286 0 402.286-130.857 402.286-292.571s-180-292.571-402.286-292.571c-34.857 0-68.571 3.429-100.571 9.143-47.429-33.714-101.143-58.286-158.857-73.143-15.429-4-32-6.857-49.143-9.143h-1.714c-8.571 0-16.571 6.857-18.286 16.571v0c-2.286 10.857 5.143 17.714 11.429 25.143 22.286 25.143 47.429 47.429 66.857 94.857-92.571 53.714-152 136.571-152 229.143 0 161.714 180 292.571 402.286 292.571zM872 136.571c19.429-47.429 44.571-69.714 66.857-94.857 6.286-7.429 13.714-14.286 11.429-25.143v0c-2.286-10.286-10.857-17.714-20-16.571-17.143 2.286-33.714 5.143-49.143 9.143-57.714 14.857-111.429 39.429-158.857 73.143-32-5.714-65.714-9.143-100.571-9.143-103.429 0-198.286 28.571-269.714 75.429 16.571-1.143 33.714-2.286 50.286-2.286 122.857 0 238.857 35.429 327.429 99.429 95.429 69.714 148 164 148 266.286 0 29.714-4.571 58.857-13.143 86.857 96.571-53.143 159.429-137.714 159.429-233.143 0-93.143-59.429-175.429-152-229.143z" />
</font></defs></svg>
\ No newline at end of file
{
"IcoMoonType": "selection",
"icons": [
{
"icon": {
"paths": [
"M219.429 804.571c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM219.429 512c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM1024 749.714v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286zM219.429 219.429c0 60.571-49.143 109.714-109.714 109.714s-109.714-49.143-109.714-109.714 49.143-109.714 109.714-109.714 109.714 49.143 109.714 109.714zM1024 457.143v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286zM1024 164.571v109.714c0 9.714-8.571 18.286-18.286 18.286h-694.857c-9.714 0-18.286-8.571-18.286-18.286v-109.714c0-9.714 8.571-18.286 18.286-18.286h694.857c9.714 0 18.286 8.571 18.286 18.286z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"list-ul"
],
"defaultCode": 61642,
"grid": 14
},
"attrs": [],
"properties": {
"name": "list",
"id": 290,
"order": 106,
"prevSize": 28,
"code": 61642
},
"setIdx": 1,
"setId": 1,
"iconIdx": 0
},
{
"icon": {
"paths": [
"M804.571 566.857v274.286c0 20-16.571 36.571-36.571 36.571h-219.429v-219.429h-146.286v219.429h-219.429c-20 0-36.571-16.571-36.571-36.571v-274.286c0-1.143 0.571-2.286 0.571-3.429l328.571-270.857 328.571 270.857c0.571 1.143 0.571 2.286 0.571 3.429zM932 527.429l-35.429 42.286c-2.857 3.429-7.429 5.714-12 6.286h-1.714c-4.571 0-8.571-1.143-12-4l-395.429-329.714-395.429 329.714c-4 2.857-8.571 4.571-13.714 4-4.571-0.571-9.143-2.857-12-6.286l-35.429-42.286c-6.286-7.429-5.143-19.429 2.286-25.714l410.857-342.286c24-20 62.857-20 86.857 0l139.429 116.571v-111.429c0-10.286 8-18.286 18.286-18.286h109.714c10.286 0 18.286 8 18.286 18.286v233.143l125.143 104c7.429 6.286 8.571 18.286 2.286 25.714z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"home"
],
"defaultCode": 61461,
"grid": 14
},
"attrs": [],
"properties": {
"name": "home",
"id": 289,
"order": 107,
"prevSize": 28,
"code": 61461
},
"setIdx": 1,
"setId": 1,
"iconIdx": 1
},
{
"icon": {
"paths": [
"M402.286 219.429c-178.286 0-329.143 100.571-329.143 219.429 0 62.857 42.286 123.429 115.429 165.714l55.429 32-20 48c12-6.857 24-14.286 35.429-22.286l25.143-17.714 30.286 5.714c28.571 5.143 57.714 8 87.429 8 178.286 0 329.143-100.571 329.143-219.429s-150.857-219.429-329.143-219.429zM402.286 146.286c222.286 0 402.286 130.857 402.286 292.571s-180 292.571-402.286 292.571c-34.857 0-68.571-3.429-100.571-9.143-47.429 33.714-101.143 58.286-158.857 73.143-15.429 4-32 6.857-49.143 9.143h-1.714c-8.571 0-16.571-6.857-18.286-16.571v0c-2.286-10.857 5.143-17.714 11.429-25.143 22.286-25.143 47.429-47.429 66.857-94.857-92.571-53.714-152-136.571-152-229.143 0-161.714 180-292.571 402.286-292.571zM872 814.286c19.429 47.429 44.571 69.714 66.857 94.857 6.286 7.429 13.714 14.286 11.429 25.143v0c-2.286 10.286-10.857 17.714-20 16.571-17.143-2.286-33.714-5.143-49.143-9.143-57.714-14.857-111.429-39.429-158.857-73.143-32 5.714-65.714 9.143-100.571 9.143-103.429 0-198.286-28.571-269.714-75.429 16.571 1.143 33.714 2.286 50.286 2.286 122.857 0 238.857-35.429 327.429-99.429 95.429-69.714 148-164 148-266.286 0-29.714-4.571-58.857-13.143-86.857 96.571 53.143 159.429 137.714 159.429 233.143 0 93.143-59.429 175.429-152 229.143z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"comments-o"
],
"defaultCode": 61670,
"grid": 14
},
"attrs": [],
"properties": {
"name": "comments",
"id": 286,
"order": 110,
"prevSize": 28,
"code": 61670
},
"setIdx": 1,
"setId": 1,
"iconIdx": 4
},
{
"icon": {
"paths": [
"M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571c0-9.714-8.571-18.286-18.286-18.286h-36.571c-9.714 0-18.286 8.571-18.286 18.286v164.571c0 9.714 8.571 18.286 18.286 18.286h36.571c9.714 0 18.286-8.571 18.286-18.286zM950.857 219.429v731.429c0 40-33.143 73.143-73.143 73.143h-804.571c-40 0-73.143-33.143-73.143-73.143v-731.429c0-40 33.143-73.143 73.143-73.143h73.143v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h219.429v-54.857c0-50.286 41.143-91.429 91.429-91.429h36.571c50.286 0 91.429 41.143 91.429 91.429v54.857h73.143c40 0 73.143 33.143 73.143 73.143z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"calendar"
],
"defaultCode": 61555,
"grid": 14
},
"attrs": [],
"properties": {
"name": "date",
"id": 285,
"order": 111,
"prevSize": 28,
"code": 61555
},
"setIdx": 1,
"setId": 1,
"iconIdx": 5
},
{
"icon": {
"paths": [
"M658.286 475.429c0-141.143-114.857-256-256-256s-256 114.857-256 256 114.857 256 256 256 256-114.857 256-256zM950.857 950.857c0 40-33.143 73.143-73.143 73.143-19.429 0-38.286-8-51.429-21.714l-196-195.429c-66.857 46.286-146.857 70.857-228 70.857-222.286 0-402.286-180-402.286-402.286s180-402.286 402.286-402.286 402.286 180 402.286 402.286c0 81.143-24.571 161.143-70.857 228l196 196c13.143 13.143 21.143 32 21.143 51.429z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"search"
],
"defaultCode": 61442,
"grid": 14
},
"attrs": [],
"properties": {
"name": "search",
"id": 284,
"order": 112,
"prevSize": 28,
"code": 61442
},
"setIdx": 1,
"setId": 1,
"iconIdx": 6
},
{
"icon": {
"paths": [
"M961.714 760.571l-94.857 94.286c-14.286 14.286-37.143 14.286-51.429 0l-303.429-303.429-303.429 303.429c-14.286 14.286-37.143 14.286-51.429 0l-94.857-94.286c-14.286-14.286-14.286-37.714 0-52l424-423.429c14.286-14.286 37.143-14.286 51.429 0l424 423.429c14.286 14.286 14.286 37.714 0 52z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"chevron-up"
],
"defaultCode": 61559,
"grid": 14
},
"attrs": [],
"properties": {
"name": "up",
"id": 283,
"order": 113,
"prevSize": 28,
"code": 61559
},
"setIdx": 1,
"setId": 1,
"iconIdx": 7
},
{
"icon": {
"paths": [
"M584.571 548.571h180.571c-1.143-2.857-1.714-6.286-2.857-9.143l-121.143-283.429h-404.571l-121.143 283.429c-1.143 2.857-1.714 6.286-2.857 9.143h180.571l54.286 109.714h182.857zM877.714 565.714v275.429c0 20-16.571 36.571-36.571 36.571h-804.571c-20 0-36.571-16.571-36.571-36.571v-275.429c0-20.571 6.286-50.857 14.286-70.286l136-315.429c8-18.857 30.857-33.714 50.857-33.714h475.429c20 0 42.857 14.857 50.857 33.714l136 315.429c8 19.429 14.286 49.714 14.286 70.286z"
],
"width": 877.7142857142857,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"inbox"
],
"defaultCode": 61468,
"grid": 14
},
"attrs": [],
"properties": {
"name": "inbox",
"id": 280,
"order": 114,
"prevSize": 28,
"code": 61468
},
"setIdx": 1,
"setId": 1,
"iconIdx": 8
},
{
"icon": {
"paths": [
"M256 256c0-40.571-32.571-73.143-73.143-73.143s-73.143 32.571-73.143 73.143 32.571 73.143 73.143 73.143 73.143-32.571 73.143-73.143zM865.714 585.143c0 19.429-8 38.286-21.143 51.429l-280.571 281.143c-13.714 13.143-32.571 21.143-52 21.143s-38.286-8-51.429-21.143l-408.571-409.143c-29.143-28.571-52-84-52-124.571v-237.714c0-40 33.143-73.143 73.143-73.143h237.714c40.571 0 96 22.857 125.143 52l408.571 408c13.143 13.714 21.143 32.571 21.143 52zM1085.143 585.143c0 19.429-8 38.286-21.143 51.429l-280.571 281.143c-13.714 13.143-32.571 21.143-52 21.143-29.714 0-44.571-13.714-64-33.714l268.571-268.571c13.143-13.143 21.143-32 21.143-51.429s-8-38.286-21.143-52l-408.571-408c-29.143-29.143-84.571-52-125.143-52h128c40.571 0 96 22.857 125.143 52l408.571 408c13.143 13.714 21.143 32.571 21.143 52z"
],
"width": 1085.1474285714285,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"tags"
],
"defaultCode": 61484,
"grid": 14
},
"attrs": [],
"properties": {
"name": "tags",
"id": 279,
"order": 115,
"prevSize": 28,
"code": 61484
},
"setIdx": 1,
"setId": 1,
"iconIdx": 9
},
{
"icon": {
"paths": [
"M832 694.857c0-14.857-5.714-28.571-16-38.857l-118.857-118.857c-10.286-10.286-24.571-16-38.857-16-16.571 0-29.714 6.286-41.143 18.286 18.857 18.857 41.143 34.857 41.143 64 0 30.286-24.571 54.857-54.857 54.857-29.143 0-45.143-22.286-64-41.143-12 11.429-18.857 24.571-18.857 41.714 0 14.286 5.714 28.571 16 38.857l117.714 118.286c10.286 10.286 24.571 15.429 38.857 15.429s28.571-5.143 38.857-14.857l84-83.429c10.286-10.286 16-24 16-38.286zM430.286 292c0-14.286-5.714-28.571-16-38.857l-117.714-118.286c-10.286-10.286-24.571-16-38.857-16s-28.571 5.714-38.857 15.429l-84 83.429c-10.286 10.286-16 24-16 38.286 0 14.857 5.714 28.571 16 38.857l118.857 118.857c10.286 10.286 24.571 15.429 38.857 15.429 16.571 0 29.714-5.714 41.143-17.714-18.857-18.857-41.143-34.857-41.143-64 0-30.286 24.571-54.857 54.857-54.857 29.143 0 45.143 22.286 64 41.143 12-11.429 18.857-24.571 18.857-41.714zM941.714 694.857c0 43.429-17.714 85.714-48.571 116l-84 83.429c-30.857 30.857-72.571 47.429-116 47.429-44 0-85.714-17.143-116.571-48.571l-117.714-118.286c-30.857-30.857-47.429-72.571-47.429-116 0-45.143 18.286-88 50.286-119.429l-50.286-50.286c-31.429 32-73.714 50.286-118.857 50.286-43.429 0-85.714-17.143-116.571-48l-118.857-118.857c-31.429-31.429-48-72.571-48-116.571 0-43.429 17.714-85.714 48.571-116l84-83.429c30.857-30.857 72.571-47.429 116-47.429 44 0 85.714 17.143 116.571 48.571l117.714 118.286c30.857 30.857 47.429 72.571 47.429 116 0 45.143-18.286 88-50.286 119.429l50.286 50.286c31.429-32 73.714-50.286 118.857-50.286 43.429 0 85.714 17.143 116.571 48l118.857 118.857c31.429 31.429 48 72.571 48 116.571z"
],
"width": 950.8571428571428,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"chain",
"link"
],
"defaultCode": 61633,
"grid": 14
},
"attrs": [],
"properties": {
"name": "link",
"id": 278,
"order": 116,
"prevSize": 28,
"code": 61633
},
"setIdx": 1,
"setId": 1,
"iconIdx": 10
},
{
"icon": {
"paths": [
"M863.429 603.429c0 1.143 0 2.857-0.571 4-48.571 202.286-215.429 343.429-426.286 343.429-111.429 0-219.429-44-300.571-121.143l-73.714 73.714c-6.857 6.857-16 10.857-25.714 10.857-20 0-36.571-16.571-36.571-36.571v-256c0-20 16.571-36.571 36.571-36.571h256c20 0 36.571 16.571 36.571 36.571 0 9.714-4 18.857-10.857 25.714l-78.286 78.286c53.714 50.286 125.143 78.857 198.857 78.857 101.714 0 196-52.571 249.143-139.429 13.714-22.286 20.571-44 30.286-66.857 2.857-8 8.571-13.143 17.143-13.143h109.714c10.286 0 18.286 8.571 18.286 18.286zM877.714 146.286v256c0 20-16.571 36.571-36.571 36.571h-256c-20 0-36.571-16.571-36.571-36.571 0-9.714 4-18.857 10.857-25.714l78.857-78.857c-54.286-50.286-125.714-78.286-199.429-78.286-101.714 0-196 52.571-249.143 139.429-13.714 22.286-20.571 44-30.286 66.857-2.857 8-8.571 13.143-17.143 13.143h-113.714c-10.286 0-18.286-8.571-18.286-18.286v-4c49.143-202.857 217.714-343.429 428.571-343.429 112 0 221.143 44.571 302.286 121.143l74.286-73.714c6.857-6.857 16-10.857 25.714-10.857 20 0 36.571 16.571 36.571 36.571z"
],
"width": 877.7142857142857,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"refresh"
],
"defaultCode": 61473,
"grid": 14
},
"attrs": [],
"properties": {
"name": "refresh",
"id": 277,
"order": 117,
"prevSize": 28,
"code": 61473
},
"setIdx": 1,
"setId": 1,
"iconIdx": 11
},
{
"icon": {
"paths": [
"M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"exit",
"signout",
"logout",
"quit",
"close"
],
"defaultCode": 59924,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "exit, signout",
"name": "logout",
"id": 288,
"order": 108,
"prevSize": 32,
"code": 59924
},
"setIdx": 1,
"setId": 1,
"iconIdx": 2
},
{
"icon": {
"paths": [
"M512 192c-282.784 0-512 320-512 320s229.216 320 512 320 512-320 512-320-229.216-320-512-320zM512 704c-106.016 0-192-85.984-192-192s85.984-192 192-192 192 85.984 192 192-85.984 192-192 192zM512 384c-70.688 0-128 57.312-128 128s57.312 128 128 128 128-57.312 128-128-57.312-128-128-128z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"eye",
"views"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 109,
"id": 287,
"name": "views",
"prevSize": 32,
"code": 59648
},
"setIdx": 1,
"setId": 1,
"iconIdx": 3
},
{
"icon": {
"paths": [
"M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z",
"M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"user-plus",
"user",
"user-add",
"profile",
"avatar",
"person",
"member"
],
"defaultCode": 59763,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "user-plus, user2",
"name": "register",
"id": 115,
"order": 118,
"prevSize": 32,
"code": 59763
},
"setIdx": 1,
"setId": 1,
"iconIdx": 12
},
{
"icon": {
"paths": [
"M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"cog",
"gear",
"preferences",
"settings",
"generate",
"control",
"options"
],
"defaultCode": 59796,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "cog, gear",
"name": "setting",
"id": 148,
"order": 119,
"prevSize": 32,
"code": 59796
},
"setIdx": 1,
"setId": 1,
"iconIdx": 13
},
{
"icon": {
"paths": [
"M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"enter",
"signin",
"login"
],
"defaultCode": 59923,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "enter, signin",
"name": "login",
"id": 275,
"order": 120,
"prevSize": 32,
"code": 59923
},
"setIdx": 1,
"setId": 1,
"iconIdx": 14
},
{
"icon": {
"paths": [
"M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"feed",
"rss",
"social"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 121,
"id": 0,
"prevSize": 32,
"code": 59649,
"name": "rss"
},
"setIdx": 1,
"setId": 1,
"iconIdx": 15
}
],
"height": 1024,
"metadata": {
"name": "icomoon"
},
"preferences": {
"showGlyphs": true,
"showQuickUse": true,
"showQuickUse2": true,
"showSVGs": true,
"fontPref": {
"prefix": "icon-",
"metadata": {
"fontFamily": "icomoon"
},
"metrics": {
"emSize": 1024,
"baseline": 6.25,
"whitespace": 50
},
"embed": false
},
"imagePref": {
"prefix": "icon-",
"png": true,
"useClassSelector": true,
"color": 4473924,
"bgColor": 16777215
},
"historySize": 100,
"showCodes": false,
"gridSize": 16
}
}
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${dynamicLabel}"/>
<meta name="description" content="${metaDescription},${dynamicLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="post">
<#if 0 != recentComments?size>
<ul class="comments" id="comments">
<#list recentComments as comment>
<li id="${comment.oId}">
<div>
<div class="avatar tooltipped tooltipped-n" aria-label="${comment.commentName}"
style="background-image: url(${comment.commentThumbnailURL})"></div>
<main>
<div class="fn-clear">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a class="user-name" href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<time class="ft-gray">${comment.commentDate?string("yyyy-MM-dd HH:mm")}</time>
<a class="reply-btn" href="${servePath}${comment.commentSharpURL}">${viewLabel}»</a>
</div>
<div class="content-reset">
${comment.commentContent}
</div>
</main>
</div>
</li>
</#list>
</ul>
</#if>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
<script>
var $commentContents = $(".comments .content-reset");
for (var i = 0; i < $commentContents.length; i++) {
var str = $commentContents[i].innerHTML;
$commentContents[i].innerHTML = Util.replaceEmString(str);
}
</script>
</body>
</html>
<footer class="footer"> <footer class="footer fn-clear">
<div class="wrapper fn-clear">
<a href="${servePath}">${blogTitle}</a> •
${onlineVisitor1Label}${onlineVisitorCnt} <br/>
&copy; ${year} &copy; ${year}
${footerContent} ${footerContent}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a> • <a href="${servePath}">${blogTitle}</a> &nbsp; • &nbsp;
<a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version} <a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version} <br/>
<div class="fn-right">Theme by <a href="http://iissnan.com/" target="_blank">IIssNan</a> & <a href="http://vanessa.b3log.org" target="_blank">Vanessa</a>.</div> Powered by <a href="http://b3log.org" target="_blank">B3log</a> 开源 &nbsp;
</div> <span class="ft-warn">&heartsuit;</span>
Theme by <a href="https://github.com/9IPHP/9IPHP" target="_blank">9IPHP</a> & <a href="http://vanessa.b3log.org" target="_blank">Vanessa</a>
</footer> </footer>
<div class="back-to-top" onclick="Util.goTop()"></div> <div class="icon-up" onclick="Util.goTop()"></div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script> <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" src="${staticServePath}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/${skinDirName}${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script> <script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript"> <script type="text/javascript">
var latkeConfig = { var latkeConfig = {
"servePath": "${servePath}", "servePath": "${servePath}",
...@@ -39,9 +37,7 @@ ...@@ -39,9 +37,7 @@
"em11Label": "${em11Label}", "em11Label": "${em11Label}",
"em12Label": "${em12Label}", "em12Label": "${em12Label}",
"em13Label": "${em13Label}", "em13Label": "${em13Label}",
"em14Label": "${em14Label}", "em14Label": "${em14Label}"
"tocLabel": "${tocLabel}",
"siteViewLabel": "${siteViewLabel}"
}; };
</script> </script>
${plugins} ${plugins}
<header>
<div class="banner">
<div class="fn-clear wrapper">
<h1 class="fn-inline">
<a href="${servePath}" rel="start">
${blogTitle}
</a>
</h1>
<small> &nbsp; ${blogSubtitle}</small>
<div class="fn-right">
<#if isLoggedIn>
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
<i class="icon-setting"></i> ${adminLabel}
</a>
<a href="${logoutURL}">
<i class="icon-logout"></i> ${logoutLabel}
</a>
<#else>
<a href="${loginURL}">
<i class="icon-login"></i> ${loginLabel}
</a>
<a href="${servePath}/register">
<i class="icon-register"></i> ${registerLabel}
</a>
</#if>
</div>
</div>
</div>
<div class="navbar">
<div class="fn-clear wrapper">
<nav class="fn-left">
<a href="${servePath}">
<i class="icon-home"></i>
${indexLabel}
</a>
<#list pageNavigations as page>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
${page.pageTitle}
</a>
</#list>
<a href="${servePath}/dynamic.html" rel="section">
<i class="icon-refresh"></i> ${dynamicLabel}
</a>
<a href="${servePath}/tags.html" rel="section">
<i class="icon-tags"></i> ${allTagsLabel}
</a>
<a href="${servePath}/archives.html">
<i class="icon-inbox"></i> ${archiveLabel}
</a>
<a rel="archive" href="${servePath}/links.html">
<i class="icon-link"></i> ${linkLabel}
</a>
<a rel="alternate" href="${servePath}/blog-articles-rss.do" rel="section">
<i class="icon-rss"></i> RSS
</a>
</nav>
<div class="fn-right">
<form class="form" target="_blank" action="http://zhannei.baidu.com/cse/site">
<input placeholder="${searchLabel}" id="search" type="text" name="q"/>
<button type="submit"><i class="icon-search"></i></button>
<input type="hidden" name="cc" value="${serverHost}">
</form>
</div>
</div>
</div>
</header>
<div class="responsive fn-none">
<i class="icon-list"></i>
<ul class="list">
<#if isLoggedIn>
<li>
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
<i class="icon-setting"></i> ${adminLabel}
</a>
</li>
<li>
<a href="${logoutURL}">
<i class="icon-logout"></i> ${logoutLabel}
</a>
</li>
<#else>
<li>
<a href="${loginURL}">
<i class="icon-login"></i> ${loginLabel}
</a>
</li>
<li>
<a href="${servePath}/register">
<i class="icon-register"></i> ${registerLabel}
</a>
</li>
</#if>
<li>
<a href="${servePath}">
<i class="icon-home"></i>
${indexLabel}
</a>
</li>
<#list pageNavigations as page>
<li>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
${page.pageTitle}
</a>
</li>
</#list>
<li>
<a href="${servePath}/dynamic.html" rel="section">
<i class="icon-refresh"></i> ${dynamicLabel}
</a>
</li>
<li>
<a href="${servePath}/tags.html" rel="section">
<i class="icon-tags"></i> ${allTagsLabel}
</a>
</li>
<li>
<a href="${servePath}/archives.html">
<i class="icon-inbox"></i> ${archiveLabel}
</a>
</li>
<li>
<a rel="archive" href="${servePath}/links.html">
<i class="icon-link"></i> ${linkLabel}
</a>
</li>
<li>
<a rel="alternate" href="${servePath}/blog-articles-rss.do" rel="section">
<i class="icon-rss"></i> RSS
</a>
</li>
</ul>
</div>
\ No newline at end of file
...@@ -13,12 +13,14 @@ ...@@ -13,12 +13,14 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content"> <div class="main-wrap">
<main>
<#include "article-list.ftl"> <#include "article-list.ftl">
</div>
<#include "side.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
</body> </body>
</html> </html>
\ No newline at end of file
/* /*
* Copyright (c) 2010-2016, b3log.org & hacpai.com * Copyright (c) 2010-2017, b3log.org & hacpai.com
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -17,79 +17,63 @@ ...@@ -17,79 +17,63 @@
* @fileoverview util and every page should be used. * @fileoverview util and every page should be used.
* *
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a> * @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.2.1.0, Sep 6, 2016 * @version 0.1.0.0, Feb 17, 2017
*/ */
/** /**
* @description next 皮肤脚本 * @description 皮肤脚本
* @static * @static
*/ */
var NexT = { var Skin = {
init: function () { _initCommon: function ($goTop) {
$('.sidebar-toggle').click(function () { $('body').on('click', '.content-reset img', function () {
var $sidebar = $('.sidebar'); window.open(this.src);
if ($(this).hasClass('sidebar-active')) {
$(this).removeClass('sidebar-active');
$('body').animate({
'padding-right': 0
}); });
$sidebar.animate({
right: -320 var $banner = $('header .banner'),
}); $navbar = $('header .navbar');
$sidebar.find('section').css('opacity', 0);
$(window).scroll(function () {
if ($(window).scrollTop() > 125) {
$goTop.show();
} else { } else {
$(this).addClass('sidebar-active'); $goTop.hide();
$('body').animate({
'padding-right': 320
});
$sidebar.animate({
right: 0
}, function () {
$sidebar.find('section:first').animate({
'opacity': 1
});
});
} }
});
$('.site-nav-toggle').click(function () { if ($(window).width() < 701) {
$('.site-nav').slideToggle(); return false;
}); }
$(document).ready(function () { if ($(window).scrollTop() > $banner.height()) {
setTimeout(function () { $navbar.addClass('pin');
// logo animate $('.main-wrap').parent().css('margin-top', '86px')
$('.logo-wrap').css('opacity', 1); } else {
$('.logo-line-before i').animate({ $navbar.removeClass('pin');
'left': '0' $('.main-wrap').parent().css('margin-top', '0')
}, function () {
$('.site-title').css('opacity', 1).animate({
'top': 0
}, function () {
$('.menu').css('opacity', 1).animate({
'margin-top': '15px'
});
$('.main').css('opacity', 1).animate({
'top': '0'
}, function () {
// 当有文章页面有目录时,回调不放这里,侧边栏就会一片空白
if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) {
$('.sidebar-toggle').click();
} }
}); });
}); },
init: function () {
this._initCommon($('.icon-up'));
$('.navbar nav a').each(function () {
if (this.href === location.href) {
this.className = 'current'
}
}); });
$('.logo-line-after i').animate({ $('.responsive .list a').each(function () {
'right': '0' if (this.href === location.href) {
$(this).parent().addClass('current');
}
}); });
}, 500);
$('.responsive .icon-list').click(function () {
$('.responsive .list').slideToggle();
}); });
}, },
initArticle: function () { _initArticleCommon: function () {
// TOC
if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) { if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) {
// add color to sidebar menu // add color to sidebar menu
$('.sidebar-toggle').addClass('has-toc'); $('.sidebar-toggle').addClass('has-toc');
...@@ -99,7 +83,7 @@ var NexT = { ...@@ -99,7 +83,7 @@ var NexT = {
$('.sidebar').prepend(articleTocHTML); $('.sidebar').prepend(articleTocHTML);
var $sectionF = $('.sidebar section:first').html($('.b3-solo-list')), var $sectionF = $('.sidebar section:first').html($('.b3-solo-list')),
$sectionL = $('.sidebar section:last'); $sectionL = $('.sidebar section:last');
$sectionF.height($(window).height() - 90);
// 切换 tab // 切换 tab
$('.sidebar > ul > li').click(function () { $('.sidebar > ul > li').click(function () {
if ($(this).data('tab') === 'toc') { if ($(this).data('tab') === 'toc') {
...@@ -129,6 +113,9 @@ var NexT = { ...@@ -129,6 +113,9 @@ var NexT = {
$(this).addClass('current'); $(this).addClass('current');
}); });
} }
},
initArticle: function () {
this._initArticleCommon();
} }
}; };
NexT.init(); Skin.init();
\ No newline at end of file \ No newline at end of file
/*
* Copyright (c) 2010-2017, b3log.org & hacpai.com
*
* 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.
*/
!function(t,e){"use strict";"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function u(t,e,n){var o,s="$()."+i+'("'+e+'")';return t.each(function(t,u){var h=a.data(u,i);if(!h)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var d=h[e];if(!d||"_"==e.charAt(0))return void r(s+" is not a valid method");var l=d.apply(h,n);o=void 0===o?l:o}),void 0!==o?o:t}function h(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new s(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return u(this,t,e)}return h(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,o=i[n];e=e||[];for(var s=this._onceEvents&&this._onceEvents[t];o;){var r=s&&s[o];r&&(this.off(t,o),delete s[o]),o.apply(this,e),n+=r?0:1,o=i[n]}return this}},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("get-size/get-size",[],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;h>e;e++){var i=u[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s.isBoxSizeOuter=r=200==t(o.width),i.removeChild(e)}}function s(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var s=n(e);if("none"==s.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==s.boxSizing,l=0;h>l;l++){var f=u[l],c=s[f],m=parseFloat(c);a[f]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,y=a.paddingTop+a.paddingBottom,g=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,I=a.borderTopWidth+a.borderBottomWidth,z=d&&r,x=t(s.width);x!==!1&&(a.width=x+(z?0:p+_));var S=t(s.height);return S!==!1&&(a.height=S+(z?0:y+I)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(y+I),a.outerWidth=a.width+g,a.outerHeight=a.height+v,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},u=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],h=u.length,d=!1;return s}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i<e.length;i++){var n=e[i],o=n+"MatchesSelector";if(t[o])return o}}();return function(e,i){return e[t](i)}}),function(t,e){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["desandro-matches-selector/matches-selector"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("desandro-matches-selector")):t.fizzyUIUtils=e(t,t.matchesSelector)}(window,function(t,e){var i={};i.extend=function(t,e){for(var i in e)t[i]=e[i];return t},i.modulo=function(t,e){return(t%e+e)%e},i.makeArray=function(t){var e=[];if(Array.isArray(t))e=t;else if(t&&"number"==typeof t.length)for(var i=0;i<t.length;i++)e.push(t[i]);else e.push(t);return e},i.removeFrom=function(t,e){var i=t.indexOf(e);-1!=i&&t.splice(i,1)},i.getParent=function(t,i){for(;t!=document.body;)if(t=t.parentNode,e(t,i))return t},i.getQueryElement=function(t){return"string"==typeof t?document.querySelector(t):t},i.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},i.filterFindElements=function(t,n){t=i.makeArray(t);var o=[];return t.forEach(function(t){if(t instanceof HTMLElement){if(!n)return void o.push(t);e(t,n)&&o.push(t);for(var i=t.querySelectorAll(n),s=0;s<i.length;s++)o.push(i[s])}}),o},i.debounceMethod=function(t,e,i){var n=t.prototype[e],o=e+"Timeout";t.prototype[e]=function(){var t=this[o];t&&clearTimeout(t);var e=arguments,s=this;this[o]=setTimeout(function(){n.apply(s,e),delete s[o]},i||100)}},i.docReady=function(t){var e=document.readyState;"complete"==e||"interactive"==e?t():document.addEventListener("DOMContentLoaded",t)},i.toDashed=function(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()};var n=t.console;return i.htmlInit=function(e,o){i.docReady(function(){var s=i.toDashed(o),r="data-"+s,a=document.querySelectorAll("["+r+"]"),u=document.querySelectorAll(".js-"+s),h=i.makeArray(a).concat(i.makeArray(u)),d=r+"-options",l=t.jQuery;h.forEach(function(t){var i,s=t.getAttribute(r)||t.getAttribute(d);try{i=s&&JSON.parse(s)}catch(a){return void(n&&n.error("Error parsing "+r+" on "+t.className+": "+a))}var u=new e(t,i);l&&l.data(t,o,u)})})},i}),function(t,e){"function"==typeof define&&define.amd?define("outlayer/item",["ev-emitter/ev-emitter","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("ev-emitter"),require("get-size")):(t.Outlayer={},t.Outlayer.Item=e(t.EvEmitter,t.getSize))}(window,function(t,e){"use strict";function i(t){for(var e in t)return!1;return e=null,!0}function n(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}function o(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}var s=document.documentElement.style,r="string"==typeof s.transition?"transition":"WebkitTransition",a="string"==typeof s.transform?"transform":"WebkitTransform",u={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[r],h={transform:a,transition:r,transitionDuration:r+"Duration",transitionProperty:r+"Property",transitionDelay:r+"Delay"},d=n.prototype=Object.create(t.prototype);d.constructor=n,d._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},d.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},d.getSize=function(){this.size=e(this.element)},d.css=function(t){var e=this.element.style;for(var i in t){var n=h[i]||i;e[n]=t[i]}},d.getPosition=function(){var t=getComputedStyle(this.element),e=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),n=t[e?"left":"right"],o=t[i?"top":"bottom"],s=this.layout.size,r=-1!=n.indexOf("%")?parseFloat(n)/100*s.width:parseInt(n,10),a=-1!=o.indexOf("%")?parseFloat(o)/100*s.height:parseInt(o,10);r=isNaN(r)?0:r,a=isNaN(a)?0:a,r-=e?s.paddingLeft:s.paddingRight,a-=i?s.paddingTop:s.paddingBottom,this.position.x=r,this.position.y=a},d.layoutPosition=function(){var t=this.layout.size,e={},i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),o=i?"paddingLeft":"paddingRight",s=i?"left":"right",r=i?"right":"left",a=this.position.x+t[o];e[s]=this.getXValue(a),e[r]="";var u=n?"paddingTop":"paddingBottom",h=n?"top":"bottom",d=n?"bottom":"top",l=this.position.y+t[u];e[h]=this.getYValue(l),e[d]="",this.css(e),this.emitEvent("layout",[this])},d.getXValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!e?t/this.layout.size.width*100+"%":t+"px"},d.getYValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&e?t/this.layout.size.height*100+"%":t+"px"},d._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=parseInt(t,10),s=parseInt(e,10),r=o===this.position.x&&s===this.position.y;if(this.setPosition(t,e),r&&!this.isTransitioning)return void this.layoutPosition();var a=t-i,u=e-n,h={};h.transform=this.getTranslate(a,u),this.transition({to:h,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},d.getTranslate=function(t,e){var i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop");return t=i?t:-t,e=n?e:-e,"translate3d("+t+"px, "+e+"px, 0)"},d.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},d.moveTo=d._transitionTo,d.setPosition=function(t,e){this.position.x=parseInt(t,10),this.position.y=parseInt(e,10)},d._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},d.transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(t);var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var l="opacity,"+o(a);d.enableTransition=function(){if(!this.isTransitioning){var t=this.layout.options.transitionDuration;t="number"==typeof t?t+"ms":t,this.css({transitionProperty:l,transitionDuration:t,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(u,this,!1)}},d.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},d.onotransitionend=function(t){this.ontransitionend(t)};var f={"-webkit-transform":"transform"};d.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=f[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},d.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(u,this,!1),this.isTransitioning=!1},d._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var c={transitionProperty:"",transitionDuration:"",transitionDelay:""};return d.removeTransitionStyles=function(){this.css(c)},d.stagger=function(t){t=isNaN(t)?0:t,this.staggerDelay=t+"ms"},d.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},d.remove=function(){return r&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",function(){this.removeElem()}),void this.hide()):void this.removeElem()},d.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("visibleStyle");e[i]=this.onRevealTransitionEnd,this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0,onTransitionEnd:e})},d.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},d.getHideRevealTransitionEndProperty=function(t){var e=this.layout.options[t];if(e.opacity)return"opacity";for(var i in e)return i},d.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("hiddenStyle");e[i]=this.onHideTransitionEnd,this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:e})},d.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},d.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},n}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("outlayer/outlayer",["ev-emitter/ev-emitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(i,n,o,s){return e(t,i,n,o,s)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):t.Outlayer=e(t,t.EvEmitter,t.getSize,t.fizzyUIUtils,t.Outlayer.Item)}(window,function(t,e,i,n,o){"use strict";function s(t,e){var i=n.getQueryElement(t);if(!i)return void(u&&u.error("Bad element for "+this.constructor.namespace+": "+(i||t)));this.element=i,h&&(this.$element=h(this.element)),this.options=n.extend({},this.constructor.defaults),this.option(e);var o=++l;this.element.outlayerGUID=o,f[o]=this,this._create();var s=this._getOption("initLayout");s&&this.layout()}function r(t){function e(){t.apply(this,arguments)}return e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e}function a(t){if("number"==typeof t)return t;var e=t.match(/(^\d*\.?\d*)(\w*)/),i=e&&e[1],n=e&&e[2];if(!i.length)return 0;i=parseFloat(i);var o=m[n]||1;return i*o}var u=t.console,h=t.jQuery,d=function(){},l=0,f={};s.namespace="outlayer",s.Item=o,s.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var c=s.prototype;n.extend(c,e.prototype),c.option=function(t){n.extend(this.options,t)},c._getOption=function(t){var e=this.constructor.compatOptions[t];return e&&void 0!==this.options[e]?this.options[e]:this.options[t]},s.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},c._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),n.extend(this.element.style,this.options.containerStyle);var t=this._getOption("resize");t&&this.bindResize()},c.reloadItems=function(){this.items=this._itemize(this.element.children)},c._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0;o<e.length;o++){var s=e[o],r=new i(s,this);n.push(r)}return n},c._filterFindItemElements=function(t){return n.filterFindElements(t,this.options.itemSelector)},c.getItemElements=function(){return this.items.map(function(t){return t.element})},c.layout=function(){this._resetLayout(),this._manageStamps();var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;this.layoutItems(this.items,e),this._isLayoutInited=!0},c._init=c.layout,c._resetLayout=function(){this.getSize()},c.getSize=function(){this.size=i(this.element)},c._getMeasurement=function(t,e){var n,o=this.options[t];o?("string"==typeof o?n=this.element.querySelector(o):o instanceof HTMLElement&&(n=o),this[t]=n?i(n)[e]:o):this[t]=0},c.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},c._getItemsForLayout=function(t){return t.filter(function(t){return!t.isIgnored})},c._layoutItems=function(t,e){if(this._emitCompleteOnItems("layout",t),t&&t.length){var i=[];t.forEach(function(t){var n=this._getItemLayoutPosition(t);n.item=t,n.isInstant=e||t.isLayoutInstant,i.push(n)},this),this._processLayoutQueue(i)}},c._getItemLayoutPosition=function(){return{x:0,y:0}},c._processLayoutQueue=function(t){this.updateStagger(),t.forEach(function(t,e){this._positionItem(t.item,t.x,t.y,t.isInstant,e)},this)},c.updateStagger=function(){var t=this.options.stagger;return null===t||void 0===t?void(this.stagger=0):(this.stagger=a(t),this.stagger)},c._positionItem=function(t,e,i,n,o){n?t.goTo(e,i):(t.stagger(o*this.stagger),t.moveTo(e,i))},c._postLayout=function(){this.resizeContainer()},c.resizeContainer=function(){var t=this._getOption("resizeContainer");if(t){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},c._getContainerSize=d,c._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},c._emitCompleteOnItems=function(t,e){function i(){o.dispatchEvent(t+"Complete",null,[e])}function n(){r++,r==s&&i()}var o=this,s=e.length;if(!e||!s)return void i();var r=0;e.forEach(function(e){e.once(t,n)})},c.dispatchEvent=function(t,e,i){var n=e?[e].concat(i):i;if(this.emitEvent(t,n),h)if(this.$element=this.$element||h(this.element),e){var o=h.Event(e);o.type=t,this.$element.trigger(o,i)}else this.$element.trigger(t,i)},c.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},c.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},c.stamp=function(t){t=this._find(t),t&&(this.stamps=this.stamps.concat(t),t.forEach(this.ignore,this))},c.unstamp=function(t){t=this._find(t),t&&t.forEach(function(t){n.removeFrom(this.stamps,t),this.unignore(t)},this)},c._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n.makeArray(t)):void 0},c._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},c._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},c._manageStamp=d,c._getElementOffset=function(t){var e=t.getBoundingClientRect(),n=this._boundingRect,o=i(t),s={left:e.left-n.left-o.marginLeft,top:e.top-n.top-o.marginTop,right:n.right-e.right-o.marginRight,bottom:n.bottom-e.bottom-o.marginBottom};return s},c.handleEvent=n.handleEvent,c.bindResize=function(){t.addEventListener("resize",this),this.isResizeBound=!0},c.unbindResize=function(){t.removeEventListener("resize",this),this.isResizeBound=!1},c.onresize=function(){this.resize()},n.debounceMethod(s,"onresize",100),c.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},c.needsResizeLayout=function(){var t=i(this.element),e=this.size&&t;return e&&t.innerWidth!==this.size.innerWidth},c.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},c.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},c.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},c.reveal=function(t){if(this._emitCompleteOnItems("reveal",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.reveal()})}},c.hide=function(t){if(this._emitCompleteOnItems("hide",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.hide()})}},c.revealItemElements=function(t){var e=this.getItems(t);this.reveal(e)},c.hideItemElements=function(t){var e=this.getItems(t);this.hide(e)},c.getItem=function(t){for(var e=0;e<this.items.length;e++){var i=this.items[e];if(i.element==t)return i}},c.getItems=function(t){t=n.makeArray(t);var e=[];return t.forEach(function(t){var i=this.getItem(t);i&&e.push(i)},this),e},c.remove=function(t){var e=this.getItems(t);this._emitCompleteOnItems("remove",e),e&&e.length&&e.forEach(function(t){t.remove(),n.removeFrom(this.items,t)},this)},c.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="",this.items.forEach(function(t){t.destroy()}),this.unbindResize();var e=this.element.outlayerGUID;delete f[e],delete this.element.outlayerGUID,h&&h.removeData(this.element,this.constructor.namespace)},s.data=function(t){t=n.getQueryElement(t);var e=t&&t.outlayerGUID;return e&&f[e]},s.create=function(t,e){var i=r(s);return i.defaults=n.extend({},s.defaults),n.extend(i.defaults,e),i.compatOptions=n.extend({},s.compatOptions),i.namespace=t,i.data=s.data,i.Item=r(o),n.htmlInit(i,t),h&&h.bridget&&h.bridget(t,i),i};var m={ms:1,s:1e3};return s.Item=o,s}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/item",["outlayer/outlayer"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer")):(t.Isotope=t.Isotope||{},t.Isotope.Item=e(t.Outlayer))}(window,function(t){"use strict";function e(){t.Item.apply(this,arguments)}var i=e.prototype=Object.create(t.Item.prototype),n=i._create;i._create=function(){this.id=this.layout.itemGUID++,n.call(this),this.sortData={}},i.updateSortData=function(){if(!this.isIgnored){this.sortData.id=this.id,this.sortData["original-order"]=this.id,this.sortData.random=Math.random();var t=this.layout.options.getSortData,e=this.layout._sorters;for(var i in t){var n=e[i];this.sortData[i]=n(this.element,this)}}};var o=i.destroy;return i.destroy=function(){o.apply(this,arguments),this.css({display:""})},e}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-mode",["get-size/get-size","outlayer/outlayer"],e):"object"==typeof module&&module.exports?module.exports=e(require("get-size"),require("outlayer")):(t.Isotope=t.Isotope||{},t.Isotope.LayoutMode=e(t.getSize,t.Outlayer))}(window,function(t,e){"use strict";function i(t){this.isotope=t,t&&(this.options=t.options[this.namespace],this.element=t.element,this.items=t.filteredItems,this.size=t.size)}var n=i.prototype,o=["_resetLayout","_getItemLayoutPosition","_manageStamp","_getContainerSize","_getElementOffset","needsResizeLayout","_getOption"];return o.forEach(function(t){n[t]=function(){return e.prototype[t].apply(this.isotope,arguments)}}),n.needsVerticalResizeLayout=function(){var e=t(this.isotope.element),i=this.isotope.size&&e;return i&&e.innerHeight!=this.isotope.size.innerHeight},n._getMeasurement=function(){this.isotope._getMeasurement.apply(this,arguments)},n.getColumnWidth=function(){this.getSegmentSize("column","Width")},n.getRowHeight=function(){this.getSegmentSize("row","Height")},n.getSegmentSize=function(t,e){var i=t+e,n="outer"+e;if(this._getMeasurement(i,n),!this[i]){var o=this.getFirstItemSize();this[i]=o&&o[n]||this.isotope.size["inner"+e]}},n.getFirstItemSize=function(){var e=this.isotope.filteredItems[0];return e&&e.element&&t(e.element)},n.layout=function(){this.isotope.layout.apply(this.isotope,arguments)},n.getSize=function(){this.isotope.getSize(),this.size=this.isotope.size},i.modes={},i.create=function(t,e){function o(){i.apply(this,arguments)}return o.prototype=Object.create(n),o.prototype.constructor=o,e&&(o.options=e),o.prototype.namespace=t,i.modes[t]=o,o},i}),function(t,e){"function"==typeof define&&define.amd?define("masonry/masonry",["outlayer/outlayer","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer"),require("get-size")):t.Masonry=e(t.Outlayer,t.getSize)}(window,function(t,e){var i=t.create("masonry");return i.compatOptions.fitWidth="isFitWidth",i.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var t=0;t<this.cols;t++)this.colYs.push(0);this.maxY=0},i.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}var n=this.columnWidth+=this.gutter,o=this.containerWidth+this.gutter,s=o/n,r=n-o%n,a=r&&1>r?"round":"floor";s=Math[a](s),this.cols=Math.max(s,1)},i.prototype.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},i.prototype._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this._getColGroup(n),s=Math.min.apply(Math,o),r=o.indexOf(s),a={x:this.columnWidth*r,y:s},u=s+t.size.outerHeight,h=this.cols+1-o.length,d=0;h>d;d++)this.colYs[r+d]=u;return a},i.prototype._getColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++){var o=this.colYs.slice(n,n+t);e[n]=Math.max.apply(Math,o)}return e},i.prototype._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),s=o?n.left:n.right,r=s+i.outerWidth,a=Math.floor(s/this.columnWidth);a=Math.max(0,a);var u=Math.floor(r/this.columnWidth);u-=r%this.columnWidth?0:1,u=Math.min(this.cols-1,u);for(var h=this._getOption("originTop"),d=(h?n.top:n.bottom)+i.outerHeight,l=a;u>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},i.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},i.prototype._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},i.prototype.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/masonry",["../layout-mode","masonry/masonry"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode"),require("masonry-layout")):e(t.Isotope.LayoutMode,t.Masonry)}(window,function(t,e){"use strict";var i=t.create("masonry"),n=i.prototype,o={_getElementOffset:!0,layout:!0,_getMeasurement:!0};for(var s in e.prototype)o[s]||(n[s]=e.prototype[s]);var r=n.measureColumns;n.measureColumns=function(){this.items=this.isotope.filteredItems,r.call(this)};var a=n._getOption;return n._getOption=function(t){return"fitWidth"==t?void 0!==this.options.isFitWidth?this.options.isFitWidth:this.options.fitWidth:a.apply(this.isotope,arguments)},i}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/fit-rows",["../layout-mode"],e):"object"==typeof exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("fitRows"),i=e.prototype;return i._resetLayout=function(){this.x=0,this.y=0,this.maxY=0,this._getMeasurement("gutter","outerWidth")},i._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth+this.gutter,i=this.isotope.size.innerWidth+this.gutter;0!==this.x&&e+this.x>i&&(this.x=0,this.y=this.maxY);var n={x:this.x,y:this.y};return this.maxY=Math.max(this.maxY,this.y+t.size.outerHeight),this.x+=e,n},i._getContainerSize=function(){return{height:this.maxY}},e}),function(t,e){"function"==typeof define&&define.amd?define("isotope/js/layout-modes/vertical",["../layout-mode"],e):"object"==typeof module&&module.exports?module.exports=e(require("../layout-mode")):e(t.Isotope.LayoutMode)}(window,function(t){"use strict";var e=t.create("vertical",{horizontalAlignment:0}),i=e.prototype;return i._resetLayout=function(){this.y=0},i._getItemLayoutPosition=function(t){t.getSize();var e=(this.isotope.size.innerWidth-t.size.outerWidth)*this.options.horizontalAlignment,i=this.y;return this.y+=t.size.outerHeight,{x:e,y:i}},i._getContainerSize=function(){return{height:this.y}},e}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","desandro-matches-selector/matches-selector","fizzy-ui-utils/utils","isotope/js/item","isotope/js/layout-mode","isotope/js/layout-modes/masonry","isotope/js/layout-modes/fit-rows","isotope/js/layout-modes/vertical"],function(i,n,o,s,r,a){return e(t,i,n,o,s,r,a)}):"object"==typeof module&&module.exports?module.exports=e(t,require("outlayer"),require("get-size"),require("desandro-matches-selector"),require("fizzy-ui-utils"),require("isotope/js/item"),require("isotope/js/layout-mode"),require("isotope/js/layout-modes/masonry"),require("isotope/js/layout-modes/fit-rows"),require("isotope/js/layout-modes/vertical")):t.Isotope=e(t,t.Outlayer,t.getSize,t.matchesSelector,t.fizzyUIUtils,t.Isotope.Item,t.Isotope.LayoutMode)}(window,function(t,e,i,n,o,s,r){function a(t,e){return function(i,n){for(var o=0;o<t.length;o++){var s=t[o],r=i.sortData[s],a=n.sortData[s];if(r>a||a>r){var u=void 0!==e[s]?e[s]:e,h=u?1:-1;return(r>a?1:-1)*h}}return 0}}var u=t.jQuery,h=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^\s+|\s+$/g,"")},d=e.create("isotope",{layoutMode:"masonry",isJQueryFiltering:!0,sortAscending:!0});d.Item=s,d.LayoutMode=r;var l=d.prototype;l._create=function(){this.itemGUID=0,this._sorters={},this._getSorters(),e.prototype._create.call(this),this.modes={},this.filteredItems=this.items,this.sortHistory=["original-order"];for(var t in r.modes)this._initLayoutMode(t)},l.reloadItems=function(){this.itemGUID=0,e.prototype.reloadItems.call(this)},l._itemize=function(){for(var t=e.prototype._itemize.apply(this,arguments),i=0;i<t.length;i++){var n=t[i];n.id=this.itemGUID++}return this._updateItemsSortData(t),t},l._initLayoutMode=function(t){var e=r.modes[t],i=this.options[t]||{};this.options[t]=e.options?o.extend(e.options,i):i,this.modes[t]=new e(this)},l.layout=function(){return!this._isLayoutInited&&this._getOption("initLayout")?void this.arrange():void this._layout()},l._layout=function(){var t=this._getIsInstant();this._resetLayout(),this._manageStamps(),this.layoutItems(this.filteredItems,t),this._isLayoutInited=!0},l.arrange=function(t){this.option(t),this._getIsInstant();var e=this._filter(this.items);this.filteredItems=e.matches,this._bindArrangeComplete(),this._isInstant?this._noTransition(this._hideReveal,[e]):this._hideReveal(e),this._sort(),this._layout()},l._init=l.arrange,l._hideReveal=function(t){this.reveal(t.needReveal),this.hide(t.needHide)},l._getIsInstant=function(){var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;return this._isInstant=e,e},l._bindArrangeComplete=function(){function t(){e&&i&&n&&o.dispatchEvent("arrangeComplete",null,[o.filteredItems])}var e,i,n,o=this;this.once("layoutComplete",function(){e=!0,t()}),this.once("hideComplete",function(){i=!0,t()}),this.once("revealComplete",function(){n=!0,t()})},l._filter=function(t){var e=this.options.filter;e=e||"*";for(var i=[],n=[],o=[],s=this._getFilterTest(e),r=0;r<t.length;r++){var a=t[r];if(!a.isIgnored){var u=s(a);u&&i.push(a),u&&a.isHidden?n.push(a):u||a.isHidden||o.push(a)}}return{matches:i,needReveal:n,needHide:o}},l._getFilterTest=function(t){return u&&this.options.isJQueryFiltering?function(e){return u(e.element).is(t)}:"function"==typeof t?function(e){return t(e.element)}:function(e){return n(e.element,t)}},l.updateSortData=function(t){var e;t?(t=o.makeArray(t),e=this.getItems(t)):e=this.items,this._getSorters(),this._updateItemsSortData(e)},l._getSorters=function(){var t=this.options.getSortData;for(var e in t){var i=t[e];this._sorters[e]=f(i)}},l._updateItemsSortData=function(t){for(var e=t&&t.length,i=0;e&&e>i;i++){var n=t[i];n.updateSortData()}};var f=function(){function t(t){if("string"!=typeof t)return t;var i=h(t).split(" "),n=i[0],o=n.match(/^\[(.+)\]$/),s=o&&o[1],r=e(s,n),a=d.sortDataParsers[i[1]];
return t=a?function(t){return t&&a(r(t))}:function(t){return t&&r(t)}}function e(t,e){return t?function(e){return e.getAttribute(t)}:function(t){var i=t.querySelector(e);return i&&i.textContent}}return t}();d.sortDataParsers={parseInt:function(t){return parseInt(t,10)},parseFloat:function(t){return parseFloat(t)}},l._sort=function(){var t=this.options.sortBy;if(t){var e=[].concat.apply(t,this.sortHistory),i=a(e,this.options.sortAscending);this.filteredItems.sort(i),t!=this.sortHistory[0]&&this.sortHistory.unshift(t)}},l._mode=function(){var t=this.options.layoutMode,e=this.modes[t];if(!e)throw new Error("No layout mode: "+t);return e.options=this.options[t],e},l._resetLayout=function(){e.prototype._resetLayout.call(this),this._mode()._resetLayout()},l._getItemLayoutPosition=function(t){return this._mode()._getItemLayoutPosition(t)},l._manageStamp=function(t){this._mode()._manageStamp(t)},l._getContainerSize=function(){return this._mode()._getContainerSize()},l.needsResizeLayout=function(){return this._mode().needsResizeLayout()},l.appended=function(t){var e=this.addItems(t);if(e.length){var i=this._filterRevealAdded(e);this.filteredItems=this.filteredItems.concat(i)}},l.prepended=function(t){var e=this._itemize(t);if(e.length){this._resetLayout(),this._manageStamps();var i=this._filterRevealAdded(e);this.layoutItems(this.filteredItems),this.filteredItems=i.concat(this.filteredItems),this.items=e.concat(this.items)}},l._filterRevealAdded=function(t){var e=this._filter(t);return this.hide(e.needHide),this.reveal(e.matches),this.layoutItems(e.matches,!0),e.matches},l.insert=function(t){var e=this.addItems(t);if(e.length){var i,n,o=e.length;for(i=0;o>i;i++)n=e[i],this.element.appendChild(n.element);var s=this._filter(e).matches;for(i=0;o>i;i++)e[i].isLayoutInstant=!0;for(this.arrange(),i=0;o>i;i++)delete e[i].isLayoutInstant;this.reveal(s)}};var c=l.remove;return l.remove=function(t){t=o.makeArray(t);var e=this.getItems(t);c.call(this,t);for(var i=e&&e.length,n=0;i&&i>n;n++){var s=e[n];o.removeFrom(this.filteredItems,s)}},l.shuffle=function(){for(var t=0;t<this.items.length;t++){var e=this.items[t];e.sortData.random=Math.random()}this.options.sortBy="random",this._sort(),this._layout()},l._noTransition=function(t,e){var i=this.options.transitionDuration;this.options.transitionDuration=0;var n=t.apply(this,e);return this.options.transitionDuration=i,n},l.getFilteredItemElements=function(){return this.filteredItems.map(function(t){return t.element})},d});
\ No newline at end of file
...@@ -16,19 +16,17 @@ ...@@ -16,19 +16,17 @@
# #
# Description: B3log Solo language configurations(en_US). # Description: B3log Solo language configurations(en_US).
# Version: 1.1.2.2, Sep 6, 2016 # Version: 1.0.0.0, Feb 17, 2017
# Author: Liyuan Li # Author: Liyuan Li
# Author: Liang Ding
# #
onlineVisitorLabel=Visitor
tocLabel=Article ToC tocLabel=Article ToC
siteViewLabel=Site
viewsLabel=Heat
cmtLabel=Comments
postTimeLabel=Post At
readLabel=Read More readLabel=Read More
fightLabel=articles, fighting! nextArticleLabel=Next
ohLabel=Oh previousArticleLabel=Previous
articleCP1Label=Please indicate the source:
searchLabel=Search searchLabel=Search
subscribeLabel=Subscribe subscribeLabel=Subscribe
dynamicLabel=Dynamic dynamicLabel=Dynamic
...@@ -128,6 +126,7 @@ signIsNullLabel=This Sign is Null ...@@ -128,6 +126,7 @@ signIsNullLabel=This Sign is Null
statisticLabel=Blog Statistic statisticLabel=Blog Statistic
viewLabel=View viewLabel=View
countLabel=Posts countLabel=Posts
viewCountLabel=View Count
viewCount1Label=View Count: viewCount1Label=View Count:
articleCount1Label=Article Count: articleCount1Label=Article Count:
commentCountLabel=Comment Count commentCountLabel=Comment Count
...@@ -208,9 +207,9 @@ permalink1Label=Permalink: ...@@ -208,9 +207,9 @@ permalink1Label=Permalink:
permalinkLabel=Permalink permalinkLabel=Permalink
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> 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> 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 readmoreLabel=Read more\u00BB
readmore2Label=Read more readmore2Label=Read more
replyLabel=Reply\u00bb replyLabel=Reply\u00BB
homeLabel=Home homeLabel=Home
enableArticleUpdateHint1Label=Enable Article Update Hint: enableArticleUpdateHint1Label=Enable Article Update Hint:
allowVisitDraftViaPermalink1Label=Allow Visit Draft Via Link: allowVisitDraftViaPermalink1Label=Allow Visit Draft Via Link:
...@@ -277,8 +276,8 @@ duplicatedPermalinkLabel=Duplicated permalink! ...@@ -277,8 +276,8 @@ duplicatedPermalinkLabel=Duplicated permalink!
invalidPermalinkFormatLabel=Invalid permalink format! invalidPermalinkFormatLabel=Invalid permalink format!
duplicatedEmailLabel=Duplicated email! duplicatedEmailLabel=Duplicated email!
refreshAndRetryLabel=Please refresh and try again! refreshAndRetryLabel=Please refresh and try again!
editorLeaveLabel=Content is not null, Do you leave\uff1f editorLeaveLabel=Content is not null, Do you leave\uFF1F
editorPostLabel=Content is not null, Do you clear\uff1f editorPostLabel=Content is not null, Do you clear\uFF1F
#### ####
confirmRemoveLabel=Are You Sure? confirmRemoveLabel=Are You Sure?
confirmInitLabel=Are You Sure? confirmInitLabel=Are You Sure?
#
# Copyright (c) 2010-2017, b3log.org & hacpai.com
#
# 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: 1.0.0.0, Feb 17, 2017
# Author: Liyuan Li
#
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
searchLabel=\u641C\u7D22
subscribeLabel=\u8BA2\u9605
dynamicLabel=\u52A8\u6001
adminConsoleLabel=\u540E\u53F0\u7BA1\u7406
adminIndexLabel=\u540E\u53F0\u9996\u9875
postArticleLabel=\u53D1\u5E03\u65E5\u5FD7
articleListLabel=\u65E5\u5FD7\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\u65E5\u5FD7
recentCommentsLabel=\u6700\u65B0\u8BC4\u8BBA
postCommentsLabel=\u53D1\u8868\u8BC4\u8BBA
mostCommentArticlesLabel=\u8BC4\u8BBA\u6700\u591A\u7684\u65E5\u5FD7
mostViewCountArticlesLabel=\u8BBF\u95EE\u6700\u591A\u7684\u65E5\u5FD7
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
viewCountLabel=\u6D4F\u89C8\u6570
viewCount1Label=\u6D4F\u89C8\u6B21\u6570\uFF1A
articleCount1Label=\u65E5\u5FD7\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\u65E5\u5FD7
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=\u65E5\u5FD7\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\u65E5\u5FD7\u663E\u793A\u6570\u76EE\uFF1A
indexRecentCommentDisplayCnt1Label=\u6700\u65B0\u8BC4\u8BBA\u663E\u793A\u6570\u76EE\uFF1A
indexMostCommentArticleDisplayCnt1Label=\u8BC4\u8BBA\u6700\u591A\u65E5\u5FD7\u663E\u793A\u6570\u76EE\uFF1A
indexMostViewArticleDisplayCnt1Label=\u8BBF\u95EE\u6700\u591A\u6700\u591A\u65E5\u5FD7\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\u65E5\u5FD7\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
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\u65E5\u5FD7\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
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\u65E5\u5FD7\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=\u65E5\u5FD7
tagArticlesLabel=\u6807\u7B7E\u65E5\u5FD7\u5217\u8868
dateArticlesLabel=\u5B58\u6863\u65E5\u5FD7\u5217\u8868
authorArticlesLabel=\u4F5C\u8005\u65E5\u5FD7\u5217\u8868
indexArticleLabel=\u9996\u9875\u65E5\u5FD7\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
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\u65E5\u5FD7
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
duplicatedPermalinkLabel=\u94FE\u63A5\u91CD\u590D\uFF01
invalidPermalinkFormatLabel=\u975E\u6CD5\u7684\u94FE\u63A5\u683C\u5F0F\uFF01
duplicatedEmailLabel=\u90AE\u4EF6\u5730\u5740\u91CD\u590D\uFF01
refreshAndRetryLabel=\u8BF7\u5237\u65B0\u91CD\u8BD5\uFF01
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
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="other">
<div class="title">
<h2><i class="icon-link"></i>
&nbsp;${linkLabel}</h2>
</div>
<#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>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
</body>
</html>
<#macro comments commentList article>
<header class='title'><h2>${commentLabel}</h2></header>
<ul class="comments" id="comments">
<#list commentList as comment>
<#include 'common-comment.ftl'/>
</#list>
</ul>
<#if article.commentable>
<header class='title'><h2>${postCommentsLabel}</h2></header>
<table id="commentForm" class="form">
<tbody>
<#if !isLoggedIn>
<tr>
<td>
<input placeholder="${commentNameLabel}" type="text" class="normalInput" id="commentName"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentEmailLabel}" type="email" class="normalInput" id="commentEmail"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentURLLabel}" type="url" id="commentURL"/>
</td>
</tr>
</#if>
<tr>
<td id="emotions" class="emotions">
<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>
<td>
<textarea rows="5" cols="96" id="comment"></textarea>
</td>
</tr>
<#if !isLoggedIn>
<tr>
<td>
<input style="width:50%" placeholder="${captchaLabel}" type="text" class="normalInput" id="commentValidate"/>
<img class="captcha" id="captcha" alt="validate" src="${servePath}/captcha.do" />
</td>
</tr>
</#if>
<tr>
<td colspan="2" align="right">
<span class="error-msg" id="commentErrorTip"></span>
<button id="submitCommentButton" onclick="page.submitComment();">${submmitCommentLabel}</button>
</td>
</tr>
</tbody>
</table>
</#if>
</#macro>
<#macro comment_script oId>
<script type="text/javascript" src="${staticServePath}/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}",
"loadingLabel": "${loadingLabel}",
"oId": "${oId}",
"skinDirName": "${skinDirName}",
"blogHost": "${blogHost}",
"randomArticles1Label": "${randomArticles1Label}",
"externalRelevantArticles1Label": "${externalRelevantArticles1Label}"
});
var replyTo = function (id) {
var commentFormHTML = "<table class='form comment-reply' id='replyForm'>";
page.addReplyForm(id, commentFormHTML);
};
(function () {
page.load();
Skin.initArticle();
// emotions
page.replaceCommentsEm("#comments .comment-content");
<#nested>
})();
</script>
</#macro>
\ No newline at end of file
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<meta name="revised" content="${blogTitle?html}, ${year}" /> <meta name="revised" content="${blogTitle?html}, ${year}" />
<meta name="copyright" content="B3log" /> <meta name="copyright" content="B3log" />
<meta http-equiv="Window-target" content="_top" /> <meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/${skinDirName}${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" /> <link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/css/base${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" /> <link href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" />
<link rel="icon" type="image/png" href="${servePath}/favicon.png" /> <link rel="icon" type="image/png" href="${servePath}/favicon.png" />
${htmlHead} ${htmlHead}
......
...@@ -10,15 +10,17 @@ ...@@ -10,15 +10,17 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content"> <div class="main-wrap">
<article class="post-body"> <main>
<article class="post">
${page.pageContent} ${page.pageContent}
</article>
<@comments commentList=pageComments article=page></@comments> <@comments commentList=pageComments article=page></@comments>
</div> </article>
<#include "side.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
<@comment_script oId=page.oId></@comment_script> <@comment_script oId=page.oId></@comment_script>
</body> </body>
......
<aside>
<#if noticeBoard??>
<div class="ad content-reset">
${noticeBoard}
</div>
</#if>
<#if 0 != mostUsedTags?size>
<div class="module">
<header><h2>${popTagsLabel}</h2></header>
<main>
<#list mostUsedTags as tag>
<a rel="tag" title="${tag.tagTitle}(${tag.tagPublishedRefCount})"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}"
class="tag tooltipped tooltipped-n" aria-label="${tag.tagPublishedRefCount} ${countLabel}${articleLabel}">
${tag.tagTitle}</a>
</#list>
</main>
</div>
</#if>
<div class="module meta">
<header>
<h2>${adminUser.userName}</h2>
</header>
<main class="fn-clear">
<img src="${adminUser.userAvatar}" aria-label="${adminUser.userName}"/>
<div class="fn-right">
<a href="${servePath}/archives.html">
${statistic.statisticPublishedBlogArticleCount}
<span class="ft-gray">${articleLabel}</span></a><br/>
<a href="${servePath}/dynamic.html">
${statistic.statisticPublishedBlogCommentCount}
<span class="ft-gray">${commentLabel}</span></a><br/>
${statistic.statisticBlogViewCount} <span class="ft-gray">${viewLabel}</span><br/>
${onlineVisitorCnt} <span class="ft-gray">${onlineVisitorLabel}</span>
</div>
</main>
</div>
<#if 0 != mostCommentArticles?size>
<div class="module">
<header><h2>${mostCommentArticlesLabel}</h2></header>
<main class="list">
<ul>
<#list mostCommentArticles as article>
<li>
<a rel="nofollow" aria-label="${article.articleCommentCount} ${commentLabel}"
class="tooltipped tooltipped-e"
href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
</li>
</#list>
</ul>
</main>
</div>
</#if>
<#if 0 != mostViewCountArticles?size>
<div class="module">
<header><h2>${mostViewCountArticlesLabel}</h2></header>
<main class="list">
<ul>
<#list mostViewCountArticles as article>
<li>
<a rel="nofollow" aria-label="${article.articleCommentCount} ${commentLabel}"
class="tooltipped tooltipped-e"
href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
</li>
</#list>
</ul>
</main>
</div>
</#if>
</aside>
\ No newline at end of file
# #
# Copyright (c) 2010-2016, b3log.org & hacpai.com # Copyright (c) 2010-2017, b3log.org & hacpai.com
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
...@@ -15,12 +15,12 @@ ...@@ -15,12 +15,12 @@
# #
# #
# Description: next skin. # Description: Spaces skin.
# Version: 0.1.1.0, Jun 29, 2016 # Version: 1.0.0.0, Feb 17, 2017
# Author: Liyuan Li # Author: Liyuan Li
# #
name=next name=9IPHP
version=1.0.0 version=1.0.0
forSolo=1.6.0 forSolo=1.9.0
memo=https://github.com/iissnan/hexo-theme-next memo=https://github.com/9IPHP
<#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>
<#include "header.ftl">
<div class="wrapper">
<div class="main-wrap">
<main class="other">
<div class="title">
<h2><i class="icon-tags"></i>
&nbsp;${tag.tagTitle}
<small>${tagLabel}</small>
</div>
<ul class="list">
<#list articles as article>
<li>
<a class="post-title" href="${servePath}${article.articlePermalink}">
<span>${article.articleTitle}</span>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
<time class="fn-right">
<i class="icon-date"></i> ${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</a>
</li>
</#list>
</ul>
<#if 0 != paginationPageCount>
<div class="fn-clear">
<nav class="pagination fn-right">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="page-number">&laquo;</a>
<a class="page-number" href="${servePath}${path}/1">1</a> <span class="page-number">...</span>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> <span class="page-number">...</span>
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="page-number">&raquo;</a>
</#if>
</nav>
</div>
</#if>
</main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl">
</body>
</html>
...@@ -9,28 +9,37 @@ ...@@ -9,28 +9,37 @@
</head> </head>
<body> <body>
<#include "header.ftl"> <#include "header.ftl">
<main class="main wrapper"> <div class="wrapper">
<div class="content"> <div class="main-wrap">
<div class="tag-cloud"> <main class="other">
${sumLabel} ${tags?size} ${tagLabel} <div class="title">
<ul class="tag-cloud-tags fn-clear" id="tags"> <h2><i class="icon-tags"></i>
&nbsp; ${sumLabel} ${tags?size} ${tagLabel}
</div>
<div class="tags">
<#list tags as tag> <#list tags as tag>
<li> <a rel="tag" data-count="${tag.tagPublishedRefCount}" class="tag"
<a rel="tag" data-count="${tag.tagPublishedRefCount}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}"> href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
<span>${tag.tagTitle}</span> <span>${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>) (<b>${tag.tagPublishedRefCount}</b>)
</a> </a>
</li>
</#list> </#list>
</ul>
</div>
</div> </div>
<#include "side.ftl">
</main> </main>
<#include "side.ftl">
</div>
</div>
<#include "footer.ftl"> <#include "footer.ftl">
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/isotope.pkgd.min.js" charset="utf-8"></script>
<script> <script>
Util.buildTags(); $('.tags').isotope({
transitionDuration: '1.5s',
filter: 'a',
layoutMode: 'fitRows'
});
$('.tags').isotope({
sortBy: 'random'
});
</script> </script>
</body> </body>
</html> </html>
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content page-archive">
<section class="posts-collapse">
<span class="archive-move-on"></span>
<span class="archive-page-counter">
${ohLabel}..! ${sumLabel} ${statistic.statisticPublishedBlogArticleCount} ${fightLabel}
</span>
<#if 0 != archiveDates?size>
<#list archiveDates as archiveDate>
<article>
<header class="post-header">
<h1>
<#if "en" == localeString?substring(0, 2)>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})
</a>
<#else>
<a class="post-title" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})
</a>
</#if>
</h1>
</header>
</article>
</#list>
</#if>
</section>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
</body>
</html>
<section class="posts-expand">
<#list articles as article>
<article class="post-item">
<header>
<h1>
<a class="post-title-link" rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="post-meta">
<span>
${postTimeLabel}
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
<span>
&nbsp; | &nbsp;
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${cmtLabel}</a>
</span>
&nbsp; | &nbsp;${viewsLabel} ${article.articleViewCount}°C
</div>
</header>
<div class="article-body">
${article.articleAbstract}
</div>
<div class="post-more-link">
<a href="${servePath}${article.articlePermalink}#more" rel="contents">
${readLabel} &raquo;
</a>
</div>
</article>
</#list>
</section>
<#if 0 != paginationPageCount>
<nav class="pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="extend next"><<</a>
<a class="page-number" href="${servePath}${path}/1">1</a> ...
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> ...
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="extend next">>></a>
</#if>
</nav>
</#if>
\ No newline at end of file
<#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>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<article class="posts-expand">
<header class="post-header">
<h1 class="post-title">
${article.articleTitle}
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h1>
<div class="post-meta">
<span class="post-time">
${postTimeLabel}
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
</span>
<span class="post-comments-count">
&nbsp; | &nbsp;
<a href="${servePath}${article.articlePermalink}#comments">
${article.articleCommentCount} ${cmtLabel}</a>
</span>
&nbsp; | &nbsp; ${viewsLabel}
${article.articleViewCount}°C
</div>
</header>
<div class="post-body article-body">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</div>
<footer>
<div class="post-tags">
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a>
</#list>
</div>
<div class="post-nav fn-clear">
<#if previousArticlePermalink??>
<div class="post-nav-prev post-nav-item fn-right">
<a href="${servePath}${previousArticlePermalink}" rel="next" title="${previousArticleTitle}">
${previousArticleTitle} >
</a>
</div>
</#if>
<#if nextArticlePermalink??>
<div class="post-nav-next post-nav-item fn-left">
<a href="${servePath}${nextArticlePermalink}" rel="prev" title="${nextArticleTitle}">
< ${nextArticleTitle}
</a>
</div>
</#if>
</div>
</footer>
</article>
</div>
<@comments commentList=articleComments article=article></@comments>
<div id="externalRelevantArticles"></div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>");
</#if>
</@comment_script>
</body>
</html>
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe901;" glyph-name="rss" d="M136.294 209.070c-75.196 0-136.292-61.334-136.292-136.076 0-75.154 61.1-135.802 136.292-135.802 75.466 0 136.494 60.648 136.494 135.802-0.002 74.742-61.024 136.076-136.494 136.076zM0.156 612.070v-196.258c127.784 0 247.958-49.972 338.458-140.512 90.384-90.318 140.282-211.036 140.282-339.3h197.122c-0.002 372.82-303.282 676.070-675.862 676.070zM0.388 960v-196.356c455.782 0 826.756-371.334 826.756-827.644h196.856c0 564.47-459.254 1024-1023.612 1024z" />
<glyph unicode="&#xe973;" glyph-name="register" d="M384 224c0 151.234 95.874 280.486 230.032 330.2 16.28 36.538 25.968 77.164 25.968 117.8 0 159.058 0 288-192 288s-192-128.942-192-288c0-99.060 57.502-198.104 128-237.832v-52.78c-217.102-17.748-384-124.42-384-253.388h397.306c-8.664 30.53-13.306 62.732-13.306 96zM736 512c-159.058 0-288-128.942-288-288s128.942-288 288-288c159.056 0 288 128.942 288 288s-128.942 288-288 288zM896 192h-128v-128h-64v128h-128v64h128v128h64v-128h128v-64z" />
<glyph unicode="&#xe994;" glyph-name="setting" d="M933.79 349.75c-53.726 93.054-21.416 212.304 72.152 266.488l-100.626 174.292c-28.75-16.854-62.176-26.518-97.846-26.518-107.536 0-194.708 87.746-194.708 195.99h-201.258c0.266-33.41-8.074-67.282-25.958-98.252-53.724-93.056-173.156-124.702-266.862-70.758l-100.624-174.292c28.97-16.472 54.050-40.588 71.886-71.478 53.638-92.908 21.512-211.92-71.708-266.224l100.626-174.292c28.65 16.696 61.916 26.254 97.4 26.254 107.196 0 194.144-87.192 194.7-194.958h201.254c-0.086 33.074 8.272 66.57 25.966 97.218 53.636 92.906 172.776 124.594 266.414 71.012l100.626 174.29c-28.78 16.466-53.692 40.498-71.434 71.228zM512 240.668c-114.508 0-207.336 92.824-207.336 207.334 0 114.508 92.826 207.334 207.336 207.334 114.508 0 207.332-92.826 207.332-207.334-0.002-114.51-92.824-207.334-207.332-207.334z" />
<glyph unicode="&#xea13;" glyph-name="login" d="M384 448h-320v128h320v128l192-192-192-192zM1024 960v-832l-384-192v192h-384v256h64v-192h320v576l256 128h-576v-256h-64v320z" />
<glyph unicode="&#xea14;" glyph-name="logout" d="M768 320v128h-320v128h320v128l192-192zM704 384v-256h-320v-192l-384 192v832h704v-320h-64v256h-512l256-128v-576h256v192z" />
</font></defs></svg>
\ No newline at end of file
{
"IcoMoonType": "selection",
"icons": [
{
"icon": {
"paths": [
"M384 736c0-151.234 95.874-280.486 230.032-330.2 16.28-36.538 25.968-77.164 25.968-117.8 0-159.058 0-288-192-288s-192 128.942-192 288c0 99.060 57.502 198.104 128 237.832v52.78c-217.102 17.748-384 124.42-384 253.388h397.306c-8.664-30.53-13.306-62.732-13.306-96z",
"M736 448c-159.058 0-288 128.942-288 288s128.942 288 288 288c159.056 0 288-128.942 288-288s-128.942-288-288-288zM896 768h-128v128h-64v-128h-128v-64h128v-128h64v128h128v64z"
],
"width": 1024,
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"user-plus",
"user",
"user-add",
"profile",
"avatar",
"person",
"member"
],
"defaultCode": 59763,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "user-plus, user2",
"name": "register",
"id": 115,
"order": 42,
"prevSize": 32,
"code": 59763
},
"setIdx": 0,
"setId": 1,
"iconIdx": 115
},
{
"icon": {
"paths": [
"M933.79 610.25c-53.726-93.054-21.416-212.304 72.152-266.488l-100.626-174.292c-28.75 16.854-62.176 26.518-97.846 26.518-107.536 0-194.708-87.746-194.708-195.99h-201.258c0.266 33.41-8.074 67.282-25.958 98.252-53.724 93.056-173.156 124.702-266.862 70.758l-100.624 174.292c28.97 16.472 54.050 40.588 71.886 71.478 53.638 92.908 21.512 211.92-71.708 266.224l100.626 174.292c28.65-16.696 61.916-26.254 97.4-26.254 107.196 0 194.144 87.192 194.7 194.958h201.254c-0.086-33.074 8.272-66.57 25.966-97.218 53.636-92.906 172.776-124.594 266.414-71.012l100.626-174.29c-28.78-16.466-53.692-40.498-71.434-71.228zM512 719.332c-114.508 0-207.336-92.824-207.336-207.334 0-114.508 92.826-207.334 207.336-207.334 114.508 0 207.332 92.826 207.332 207.334-0.002 114.51-92.824 207.334-207.332 207.334z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"cog",
"gear",
"preferences",
"settings",
"generate",
"control",
"options"
],
"defaultCode": 59796,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "cog, gear",
"name": "setting",
"id": 148,
"order": 40,
"prevSize": 32,
"code": 59796
},
"setIdx": 0,
"setId": 1,
"iconIdx": 148
},
{
"icon": {
"paths": [
"M384 512h-320v-128h320v-128l192 192-192 192zM1024 0v832l-384 192v-192h-384v-256h64v192h320v-576l256-128h-576v256h-64v-320z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"enter",
"signin",
"login"
],
"defaultCode": 59923,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "enter, signin",
"name": "login",
"id": 275,
"order": 38,
"prevSize": 32,
"code": 59923
},
"setIdx": 0,
"setId": 1,
"iconIdx": 275
},
{
"icon": {
"paths": [
"M768 640v-128h-320v-128h320v-128l192 192zM704 576v256h-320v192l-384-192v-832h704v320h-64v-256h-512l256 128v576h256v-192z"
],
"attrs": [],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"exit",
"signout",
"logout",
"quit",
"close"
],
"defaultCode": 59924,
"grid": 16
},
"attrs": [],
"properties": {
"ligatures": "exit, signout",
"name": "logout",
"id": 276,
"order": 39,
"prevSize": 32,
"code": 59924
},
"setIdx": 0,
"setId": 1,
"iconIdx": 276
},
{
"icon": {
"paths": [
"M136.294 750.93c-75.196 0-136.292 61.334-136.292 136.076 0 75.154 61.1 135.802 136.292 135.802 75.466 0 136.494-60.648 136.494-135.802-0.002-74.742-61.024-136.076-136.494-136.076zM0.156 347.93v196.258c127.784 0 247.958 49.972 338.458 140.512 90.384 90.318 140.282 211.036 140.282 339.3h197.122c-0.002-372.82-303.282-676.070-675.862-676.070zM0.388 0v196.356c455.782 0 826.756 371.334 826.756 827.644h196.856c0-564.47-459.254-1024-1023.612-1024z"
],
"attrs": [
{}
],
"isMulticolor": false,
"isMulticolor2": false,
"tags": [
"feed",
"rss",
"social"
],
"grid": 16
},
"attrs": [
{}
],
"properties": {
"order": 1,
"id": 0,
"prevSize": 32,
"code": 59649,
"name": "rss"
},
"setIdx": 1,
"setId": 0,
"iconIdx": 1
}
],
"height": 1024,
"metadata": {
"name": "icomoon"
},
"preferences": {
"showGlyphs": true,
"showQuickUse": true,
"showQuickUse2": true,
"showSVGs": true,
"fontPref": {
"prefix": "icon-",
"metadata": {
"fontFamily": "icomoon"
},
"metrics": {
"emSize": 1024,
"baseline": 6.25,
"whitespace": 50
},
"embed": false
},
"imagePref": {
"prefix": "icon-",
"png": true,
"useClassSelector": true,
"color": 4473924,
"bgColor": 16777215
},
"historySize": 100,
"showCodes": false,
"gridSize": 16
}
}
\ No newline at end of file
/**
* Copyright (c) 2010-2016, b3log.org & hacpai.com
*
* 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.
*/
@charset "utf-8";
/*
* skin next style
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.2.2.1, Sep 6, 2016
*/
/* start reset */
html {
background-color: #f5f5f5;
}
body {
margin: 0;
font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
font-size: 14px;
color: #555;
background: #fff;
}
a {
color: #555;
text-decoration: none;
border-bottom: 1px solid #999;
}
a:active,
a:hover {
outline: 0;
}
a:hover {
color: #222;
border-bottom-color: #222;
}
hr {
margin: 40px 0;
height: 3px;
border: none;
background-color: #ddd;
background-image: repeating-linear-gradient(-45deg, #fff, #fff 4px, transparent 4px, transparent 8px);
}
blockquote {
padding: 0 15px;
color: #666;
border-left: 4px solid #ddd;
}
img {
max-width: 100%;
height: auto;
}
/* end reset */
/* start function */
.fn-clear:before,
.fn-clear:after {
display: table;
content: "";
line-height: 0;
}
.fn-clear:after {
clear: both;
line-height: 0;
}
.fn-left {
float: left;
}
.fn-right {
float: right;
}
.fn-none {
display: none;
}
/* end function */
/* start common */
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?a0psdo');
src: url('fonts/icomoon.eot?a0psdo#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?a0psdo') format('truetype'),
url('fonts/icomoon.woff?a0psdo') format('woff'),
url('fonts/icomoon.svg?a0psdo#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-register:before {
content: "\e973";
}
.icon-setting:before {
content: "\e994";
}
.icon-login:before {
content: "\ea13";
}
.icon-logout:before {
content: "\ea14";
}
.icon-rss:before {
content: "\e901";
}
.form {
width: 100%;
margin-top: 50px;
}
.form input,
.form textarea,
.form button {
border: 1px solid #CCCCCC;
background-color: #FAFAFA;
border-radius: 3px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;
padding: 7px 8px;
width: 100%;
box-sizing: border-box;
outline: none;
}
.form button {
width: auto;
}
.form input:focus,
.form textarea:focus {
background-color: #FFF;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset, 0 0 5px rgba(81, 167, 232, 0.5);
border: 1px solid #51A7E8;
}
.error-msg {
color: #9EABB3;
margin-right: 10px;
}
/* end common */
/* start emotions */
.em00, .em01, .em02, .em03, .em04, .em05, .em06, .em07, .em08, .em09,
.em10, .em11, .em12, .em13, .em14 {
cursor: pointer;
background-image: url("../images/emotions/emotions-ease.png");
float: left;
height: 24px;
margin-right: 5px;
width: 24px;
transition: all .2s ease-out;
-webkit-transition: all .2s ease-out;
-moz-transition: all .2s ease-out;
}
#emotions span:hover {
transform: scale(1.2) rotate(360deg);
-webkit-transform: scale(1.2) rotate(360deg);
-moz-transform: scale(1.2) rotate(360deg);
}
.em01 {
background-position: -24px 0;
}
.em02 {
background-position: -48px 0;
}
.em03 {
background-position: -72px 0;
}
.em04 {
background-position: -96px 0;
}
.em05 {
background-position: 0px -24px;
}
.em06 {
background-position: -24px -24px;
}
.em07 {
background-position: -48px -24px;
}
.em08 {
background-position: -72px -24px;
}
.em09 {
background-position: -96px -24px;
}
.em10 {
background-position: 0 -48px;
}
.em11 {
background-position: -24px -48px ;
}
.em12 {
background-position: -48px -48px;
}
.em13 {
background-position: -72px -48px;
}
.em14 {
background-position: -96px -48px;
}
/* end emotions */
/* start framework */
.wrapper {
max-width: 700px;
min-width: 600px;
margin: 0 auto;
padding: 0 10px;
}
.main {
position: relative;
top: -50px;
opacity: 0;
}
.header {
background: #f5f5f5;
margin-bottom: 80px;
padding: 40px 0px;
}
.logo-wrap {
float: left;
overflow: hidden;
top: 0;
opacity: 0;
}
.logo-line-before,
.logo-line-after {
display: block;
overflow: hidden;
margin: 0 auto;
width: 75%;
}
.logo-line-before i,
.logo-line-after i {
position: relative;
display: block;
height: 2px;
background: #222;
left: -100%;
}
.logo-line-after i {
left: auto;
right: -100%;
}
.logo-wrap .site-title {
font-size: 22px;
font-weight: bolder;
opacity: 0;
top: -10px;
position: relative;
}
.logo-wrap > a {
position: relative;
display: inline-block;
padding: 2px 1px;
color: #222;
line-height: 2;
border-bottom: none;
font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
}
.site-nav-toggle {
display: none;
}
.menu {
float: left;
margin: 5px 0 0 20px;
padding: 0 20px;
opacity: 0;
}
.menu .menu-item {
display: inline-block;
}
.menu .menu-item a {
padding: 5px 10px;
border: none;
transition-property: background;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.menu .menu-item a:hover {
background: #e1e1e1;
}
.site-search {
float: right;
margin-top: 15px;
}
.site-search input {
padding: 3px;
border: none;
padding-left: 18px;
border-radius: 0;
width: 140px;
background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGhlaWdodD0iMTZweCIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNnB4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNMTUuNywxNC4zbC0zLjEwNS0zLjEwNUMxMy40NzMsMTAuMDI0LDE0LDguNTc2LDE0LDdjMC0zLjg2Ni0zLjEzNC03LTctN1MwLDMuMTM0LDAsN3MzLjEzNCw3LDcsNyAgYzEuNTc2LDAsMy4wMjQtMC41MjcsNC4xOTQtMS40MDVMMTQuMywxNS43YzAuMTg0LDAuMTg0LDAuMzgsMC4zLDAuNywwLjNjMC41NTMsMCwxLTAuNDQ3LDEtMUMxNiwxNC43ODEsMTUuOTQ2LDE0LjU0NiwxNS43LDE0LjN6ICAgTTIsN2MwLTIuNzYyLDIuMjM4LTUsNS01czUsMi4yMzgsNSw1cy0yLjIzOCw1LTUsNVMyLDkuNzYyLDIsN3oiLz48L3N2Zz4=") no-repeat 0 50%;
background-size: 12px 12px;
outline: none;
border-bottom: 1px solid #999;
opacity: 0.5;
}
.site-search input:focus {
opacity: 1;
}
.footer {
margin-top: 80px;
padding: 10px 20px;
background: #f5f5f5;
color: #666;
line-height: 2;
}
.sidebar-toggle {
position: fixed;
right: 50px;
bottom: 45px;
width: 15px;
height: 15px;
padding: 5px;
background: #222;
line-height: 0;
z-index: 1050;
cursor: pointer;
-webkit-transform: translateZ(0);
}
.sidebar-toggle.has-toc .sidebar-toggle-line{
background: #87daff;
}
.sidebar-toggle-line {
position: relative;
display: inline-block;
vertical-align: top;
height: 2px;
width: 100%;
background: #fff;
margin-top: 4px;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.sidebar-toggle-line:first-child {
margin-top: 0;
}
.sidebar-toggle:hover .sidebar-toggle-line-first {
width: 50%;
transform: rotateZ(-45deg);
top: 3px;
}
.sidebar-toggle:hover .sidebar-toggle-line-middle {
width: 90%;
}
.sidebar-toggle:hover .sidebar-toggle-line-last {
width: 50%;
transform: rotateZ(45deg);
top: -3px;
}
.sidebar-toggle.sidebar-active .sidebar-toggle-line-first {
width: 100%;
transform: rotateZ(-45deg);
top: 6px;
}
.sidebar-toggle.sidebar-active .sidebar-toggle-line-middle {
opacity: 0;
}
.sidebar-toggle.sidebar-active .sidebar-toggle-line-last {
width: 100%;
transform: rotateZ(45deg);
top: -6px;
}
.back-to-top {
position: fixed;
bottom: 19px;
right: 50px;
z-index: 1050;
width: 15px;
height: 13px;
padding: 5px;
background: #222;
color: #fff;
cursor: pointer;
-webkit-transform: translateZ(0);
}
.back-to-top:before {
display: block;
content: " ";
margin-top: 2px;
width: 0;
height: 0;
border-width: 0 7px 8px 7px;
border-color: transparent transparent #fff transparent;
border-style: solid;
}
/* end framework */
/* start side */
.sidebar {
width: 320px;
position: fixed;
right: -320px;
top: 0;
bottom: 0;
z-index: 1040;
box-shadow: inset 0 2px 6px #000;
background: #222;
-webkit-transform: translateZ(0);
padding: 20px 10px;
color: #999;
text-align: center;
box-sizing: border-box;
}
.sidebar a {
color: #999;
border-bottom-color: #555;
}
.sidebar a:hover {
color: #eee;
}
.sidebar .site-author-image {
display: block;
margin: 20px auto 0;
max-width: 96px;
height: auto;
border: 2px solid #333;
padding: 2px;
}
.sidebar .site-author-name {
margin: 5px 0 0;
color: #f5f5f5;
}
.sidebar .site-description {
margin-top: 5px;
font-size: 14px;
color: #555;
}
.sidebar .site-state-item {
display: inline-block;
padding: 0 15px;
border-left: 1px solid #333;
}
.sidebar .site-state-item:first-child {
border-left: none;
}
.sidebar .site-state-item a {
border-bottom: none;
}
.sidebar .site-state-item-count {
display: block;
text-align: center;
font-size: 18px;
}
.sidebar .site-state-item-name {
font-size: 13px;
}
.sidebar .feed-link {
margin-top: 20px;
}
.sidebar .feed-link a {
display: inline-block;
padding: 3px 15px;
color: #fc6423;
border: 1px solid #fc6423;
border-radius: 4px;
}
.sidebar .feed-link a:hover {
color: #fff;
background: #fc6423;
}
.sidebar .links-of-author {
margin-top: 20px;
}
.sidebar .links-of-author a {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
margin-bottom: 10px;
border-bottom-color: #555;
font-size: 13px;
}
.sidebar .links-of-author a:before {
display: inline-block;
vertical-align: middle;
margin-right: 3px;
content: " ";
width: 4px;
height: 4px;
border-radius: 50%;
background: #0dd5ff;
}
.sidebar .b3-solo-list {
margin: 20px;
list-style: none;
text-align: left;
padding: 0;
font-size: 14px;
line-height: 2;
}
.sidebar section {
opacity: 0;
position: relative;
}
.sidebar > ul > li {
display: inline-block;
cursor: pointer;
border-bottom: 1px solid transparent;
font-size: 14px;
color: #555;
}
.sidebar > ul > li:hover {
color: #f5f5f5;
}
.sidebar > ul > li.current {
color: #87daff;
border-bottom-color: #87daff;
}
.sidebar > ul > li:last-child {
margin-left: 10px;
}
/* end side */
/* start list*/
.posts-expand .post-item {
margin-top: 120px;
}
.posts-expand .post-item:first-child {
margin-top: 0;
}
.post-title-link {
display: inline-block;
position: relative;
color: #555;
border-bottom: none;
line-height: 1.2;
vertical-align: top;
font-size: 26px;
font-weight: 400;
}
.post-title-link::before {
content: "";
position: absolute;
width: 100%;
height: 2px;
bottom: 0;
left: 0;
background-color: #000;
visibility: hidden;
transform: scaleX(0);
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.post-title-link:hover::before {
visibility: visible;
transform: scaleX(1);
}
.posts-expand .post-meta {
margin: 3px 0 60px 0;
color: #999;
font-size: 12px;
}
.post-more-link a {
color: #666;
border: none;
border-bottom: 2px solid #666;
transition-property: border;
}
.post-more-link a:hover {
border-bottom-color: #222;
}
.pagination {
border-top: 1px solid #eee;
margin: 120px 0 0;
text-align: left;
}
.pagination .next,
.pagination .page-number {
display: inline-block;
position: relative;
top: -1px;
margin: 0 5px;
padding: 0 10px;
line-height: 30px;
border-bottom: 0;
border-top: 1px solid #eee;
transition-property: border-color;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.pagination .next:hover,
.pagination .page-number:hover {
border-top-color: #222;
}
.pagination .page-number.current {
color: #fff;
background: #ccc;
border-top-color: #ccc;
}
/* end list*/
/* start article */
.post-header {
text-align: center;
}
.post-body {
word-wrap: break-word;
}
.post-body img {
box-sizing: border-box;
margin: auto;
}
.posts-expand .post-tags {
margin-top: 40px;
}
.posts-expand .post-tags a {
padding: 1px 5px;
background: #f5f5f5;
border-bottom: none;
}
.posts-expand .post-tags a:hover {
background: #ccc;
}
.posts-expand .post-nav {
margin-top: 40px;
overflow: hidden;
padding: 10px;
white-space: nowrap;
border-top: 1px solid #eee;
}
.post-nav-item a:hover {
color: #222;
border-bottom: none;
}
.post-nav-item a {
position: relative;
display: inline-block;
line-height: 25px;
font-size: 14px;
color: #555;
border-bottom: none;
width: 50%;
}
#externalRelevantArticles h4 {
margin-bottom: 0;
}
#externalRelevantArticles ul {
margin-top: 5px;
}
.article-body {
text-align: justify;
}
.article-body p {
margin: 0 0 25px 0;
}
/* end article */
/* start comments */
ul.comments {
padding: 0;
list-style: none;
margin-top: 50px;
position: relative;
}
ul.comments li {
padding: 10px;
white-space: normal;
word-wrap: break-word;
position: relative;
border-bottom: #EBF2F6 1px solid;
}
ul.comments li:hover {
background-color: #F7F7F7;
}
ul.comments .avatar-48 {
position: absolute;
box-shadow: 0 0 2px #ddd;
height: 48px;
width: 48px;
margin: 8px 10px 0 0;
border-radius: 24px;
}
ul.comments .comment-body {
margin: 8px 0 0 60px;
min-height: 50px;
}
ul.comments li.comment-body-ref {
position: absolute;
z-index: 10;
background-color: #EBF2F6;
border: #d5dbde 1px solid;
width: 80%;
left: 69px;
}
ul.comments .comment-meta {
font-family: "Open Sans","Microsoft Yahei",Helvetica;
color: #9eabb3;
font-size: 13px;
}
ul.comments .comment-meta a {
color: #9EABB3;
text-decoration: none;
border-bottom-width: 0;
}
ul.comments .post-meta a:hover {
text-decoration: underline;
}
ul.comments .comment-meta time {
border-left: 1px solid #d5dbde;
margin-left: 8px;
padding-left: 12px;
}
#captcha,
#captchaReply {
height: 27px;
vertical-align: inherit;
}
/* end comments */
/* start tags */
.tag-cloud {
text-align: center;
}
.tag-cloud ul.tag-cloud-tags {
padding-left: 0;
}
#tags li {
list-style: none;
display: inline-block;
margin: 10px;
}
#tags .tags1 {
font-size: 12px;
color: #CCC;
}
#tags .tags2 {
font-size: 16px;
color: #999;
}
#tags .tags3 {
font-size: 21px;
color: #6f6f6f;
}
#tags .tags4 {
font-size: 24px;
color: #333;
}
#tags .tags5 {
font-size: 30px;
color: #111;
}
/* end tags */
/* start archives */
.posts-collapse .collection-title::before {
content: " ";
position: absolute;
left: 0;
top: 50%;
margin-left: -4px;
margin-top: -4px;
width: 8px;
height: 8px;
background: #bbb;
border-radius: 50%;
}
.posts-collapse .collection-title {
position: relative;
margin: 60px 0;
}
.posts-collapse .collection-title h2 {
margin-left: 20px;
}
.posts-collapse .collection-title small {
color: #bbb;
}
.posts-collapse .post-header::before {
content: " ";
position: absolute;
left: 0;
top: 12px;
width: 6px;
height: 6px;
margin-left: -4px;
background: #bbb;
border-radius: 50%;
border: 1px solid #fff;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: background;
}
.posts-collapse .post-header {
position: relative;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transition-delay: 0s;
transition-property: border;
border-bottom: 1px dashed #ccc;
text-align: left;
}
.posts-collapse .post-header:hover {
border-bottom-color: #666;
}
.posts-collapse .post-header:hover::before {
background: #222;
}
.posts-collapse .post-time {
position: absolute;
font-size: 12px;
left: 20px;
top: 8px;
}
.posts-collapse .post-title {
margin-left: 70px;
font-size: 16px;
font-weight: normal;
font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif;
line-height: inherit;
text-decoration: none;
border-bottom: 0;
color: #666;
}
.page-archive .archive-page-counter {
position: relative;
top: 7px;
left: 20px;
margin-bottom: 50px;
display: block;
}
.page-archive .posts-collapse .archive-move-on {
position: absolute;
top: 11px;
left: 0;
margin-left: -6px;
width: 10px;
height: 10px;
opacity: 0.5;
background: #555;
border: 1px solid #fff;
border-radius: 50%;
}
.page-archive .post-title {
margin-left: 20px;
}
.page-archive .posts-collapse .post-header::before {
top: 8px;
}
.page-archive .posts-collapse::after {
top: 20px;
left: 0;
margin-left: -2px;
width: 4px;
height: 100%;
background: #f5f5f5;
z-index: -1;
content: " ";
position: absolute;
}
/* end archives */
/* start responsive */
@media (max-width: 1000px) {
.sidebar-toggle,
.sidebar {
display: none;
}
body {
padding-right: 0 !important;
}
}
@media (max-width: 700px) {
.page-archive .posts-collapse .archive-move-on {
margin-left: 5px;
}
.posts-collapse {
margin-left: 10px;
}
pre {
word-wrap: break-word;
word-break: break-all;
white-space: normal;
}
.page-archive .archive-page-counter {
margin-right: 10px;
}
.site-nav-toggle {
display: block;
margin-top: 16px;
}
.logo-line-before,
.logo-line-after,
.menu,
.site-search,
.back-to-top {
display: none;
}
.header {
margin-bottom: 50px;
padding: 5px 0px;
}
.header-line {
position: relative;
top: 52px;
height: 1px;
width: 100%;
background-color: #ddd;
display: none;
}
.wrapper {
min-width: inherit;
}
.btn-bar {
display: block;
width: 22px;
height: 2px;
background: #555;
border-radius: 1px;
}
.btn-bar+.btn-bar {
margin-top: 4px;
}
.menu {
width: 100%;
margin: 0 0 0 -20px;
padding: 0 5px;
line-height: 26px;
}
.menu .menu-item {
display: block;
}
.footer {
text-align: center;
font-size: 12px;
padding: 10px 0;
}
.footer .fn-right {
float: none;
}
}
/* end responsive */
\ No newline at end of file
/**
* Copyright (c) 2010-2016, b3log.org & hacpai.com
*
* 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.
*/
@charset "utf-8";a,body{color:#555}.post-body,ul.comments li{word-wrap:break-word}html{background-color:#f5f5f5}body{margin:0;font-family:Lato,"PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;background:#fff}a{text-decoration:none;border-bottom:1px solid #999}a:active,a:hover{outline:0}a:hover{color:#222;border-bottom-color:#222}hr{margin:40px 0;height:3px;border:none;background-color:#ddd;background-image:repeating-linear-gradient(-45deg,#fff,#fff 4px,transparent 4px,transparent 8px)}blockquote{padding:0 15px;color:#666;border-left:4px solid #ddd}img{max-width:100%;height:auto}.fn-clear:after,.fn-clear:before{display:table;content:"";line-height:0}.fn-clear:after{clear:both;line-height:0}.fn-left{float:left}.fn-right{float:right}.fn-none{display:none}@font-face{font-family:icomoon;src:url(fonts/icomoon.eot?a0psdo);src:url(fonts/icomoon.eot?a0psdo#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?a0psdo) format('truetype'),url(fonts/icomoon.woff?a0psdo) format('woff'),url(fonts/icomoon.svg?a0psdo#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-register:before{content:"\e973"}.icon-setting:before{content:"\e994"}.icon-login:before{content:"\ea13"}.icon-logout:before{content:"\ea14"}.icon-rss:before{content:"\e901"}.form{width:100%;margin-top:50px}.form button,.form input,.form textarea{border:1px solid #CCC;background-color:#FAFAFA;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.075) inset;padding:7px 8px;width:100%;box-sizing:border-box;outline:0}.form button{width:auto}.form input:focus,.form textarea:focus{background-color:#FFF;box-shadow:0 1px 2px rgba(0,0,0,.075) inset,0 0 5px rgba(81,167,232,.5);border:1px solid #51A7E8}.error-msg{color:#9EABB3;margin-right:10px}.em00,.em01,.em02,.em03,.em04,.em05,.em06,.em07,.em08,.em09,.em10,.em11,.em12,.em13,.em14{cursor:pointer;background-image:url(../images/emotions/emotions-ease.png);float:left;height:24px;margin-right:5px;width:24px;transition:all .2s ease-out;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out}.menu .menu-item a,.pagination .next,.pagination .page-number,.post-title-link::before,.posts-collapse .post-header,.posts-collapse .post-header::before,.sidebar-toggle-line{transition-duration:.2s;transition-timing-function:ease-in-out;transition-delay:0s}#emotions span:hover{transform:scale(1.2) rotate(360deg);-webkit-transform:scale(1.2) rotate(360deg);-moz-transform:scale(1.2) rotate(360deg)}.em01{background-position:-24px 0}.em02{background-position:-48px 0}.em03{background-position:-72px 0}.em04{background-position:-96px 0}.em05{background-position:0 -24px}.em06{background-position:-24px -24px}.em07{background-position:-48px -24px}.em08{background-position:-72px -24px}.em09{background-position:-96px -24px}.em10{background-position:0 -48px}.em11{background-position:-24px -48px}.em12{background-position:-48px -48px}.em13{background-position:-72px -48px}.em14{background-position:-96px -48px}.wrapper{max-width:700px;min-width:600px;margin:0 auto;padding:0 10px}.main{position:relative;top:-50px;opacity:0}.header{background:#f5f5f5;margin-bottom:80px;padding:40px 0}.logo-wrap{float:left;overflow:hidden;top:0;opacity:0}.logo-line-after,.logo-line-before{display:block;overflow:hidden;margin:0 auto;width:75%}.logo-line-after i,.logo-line-before i{position:relative;display:block;height:2px;background:#222;left:-100%}.logo-line-after i{left:auto;right:-100%}.logo-wrap .site-title{font-size:22px;font-weight:bolder;opacity:0;top:-10px;position:relative}.logo-wrap>a{position:relative;display:inline-block;padding:2px 1px;color:#222;line-height:2;border-bottom:none;font-family:Lato,"PingFang SC","Microsoft YaHei",sans-serif}.site-nav-toggle{display:none}.menu .menu-item,.sidebar-toggle-line{display:inline-block}.menu{float:left;margin:5px 0 0 20px;padding:0 20px;opacity:0}.menu .menu-item a{padding:5px 10px;border:none;transition-property:background}.menu .menu-item a:hover{background:#e1e1e1}.site-search{float:right;margin-top:15px}.site-search input{padding:3px 3px 3px 18px;border:none;border-radius:0;width:140px;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGhlaWdodD0iMTZweCIgaWQ9IkxheWVyXzEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE2IDE2OyIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMTYgMTYiIHdpZHRoPSIxNnB4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48cGF0aCBkPSJNMTUuNywxNC4zbC0zLjEwNS0zLjEwNUMxMy40NzMsMTAuMDI0LDE0LDguNTc2LDE0LDdjMC0zLjg2Ni0zLjEzNC03LTctN1MwLDMuMTM0LDAsN3MzLjEzNCw3LDcsNyAgYzEuNTc2LDAsMy4wMjQtMC41MjcsNC4xOTQtMS40MDVMMTQuMywxNS43YzAuMTg0LDAuMTg0LDAuMzgsMC4zLDAuNywwLjNjMC41NTMsMCwxLTAuNDQ3LDEtMUMxNiwxNC43ODEsMTUuOTQ2LDE0LjU0NiwxNS43LDE0LjN6ICAgTTIsN2MwLTIuNzYyLDIuMjM4LTUsNS01czUsMi4yMzgsNSw1cy0yLjIzOCw1LTUsNVMyLDkuNzYyLDIsN3oiLz48L3N2Zz4=) 0 50% no-repeat;background-size:12px 12px;outline:0;border-bottom:1px solid #999;opacity:.5}.site-search input:focus{opacity:1}.footer{margin-top:80px;padding:10px 20px;background:#f5f5f5;color:#666;line-height:2}.back-to-top,.sidebar-toggle{right:50px;z-index:1050;padding:5px;cursor:pointer}.sidebar-toggle{position:fixed;bottom:45px;width:15px;height:15px;background:#222;line-height:0;-webkit-transform:translateZ(0)}.sidebar-toggle.has-toc .sidebar-toggle-line{background:#87daff}.sidebar-toggle-line{position:relative;vertical-align:top;height:2px;width:100%;background:#fff;margin-top:4px}.sidebar-toggle-line:first-child{margin-top:0}.sidebar-toggle:hover .sidebar-toggle-line-first{width:50%;transform:rotateZ(-45deg);top:3px}.sidebar-toggle:hover .sidebar-toggle-line-middle{width:90%}.sidebar-toggle:hover .sidebar-toggle-line-last{width:50%;transform:rotateZ(45deg);top:-3px}.sidebar-toggle.sidebar-active .sidebar-toggle-line-first{width:100%;transform:rotateZ(-45deg);top:6px}.sidebar-toggle.sidebar-active .sidebar-toggle-line-middle{opacity:0}.sidebar-toggle.sidebar-active .sidebar-toggle-line-last{width:100%;transform:rotateZ(45deg);top:-6px}.back-to-top,.sidebar{position:fixed;background:#222;-webkit-transform:translateZ(0)}.back-to-top{bottom:19px;width:15px;height:13px;color:#fff}.back-to-top:before{display:block;content:" ";margin-top:2px;width:0;height:0;border-width:0 7px 8px;border-color:transparent transparent #fff;border-style:solid}.sidebar{width:320px;right:-320px;top:0;bottom:0;z-index:1040;box-shadow:inset 0 2px 6px #000;padding:20px 10px;color:#999;text-align:center;box-sizing:border-box}.sidebar a{color:#999;border-bottom-color:#555}.sidebar a:hover{color:#eee}.sidebar .site-author-image{display:block;margin:20px auto 0;max-width:96px;height:auto;border:2px solid #333;padding:2px}.sidebar .site-author-name{margin:5px 0 0;color:#f5f5f5}.sidebar .site-description{margin-top:5px;font-size:14px;color:#555}.sidebar .feed-link,.sidebar .links-of-author{margin-top:20px}.sidebar .site-state-item{display:inline-block;padding:0 15px;border-left:1px solid #333}.sidebar .site-state-item:first-child{border-left:none}.sidebar .site-state-item a{border-bottom:none}.sidebar .site-state-item-count{display:block;text-align:center;font-size:18px}.sidebar .site-state-item-name{font-size:13px}.sidebar .feed-link a{display:inline-block;padding:3px 15px;color:#fc6423;border:1px solid #fc6423;border-radius:4px}.sidebar .feed-link a:hover{color:#fff;background:#fc6423}.sidebar .links-of-author a{display:inline-block;vertical-align:middle;margin-right:10px;margin-bottom:10px;border-bottom-color:#555;font-size:13px}.sidebar .links-of-author a:before{display:inline-block;vertical-align:middle;margin-right:3px;content:" ";width:4px;height:4px;border-radius:50%;background:#0dd5ff}.sidebar .b3-solo-list{margin:20px;list-style:none;text-align:left;padding:0;font-size:14px;line-height:2}.sidebar section{opacity:0;position:relative}.sidebar>ul>li{display:inline-block;cursor:pointer;border-bottom:1px solid transparent;font-size:14px;color:#555}.sidebar>ul>li:hover{color:#f5f5f5}.sidebar>ul>li.current{color:#87daff;border-bottom-color:#87daff}.sidebar>ul>li:last-child{margin-left:10px}.posts-expand .post-item{margin-top:120px}.posts-expand .post-item:first-child{margin-top:0}.post-title-link{display:inline-block;position:relative;color:#555;border-bottom:none;line-height:1.2;vertical-align:top;font-size:26px;font-weight:400}.post-title-link::before{content:"";position:absolute;width:100%;height:2px;bottom:0;left:0;background-color:#000;visibility:hidden;transform:scaleX(0)}.post-title-link:hover::before{visibility:visible;transform:scaleX(1)}.posts-expand .post-meta{margin:3px 0 60px;color:#999;font-size:12px}.post-more-link a{color:#666;border:none;border-bottom:2px solid #666;transition-property:border}.post-more-link a:hover{border-bottom-color:#222}.pagination{border-top:1px solid #eee;margin:120px 0 0;text-align:left}.pagination .next,.pagination .page-number{display:inline-block;position:relative;top:-1px;margin:0 5px;padding:0 10px;line-height:30px;border-bottom:0;border-top:1px solid #eee;transition-property:border-color}.pagination .next:hover,.pagination .page-number:hover{border-top-color:#222}.pagination .page-number.current{color:#fff;background:#ccc;border-top-color:#ccc}.post-header{text-align:center}.post-body img{box-sizing:border-box;margin:auto}.posts-expand .post-tags{margin-top:40px}.posts-expand .post-tags a{padding:1px 5px;background:#f5f5f5;border-bottom:none}.posts-expand .post-tags a:hover{background:#ccc}.posts-expand .post-nav{margin-top:40px;overflow:hidden;padding:10px;white-space:nowrap;border-top:1px solid #eee}.post-nav-item a:hover{color:#222;border-bottom:none}.post-nav-item a{position:relative;display:inline-block;line-height:25px;font-size:14px;color:#555;border-bottom:none;width:50%}#externalRelevantArticles h4{margin-bottom:0}#externalRelevantArticles ul{margin-top:5px}.article-body{text-align:justify}.article-body p{margin:0 0 25px}ul.comments{padding:0;list-style:none;margin-top:50px;position:relative}ul.comments li{padding:10px;white-space:normal;position:relative;border-bottom:#EBF2F6 1px solid}ul.comments li:hover{background-color:#F7F7F7}ul.comments .avatar-48{position:absolute;box-shadow:0 0 2px #ddd;height:48px;width:48px;margin:8px 10px 0 0;border-radius:24px}ul.comments .comment-body{margin:8px 0 0 60px;min-height:50px}ul.comments li.comment-body-ref{position:absolute;z-index:10;background-color:#EBF2F6;border:1px solid #d5dbde;width:80%;left:69px}.posts-collapse .collection-title::before,.posts-collapse .post-header::before{left:0;background:#bbb;border-radius:50%;content:" "}ul.comments .comment-meta{font-family:"Open Sans","Microsoft Yahei",Helvetica;color:#9eabb3;font-size:13px}ul.comments .comment-meta a{color:#9EABB3;text-decoration:none;border-bottom-width:0}ul.comments .post-meta a:hover{text-decoration:underline}ul.comments .comment-meta time{border-left:1px solid #d5dbde;margin-left:8px;padding-left:12px}#captcha,#captchaReply{height:27px;vertical-align:inherit}.tag-cloud{text-align:center}.tag-cloud ul.tag-cloud-tags{padding-left:0}#tags li{list-style:none;display:inline-block;margin:10px}#tags .tags1{font-size:12px;color:#CCC}#tags .tags2{font-size:16px;color:#999}#tags .tags3{font-size:21px;color:#6f6f6f}#tags .tags4{font-size:24px;color:#333}#tags .tags5{font-size:30px;color:#111}.posts-collapse .collection-title::before{position:absolute;top:50%;margin-left:-4px;margin-top:-4px;width:8px;height:8px}.posts-collapse .collection-title{position:relative;margin:60px 0}.posts-collapse .collection-title h2{margin-left:20px}.posts-collapse .collection-title small{color:#bbb}.posts-collapse .post-header::before{position:absolute;top:12px;width:6px;height:6px;margin-left:-4px;border:1px solid #fff;transition-property:background}.posts-collapse .post-header{position:relative;transition-property:border;border-bottom:1px dashed #ccc;text-align:left}.posts-collapse .post-header:hover{border-bottom-color:#666}.posts-collapse .post-header:hover::before{background:#222}.posts-collapse .post-time{position:absolute;font-size:12px;left:20px;top:8px}.posts-collapse .post-title{margin-left:70px;font-size:16px;font-weight:400;font-family:Lato,"PingFang SC","Microsoft YaHei",sans-serif;line-height:inherit;text-decoration:none;border-bottom:0;color:#666}.page-archive .archive-page-counter{position:relative;top:7px;left:20px;margin-bottom:50px;display:block}.page-archive .posts-collapse .archive-move-on{position:absolute;top:11px;left:0;margin-left:-6px;width:10px;height:10px;opacity:.5;background:#555;border:1px solid #fff;border-radius:50%}.page-archive .post-title{margin-left:20px}.page-archive .posts-collapse .post-header::before{top:8px}.page-archive .posts-collapse::after{top:20px;left:0;margin-left:-2px;width:4px;height:100%;background:#f5f5f5;z-index:-1;content:" ";position:absolute}@media (max-width:1000px){.sidebar,.sidebar-toggle{display:none}body{padding-right:0!important}}@media (max-width:700px){.page-archive .posts-collapse .archive-move-on{margin-left:5px}.posts-collapse{margin-left:10px}pre{word-wrap:break-word;word-break:break-all;white-space:normal}.page-archive .archive-page-counter{margin-right:10px}.site-nav-toggle{display:block;margin-top:16px}.back-to-top,.header-line,.logo-line-after,.logo-line-before,.menu,.site-search{display:none}.header{margin-bottom:50px;padding:5px 0}.header-line{position:relative;top:52px;height:1px;width:100%;background-color:#ddd}.btn-bar,.menu .menu-item{display:block}.wrapper{min-width:inherit}.btn-bar{width:22px;height:2px;background:#555;border-radius:1px}.btn-bar+.btn-bar{margin-top:4px}.menu{width:100%;margin:0 0 0 -20px;padding:0 5px;line-height:26px}.footer{text-align:center;font-size:12px;padding:10px 0}.footer .fn-right{float:none}}
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<meta name="keywords" content="${metaKeywords},${dynamicLabel}"/>
<meta name="description" content="${metaDescription},${dynamicLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<#if 0 != recentComments?size>
<ul class="comments" id="comments">
<#list recentComments as comment>
<li class="fn-clear">
<img class="avatar-48" title="${comment.commentName}" src="${comment.commentThumbnailURL}">
<div class="comment-body">
<div class="fn-clear comment-meta">
<span class="fn-left">
<#if "http://" == comment.commentURL>
<span>${comment.commentName}</span>
<#else>
<a href="${comment.commentURL}" target="_blank">${comment.commentName}</a>
</#if>
<time>${comment.commentDate?string("yyyy-MM-dd HH:mm")}</time>
</span>
<a class="fn-right" href="${servePath}${comment.commentSharpURL}">${viewLabel}»</a>
</div>
<div class="comment-content post-body article-body">
${comment.commentContent}
</div>
</div>
</li>
</#list>
</ul>
</#if>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
<script>
var $commentContents = $(".comments .comment-content");
for (var i = 0; i < $commentContents.length; i++) {
var str = $commentContents[i].innerHTML;
$commentContents[i].innerHTML = Util.replaceEmString(str);
}
</script>
</body>
</html>
<header class="header">
<div class="header-line"></div>
<div class="fn-clear wrapper">
<div class="logo-wrap">
<a href="${servePath}" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">${blogTitle}</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<div class="site-nav-toggle fn-right" onclick="$('.header-line').toggle();$('nav').children('.menu').slideToggle();">
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</div>
<nav>
<ul class="menu">
<#list pageNavigations as page>
<li class="menu-item">
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}" rel="section">
${page.pageTitle}
</a>
</li>
</#list>
<li class="menu-item">
<a href="${servePath}/dynamic.html" rel="section">
${dynamicLabel}
</a>
</li>
<li class="menu-item">
<a href="${servePath}/tags.html" rel="section">
${allTagsLabel}
</a>
</li>
<li class="menu-item">
<a href="${servePath}/archives.html">
${archiveLabel}
</a>
</li>
<li class="menu-item">
<a rel="alternate" href="${servePath}/blog-articles-rss.do" rel="section">
RSS
</a>
</li>
</ul>
<div class="site-search">
<form target="_blank" action="http://zhannei.baidu.com/cse/site">
<input placeholder="${searchLabel}" id="search" type="text" name="q"/>
<input type="submit" value="" class="fn-none" />
<input type="hidden" name="cc" value="${serverHost}">
</form>
</div>
</nav>
</div>
</header>
\ No newline at end of file
/*
* Copyright (c) 2010-2016, b3log.org & hacpai.com
*
* 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.
*/
var NexT={init:function(){$(".sidebar-toggle").click(function(){var i=$(".sidebar");$(this).hasClass("sidebar-active")?($(this).removeClass("sidebar-active"),$("body").animate({"padding-right":0}),i.animate({right:-320}),i.find("section").css("opacity",0)):($(this).addClass("sidebar-active"),$("body").animate({"padding-right":320}),i.animate({right:0},function(){i.find("section:first").animate({opacity:1})}))}),$(".site-nav-toggle").click(function(){$(".site-nav").slideToggle()}),$(document).ready(function(){setTimeout(function(){$(".logo-wrap").css("opacity",1),$(".logo-line-before i").animate({left:"0"},function(){$(".site-title").css("opacity",1).animate({top:0},function(){$(".menu").css("opacity",1).animate({"margin-top":"15px"}),$(".main").css("opacity",1).animate({top:"0"},function(){$(".b3-solo-list li").length>0&&$(window).width()>1e3&&$(".sidebar-toggle").click()})})}),$(".logo-line-after i").animate({right:"0"})},500)})},initArticle:function(){if($(".b3-solo-list li").length>0&&$(window).width()>1e3){$(".sidebar-toggle").addClass("has-toc");var i='<ul><li class="current" data-tab="toc">'+Label.tocLabel+'</li><li data-tab="site">'+Label.siteViewLabel+"</li></ul><section></section>";$(".sidebar").prepend(i);var t=$(".sidebar section:first").html($(".b3-solo-list")),a=$(".sidebar section:last");$(".sidebar > ul > li").click(function(){"toc"===$(this).data("tab")?a.animate({opacity:"0",top:"-50px"},300,function(){t.show().css("top","-50px"),t.animate({opacity:"1",top:"0"},300)}):t.animate({opacity:"0",top:"-50px"},300,function(){t.hide().css("top","-50px"),a.animate({opacity:"1",top:"0"},300)}),$(".sidebar > ul > li").removeClass("current"),$(this).addClass("current")})}}};NexT.init();
\ No newline at end of file
#
# Copyright (c) 2010-2016, b3log.org & hacpai.com
#
# 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: 1.1.2.2, Sep 6, 2016
# Author: Liyuan Li
# Author: Liang Ding
#
tocLabel=Article ToC
siteViewLabel=Site
viewsLabel=Heat
cmtLabel=Comments
postTimeLabel=Post At
readLabel=Read More
fightLabel=articles, fighting!
ohLabel=Oh
searchLabel=Search
subscribeLabel=Subscribe
dynamicLabel=Dynamic
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=
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
userName1Label=Username:
userPassword1Label=Password:
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
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
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
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.
duplicatedPermalinkLabel=Duplicated permalink!
invalidPermalinkFormatLabel=Invalid permalink format!
duplicatedEmailLabel=Duplicated email!
refreshAndRetryLabel=Please refresh and try again!
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?
#
# Copyright (c) 2010-2016, b3log.org & hacpai.com
#
# 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: 1.1.1.2, Sep 6, 2016
# Author: Liyuan Li
#
tocLabel=\u6587\u7ae0\u76ee\u5f55
siteViewLabel=\u7ad9\u70b9\u6982\u89c8
viewsLabel=\u70ed\u5ea6
cmtLabel=\u6761\u8bc4\u8bba
postTimeLabel=\u53d1\u8868\u4e8e
readLabel=\u9605\u8bfb\u5168\u6587
fightLabel=\u7bc7\u65e5\u5fd7\u3002 \u7ee7\u7eed\u52aa\u529b\u3002
ohLabel=\u55ef
searchLabel=\u641c\u7d22
subscribeLabel=\u8ba2\u9605
dynamicLabel=\u52a8\u6001
adminConsoleLabel=\u540e\u53f0\u7ba1\u7406
adminIndexLabel=\u540e\u53f0\u9996\u9875
postArticleLabel=\u53d1\u5e03\u65e5\u5fd7
articleListLabel=\u65e5\u5fd7\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\u65e5\u5fd7
recentCommentsLabel=\u6700\u65b0\u8bc4\u8bba
postCommentsLabel=\u53d1\u8868\u8bc4\u8bba
mostCommentArticlesLabel=\u8bc4\u8bba\u6700\u591a\u7684\u65e5\u5fd7
mostViewCountArticlesLabel=\u8bbf\u95ee\u6700\u591a\u7684\u65e5\u5fd7
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=\u65e5\u5fd7\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\u65e5\u5fd7
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=\u65e5\u5fd7\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\u65e5\u5fd7\u663e\u793a\u6570\u76ee\uff1a
indexRecentCommentDisplayCnt1Label=\u6700\u65b0\u8bc4\u8bba\u663e\u793a\u6570\u76ee\uff1a
indexMostCommentArticleDisplayCnt1Label=\u8bc4\u8bba\u6700\u591a\u65e5\u5fd7\u663e\u793a\u6570\u76ee\uff1a
indexMostViewArticleDisplayCnt1Label=\u8bbf\u95ee\u6700\u591a\u6700\u591a\u65e5\u5fd7\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\u65e5\u5fd7\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
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\u65e5\u5fd7\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
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\u65e5\u5fd7\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=\u65e5\u5fd7
tagArticlesLabel=\u6807\u7b7e\u65e5\u5fd7\u5217\u8868
dateArticlesLabel=\u5b58\u6863\u65e5\u5fd7\u5217\u8868
authorArticlesLabel=\u4f5c\u8005\u65e5\u5fd7\u5217\u8868
indexArticleLabel=\u9996\u9875\u65e5\u5fd7\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
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\u65e5\u5fd7
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
duplicatedPermalinkLabel=\u94fe\u63a5\u91cd\u590d\uff01
invalidPermalinkFormatLabel=\u975e\u6cd5\u7684\u94fe\u63a5\u683c\u5f0f\uff01
duplicatedEmailLabel=\u90ae\u4ef6\u5730\u5740\u91cd\u590d\uff01
refreshAndRetryLabel=\u8bf7\u5237\u65b0\u91cd\u8bd5\uff01
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
<#macro comments commentList article>
<ul class="comments" id="comments">
<#list commentList as comment>
<li id="${comment.oId}" class="fn-clear">
<img class="avatar-48" title="${comment.commentName}" src="${comment.commentThumbnailURL}">
<div class="comment-body">
<div class="fn-clear comment-meta">
<span class="fn-left">
<#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}', 23);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
>${comment.commentOriginalCommentName}</a>
</#if>
<time>${comment.commentDate?string("yyyy-MM-dd HH:mm")}</time>
</span>
<#if article.commentable>
<a class="fn-right" href="javascript:replyTo('${comment.oId}')">${replyLabel}</a>
</#if>
</div>
<div class="comment-content post-body article-body">
${comment.commentContent}
</div>
</div>
</li>
</#list>
</ul>
<#if article.commentable>
<div class="comment-body fn-wrap">
<table id="commentForm" class="form">
<tbody>
<#if !isLoggedIn>
<tr>
<td>
<input placeholder="${commentNameLabel}" type="text" class="normalInput" id="commentName"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentEmailLabel}" type="email" class="normalInput" id="commentEmail"/>
</td>
</tr>
<tr>
<td>
<input placeholder="${commentURLLabel}" type="url" id="commentURL"/>
</td>
</tr>
</#if>
<tr>
<td id="emotions">
<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>
<td>
<textarea rows="10" cols="96" id="comment"></textarea>
</td>
</tr>
<#if !isLoggedIn>
<tr>
<td>
<input style="width:50%" placeholder="${captchaLabel}" type="text" class="normalInput" id="commentValidate"/>
<img id="captcha" alt="validate" src="${servePath}/captcha.do" />
</td>
</tr>
</#if>
<tr>
<td colspan="2" align="right">
<span class="error-msg" id="commentErrorTip"></span>
<button id="submitCommentButton" onclick="page.submitComment();">${submmitCommentLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
</#if>
</#macro>
<#macro comment_script oId>
<script type="text/javascript" src="${staticServePath}/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}",
"loadingLabel": "${loadingLabel}",
"oId": "${oId}",
"skinDirName": "${skinDirName}",
"blogHost": "${blogHost}",
"randomArticles1Label": "${randomArticles1Label}",
"externalRelevantArticles1Label": "${externalRelevantArticles1Label}"
});
var addComment = function (result, state) {
var commentable = $("#commentForm").length === 0 ? false : true;
var commentHTML = '<li class="fn-clear" id="' + result.oId +
'"><img class="avatar-48" title="'
+ result.userName + '" src="' + result.commentThumbnailURL + '"><div class="comment-body">'
+ '<div class="fn-clear comment-meta"><span class="fn-left">' + result.replyNameHTML;
if (state !== "") {
var commentOriginalCommentName = $("#" + page.currentCommentId).find(".comment-meta a").first().text();
commentHTML += '&nbsp;@&nbsp;<a href="${servePath}' + result.commentSharpURL.split("#")[0] + '#' + page.currentCommentId + '"'
+ 'onmouseover="page.showComment(this, \'' + page.currentCommentId + '\', 23);"'
+ 'onmouseout="page.hideComment(\'' + page.currentCommentId + '\')">' + commentOriginalCommentName + '</a>';
}
commentHTML += '<time>' + result.commentDate
+ '</time></span>';
if (commentable) {
commentHTML += '<a class="fn-right" href="javascript:replyTo(\'' + result.oId + '\');">${replyLabel}</a>';
}
commentHTML += '</div><div class="comment-content">' +
Util.replaceEmString($("#comment" + state).val())
+ '</div></div></li>';
return commentHTML;
};
var replyTo = function (id) {
var commentFormHTML = "<table class='form comment-reply' id='replyForm'>";
page.addReplyForm(id, commentFormHTML);
};
(function () {
page.load();
NexT.initArticle();
// emotions
page.replaceCommentsEm("#comments .comment-content");
<#nested>
})();
</script>
</#macro>
\ No newline at end of file
<div class="sidebar-toggle">
<span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
</div>
<aside class="sidebar">
<section>
<img class="site-author-image" src="${adminUser.userAvatar}" title="${userName}"/>
<p class="site-author-name">${userName}</p>
<#if "" != noticeBoard>
<p class="site-description motion-element">${blogSubtitle}</p>
</#if>
<nav>
<div class="site-state-item">
<a href="${servePath}/archives.html">
<span class="site-state-item-count">${statistic.statisticPublishedBlogArticleCount}</span>
<span class="site-state-item-name">${articleLabel}</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<span class="site-state-item-count">${statistic.statisticBlogViewCount}</span>
<span class="site-state-item-name">${viewLabel}</span>
</div>
<div class="site-state-item site-state-tags">
<a href="${servePath}/dynamic.html">
<span class="site-state-item-count">${statistic.statisticPublishedBlogCommentCount}</span>
<span class="site-state-item-name">${commentLabel}</span>
</a>
</div>
</nav>
<div class="feed-link">
<a href="${servePath}/blog-articles-rss.do" rel="alternate">
<i class="icon-rss"></i>
RSS
</a>
</div>
<div class="links-of-author">
<#if isLoggedIn>
<span class="links-of-author-item">
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
<i class="icon-setting"></i> ${adminLabel}
</a>
</span>
<span class="links-of-author-item">
<a href="${logoutURL}">
<i class="icon-logout"></i> ${logoutLabel}
</a>
</span>
<#else>
<span class="links-of-author-item">
<a href="${loginURL}">
<i class="fa fa-github"></i> ${loginLabel}
</a>
</span>
<span class="links-of-author-item">
<a href="${servePath}/register">
<i class="icon-register"></i> ${registerLabel}
</a>
</span>
</#if>
</div>
<#if noticeBoard??>
<div class="links-of-author">
${noticeBoard}
</div>
</#if>
<#if 0 != links?size>
<div class="links-of-author">
<p class="site-author-name">Links</p>
<#list links as link>
<span class="links-of-author-item">
<a rel="friend" href="${link.linkAddress}"
title="${link.linkDescription}" target="_blank">
${link.linkTitle}
</a>
</span>
</#list>
</div>
</#if>
</section>
</aside>
\ No newline at end of file
<#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>
<#include "header.ftl">
<main class="main wrapper">
<div class="content posts-collapse">
<div class="collection-title">
<h2>
${tag.tagTitle}
<small>${tagLabel}</small>
</h2>
</div>
<#list articles as article>
<article>
<header class="post-header">
<h1>
<a class="post-title" href="${servePath}${article.articlePermalink}">
<span>${article.articleTitle}</span>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</a>
</h1>
<time class="post-time">
${article.articleCreateDate?string("MM-dd")}
</time>
</header>
</article>
</#list>
<#if 0 != paginationPageCount>
<nav class="pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/${paginationPreviousPageNum}" class="extend next"><<</a>
<a class="page-number" href="${servePath}${path}/1">1</a> ...
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="page-number current">${paginationPageNum}</span>
<#else>
<a class="page-number" href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount> ...
<a href="${servePath}${path}/${paginationPageCount}" class="page-number">${paginationPageCount}</a>
<a href="${servePath}${path}/${paginationNextPageNum}" class="extend next">>></a>
</#if>
</nav>
</#if>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment