Commit 39ebfc7e authored by Liang Ding's avatar Liang Ding

#12188

parent 9db11b54
......@@ -180,7 +180,9 @@ public class IndexProcessor {
dataModel.putAll(langs);
final JSONObject preference = preferenceQueryService.getPreference();
filler.fillBlogHeader(request, response, dataModel, preference);
filler.fillBlogFooter(request, dataModel, preference);
Keys.fillServer(dataModel);
Keys.fillRuntime(dataModel);
filler.fillMinified(dataModel);
} catch (final ServiceException e) {
......
......@@ -15,9 +15,9 @@
*/
package org.b3log.solo.processor.renderer;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.b3log.latke.logging.Logger;
......@@ -25,13 +25,12 @@ import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.solo.SoloServletListener;
/**
* <a href="http://freemarker.org">FreeMarker</a> HTTP response
* renderer for administrator console and initialization rendering.
* <a href="http://freemarker.org">FreeMarker</a> HTTP response renderer for administrator console and initialization
* rendering.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.1, Apr 15, 2014
* @version 1.0.1.2, Nov 2, 2016
* @since 0.4.1
*/
public final class ConsoleRenderer extends AbstractFreeMarkerRenderer {
......@@ -53,6 +52,8 @@ public final class ConsoleRenderer extends AbstractFreeMarkerRenderer {
final ServletContext servletContext = SoloServletListener.getServletContext();
TEMPLATE_CFG.setServletContextForTemplateLoading(servletContext, "");
TEMPLATE_CFG.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
TEMPLATE_CFG.setLogTemplateExceptions(false);
}
@Override
......@@ -65,8 +66,10 @@ public final class ConsoleRenderer extends AbstractFreeMarkerRenderer {
}
@Override
protected void beforeRender(final HTTPRequestContext context) throws Exception {}
protected void beforeRender(final HTTPRequestContext context) throws Exception {
}
@Override
protected void afterRender(final HTTPRequestContext context) throws Exception {}
protected void afterRender(final HTTPRequestContext context) throws Exception {
}
}
......@@ -15,6 +15,7 @@
*/
package org.b3log.solo.util;
import freemarker.template.TemplateExceptionHandler;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
......@@ -44,7 +45,7 @@ import org.b3log.solo.model.Skin;
* Skin utilities.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.4.7, Dec 27, 2015
* @version 1.1.4.8, Nov 2, 2016
* @since 0.3.1
*/
public final class Skins {
......@@ -134,7 +135,12 @@ public final class Skins {
final ServletContext servletContext = SoloServletListener.getServletContext();
Templates.MAIN_CFG.setServletContextForTemplateLoading(servletContext, "/skins/" + skinDirName);
Templates.MAIN_CFG.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
Templates.MAIN_CFG.setLogTemplateExceptions(false);
Templates.MOBILE_CFG.setServletContextForTemplateLoading(servletContext, "/skins/mobile");
Templates.MOBILE_CFG.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
Templates.MOBILE_CFG.setLogTemplateExceptions(false);
}
/**
......
/*
* 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.
*/
package org.b3log.solo.processor;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.model.User;
import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.service.InitService;
import org.b3log.solo.service.UserQueryService;
import org.json.JSONObject;
import static org.mockito.Mockito.*;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* {@link IndexProcessor} test case.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Nov 2, 2016
* @since 1.7.0
*/
@Test(suiteName = "processor")
public class IndexProcessorTestCase extends AbstractTestCase {
/**
* Init.
*
* @throws Exception exception
*/
@Test
public void init() throws Exception {
final InitService initService = getInitService();
final JSONObject requestJSONObject = new JSONObject();
requestJSONObject.put(User.USER_EMAIL, "test@gmail.com");
requestJSONObject.put(User.USER_NAME, "Admin");
requestJSONObject.put(User.USER_PASSWORD, "pass");
initService.init(requestJSONObject);
final UserQueryService userQueryService = getUserQueryService();
Assert.assertNotNull(userQueryService.getUserByEmail("test@gmail.com"));
}
/**
* showIndex.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = "init")
public void showIndex() throws Exception {
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("");
when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
dispatcherServlet.init();
final StringWriter stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter);
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
dispatcherServlet.service(request, response);
final String content = stringWriter.toString();
Assert.assertTrue(StringUtils.contains(content, "<title>Solo 示例</title>"));
}
/**
* showKillBrowser.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = "init")
public void showKillBrowser() throws Exception {
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/kill-browser");
when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
dispatcherServlet.init();
final StringWriter stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter);
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
dispatcherServlet.service(request, response);
final String content = stringWriter.toString();
Assert.assertTrue(StringUtils.contains(content, "<title>Solo 示例</title>"));
}
/**
* register.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = "init")
public void register() throws Exception {
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getServletContext()).thenReturn(mock(ServletContext.class));
when(request.getRequestURI()).thenReturn("/register");
when(request.getMethod()).thenReturn("GET");
when(request.getAttribute(Keys.TEMAPLTE_DIR_NAME)).thenReturn("next");
when(request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS)).thenReturn(System.currentTimeMillis());
final MockDispatcherServlet dispatcherServlet = new MockDispatcherServlet();
dispatcherServlet.init();
final StringWriter stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter);
final HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(printWriter);
dispatcherServlet.service(request, response);
final String content = stringWriter.toString();
Assert.assertTrue(StringUtils.contains(content, "<title>Solo 示例</title>"));
}
}
<!DOCTYPE html>
<html>
<head>
<title>Solo Change Logs</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h2>Release 1.6.0 - Sep 8, 2016</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12147">12147 用户管理翻页失败</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12153">12153 语言设置为 English 时首页报错</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12150">12150 新版后台 UI</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
</ul>
<h2>Release 1.5.0 - Aug 10, 2016</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12130">12130 MySQL 数据导出 SQL 文件</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/solo/issues/12128">12128 JDBC 驱动反注册</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12140">12140 新皮肤 next</a>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li>
</ul>
<h2>Release 1.4.0 - Jun 28, 2016</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12060">12060 前台皮肤切换</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/solo/issues/12096">12096 Meta Desc 解析异常</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12100">12100 代码高亮换行问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12114">12114 静态资源加载问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12118">12118 finding 皮肤 bug</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li>
<li><a href="https://github.com/b3log/solo/issues/12058">12058 简化配置</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12059">12059 细节体验改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12079">12079 文件上传后缀改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12093">12093 评论 Emoji 支持</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12107">12107 Markdown 支持增强</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
</ul>
<h2>Release 1.3.0 - Dec 19, 2015</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12051">12051 社区文章推荐</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/solo/issues/12048">12048 Docker 方式启动</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/solo/issues/12052">12052 评论支持 Markdown</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12050">12050 配置文件简化</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12053">12053 评论内容编码重构</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/solo/issues/12042">12042 彻底移除 preference 表</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 1.2.0 - Dec 2, 2015</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12037">12037 独立模式</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/solo/issues/12035">12035 NeoEase 皮肤侧边栏问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li>
<li><a href="https://github.com/b3log/solo/issues/12038">12038 新皮肤 yilia</a>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li> <li><a href="https://github.com/b3log/solo/issues/12044">12044 静态资源配置简化</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12043">12043 用户注册开关配置</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12039">12039 页脚模版变量</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12036">12036 用户头像外链</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12041">12041 Preference 存储重构</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/solo/issues/12040">12040 调整升级机制</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 1.1.0 - Oct 1, 2015</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12031" rel="nofollow" target="_blank">12031 Bruce 皮肤细节</a></li>
<li><a href="https://github.com/b3log/solo/issues/12032" rel="nofollow" target="_blank">12032 七牛配置增强</a></li>
<li><a href="https://github.com/b3log/solo/issues/12030" rel="nofollow" target="_blank">12030 项目结构调整</a></li>
<li><a href="https://github.com/b3log/solo/issues/12033" rel="nofollow" target="_blank">12033 默认订阅输出 RSS</a></li>
</ul>
<h2>Release 1.0.0 - Sep 16, 2015</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12029">12029 上传七牛</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/solo/issues/12026">12026 加密文章列表问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/solo/issues/12022">12022 Finding 皮肤语法高亮改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li> <li><a href="https://github.com/b3log/solo/issues/12028">12028 更换 Google 字体库为国内的 360 镜像</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12027">12027 Markdown 编辑器自动折行</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12024">12024 使用百度搜索</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12023">12023 改进 Meta Description 容错性</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
</ul>
<h2>Release 0.6.9 - Jun 28, 2015</h2>
<ul>
<li><a href="https://github.com/b3log/solo/issues/12019">12019 新皮肤 - Finding</a>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li> <li><a href="https://github.com/b3log/solo/issues/12020">12020 加入开发者、贡献者名单</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12015">12015 Gravatar 默认配置</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12013">12013 搜索引擎优化</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12012">12012 编辑器类型切换</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12009">12009 可以使用中文逗号分割标签</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/solo/issues/12014">12014 项目重命名</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.6.8 - Mar 24, 2015</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/11992">11992 可配置 favicon 获取</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/12000">12000 新皮肤 —— Bruce</a>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li> <li><a href="https://github.com/b3log/b3log-solo/issues/12006">12006 取消 ping Google</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11999">11999 默认配置参数调整</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/12004">12004 checkstyle、jacobe 插件不自动执行</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.6.7 - Oct 16, 2014</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/11984">11984 标签导出</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11976">11976 目录生成插件</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11975">11975 community 皮肤问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11985">11985 更新 google-code-prettify 到最新版</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11978">11978 捐赠链接修改</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11983">11983 开发时静态资源锁定问题</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11982">11982 升级 maven-min-plugin</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.6.6 - Apr 26, 2014</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/338">338 Druid 数据库连接池支持</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/326">326 网站浏览次数始终为 0</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/333">333 评论邮件标题乱码</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/334">334 时区问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/340">340 邮箱格式判断问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/341">341 可以删除别人的评论</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/343">343 kill browser 问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/345">345 博主评论问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/11755">11755 以 war 包部署问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/329">329 goTop 和 goBottom 改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/330">330 更新开发时用的 jetty 插件</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/335">335 去除 BAE 版</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.6.5 - Nov 1, 2013</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/282">282 找回密码问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/283">283 社区同步评论</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/288">288 IoC 容器冲突</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/294">294 发布文章时允许评论开关问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/296">296 数据恢复接口被过滤器跳过</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/302">302 更新已发布文章问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/295">295 未初始化时启动日志报错</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/299">299 评论信息填充优化</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/316">316 评论开关页面显示</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/317">317 自动保存文章时间间隔</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/318">318 去缓存</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/320">320 加入登录状态模版变量</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
</ul>
<h2>Release 0.6.1 - Aug 25, 2013</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/200">200 找回密码</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/221">221 最新日志、标签最新日志</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/261">261 自动保存草稿功能</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/241">241 RSS 订阅输出的时间不对</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/249">249 BAE 版发送邮件问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/252">252 更新用户密码问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/253">253 文章列表不显示</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/269">269 获取加密文章安全问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/264">264 新增 metro 风格皮肤</a>&nbsp;<span style='background: #eb6420 !important;color:#FFFFFF !important;padding: 1px 4px;'>skin</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/250">250 Markdown 编辑器预览改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/254">254 移除“偏好设定”中的“博客地址”配置</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/259">259 初始化第二页面只能用鼠标点击</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/260">260 JDBC 性能优化</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/263">263 timeline 皮肤改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/265">265 浏览器兼容性提示改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/268">268 使用 Latke IoC 容器</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/271">271 访客登录跳转</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/275">275 访客登录不允许查看加密的文章</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/276">276 模版变量 gravatar</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/267">267 替换日志组件为 slf4j</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.6.0 - Apr 26, 2013</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/199">199 社区文章更新接口</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/203">203 用户注册,实现多用户博客</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/226">226 加入字典存储 option</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/198">198 删除文章出错</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/205">205 禁用缓存后文章浏览计数不变</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/214">214 Zoundry Raven 发布问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/144">144 KindEditor 上传问题</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/193">193 登录后再访问登录页将跳转后台</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/194">194 删除操作提示改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/195">195 去除草稿夹浏览按钮</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/196">196 清除缓存丢失访问统计</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/202">202 自定义 Feed 文章数</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/210">210 升级至 GAE 1.7.7</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.5.6 - Feb 19, 2012</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/130">130 登录用户评论时无需输入验证码</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/150">150 支持 H2 数据库</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/171">171 新皮肤 timeline</a>&nbsp;<span style='background: #02e10c !important;color:#FFFFFF !important;padding: 1px 4px;'>feature</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/133">133 前端代理后在线人数不正常</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/141">141 请求 Latke Remote APIs 时跳过初始化检查</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/142">142 保存为草稿后再发布无法同步</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/148">148 清空数据存储时未删除插件存储</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/149">149 “随机阅读”/“相关阅读”链接错误</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/151">151 OpenShift 上不显示验证码</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/159">159 加密文章问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/160">160 本地版内存溢出</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/164">164 robots.txt 禁止抓取标签问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/169">169 DateFormat 线程安全问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/170">170 登录页面底部链接问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/172">172 GAE 版配额消耗过快问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/177">177 泄漏用户密码安全问题</a>&nbsp;<span style='background: #fc2929 !important;color:#FFFFFF !important;padding: 1px 4px;'>bug</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/129">129 摘要编辑器添加源码功能</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/132">132 Markdown 编辑器显示问题</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/154">154 使用密文存储密码</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/155">155 邮件 SSL 配置</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/162">162 404 页面引入公益活动</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/173">173 评论快捷键提交</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/175">175 社区同步文案</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/176">176 更新文章提示改进</a>&nbsp;<span style='background: #84b6eb !important;color:#FFFFFF !important;padding: 1px 4px;'>enhancement</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/147">147 工程中加入 eclipse 项目配置</a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/161">161 使用 mvn 插件统一 Java 格式化 </a>&nbsp;<span style='background: #e102d8 !important;color:#FFFFFF !important;padding: 1px 4px;'>development</span></li>
</ul>
<h2>Release 0.5.5 - Nov 24, 2012</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/72">72 非管理员登录后 TopBar 无后台入口</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/73">73 支持 BAE 部署</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/74">74 跨版本升级提示</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/75">75 加入页面类型变量</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/78">78 MetaWeblog API 获取文章日期问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/80">80 MetaWeblog API 发布文章摘要问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/82">82 登录、初始化问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/85">85 配置文件按项目分离</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/86">86 Hello World 文章多语言</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/87">87 加入运行信息公共模版变量</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/88">88 登录页体验改进</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/99">99 404 页面加入登录入口</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/101">101 验证码改造</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/103">103 本地版数据库表前缀支持</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/104">104 升级到 GAE SDK 1.7.2</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/106">106 摘要编辑器改进</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/111">111 与社区同步</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/113">113 无文章首页不返回 404</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/125">125 Feed 输出加密文章</a></li>
</ul>
<h2>Release 0.5.0 - Aug 25, 2012</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/16">16 浏览数统计写配额优化</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/38">38 跨层调用重构</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/44">44 浏览计数改进</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/45">45 索引遗漏问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/46">46 评论中文用户名问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/47">47 浏览器 Kill 跳转</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/48">48 升级 Maven GAG Plugin 到 0.9.4</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/52">52 ease 皮肤优化</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/53">53 KindEditor 编辑器 ESC 问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/55">55 获取标签-文章 Feed/RSS 时 NPE</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/56">56 模版数据模型中加入 request</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/58">58 classic 皮肤最新评论表情问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/59">59 前台和后台表情不匹配</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/60">60 评论人头像获取</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/61">61 fancybox 修改</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/62">62 初始化页面中加入 404 检查</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/63">63 摘要可插入 flash 播放器</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/66">66 页面细节修改</a></li>
</ul>
<h2>Release 0.4.6 - Jul 1, 2012</h2>
<ul>
<li><a href="https://github.com/b3log/b3log-solo/issues/10">10 评论表情后台管理不显示</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/12">12 编辑自定义导航报错</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/15">15 sitemap.xml 导航生成重复</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/17">17 默认皮肤改为 ease</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/23">23 偏好设定关键参数校验</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/27">27 自定义导航后台链接问题</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/32">32 升级 FreeMarker 到 2.3.19</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/34">34 升级 GAE SDK 到 1.7.0</a></li>
<li><a href="https://github.com/b3log/b3log-solo/issues/36">36 加入博客关键信息获取接口</a></li>
</ul>
<h2>Release 0.4.5 - Jun 1, 2012</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=302">302 文章加密</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=392">392 支持应用路径部署</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=393">393 支持多编辑器</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=394">394 支持 Markdown</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=395">395 发布包中加入项目说明</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=396">396 新皮肤——ease</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=399">399 i-nove 皮肤问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=400">400 GAE 版 sitemap.xml 问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=401">401 升级 GAE SDK 1.6.5</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=402">402 本地版用户退出问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=404">404 TinyMCE 升级到 3.5</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=405">405 添加 KindEditor </a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=406">406 Fancybox 鼠标滚轮事件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=407">407 表情修改</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=408">408 在线人数计数问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=409">409 允许用户添加 ftl 模版</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=410">410 模版缓存问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=411">411 错误页面改造</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=412">412 评论默认头像变更</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=413">413 链接上添加 rel</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=416">416 项目迁到 GitHub</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=417">417 移除 sleepycat 版本</a></li>
</ul>
<h2>Release 0.4.1 - Apr 25, 2012</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=303">303 开启/关闭允许评论</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=333">333 优化签名档存储</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=338">338 具体化版本号</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=351">351 导航可以选择为内容页面或链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=365">365 Admin Action 改造</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=367">367 移除文件管理功能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=370">370 禁用异步 Sessions 持久化</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=373">373 Feed 可设置成全文输出/摘要输出</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=374">374 升级 GAE SDK 1.6.4.1</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=378">378 本地版(MySQL)发布</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=381">381 数据备份</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=383">383 topbar 展现方式调整</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=387">387 上一篇,下一篇的问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=388">388 jQuery Fancybox 插件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=389">389 编辑器加入“字体”、“字号”配置</a></li>
</ul>
<h2>Release 0.4.0 - Feb 19, 2012</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=281">281 写文章标签处支持鼠标点击选择</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=282">282 评论回复邮件提醒模版</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=287">287 去除 Jabsorb</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=293">293 Not Found 问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=296">296 标签-文章 Atom 异常</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=297">297 文件管理分页问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=298">298 自定义页面/链接排序问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=299">299 增加友情链接描述</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=301">301 移除同步腾讯微博</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=304">304 删除自定义页面,博客总评论数未减</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=306">306 MetaWeblog API 支持</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=307">307 移动设备前台皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=308">308 优化配额使用</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=309">309 加入超配额时的默认页面</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=313">313 升级 GAE SDK 1.6.2.1</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=314">314 评论跨站安全问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=315">315 jQuery upgrade</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=316">316 改进代码高亮 JS 加载</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=317">317 JS、CSS 版本号</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=319">319 Atom/RSS 请求方法加入 HEAD 方法</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=320">320 RSS 输出问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=322">322 从本地加载 jQuery</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=323">323 移除文件上传功能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=325">325 使用本地缓存替换 Memcache</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=330">330 0.4.0 beta1 统计丢失问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=332">332 HTML 编辑器支持 style 标签</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=334">334 文章操作防重复提交</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=339">339 /upgrade/checker.do 返回渲染</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=340">340 更改文章/页面链接后,评论的链接不更新</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=341">341 WLW 配置出错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=342">342 在线访客计数</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=343">343 皮肤乱码问题【Tree house】</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=344">344 移除皮肤 Zoltan</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=347">347 优化初始化</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=348">348 修改数据索引</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=349">349 后台文章列表分页问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=350">350 增加对自定义链接的空格替换</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=353">353 编辑器支持样式</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=354">354 支持 SyntaxHighlighter 和 google-code-prettify</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=355">355 不统计爬虫带来的访问量</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=356">356 取消摘要必填</a></li>
</ul>
<h2>Release 0.3.5 - Oct 22, 2011</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=231">231 社区同步过来的评论没有转义</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=270">270 文章列表显示方式</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=272">272 标签墙改造</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=273">273 登录状态检查</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=275">275 登录 Cookie 失效过快</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=277">277 目录不能被访问</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=278">278 存档页面报错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=279">279 优化实例启动速度</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=284">284 升级 GAE SDK 1.5.5</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=285">285 签名档默认第一个</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=286">286 站内相关文章优化</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=288">288 调整数据索引</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=289">289 修复移除无用标签报错</a></li>
</ul>
<h2>Release 0.3.1 - Oct 1, 2011</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=226">226 皮肤语言配置</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=237">237 改进 admin-cache 插件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=243">243 验证码不能刷新</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=246">246 后台 js 合并压缩</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=250">250 友情链接改进</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=251">251 已压缩的 CSS、JS 文件编码问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=253">253 点击任何一个菜单都会弹出一错误提示窗口</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=254">254 CSS编码错误</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=255">255 改进评论数据结构</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=257">257 部署后自动升级</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=258">258 新皮肤——NeoEase</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=259">259 支持 RSS 2.0</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=260">260 升级到 GAE 1.5.4</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=261">261 重构 Web 请求分发,使用 Latke 新的分发器</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=262">262 编辑器插入 html 代码不可进行高亮</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=264">264 文章中的代码总是出现竖向滚动条</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=266">266 编辑器自动替换 &lt;a&gt; 问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=267">267 sitemap 输出</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=268">268 用户验证改造</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=269">269 About 页面</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=271">271 标签分隔符提示</a></li>
</ul>
<h2>Release 0.3.0 - Aug 20, 2011</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=9">9 更换标签墙</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=42">42 对标签提示进一步完善</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=73">73 B3log 新闻获取插件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=111">111 插件机制</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=120">120 优化链接 URL</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=134">134 缓存页面管理</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=149">149 表情图片合并</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=187">187 “主题”->“皮肤”</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=188">188 Elegant-Box-C友情链接BUG</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=189">189 ErrorAction(/error.do)加入模版数据</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=190">190 改进“博客地址”配置</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=194">194 初始化失败</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=197">197 b3log.org 域名发放</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=198">198 TinyMCE HTML Editor不能插入 iframe</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=199">199 标题使用 HTML 代码问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=201">201 Community 皮肤正文中链接和内容区别不明显</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=203">203 升级到 FreeMarker for GAE 2.3.18</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=204">204 升级到 GAE 1.5.2</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=205">205 皮肤文件结构的重新设计</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=206">206 单独的评论管理功能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=207">207 后台改版</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=208">208 页面缓存启用/禁用</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=209">209 升级版本后找不到皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=211">211 初始化页面(/init.do)判断 IE6</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=216">216 新皮肤 for 0.3.0</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=219">219 优化前台性能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=220">220 存档时区问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=221">221 0.2.6-0.3.0 升级程序</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=222">222 项目加入 Change log</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=223">223 修复不能在 maven3.0+ 下使用的 bug</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=224">224 改进错误页面</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=225">225 移除博客同步功能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=227">227 升级 TinyMCE 到 3.4.3.2</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=228">228 评论/回复折行</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=229">229 移除情侣皮肤(valentine,向左走向右走)</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=230">230 最新评论转义问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=232">232 通过链接(Permalink)访问草稿</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=234">234 代码渲染</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=236">236 标签-文章计数修复程序</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=240">240 Kill IE功能异常</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=247">247 新一篇问题</a></li>
</ul>
<h2>Release 0.2.5 - Apr 30, 2011</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=153">153 增加“发布到社区”选项</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=154">154 TinyMCE 使用绝对地址</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=155">155 添加一个页面后,就开始404了。连主页都404</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=157">157 Andrea 皮肤图片压缩</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=158">158 评论提交过程中禁用提交按钮</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=160">160 删除已发表文章的非管理员用户后浏览报错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=163">163 移除不必要的过滤器,优化性能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=165">165 加入 Symphony 到 Solo 的评论同步</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=166">166 从中文切换英文后后台 Preference 报错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=167">167 文章随机值生成报错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=168">168 恢复签名档为默认值</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=170">170 屏蔽载入站外相关文章错误弹出</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=171">171 更新文章事务问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=179">179 robots.txt 问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=180">180 新皮肤——Elegant-Box-C</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=181">181 升级到 GAE SDK 1.4.3</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=183">183 先存草稿再发布不能同步微博、社区</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=184">184 删除文章存档数反而增加</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=185">185 “博客同步”管理界面微调</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=186">186 新皮肤——owmx-3.0</a></li>
</ul>
<h2>Release 0.2.5 - Feb 13, 2011</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=33">33 加入文章发布/取消发布/保存功能(草稿夹)</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=43">43 修改评论中的 URL 填写方式</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=60">60 评论时信息的自动填充</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=89">89 新皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=90">90 新皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=91">91 页面管理中的顺序</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=92">92 皮肤 favourite 对 IE 7,8 的支持 </a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=93">93 文章访问次数统计失效</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=94">94 加入多人写作</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=95">95 Atom 不使用第三方库</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=96">96 移除“偏好设定”中管理员邮件的配置</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=97">97 删除通过 Google Profiles 获取用户信息</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=98">98 改进 403 错误页面</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=99">99 上传空文件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=100">100 链接、页面排序</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=101">101 改进初始化</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=103">103 整理界面中已定义的元素 ID</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=105">105 加入对“有更新”提示的配置</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=107">107 新皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=108">108 IE 8 下 Feed 不能显示</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=110">110 Feed Entry 中加入文章分类、作者</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=112">112 评论提交改为 jQuery AJAX</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=113">113 判断是否登录使用 jQuery AJAX</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=114">114 更友好的评论评论邮件提醒</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=116">116 初始化时发布一篇默认文章</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=118">118 优化缓存</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=119">119 评论输入框</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=121">121 占无评论</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=122">122 签名档</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=126">126 调整“经典淡蓝”皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=128">128 对后台的皮肤选择添加验证,避免出现异常和空白页</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=129">129 取消默认链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=131">131 存档边界时间的判断</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=132">132 加入时区配置</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=133">133 访问统计问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=135">135 改进获取随机文章性能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=137">137 发布/更新文章时 Ping Google Blog Search Engine</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=138">138 移除 Guice、Guice Servlet</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=139">139 后台报错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=141">141 将文章浏览计数修改为异步方式</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=142">142 博客地址配置更新检查</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=144">144 删除所有数据</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=145">145 文章发布同步到腾讯微博</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=146">146 TinyMCE 使用相对地址</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=147">147 换肤问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=148">148 移除 AddThis</a></li>
</ul>
<h2>Release 0.2.1 - Dec 1, 2010</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=46">46 偏好设定与统计丢失</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=47">47 升级 0.2.0 后皮肤首次显示错乱</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=48">48 完善初始化界面</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=49">49 按标签查看文章时排序有错</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=50">50 前台统计显示使用模板</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=51">51 前台最新评论使用模板</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=52">52 向 Rhythm 发送发文数据时加入版本</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=53">53 评论加入表情</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=54">54 TinyMCE 加入中文</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=56">56 加入文章自定义链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=57">57 加入页面自定义链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=58">58 评论偶尔出现重复提交</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=61">61 修改“上一篇”、“下一篇”链接为结构化链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=62">62 后台查看评论应该附带邮件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=63">63 标签链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=64">64 查看存档文章列表时排序有错 </a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=65">65 优化更新数据性能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=66">66 整理无用的 jar,减小 Solo 体积</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=67">67 切换皮肤后按标签访问文章页面错乱</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=68">68 移除所有页面缓存时异常</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=72">72 文章同步更新失败</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=74">74 后台查看页面评论应该附带邮件</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=75">75 初始化功能需要加入“确定”对话框</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=76">76 上传文件不应刷新整个页面</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=77">77 IE 7 下:前台头部登录与 logo 对不齐</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=78">78 FF 下 多媒体无法显示</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=79">79 新皮肤</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=80">80 侧边栏文字内容太长则数字统计看不到</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=81">81 侧边栏“访问最多的文章”在“偏好设定”中不能进行自定义</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=82">82 修改“标签墙”链接为 /tags.html</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=83">83 meta 修改</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=84">84 修改自定义页面默认链接为 /pages/${oId}.html</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=86">86 提交评论/回复后只刷新局部</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=87">87 IE 7 下后台展现 bug</a></li>
</ul>
<h2>Release 0.2.0 - Nov 12, 2010</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=4">4 标签管理</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=5">5 缓存状态查看</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=6">6 自定义页面关键字、描述</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=7">7 皮肤 iNove</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=10">10 文章内容样式问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=11">11 TinyMCE 代码高亮</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=12">12 前台添加“回到顶部”</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=13">13 500 Server Error</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=14">14 站外相关阅读</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=15">15 取消从 0.1.0 到 0.1.1 自动升级后台任务</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=16">16 有时博客配置会被重新初始化</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=17">17 自定义页面评论</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=18">18 分页加载顺序</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=19">19 文章页面缓存重复问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=20">20 不能清除本页缓存</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=21">21 文章页面看不到“回到顶部箭头”</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=22">22 文章列表标签列字体太大</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=23">23 页面管理添加链接</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=24">24 同步 Buzz 失败时文章发布失败</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=25">25 自定义页面内容样式有问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=26">26 刷新文章页面,浏览数加2</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=28">28 链接管理 URL 列应该可以点击</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=29">29 弹出查看评论 div 后下面的界面应该不可操作</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=30">30 每次弹出评论 div 时数据应该重新获取</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=31">31 文件管理</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=32">32 评论预览只能显示一次?</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=34">34 NPE</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=35">35 IE 8 下 侧边栏长度过长会向下溢出</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=36">36 博客同步操作异常反馈应该更具体</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=37">37 加强博客地址配置的容错性</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=38">38 考虑关闭 Google Buzz 同步功能</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=39">39 后台查看评论显示问题</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=40">40 回复预览</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=41">41 “经典淡蓝”皮肤公告栏内容自动换行</a></li>
</ul>
<h2>Release 0.1.1 - Oct 26, 2010</h2>
<ul>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=1">1 前台文章列表中的文章统计数据与文章细节页面统计数据不一致</a></li>
<li><a href="http://code.google.com/p/b3log-solo/issues/detail?id=2">2 Tree-House 皮肤评论预览有问题</a></li>
</ul>
</body>
</html>
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path=""/>
A Java blogging system, feel free to create your or your team own blog.
Project home: https://github.com/b3log/solo
Request features/Report bugs: https://github.com/b3log/solo/issues/new
* QQ Qun: 13139268
* User Guide: https://github.com/b3log/solo/wiki/Pre_installation
* Dev Guide: https://github.com/b3log/solo/wiki/Pre_dev
* Skin Dev Guide: https://github.com/b3log/solo/wiki/Develop_steps
* Plugin Dev Guide: https://docs.google.com/document/pub?id=15H7Q3EBo-44v61Xp_epiYY7vK_gPJLkQaT7T1gkE64w&pli=1
====
B3log Index: http://b3log.org
B3log Team: https://github.com/b3log/solo/wiki/About_us
Join B3log Team: https://github.com/b3log/solo/wiki/Join_us
====
平等,自由,奔放
Equality, Freedom, Passion
;-)
<?xml version="1.0" encoding="UTF-8"?>
<!--
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: Cron job configurations.
Version: 1.0.1.5, Nov 5, 2015
Author: Liang Ding
-->
<cronentries>
<cron>
<url>/console/stat/onlineVisitorRefresh</url>
<description>Online Visitor Refresher</description>
<schedule>every 60 minutes</schedule>
</cron>
<cron>
<url>/blog/symphony/user</url>
<description>Sync user to https://hacpai.com</description>
<schedule>every 24 hours</schedule>
</cron>
</cronentries>
<?xml version="1.0" encoding="UTF-8"?>
<!--
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: Task queue configurations.
Version: 2.0.1.2, Jan 8, 2016
Author: Liang Ding
-->
<queue-entries>
<queue>
<name>fix-queue</name>
<rate>20/m</rate>
<retry-parameters>
<task-retry-limit>7</task-retry-limit>
</retry-parameters>
</queue>
</queue-entries>
<?xml version="1.0" encoding="utf-8"?>
<!--
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: Static resources definition.
Version: 2.7.5.6, Aug 26, 2016
Author: Liang Ding
-->
<static-files>
<!-- Uses the STANDARD Ant Path Pattern to configure these paths! -->
<include path="/favicon.ico" />
<include path="/favicon.png" />
<include path="/robots.txt" />
<include path="/js/**.js" />
<include path="/js/**/*.js" />
<include path="/js/**.css" />
<include path="/js/**/*.css" />
<include path="/js/**.htm" />
<include path="/js/**/*.htm" />
<include path="/js/**.html" />
<include path="/js/**/*.html" />
<include path="/js/**.gif" />
<include path="/js/**/*.gif" />
<include path="/js/**.png" />
<include path="/js/**/*.png" />
<include path="/js/**.jpg" />
<include path="/js/**/*.jpg" />
<include path="/skins/**.css" />
<include path="/skins/**.css.map" />
<include path="/skins/**/*.css" />
<include path="/skins/**/*.css.map" />
<include path="/skins/**.js" />
<include path="/skins/**/*.js" />
<include path="/skins/**.png" />
<include path="/skins/**/*.png" />
<include path="/skins/**.jpg" />
<include path="/skins/**/*.jpg" />
<include path="/skins/**.swf" />
<include path="/skins/**/*.swf" />
<include path="/skins/**.gif" />
<include path="/skins/**/*.gif" />
<include path="/skins/**/*.eot" />
<include path="/skins/**/*.svg" />
<include path="/skins/**/*.ttf" />
<include path="/skins/**/*.woff" />
<include path="/css/**.css" />
<include path="/css/**/*.css" />
<include path="/css/fonts/*.eot" />
<include path="/css/fonts/*.svg" />
<include path="/css/fonts/*.ttf" />
<include path="/css/fonts/*.woff" />
<include path="/images/**.png" />
<include path="/images/**/*.png" />
<include path="/images/**.jpg" />
<include path="/images/**/*.jpg" />
<include path="/images/**.gif" />
<include path="/images/**/*.gif" />
<include path="/plugins/**.css" />
<include path="/plugins/**/*.css" />
<include path="/plugins/**.js" />
<include path="/plugins/**/*.js" />
<include path="/plugins/**.png" />
<include path="/plugins/**/*.png" />
<include path="/plugins/**.jpg" />
<include path="/plugins/**/*.jpg" />
<include path="/plugins/**.swf" />
<include path="/plugins/**/*.swf" />
<include path="/plugins/**.gif" />
<include path="/plugins/**/*.gif" />
<include path="/plugins/**.html" />
<include path="/plugins/**/*.html" />
<include path="/plugins/**.htm" />
<include path="/plugins/**/*.htm" />
<include path="/CHANGE_LOGS.html" />
<include path="/README.txt" />
<include path="/LICENSE.txt" />
</static-files>
<?xml version="1.0" encoding="UTF-8"?>
<!--
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: Solo web deployment descriptor.
Version: 1.0.5.1, Sep 27, 2013
Author: Liang Ding
-->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>org.b3log.solo.SoloServletListener</listener-class>
</listener>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.b3log.latke.servlet.filter.EncodingFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>responseEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>org.b3log.solo.filter.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>/admin-index.do</url-pattern>
<url-pattern>/admin-main.do</url-pattern>
<url-pattern>/admin-article.do</url-pattern>
<url-pattern>/admin-article-list.do</url-pattern>
<url-pattern>/admin-comment-list.do</url-pattern>
<url-pattern>/admin-link-list.do</url-pattern>
<url-pattern>/admin-preference.do</url-pattern>
<url-pattern>/admin-page-list.do</url-pattern>
<url-pattern>/admin-others.do</url-pattern>
<url-pattern>/admin-draft-list.do</url-pattern>
<url-pattern>/admin-user-list.do</url-pattern>
<url-pattern>/admin-plugin-list.do</url-pattern>
<url-pattern>/admin-about.do</url-pattern>
<url-pattern>/rm-all-data.do</url-pattern>
<url-pattern>/fix/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>PermalinkFilter</filter-name>
<filter-class>org.b3log.solo.filter.PermalinkFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PermalinkFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>InitCheckFilter</filter-name>
<filter-class>org.b3log.solo.filter.InitCheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>InitCheckFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>
5
</session-timeout>
</session-config>
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.b3log.latke.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- Error Pages -->
<error-page>
<error-code>404</error-code>
<location>/error/404.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/403.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.html</location>
</error-page>
</web-app>
<style>
.about-developer .developer-title{
float: left;
width: 300px;
margin-left: 12px;
}
.about-developer .contributor-title{
margin-left: 18px;
float: left;
width: 300px;
margin-left: 12px;
}
.about-developer .developer-body{
float: left;
width: 300px;
}
.about-developer .contributor-body{
margin-left: 18px;
float: left;
width: 300px;
}
.about-developer .about-body ul{
width: 230px;
}
.about-developer .about-body ul li{
width: 100px;
float: left;
display: block;
}
</style>
<div class="module-panel">
<div class="module-header">
<h2>${aboutLabel}</h2>
</div>
<div class="module-body padding12">
<div class="about-logo">
<a href="http://b3log.org" target="_blank">
<img src="${staticServePath}/images/logo.png" alt="Solo" title="Solo" />
</a>
</div>
<div class="left" style="width: 73%">
<div id="aboutLatest" class="about-margin">${checkingVersionLabel}</div>
${aboutContentLabel}
</div>
<span class="clear" />
</div>
<div class="module-body padding12 about-developer">
<div class="about-logo">
<!-- <a href="http://b3log.org" target="_blank">
<img src="${staticServePath}/images/developers.jpg" alt="Solo" title="Solo" />
</a>-->
<div style="width: 156px; height: 56px;"></div>
</div>
<div class="about-body">
<div class="left" style="width: 73%">
<div class="about-margin developer-title">${developersLabel}</div>
<div class="about-margin contributor-title">${contributorsLabel}</div>
</div>
<div class="left" style="width: 73%">
<div class="developer-body">
<ul>
<li><a target="_blank" href="http://88250.b3log.org">D</a></li>
<li><a target="_blank" href="http://vanessa.b3log.org">V</a></li>
<li><a target="_blank" href="mailto:wmainlove@gmail.com">mainlove</a></li>
<li><a target="_blank" href="http://people.apache.org/%7Edongxu">DX</a></li>
<li><a target="_blank" href="http://mizhichashao.com">大叔</a></li>
<li><a target="_blank" href="http://www.jiangzezhou.com">javen.jiang</a></li>
</ul>
</div>
<div class="contributor-body">
<ul>
<li><a target="_blank" href="http://www.ansen.org">An Shen</a></li>
<li><a target="_blank" href="http://www.bestck.net">Chevo</a></li>
<li><a target="_blank" href="https://github.com/paul-luo">破生</a></li>
<li><a target="_blank" href="http://xxk.b3log.org">宋诗献</a></li>
<li><a target="_blank" href="http://www.mynah.org">Lamb</a></li>
<li><a target="_blank" href="https://github.com/xiaomogui">大姨夫</a></li>
</ul>
</div>
</div>
</div>
<span class="clear" />
</div>
</div>
${plugins}
<div id="articleTable">
</div>
<div id="articlePagination" class="right margin12">
</div>
<div id="articleComments" class="none">
</div>
<div class="clear"></div>
${plugins}
<div class="form">
<div>
<label>${title1Label}</label>
<input id="title" type="text"/>
</div>
<div>
<label>${content1Label}</label>
<textarea id="articleContent" name="articleContent"
style="height: 500px;width:100%;"></textarea>
</div>
<div>
<label>${uploadFileLabel}</label>
<form id="articleUpload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" multiple=""/>
</form>
</div>
<div>
<label>${tags1WithTips1Label}</label>
<input id="tag" type="text"/>
</div>
<div class="comment-content">
<label>${abstract1Label}</label>
<textarea id="abstract" style="height: 200px;width: 100%;" name="abstract"></textarea>
</div>
<div>
<div class="left">
<label for="permalink">${permalink1Label}</label>
<input id="permalink" type="text" style="width: 416px;" />
</div>
<div class="right">
<label for="viewPwd">${articleViewPwd1Label}</label>
<input id="viewPwd" type="text" style="width: 156px" />
</div>
<div class="clear"></div>
</div>
<div>
<span class="signs">
<label>${sign1Label}</label>
<button style="margin-left: 0px;" id="articleSign1" class="selected">${signLabel} 1</button>
<button id="articleSign2">${signLabel} 2</button>
<button id="articleSign3">${signLabel} 3</button>
<button id="articleSign0">${noSignLabel}</button>
</span>
<div class="right">
<label for="articleCommentable">${allowComment1Label}</label>
<input type="checkbox" id="articleCommentable" checked="checked" />
<span id="postToCommunityPanel" class="none">
<label for="postToCommunity">
<a class="no-underline" href="https://hacpai.com/article/1440573175609" target="_blank">${postToCommunityLabel}</a>
</label>
<input id="postToCommunity" type="checkbox" checked="checked"/>
</span>
</div>
<div class="clear"></div>
</div>
<div class="right">
<button class="marginRight12" id="saveArticle">${saveLabel}</button>
<button id="submitArticle">${publishLabel}</button>
<button id="unSubmitArticle" class="none" onclick="admin.article.unPublish();">${unPublishLabel}</button>
</div>
<div class="clear"></div>
</div>
${plugins}
\ No newline at end of file
<div id="commentTable">
</div>
<div id="commentPagination" class="right margin12">
</div>
<div class="clear"></div>
${plugins}
\ No newline at end of file
<div id="draftTable">
</div>
<div id="draftPagination" class="right margin12">
</div>
<div class="clear"></div>
<div id="draftComments" class="none">
</div>
${plugins}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="robots" content="none" />
<title>${blogTitle} - ${adminConsoleLabel}</title>
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-base${miniPostfix}.css?${staticResourceVersion}" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-admin${miniPostfix}.css?${staticResourceVersion}" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/js/lib/CodeMirrorEditor/codemirror.min.css?${staticResourceVersion}" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/js/lib/highlight/styles/github.css?${staticResourceVersion}" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body onhashchange="admin.setCurByHash();">
<div class="tip"><span id="loadMsg">${loadingLabel}</span></div>
<div class="tip tip-msg"><span id="tipMsg"></span></div>
<div id="allPanel">
<div id="top">
<a href="http://b3log.org" target="_blank" class="hover">
Solo
</a>
<span class="right">
<a href="${servePath}" title='${indexLabel}'>${indexLabel}</a><a href='javascript:admin.logout();' title='${logoutLabel}'>${logoutLabel}</a>
</span>
</div>
<div id="tabs">
<ul>
<li>
<div id="tabs_main">
<a href="#main">
<span class="icon-refresh"></span> ${adminIndexLabel}
</a>
</div>
</li>
<li>
<div id="tabArticleTitle" class="tab-current" onclick="admin.collapseNav(this)">
<span class="icon-article"></span>
${articleLabel}
<span class="icon-chevron-up right"></span>
</div>
<ul id="tabArticleMgt">
<li>
<div id="tabs_article">
<a href="#article/article" onclick="admin.article.prePost()">${postArticleLabel}</a>
</div>
</li>
<li>
<div id="tabs_article-list">
<a href="#article/article-list">${articleListLabel}</a>
</div>
</li>
<li>
<div id="tabs_draft-list">
<a href="#article/draft-list">${draftListLabel}</a>
</div>
</li>
</ul>
</li>
<li>
<div id="tabs_comment-list">
<a href="#comment-list">
<span class="icon-cmts"></span> ${commentListLabel}
</a>
</div>
</li>
<li>
<div id="tabToolsTitle" onclick="admin.collapseNav(this)">
<span class="icon-setting"></span>
${ToolLabel}
<span class="icon-chevron-down right"></span>
</div>
<ul class="none" id="tabTools">
<li>
<div id="tabs_preference">
<a href="#tools/preference">${preferenceLabel}</a>
</div>
</li>
<li>
<div id="tabs_page-list">
<a href="#tools/page-list">${navMgmtLabel}</a>
</div>
</li>
<li>
<div id="tabs_link-list">
<a href="#tools/link-list">${linkManagementLabel}</a>
</div>
</li>
<li>
<div id="tabs_user-list">
<a href="#tools/user-list">${userManageLabel}</a>
</div>
</li>
<li>
<div id="tabs_plugin-list">
<a href="#tools/plugin-list">${pluginMgmtLabel}</a>
</div>
</li>
<li>
<div id="tabs_others">
<a href="#tools/others">${othersLabel}</a>
</div>
</li>
</ul>
</li>
<li>
<div id="tabs_about">
<a href="#about">
<span class="icon-info"></span> ${aboutLabel}
</a>
</div>
</li>
</ul>
</div>
<div id="tabsPanel">
<div id="tabsPanel_main" class="none"></div>
<div id="tabsPanel_article" class="none"></div>
<div id="tabsPanel_article-list" class="none"></div>
<div id="tabsPanel_draft-list" class="none"></div>
<div id="tabsPanel_link-list" class="none"></div>
<div id="tabsPanel_preference" class="none"></div>
<div id="tabsPanel_page-list" class="none"></div>
<div id="tabsPanel_others" class="none"></div>
<div id="tabsPanel_user-list" class="none"></div>
<div id="tabsPanel_comment-list" class="none"></div>
<div id="tabsPanel_plugin-list" class="none"></div>
<div id="tabsPanel_about" class="none"></div>
</div>
<div class="clear"></div>
<div class="footer">
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a><a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
</div>
</div>
<script src="${staticServePath}/js/lib/compress/admin-lib.min.js"></script>
<script src="${staticServePath}/js/lib/tiny_mce/tiny_mce.js"></script>
<script src="${staticServePath}/js/common${miniPostfix}.js"></script>
<#if "" == miniPostfix>
<script src="${staticServePath}/js/admin/admin.js"></script>
<script src="${staticServePath}/js/admin/editor.js"></script>
<script src="${staticServePath}/js/admin/editorTinyMCE.js"></script>
<script src="${staticServePath}/js/admin/editorKindEditor.js"></script>
<script src="${staticServePath}/js/admin/editorCodeMirror.js"></script>
<script src="${staticServePath}/js/admin/tablePaginate.js"></script>
<script src="${staticServePath}/js/admin/article.js"></script>
<script src="${staticServePath}/js/admin/comment.js"></script>
<script src="${staticServePath}/js/admin/articleList.js"></script>
<script src="${staticServePath}/js/admin/draftList.js"></script>
<script src="${staticServePath}/js/admin/pageList.js"></script>
<script src="${staticServePath}/js/admin/others.js"></script>
<script src="${staticServePath}/js/admin/linkList.js"></script>
<script src="${staticServePath}/js/admin/preference.js"></script>
<script src="${staticServePath}/js/admin/pluginList.js"></script>
<script src="${staticServePath}/js/admin/userList.js"></script>
<script src="${staticServePath}/js/admin/commentList.js"></script>
<script src="${staticServePath}/js/admin/plugin.js"></script>
<script src="${staticServePath}/js/admin/main.js"></script>
<script src="${staticServePath}/js/admin/about.js"></script>
<#else>
<script src="${staticServePath}/js/admin/latkeAdmin${miniPostfix}.js?${staticResourceVersion}"></script>
</#if>
<#include "admin-label.ftl">
${plugins}
<script >
admin.inited();
</script>
</body>
</html>
\ No newline at end of file
<script type="text/javascript">
var latkeConfig = {
"staticServePath": "${staticServePath}",
"servePath": "${servePath}"
};
var qiniu = {
"qiniuUploadToken": "${qiniuUploadToken}",
"qiniuDomain": "${qiniuDomain}"
};
var Label = {
"skinDirName": "${skinDirName}",
"editorType": "${editorType}",
"userRole": "${userRole}",
"PAGE_SIZE": "${articleListDisplayCount}",
"WINDOW_SIZE": "${articleListPaginationWindowSize}",
"localeString": "${localeString}",
"version": "${version}",
"miniPostfix": "${miniPostfix}",
"reportIssueLabel": "please report this issue on https://github.com/b3log/solo/issues/new",
"noDataLabel": "${noDataLabel}",
"linkDescriptionLabel": "${linkDescriptionLabel}",
"addressInvalidLabel": "${addressInvalidLabel}",
"selectLabel": "${selectLabel}",
"outOfDateLabel": "${outOfDateLabel}",
"upToDateLabel": "${upToDateLabel}",
"commentContentLabel": "${commentContentLabel}",
"loadingLabel": "${loadingLabel}",
"noCommentLabel": "${noCommentLabel}",
"confirmRemoveLabel": "${confirmRemoveLabel}",
"removeLabel": "${removeLabel}",
"cancelPutTopLabel": "${cancelPutTopLabel}",
"putTopLabel": "${putTopLabel}",
"viewLabel": "${viewLabel}",
"updateLabel": "${updateLabel}",
"commentLabel": "${commentLabel}",
"titleLabel": "${titleLabel}",
"tagsLabel": "${tagsLabel}",
"authorLabel": "${authorLabel}",
"createDateLabel": "${createDateLabel}",
"previousPageLabel": "${previousPageLabel}",
"pageLabel": "${pageLabel}",
"nextPagePabel": "${nextPagePabel}",
"gotoLabel": "${gotoLabel}",
"fileNameLabel": "${fileNameLabel}",
"uploadDateLabel": "${uploadDateLabel}",
"sizeLabel": "${sizeLabel}",
"downloadCountLabel": "${downloadCountLabel}",
"downloadLabel": "${downloadLabel}",
"permalinkLabel": "${permalinkLabel}",
"titleEmptyLabel": "${titleEmptyLabel}",
"contentEmptyLabel": "${contentEmptyLabel}",
"linkTitleLabel": "${linkTitleLabel}",
"urlLabel": "${urlLabel}",
"addressEmptyLabel": "${addressEmptyLabel}",
"pluginNameLabel": "${pluginNameLabel}",
"statusLabel": "${statusLabel}",
"versionLabel": "${versionLabel}",
"commentNameLabel": "${commentNameLabel}",
"commentEmailLabel": "${commentEmailLabel}",
"roleLabel": "${roleLabel}",
"administratorLabel": "${administratorLabel}",
"duplicatedEmailLabel": "${duplicatedEmailLabel}",
"mailInvalidLabel": "${mailInvalidLabel}",
"mailCannotEmptyLabel": "${mailCannotEmptyLabel}",
"noSettingLabel": "${noSettingLabel}",
"blogEmptyLabel": "${blogEmptyLabel}",
"sumLabel": "${sumLabel}",
"countLabel": "${countLabel}",
"blogArticleEmptyLabel": "${blogArticleEmptyLabel}",
"importSuccLabel": "${importSuccLabel}",
"categoryLabel": "${categoryLabel}",
"importedLabel": "${importedLabel}",
"passwordEmptyLabel": "${passwordEmptyLabel}",
"tagsEmptyLabel": "${tagsEmptyLabel}",
"abstractEmptyLabel": "${abstractEmptyLabel}",
"commonUserLabel": "${commonUserLabel}",
"articleLabel": "${articleLabel}",
"enabledLabel": "${enabledLabel}",
"disabledLabel": "${disabledLabel}",
"signIsNullLabel": "${signIsNullLabel}",
"editorLeaveLabel": "${editorLeaveLabel}",
"editorPostLabel": "${editorPostLabel}",
"enableLabel": "${enableLabel}",
"disableLabel": "${disableLabel}",
"settingLabel": "${settingLabel}",
"linkEmptyLabel": "${linkEmptyLabel}",
"openMethodLabel": "${openMethodLabel}",
"typeLabel": "${typeLabel}",
"markdownHelpLabel": "${markdownHelpLabel}",
"notFoundLabel": "${notFoundLabel}",
"em00Label": "${em00Label}",
"em01Label": "${em01Label}",
"em02Label": "${em02Label}",
"em03Label": "${em03Label}",
"em04Label": "${em04Label}",
"em05Label": "${em05Label}",
"em06Label": "${em06Label}",
"em07Label": "${em07Label}",
"em08Label": "${em08Label}",
"em09Label": "${em09Label}",
"em10Label": "${em10Label}",
"em11Label": "${em11Label}",
"em12Label": "${em12Label}",
"em13Label": "${em13Label}",
"em14Label": "${em14Label}",
"paramSettingsLabel": "${paramSettingsLabel}",
"nonNegativeIntegerOnlyLabel": "${nonNegativeIntegerOnlyLabel}",
"indexTagDisplayCntLabel": "${indexTagDisplayCntLabel}",
"indexRecentCommentDisplayCntLabel": "${indexRecentCommentDisplayCntLabel}",
"indexMostCommentArticleDisplayCntLabel": "${indexMostCommentArticleDisplayCntLabel}",
"indexMostViewArticleDisplayCntLabel": "${indexMostViewArticleDisplayCntLabel}",
"pageSizeLabel": "${pageSizeLabel}",
"windowSizeLabel": "${windowSizeLabel}",
"randomArticlesDisplayCntLabel": "${randomArticlesDisplayCntLabel}",
"relevantArticlesDisplayCntLabel": "${relevantArticlesDisplayCntLabel}",
"externalRelevantArticlesDisplayCntLabel": "${externalRelevantArticlesDisplayCntLabel}",
"nameTooLongLabel": "${nameTooLongLabel}",
"navLabel": "${navLabel}",
"userLabel": "${userLabel}",
"changeRoleLabel": "${changeRoleLabel}",
"visitorUserLabel": "${visitorUserLabel}",
"autoSaveLabel": "${autoSaveLabel}"
};
admin.init();
</script>
\ No newline at end of file
<div>
<div id="linkTable"></div>
<div id="linkPagination" class="margin12 right"></div>
</div>
<div class="clear"></div>
<table class="form" width="100%" cellpadding="0px" cellspacing="9px">
<thead>
<tr>
<th style="text-align: left" colspan="2">
${addLinkLabel}
</th>
</tr>
</thead>
<tbody>
<tr>
<th width="48px">
${linkTitle1Label}
</th>
<td>
<input id="linkTitle" type="text"/>
</td>
</tr>
<tr>
<th>
${url1Label}
</th>
<td>
<input id="linkAddress" type="text"/>
</td>
</tr>
<tr>
<th>
${linkDescription1Label}
</th>
<td>
<input id="linkDescription" type="text"/>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<button onclick="admin.linkList.add();">${saveLabel}</button>
</td>
</tr>
</tbody>
</table>
<div id="updateLink" class="none">
<table class="form" width="100%" cellpadding="0px" cellspacing="9px">
<thead>
<tr>
<th style="text-align: left" colspan="2">
${updateLinkLabel}
</th>
</tr>
</thead>
<tbody>
<tr>
<th width="48px">
${linkTitle1Label}
</th>
<td>
<input id="linkTitleUpdate" type="text"/>
</td>
</tr>
<tr>
<th>
${url1Label}
</th>
<td>
<input id="linkAddressUpdate" type="text"/>
</td>
</tr>
<tr>
<th>
${linkDescription1Label}
</th>
<td>
<input id="linkDescriptionUpdate" type="text"/>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<button onclick="admin.linkList.update();">${updateLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
${plugins}
\ No newline at end of file
<div id="mainPanel1"></div>
<div id="mainPanel2"></div>
${plugins}
<div id="tabOthers" class="sub-tabs">
<ul>
<li>
<div id="tabOthers_email">
<a class="tab-current" href="#tools/others/email">${replayEmailTemplateLabel}</a>
</div>
</li>
<li>
<div id="tabOthers_other">
<a href="#tools/others/other">${othersLabel}</a>
</div>
</li>
</ul>
</div>
<div id="tabOthersPanel" class="sub-tabs-main">
<div id="tabOthersPanel_email">
<table class="form" width="98%" cellpadding="0" cellspacing="9px">
<tbody>
<tr>
<th width="90px" valign="top">
<label for="replayEmailTemplateTitle">${emailSubject1Label}</label>
</th>
<td>
<input id="replayEmailTemplateTitle" type="text" />
</td>
<td rowspan="2" valign="top" width="260px">
<div class="marginLeft12">
${replayEmailExplanationLabel}
</div>
</td>
</tr>
<tr>
<th valign="top">
<label for="replayEmailTemplateBody">${emailContent1Label}</label>
</th>
<td>
<textarea rows="9" id="replayEmailTemplateBody"></textarea>
</td>
</tr>
<tr>
<td colspan="3" align="right">
<button onclick="admin.others.update()">${updateLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
<div id="tabOthersPanel_other" class="none">
<button class="margin12" onclick="admin.others.removeUnusedTags();">${removeUnusedTagsLabel}</button>
<#if isMySQL>
<button class="margin12" onclick="admin.others.exportSQL();">${exportSQLLabel}</button>
</#if>
</div>
</div>
${plugins}
<div>
<div id="pageTable">
</div>
<div id="pagePagination" class="margin12 right">
</div>
<div class="clear"></div>
</div>
<div class="form">
<div>
<label>${title1Label}</label>
<input id="pageTitle" type="text"/>
</div>
<div>
<label>${permalink1Label}</label>
<input id="pagePermalink" type="text"/>
</div>
<div>
<label>${openMethod1Label}</label>
<select id="pageTarget">
<option value="_self">${targetSelfLabel}</option>
<option value="_blank">${targetBlankLabel}</option>
<option value="_parent">${targetParentLabel}</option>
<option value="_top">${targetTopLabel}</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;
<label>${type1Label}</label>
<button data-type="link" class="selected fn-type">${pageLinkLabel}</button>
<button data-type="page" class="fn-type">${pageLabel}</button>
</div>
<div id="pagePagePanel" class="none">
<textarea id="pageContent" style="height: 430px;width: 100%;" name="pageContent"></textarea>
<label>${allowComment1Label}</label>
<input type="checkbox" id="pageCommentable" checked="checked" />
</div>
<div class="right">
<button onclick="admin.pageList.submit();">${saveLabel}</button>
</div>
<div class="clear"></div>
</div>
<div id="pageComments" class="none"></div>
<div class="clear"></div>
${plugins}
<div id="pluginTable">
</div>
<div id="pluginPagination" class="margin12 right">
</div>
<div id="pluginSetting" class="none">
</div>
<div class="clear"></div>
${plugins}
<textarea id="jsoneditor" rows="10" cols="110">
${setting}
</textarea>
<input type="hidden" id="pluginId" value="${oId}">
<button class="marginRight12" id="updateSetting" onclick="updateSetting()">save</button>
<script type="text/javascript">
function updateSetting(){
var pluginId = $("#pluginId").val();
var json = $("#jsoneditor").val();
alert(json);
$("#loadMsg").text(Label.loadingLabel);
var requestJSONObject = {
"oId": pluginId,
"setting":json
};
$.ajax({
url: latkeConfig.servePath + "/console/plugin/updateSetting",
type: "POST",
cache: false,
data: JSON.stringify(requestJSONObject),
success: function(result, textStatus){
$("#tipMsg").text(result.msg);
}
});
}
</script>
<div id="tabPreference" class="sub-tabs fn-clear">
<ul>
<li>
<div id="tabPreference_config">
<a class="tab-current" href="#tools/preference/config">${configSettingsLabel}</a>
</div>
</li>
<li>
<div id="tabPreference_skins">
<a href="#tools/preference/skins">${skinLabel}</a>
</div>
</li>
<li>
<div id="tabPreference_signs">
<a href="#tools/preference/signs">${signLabel}</a>
</div>
</li>
<li>
<div id="tabPreference_setting">
<a href="#tools/preference/setting">${paramSettingsLabel}</a>
</div>
</li>
<li>
<div id="tabPreference_qiniu">
<a href="#toos/preference/qiniu">${qiniuLabel}</a>
</div>
</li>
<li>
<div id="tabPreference_solo">
<a href="#tools/preference/solo">B3log</a>
</div>
</li>
</ul>
</div>
<div id="tabPreferencePanel" class="sub-tabs-main">
<div id="tabPreferencePanel_config">
<table class="form" width="100%" cellpadding="0" cellspacing="9px">
<tbody>
<tr>
<td colspan="2" align="right">
<button onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
<tr>
<th width="234px">
<label for="blogTitle">${blogTitle1Label}</label>
</th>
<td>
<input id="blogTitle" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="blogSubtitle">${blogSubtitle1Label}</label>
</th>
<td>
<input id="blogSubtitle" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="blogHost">${blogHost1Label}</label>
</th>
<td>
<input id="blogHost" type="text" value="${servePath}" readonly="true" />
</td>
</tr>
<tr>
<th>
<label for="metaKeywords">${metaKeywords1Label}</label>
</th>
<td>
<input id="metaKeywords" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="metaDescription">${metaDescription1Label}</label>
</th>
<td>
<input id="metaDescription" type="text" />
</td>
</tr>
<tr>
<th valign="top">
<label for="htmlHead">${htmlhead1Label}</label>
</th>
<td>
<textarea rows="6" id="htmlHead"></textarea>
</td>
</tr>
<tr>
<th valign="top">
<label for="noticeBoard">${noticeBoard1Label}</label>
</th>
<td>
<textarea rows="6" id="noticeBoard"></textarea>
</td>
</tr>
<tr>
<th valign="top">
<label for="footerContent">${footerContent1Label}</label>
</th>
<td>
<textarea rows="2" id="footerContent"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<button onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
<div id="tabPreferencePanel_solo" class="none">
<table class="form" width="100%" cellpadding="0" cellspacing="9px">
<tbody>
<tr>
<th width="80px">
<label for="keyOfSolo">${keyOfSolo1Label}</label>
</th>
<td>
<input id="keyOfSolo" class="normalInput" type="text" readonly="readonly"/>
</td>
</tr>
<tr>
<td colspan="2">
<a href="https://hacpai.com/article/1457158841475" target="_blank">${APILabel}</a>
</td>
</tr>
</tbody>
</table>
</div>
<div id="tabPreferencePanel_setting" class="none">
<table class="form" width="100%" cellpadding="0" cellspacing="9px">
<tbody>
<tr>
<td colspan="2" align="right">
<button onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
<tr>
<th width="234px">
<label for="localeString">${localeString1Label}</label>
</th>
<td>
<select id="localeString">
<option value="zh_CN">简体中文</option>
<option value="en_US">Englisth(US)</option>
</select>
</td>
</tr>
<tr>
<th width="234px">
<label for="timeZoneId">${timeZoneId1Label}</label>
</th>
<td>
<select id="timeZoneId">
${timeZoneIdOptions}
</select>
</td>
</tr>
<tr>
<th>
<label for="editorType">${editType1Label}</label>
</th>
<td>
<select id="editorType">
<option value="tinyMCE">TinyMCE</option>
<option value="CodeMirror-Markdown">CodeMirror(Markdown)</option>
<option value="KindEditor">KindEditor</option>
</select>
</td>
</tr>
<tr>
<th>
<label for="articleListDisplay">${articleListDisplay1Label}</label>
</th>
<td>
<select id="articleListDisplay">
<option value="titleOnly">${titleOnlyLabel}</option>
<option value="titleAndAbstract">${titleAndAbstractLabel}</option>
<option value="titleAndContent">${titleAndContentLabel}</option>
</select>
</td>
</tr>
<tr>
<th>
<label for="mostUsedTagDisplayCount">${indexTagDisplayCnt1Label}</label>
</th>
<td>
<input id="mostUsedTagDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="recentCommentDisplayCount">${indexRecentCommentDisplayCnt1Label}</label>
</th>
<td>
<input id="recentCommentDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="mostCommentArticleDisplayCount">${indexMostCommentArticleDisplayCnt1Label}</label>
</th>
<td>
<input id="mostCommentArticleDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="mostViewArticleDisplayCount">${indexMostViewArticleDisplayCnt1Label}</label>
</th>
<td>
<input id="mostViewArticleDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="articleListDisplayCount">${pageSize1Label}</label>
</th>
<td>
<input id="articleListDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="articleListPaginationWindowSize">${windowSize1Label}</label>
</th>
<td>
<input id="articleListPaginationWindowSize" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="randomArticlesDisplayCount">${randomArticlesDisplayCnt1Label}</label>
</th>
<td>
<input id="randomArticlesDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="relevantArticlesDisplayCount">${relevantArticlesDisplayCnt1Label}</label>
</th>
<td>
<input id="relevantArticlesDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="externalRelevantArticlesDisplayCount">${externalRelevantArticlesDisplayCnt1Label}</label>
</th>
<td>
<input id="externalRelevantArticlesDisplayCount" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="enableArticleUpdateHint">${enableArticleUpdateHint1Label}</label>
</th>
<td>
<input id="enableArticleUpdateHint" type="checkbox" class="normalInput"/>
</td>
</tr>
<tr>
<th>
<label for="allowVisitDraftViaPermalink">${allowVisitDraftViaPermalink1Label}</label>
</th>
<td>
<input id="allowVisitDraftViaPermalink" type="checkbox" class="normalInput"/>
</td>
</tr>
<tr>
<th>
<label for="commentable">${allowComment1Label}</label>
</th>
<td>
<input id="commentable" type="checkbox" class="normalInput"/>
</td>
</tr>
<tr>
<th>
<label for="allowRegister">${allowRegister1Label}</label>
</th>
<td>
<input id="allowRegister" type="checkbox" class="normalInput"/>
</td>
</tr>
<tr>
<th>
<label for="feedOutputMode">${feedOutputModel1Label}</label>
</th>
<td>
<select id="feedOutputMode">
<option value="abstract">${abstractLabel}</option>
<option value="fullContent">${fullContentLabel}</option>
</select>
</td>
</tr>
<tr>
<th>
<label for="feedOutputCnt">${feedOutputCnt1Label}</label>
</th>
<td>
<input id="feedOutputCnt" class="normalInput" type="text"/>
</td>
</tr>
<tr>
<th colspan="2">
<button onclick="admin.preference.update()">${updateLabel}</button>
</th>
</tr>
</tbody>
</table>
</div>
<div id="tabPreferencePanel_skins" class="none form">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<div id="skinMain">
</div>
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
</div>
<div id="tabPreferencePanel_signs" class="none">
<table class="form" width="100%" cellpadding="0" cellspacing="9px">
<tbody>
<tr>
<th colspan="2">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
</th>
</tr>
<tr>
<th valign="top" width="80">
<button id="preferenceSignButton1">${signLabel}1</button>
</th>
<td>
<textarea rows="8" id="preferenceSign1"></textarea>
</td>
</tr>
<tr>
<th valign="top">
<button id="preferenceSignButton2">${signLabel}2</button>
</th>
<td>
<textarea rows="8" id="preferenceSign2"></textarea>
</td>
</tr>
<tr>
<th valign="top">
<button id="preferenceSignButton3">${signLabel}3</button>
</th>
<td>
<textarea rows="8" id="preferenceSign3"></textarea>
</td>
</tr>
<tr>
<th colspan="2">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
</th>
</tr>
</tbody>
</table>
</div>
<div id="tabPreferencePanel_qiniu" class="none">
<table class="form" width="100%" cellpadding="0" cellspacing="9px">
<tbody>
<tr>
<th colspan="2">
<button onclick="admin.preference.updateQiniu()">${updateLabel}</button>
</th>
</tr>
<tr>
<th width="120">
<label for="qiniuAccessKey">${accessKey1Label}</label>
</th>
<td>
<input id="qiniuAccessKey" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="qiniuSecretKey">${secretKey1Label}</label>
</th>
<td>
<input id="qiniuSecretKey" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="qiniuDomain">${domain1Label}</label>
</th>
<td>
<input id="qiniuDomain" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="qiniuBucket">${bucket1Label}</label>
</th>
<td>
<input id="qiniuBucket" type="text"/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
${plugins}
\ No newline at end of file
<div>
<div id="userTable"></div>
<div id="userPagination" class="margin12 right"></div>
</div>
<div class="clear"></div>
<table class="form" width="100%" cellpadding="0px" cellspacing="9px">
<thead>
<tr>
<th style="text-align: left" colspan="2">
${addUserLabel}
</th>
</tr>
</thead>
<tbody>
<tr>
<th width="48px">
<label for="userName">${commentName1Label}</label>
</th>
<td>
<input id="userName" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="userEmail">${commentEmail1Label}</label>
</th>
<td>
<input id="userEmail" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="userURL">${userURL1Label}</label>
</th>
<td>
<input id="userURL" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="userPassword">${userPassword1Label}</label>
</th>
<td>
<input id="userPassword" type="password"/>
</td>
</tr>
<tr>
<th>
<label for="userAvatar">${userAvatar1Label}</label>
</th>
<td>
<input id="userAvatar" type="text"/>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<button onclick="admin.userList.add();">${saveLabel}</button>
</td>
</tr>
</tbody>
</table>
<div id="userUpdate" class="none">
<table class="form" width="100%" cellpadding="0px" cellspacing="9px">
<thead>
<tr>
<th style="text-align: left" colspan="2">
${updateUserLabel}
</th>
</tr>
</thead>
<tbody>
<tr>
<th width="48px">
<label for="userNameUpdate">${commentName1Label}</label>
</th>
<td>
<input id="userNameUpdate" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="userEmailUpdate">${commentEmail1Label}</label>
</th>
<td>
<input id="userEmailUpdate" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="userURLUpdate">${userURL1Label}</label>
</th>
<td>
<input id="userURLUpdate" type="text"/>
</td>
</tr>
<tr>
<th>
<label for="userPasswordUpdate">${userPassword1Label}</label>
</th>
<td>
<input id="userPasswordUpdate" type="password"/>
</td>
</tr>
<tr>
<th>
<label for="userAvatarUpdate">${userAvatar1Label}</label>
</th>
<td>
<input id="userAvatarUpdate" type="text"/>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<button onclick="admin.userList.update();">${updateLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
${plugins}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>${articleViewPwdLabel}</title>
<meta name="keywords" content="Solo,Java 博客,开源" />
<meta name="description" content="An open source blog with Java. Java 开源博客" />
<meta name="owner" content="B3log Team" />
<meta name="author" content="B3log Team" />
<meta name="generator" content="Solo" />
<meta name="copyright" content="B3log" />
<meta name="revised" content="B3log, ${year}" />
<meta name="robots" content="noindex, follow" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main article-pwd">
<h2>
${articleTitle}
</h2>
<div>
${articleAbstract}
</div>
<#if msg??>
<div>${msg}</div>
</#if>
<form method="POST" action="${servePath}/console/article-pwd">
<label for="pwdTyped">访问密码:</label>
<input type="password" id="pwdTyped" name="pwdTyped" />
<input type="hidden" name="articleId" value="${articleId}" />
<button id="confirm" type="submit">${confirmLabel}</button>
</form>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year} - <a href="${servePath}">${blogTitle}</a><br/>
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a><a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="robots" content="none" />
<title>${blogTitle} - 403 Forbidden!</title>
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main">
<h2>403 Forbidden!</h2>
<img class="img-403" src="${staticServePath}/images/403.png" alt="403: forbidden" title="403: forbidden" />
<div class="a-403">
<a href="${servePath}">Index</a> |
<a href="${loginURL}">Login</a>
</div>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a>, ver ${version}
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="robots" content="none" />
<title>${blogTitle} - 404 Not Found!</title>
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content" style="height: 380px;width: 760px">
<script type="text/javascript" src="http://www.qq.com/404/search_children.js?edition=small" charset="utf-8"></script>
</div>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a>, ver ${version}
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>${blogTitle} - 500 Internal Server Error!</title>
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main">
<h2>500 Internal Server Error!</h2>
<img class="img-500" src="${staticServePath}/images/500.png" title="500: internal error" alt="500: internal error" />
<div class="a-500">
Please
<a href="https://github.com/b3log/solo/issues/new">report</a> it to help us.
Return to <a href="${servePath}">Index</a>.
</div>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a>, ver ${version}
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>${welcomeToSoloLabel} Solo!</title>
<meta name="keywords" content="Solo,Java 博客,开源" />
<meta name="description" content="An open source blog with Java. Java 开源博客" />
<meta name="owner" content="B3log Team" />
<meta name="author" content="B3log Team" />
<meta name="generator" content="Solo" />
<meta name="copyright" content="B3log" />
<meta name="revised" content="B3log, ${year}" />
<meta name="robots" content="noindex, follow" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
<style>
*,html,body {
margin: 0;
padding: 0;
}
html {
height: 100%;
overflow: hidden;
}
body {
background-color: #F3F1E5;
color: #4D505D;
font-family: \5fae\8f6f\96c5\9ed1;
font-size: small;
height: 100%;
overflow: hidden;
}
.wrapper {
height: 400px;
min-height: 100%;
position: relative;
}
.contentError {
background-color: #FFFFFF;
border: 1px solid #E6E5D9;
height: 300px;
margin: 0 auto;
padding: 50px;
position: relative;
top: 60px;
width: 600px;
}
.footerWrapper {
background-color: #FFFFFF;
border-top: 1px solid #E6E5D9;
bottom: 0;
padding: 12px 0;
position: absolute;
text-align: center;
width: 100%;
}
.footerWrapper a {
text-decoration: none;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content" id="main">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main">
<h2>
<span>${welcomeToSoloLabel}</span>
<a target="_blank" href="http://b3log.org">
<span class="solo">&nbsp;Solo</span>
</a>
</h2>
<div id="init">
<div id="user" class="form">
<label for="userEmail">
${commentEmail1Label}
</label>
<input id="userEmail" />
<label for="userName">
${userName1Label}
</label>
<input id="userName" />
<label for="userPassword">
${userPassword1Label}
</label>
<input type="password" id="userPassword" />
<label for="userPasswordConfirm">
${userPasswordConfirm1Label}
</label>
<input type="password" id="userPasswordConfirm" />
<button onclick='getUserInfo();'>${nextStepLabel}</button>
<span id="tip"></span>
</div>
<div id="sys" class="none">
${initIntroLabel}
<button onclick='initSys();' id="initButton">${initLabel}</button>
<button onclick='returnTo();'>${previousStepLabel}</button>
<span id="tipInit"></span>
<span class="clear"></span>
</div>
</div>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a><a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
</div>
</div>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
<script type="text/javascript">
var validate = function() {
var userName = $("#userName").val().replace(/(^\s*)|(\s*$)/g, "");
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($("#userEmail").val())) {
$("#tip").text("${mailInvalidLabel}");
$("#userEmail").focus();
} else if (2 > userName.length || userName.length > 20) {
$("#tip").text("${nameTooLongLabel}");
$("#userName").focus();
} else if ($("#userPassword").val().replace(/\s/g, "") === "") {
$("#tip").text("${passwordEmptyLabel}");
$("#userPassword").focus();
} else if ($("#userPassword").val() !== $("#userPasswordConfirm").val()) {
$("#tip").text("${passwordNotMatchLabel}");
$("#userPasswordConfirm").focus();
} else {
$("#tip").text("");
return true;
}
return false;
};
var getUserInfo = function() {
if (validate()) {
$("#init").animate({
"top": -178
});
$("#user").animate({
"opacity": 0
});
$("#sys").css({
"display": "block",
"opacity": 1
});
$(window).unbind().keydown(function(e) {
if (e.keyCode === 27) {// esc
returnTo();
$(window).unbind();
} else if (e.keyCode === 13) {// enter
initSys();
}
});
}
};
var returnTo = function() {
$("#init").animate({
"top": 81
});
$("#user").animate({
"opacity": 1
});
$("#sys").animate({
"opacity": 0
}, 800, function() {
this.style.display = "none";
});
};
var initSys = function() {
var requestJSONObject = {
"userName": $("#userName").val(),
"userEmail": $("#userEmail").val(),
"userPassword": $("#userPassword").val()
};
if (confirm("${confirmInitLabel}")) {
$(window).unbind();
$("#tipInit").html("<img src='${staticServePath}/images/loading.gif'/> loading...");
$.ajax({
url: "${servePath}/init",
type: "POST",
data: JSON.stringify(requestJSONObject),
success: function(result, textStatus) {
if (!result.sc) {
$("#tipInit").text(result.msg);
return;
}
window.location.href = "${servePath}/admin-index.do#main";
}
});
}
};
(function() {
try {
$("#userEmail").focus();
$("input").keypress(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
}
});
$("#userPasswordConfirm").keypress(function(event) {
if (event.keyCode === 13) {
getUserInfo();
}
});
} catch (e) {
document.getElementById("main").innerHTML = "${staticErrorLabel}";
document.getElementById("main").className = "contentError";
}
// if no JSON, add it.
try {
JSON
} catch (e) {
document.write("<script src=\"${staticServePath}/js/lib/json2.js\"><\/script>");
}
})();
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>${blogTitle}</title>
<meta name="keywords" content="Solo,Java 博客,开源" />
<meta name="description" content="An open source blog with Java. Java 开源博客" />
<meta name="owner" content="B3log Team" />
<meta name="author" content="B3log Team" />
<meta name="generator" content="Solo" />
<meta name="copyright" content="B3log" />
<meta name="revised" content="B3log, ${year}" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content" style="top:-6px">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main kill" style="height: 385px;">
${killBrowserLabel}
<br/>
&nbsp; &nbsp;&nbsp; <button onclick="closeIframe();">${closeLabel}</button> &nbsp; &nbsp;
<button onclick="closeIframeForever();">${closeForeverLabel}</button>
<img src='${staticServePath}/images/kill-browser.png' title='Kill IE6' alt='Kill IE6'/>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
</div>
<script>
var closeIframe = function () {
window.parent.$("iframe").prev().remove();
window.parent.$("iframe").remove();
};
var closeIframeForever = function () {
window.parent.Cookie.createCookie("showKill", true, 365);
closeIframe();
};
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>${welcomeToSoloLabel} Solo!</title>
<meta name="keywords" content="Solo,Java 博客,开源" />
<meta name="description" content="An open source blog with Java. Java 开源博客" />
<meta name="owner" content="B3log Team" />
<meta name="author" content="B3log Team" />
<meta name="generator" content="Solo" />
<meta name="copyright" content="B3log" />
<meta name="revised" content="B3log, ${year}" />
<meta name="robots" content="noindex, follow" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main">
<h2>
${loginLabel}
</h2>
<div class="form">
<label for="userEmail">
${commentEmailLabel}
</label>
<input id="userEmail" tabindex="1" />
<label for="userPassword">
${userPasswordLabel} <a href="/forgot">(${forgotLabel})</a>
</label>
<input type="password" id="userPassword" tabindex="2" />
<button onclick='login();'>${loginLabel}</button>
<span id="tip">${resetMsg}</span>
</div>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year} - <a href="${servePath}">${blogTitle}</a><br/>
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a><a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
</div>
</div>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
<script type="text/javascript">
(function() {
$("#userEmail").focus();
$("#userPassword, #userEmail").keypress(function(event) {
if (13 === event.keyCode) { // Enter pressed
login();
}
});
// if no JSON, add it.
try {
JSON
} catch (e) {
document.write("<script src=\"${staticServePath}/js/lib/json2.js\"><\/script>");
}
})();
var login = function() {
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($("#userEmail" + status).val())) {
$("#tip").text("${mailInvalidLabel}");
$("#userEmail").focus();
return;
}
if ($("#userPassword").val() === "") {
$("#tip").text("${passwordEmptyLabel}");
$("#userPassword").focus();
return;
}
var requestJSONObject = {
"userEmail": $("#userEmail").val(),
"userPassword": $("#userPassword").val()
};
$("#tip").html("<img src='${staticServePath}/images/loading.gif'/> loading...")
$.ajax({
url: "${servePath}/login",
type: "POST",
contentType: "application/json",
data: JSON.stringify(requestJSONObject),
error: function() {
// alert("Login error!");
},
success: function(data, textStatus) {
if (!data.isLoggedIn) {
$("#tip").text(data.msg);
return;
}
window.location.href = data.to;
}
});
};
</script>
</body>
</html>
#
# 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: Language configurations(zh_CN) of plugin b3log broadcast.
# Version: 1.0.1.1, Sep 4, 2016
# Author: Liyuan Li
# Author: Liang Ding
#
userBroadcastLabel=User Broadcast
titleLabel1=Title:
linkLabel1=Link:
contentLabel1=Content:
noEmptyLabel=No Empty
submitLabel=Submit
submitErrorLabel=Error
chanceBroadcastLabel1=Time to post:
#
# 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: Language configurations(zh_CN) of plugin b3log broadcast.
# Version: 1.0.0.1, Apr 24, 2013
# Author: Liyuan Li
#
userBroadcastLabel=\u7528\u6237\u5e7f\u64ad
titleLabel1=\u6807\u9898\uff1a
linkLabel1=\u94fe\u63a5\uff1a
contentLabel1=\u5185\u5bb9\uff1a
noEmptyLabel=\u4e0d\u80fd\u4e3a\u7a7a
submitLabel=\u63d0\u4ea4
submitErrorLabel=\u63d0\u4ea4\u5f02\u5e38
chanceBroadcastLabel1=\u5e7f\u64ad\u5269\u4f59\u65f6\u95f4\uff1a
\ No newline at end of file
<link type="text/css" rel="stylesheet" href="${staticServePath}/plugins/b3log-broadcast/style.css"/>
<div id="b3logBroadcastPanel">
<div id="b3logBroadcast">
<div class="module-panel">
<div class="module-header">
<h2 class="left">
<a target="_blank" href="https://hacpai.com/tags/B3log%20Broadcast">
${userBroadcastLabel}
</a>
</h2>
<button class="none right msg"></button>
<span class="clear"></span>
</div>
<div class="module-body padding12">
<div id="b3logBroadcastList">
</div>
</div>
</div>
</div>
<div id="b3logBroadcastDialog" class="form">
<label>${titleLabel1}</label>
<span class="none msg">${noEmptyLabel}</span>
<input type="text" id="b3logBroadcastTitle">
<label>${linkLabel1}</label>
<input type="text" id="b3logBroadcastLink">
<label>${contentLabel1}</label>
<span class="none msg">${noEmptyLabel}</span>
<textarea id="b3logBroadcastContent"></textarea>
<button class="marginTop12">${submitLabel}</button><span class="none msg">${submitErrorLabel}</span>
</div>
</div>
<script type="text/javascript">
plugins.b3logBroadcast = {
init: function() {
$("#loadMsg").text("${loadingLabel}");
// dialog
$("#b3logBroadcastDialog").dialog({
width: 700,
height: 245,
"modal": true,
"hideFooter": true
});
// 打开广播窗口
$("#b3logBroadcast .module-header > button").click(function() {
$("#b3logBroadcastDialog").dialog("open");
});
// 广播提交
$("#b3logBroadcastDialog button").click(function() {
var data = {
"broadcast": {
"title": $("#b3logBroadcastTitle").val().replace(/(^\s*)|(\s*$)/g, ""),
"content": $("#b3logBroadcastContent").val().replace(/(^\s*)|(\s*$)/g, ""),
"link": $("#b3logBroadcastLink").val()
}
};
if (data.broadcast.title === "") {
$("#b3logBroadcastTitle").prev().show();
}
if (data.broadcast.content === "") {
$("#b3logBroadcastContent").prev().show();
}
if (data.broadcast.title === "" || data.broadcast.content === "") {
return;
}
$.ajax({
type: "POST",
url: latkeConfig.servePath + "/console/plugins/b3log-broadcast",
data: JSON.stringify(data),
success: function(result) {
if (result.sc) {
$("#b3logBroadcastTitle").val("");
$("#b3logBroadcastLink").val("");
$("#b3logBroadcastContent").val("");
$("#b3logBroadcastDialog").dialog("close");
$("#b3logBroadcastDialog > button").next().hide();
$("#b3logBroadcastTitle").prev().hide();
$("#b3logBroadcastContent").prev().hide();
broadcastChange();
} else {
$("#b3logBroadcastDialog > button").next().show();
}
}
});
});
// 获取广播
$.ajax({
type: "GET",
url: "https://hacpai.com/apis/broadcasts",
dataType: "jsonp",
jsonp: "callback",
beforeSend: function() {
$("#b3logBroadcastList").css("background",
"url(${staticServePath}/images/loader.gif) no-repeat scroll center center transparent");
},
error: function() {
$("#b3logBroadcastList").html("Loading Symphony broadcasts failed :-(").css("background", "none");
},
success: function(result) {
var articles = result.articles;
if (0 === articles.length) {
return;
}
var listHTML = "<ul>";
for (var i = 0; i < articles.length; i++) {
var article = articles[i];
var articleLiHtml = "<li>"
+ "<a target='_blank' href='" + article.articlePermalink + "'>"
+ article.articleTitle + "</a>&nbsp; <span class='date'>" + $.bowknot.getDate(article.articleCreateTime, 1);
+"</span></li>";
listHTML += articleLiHtml;
}
listHTML += "</ul>";
$("#b3logBroadcastList").html(listHTML).css("background", "none");
},
complete: function(XMLHttpRequest, textStatus) {
$("#loadMsg").text("");
}
});
// 广播机会
var interval;
var broadcastChange = function() {
$.ajax({
type: "GET",
url: latkeConfig.servePath + "/console/plugins/b3log-broadcast/chance",
cache: false,
success: function(result) {
if (result.sc) {
var showCountDown = function() {
var now = new Date();
var leftTime = result.broadcastChanceExpirationTime - now.getTime();
var leftsecond = parseInt(leftTime / 1000);
if (leftsecond < 0) {
$("#b3logBroadcast .module-header > button").hide();
clearInterval(interval);
interval = undefined;
return;
} else {
var minute = Math.floor(leftsecond / 60),
second = Math.floor(leftsecond - minute * 60);
$("#b3logBroadcast .module-header > button").text("${chanceBroadcastLabel1}" + minute + ":" + second).show();
}
};
if (!interval) {
interval = window.setInterval(function() {
showCountDown();
}, 1000);
}
} else {
$("#b3logBroadcast .module-header > button").hide();
clearInterval(interval);
interval = undefined;
}
}
});
};
setInterval(function() {
broadcastChange();
}, 10000);
broadcastChange();
}
};
/*
* 添加插件
*/
admin.plugin.add({
"id": "b3logBroadcast",
"path": "/main/panel2",
"content": $("#b3logBroadcastPanel").html()
});
// 移除现有内容
$("#b3logBroadcastPanel").remove();
</script>
\ 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: Description of plugin b3log-broadcast.
# Version: 1.0.0.1, Apr 24, 2013
# Author: Liang Ding
#
rendererId=admin-main.ftl
author=<a href="http://88250.b3log.org">88250</a> & <a href="http://vanessa.b3log.org">Vanessa</a>
name=B3log Broadcast
version=0.0.1
types=ADMIN
classesDirPath=/WEB-INF/classes/
# TODO: libDirPath=/WEB-INF/lib/
pluginClass=
eventListenerClasses=
\ No newline at end of file
/*
* plugin style for b3log-broadcast
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 1.0.0.1, Apr 24, 2011
*/
#b3logBroadcastDialog input,
#b3logBroadcastDialog textarea {
width: 98%;
}
#b3logBroadcast .module-header > button {
height: 22px;
}
#b3logBroadcastDialog label {
line-height: 30px;
}
#b3logBroadcast .msg,
#b3logBroadcastDialog .msg {
color: #D54121;
}
#b3logBroadcastList ul {
list-style: none;
}
#b3logBroadcastList a {
text-decoration: none;
}
#b3logBroadcastList .date {
color: #686868;
font-size: 12px;
}
\ No newline at end of file
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
.fancybox-wrap,
.fancybox-skin,
.fancybox-outer,
.fancybox-inner,
.fancybox-image,
.fancybox-wrap iframe,
.fancybox-wrap object,
.fancybox-nav,
.fancybox-nav span,
.fancybox-tmp
{
padding: 0;
margin: 0;
border: 0;
outline: none;
vertical-align: top;
}
.fancybox-wrap {
position: absolute;
top: 0;
left: 0;
z-index: 8020;
}
.fancybox-skin {
position: relative;
background: #f9f9f9;
color: #444;
text-shadow: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.fancybox-opened {
z-index: 8030;
}
.fancybox-opened .fancybox-skin {
-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
}
.fancybox-outer, .fancybox-inner {
position: relative;
}
.fancybox-inner {
overflow: hidden;
}
.fancybox-type-iframe .fancybox-inner {
-webkit-overflow-scrolling: touch;
}
.fancybox-error {
color: #444;
font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
margin: 0;
padding: 15px;
white-space: nowrap;
}
.fancybox-image, .fancybox-iframe {
display: block;
width: 100%;
height: 100%;
}
.fancybox-image {
max-width: 100%;
max-height: 100%;
}
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
background-image: url('fancybox_sprite.png');
}
#fancybox-loading {
position: fixed;
top: 50%;
left: 50%;
margin-top: -22px;
margin-left: -22px;
background-position: 0 -108px;
opacity: 0.8;
cursor: pointer;
z-index: 8060;
}
#fancybox-loading div {
width: 44px;
height: 44px;
background: url('fancybox_loading.gif') center center no-repeat;
}
.fancybox-close {
position: absolute;
top: -18px;
right: -18px;
width: 36px;
height: 36px;
cursor: pointer;
z-index: 8040;
}
.fancybox-nav {
position: absolute;
top: 0;
width: 40%;
height: 100%;
cursor: pointer;
text-decoration: none;
background: transparent url('blank.gif'); /* helps IE */
-webkit-tap-highlight-color: rgba(0,0,0,0);
z-index: 8040;
}
.fancybox-prev {
left: 0;
}
.fancybox-next {
right: 0;
}
.fancybox-nav span {
position: absolute;
top: 50%;
width: 36px;
height: 34px;
margin-top: -18px;
cursor: pointer;
z-index: 8040;
visibility: hidden;
}
.fancybox-prev span {
left: 10px;
background-position: 0 -36px;
}
.fancybox-next span {
right: 10px;
background-position: 0 -72px;
}
.fancybox-nav:hover span {
visibility: visible;
}
.fancybox-tmp {
position: absolute;
top: -99999px;
left: -99999px;
visibility: hidden;
max-width: 99999px;
max-height: 99999px;
overflow: visible !important;
}
/* Overlay helper */
.fancybox-lock {
overflow: hidden !important;
width: auto;
}
.fancybox-lock body {
overflow: hidden !important;
}
.fancybox-lock-test {
overflow-y: hidden !important;
}
.fancybox-overlay {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
display: none;
z-index: 8010;
background: url('fancybox_overlay.png');
}
.fancybox-overlay-fixed {
position: fixed;
bottom: 0;
right: 0;
}
.fancybox-lock .fancybox-overlay {
overflow: auto;
overflow-y: scroll;
}
/* Title helper */
.fancybox-title {
visibility: hidden;
font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
position: relative;
text-shadow: none;
z-index: 8050;
}
.fancybox-opened .fancybox-title {
visibility: visible;
}
.fancybox-title-float-wrap {
position: absolute;
bottom: 0;
right: 50%;
margin-bottom: -35px;
z-index: 8050;
text-align: center;
}
.fancybox-title-float-wrap .child {
display: inline-block;
margin-right: -100%;
padding: 2px 20px;
background: transparent; /* Fallback for web browsers that doesn't support RGBa */
background: rgba(0, 0, 0, 0.8);
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
text-shadow: 0 1px 2px #222;
color: #FFF;
font-weight: bold;
line-height: 24px;
white-space: nowrap;
}
.fancybox-title-outside-wrap {
position: relative;
margin-top: 10px;
color: #fff;
}
.fancybox-title-inside-wrap {
padding-top: 10px;
}
.fancybox-title-over-wrap {
position: absolute;
bottom: 0;
left: 0;
color: #fff;
padding: 10px;
background: #000;
background: rgba(0, 0, 0, .8);
}
/*Retina graphics!*/
@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (min-device-pixel-ratio: 1.5){
#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
background-image: url('fancybox_sprite@2x.png');
background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
}
#fancybox-loading div {
background-image: url('fancybox_loading@2x.gif');
background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
}
}
\ 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.
*/
/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0<a.indexOf("%")},l=function(a,d){var e=parseInt(a,10)||0;d&&E(a)&&(e*=b.getViewport()[d]/100);return Math.ceil(e)},w=function(a,b){return l(a,b)+"px"};f.extend(b,{version:"2.1.5",defaults:{padding:15,margin:20,
width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,pixelRatio:1,autoSize:!0,autoHeight:!1,autoWidth:!1,autoResize:!0,autoCenter:!s,fitToView:!0,aspectRatio:!1,topRatio:0.5,leftRatio:0.5,scrolling:"auto",wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},iframe:{scrolling:"auto",preload:!0},swf:{wmode:"transparent",allowfullscreen:"true",allowscriptaccess:"always"},
keys:{next:{13:"left",34:"up",39:"left",40:"up"},prev:{8:"right",33:"down",37:"right",38:"down"},close:[27],play:[32],toggle:[70]},direction:{next:"left",prev:"right"},scrollOutside:!0,index:0,type:null,href:null,content:null,title:null,tpl:{wrap:'<div class="fancybox-wrap" tabIndex="-1"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" frameborder="0" vspace="0" hspace="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen'+
(I?' allowtransparency="true"':"")+"></iframe>",error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',closeBtn:'<a title="Close" class="fancybox-item fancybox-close" href="javascript:;"></a>',next:'<a title="Next" class="fancybox-nav fancybox-next" href="javascript:;"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev" href="javascript:;"><span></span></a>'},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,
openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,
isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k,
c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&&
k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current||
b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer=
setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index<b.group.length-1))b.player.isActive=!0,p.bind({"onCancel.player beforeClose.player":c,"onUpdate.player":e,"beforeLoad.player":d}),e(),b.trigger("onPlayStart")}else c()},next:function(a){var d=b.current;d&&(q(a)||(a=d.direction.next),b.jumpto(d.index+1,a,"next"))},prev:function(a){var d=b.current;
d&&(q(a)||(a=d.direction.prev),b.jumpto(d.index-1,a,"prev"))},jumpto:function(a,d,e){var c=b.current;c&&(a=l(a),b.direction=d||c.direction[a>=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d=
a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")),
b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('<div id="fancybox-loading"><div></div></div>').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(),
y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement;
if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1<a.group.length&&k[c]!==v)return b[d](k[c]),e.preventDefault(),!1;if(-1<f.inArray(c,k))return b[d](),e.preventDefault(),!1})}),f.fn.mousewheel&&a.mouseWheel&&b.wrap.bind("mousewheel.fb",function(d,c,k,g){for(var h=f(d.target||null),j=!1;h.length&&!j&&!h.is(".fancybox-skin")&&!h.is(".fancybox-wrap");)j=h[0]&&!(h[0].style.overflow&&"hidden"===h[0].style.overflow)&&
(h[0].clientWidth&&h[0].scrollWidth>h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1<b.group.length&&!a.canShrink){if(0<g||0<k)b.prev(0<g?"down":"left");else if(0>g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,
{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,
mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=
!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");
"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=
this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href);
f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,
e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,
outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("<div>").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('<div class="fancybox-placeholder"></div>').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}",
g);break;case "swf":e='<object id="fancybox-swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="movie" value="'+g+'"></param>',h="",f.each(a.swf,function(a,b){e+='<param name="'+a+'" value="'+b+'"></param>';h+=" "+a+'="'+b+'"'}),e+='<embed src="'+g+'" type="application/x-shockwave-flash" width="100%" height="100%"'+h+"></embed></object>"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll":
"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside?
h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth||
h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),c<m&&(c=m,j=l(c/D)),j<u&&(j=u,c=l(j*D))):(c=Math.max(m,Math.min(c,n)),h.autoHeight&&
"iframe"!==h.type&&(g.width(c),j=g.height()),j=Math.max(u,Math.min(j,p)));if(h.fitToView)if(g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height(),h.aspectRatio)for(;(a>z||y>r)&&(c>m&&j>u)&&!(19<d++);)j=Math.max(u,Math.min(p,j-10)),c=l(j*D),c<m&&(c=m,j=l(c/D)),c>n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&j<A&&c+x+q<z)&&(c+=q);g.width(c).height(j);e.width(c+x);a=e.width();
y=e.height();e=(a>z||y>r)&&c>m&&j>u;c=h.aspectRatio?c<F&&j<B&&c<C&&j<A:(c<F||j<B)&&(c<C||j<A);f.extend(h,{dim:{width:w(a),height:w(y)},origWidth:C,origHeight:A,canShrink:e,canExpand:c,wPadding:x,hPadding:v,wrapSpace:y-k.outerHeight(!0),skinSpace:k.height()-j});!H&&(h.autoHeight&&j>u&&j<p&&!c)&&g.height("auto")},_getPosition:function(a){var d=b.current,e=b.getViewport(),c=d.margin,f=b.wrap.width()+c[1]+c[3],g=b.wrap.height()+c[0]+c[2],c={position:"absolute",top:c[0],left:c[3]};d.autoCenter&&d.fixed&&
!a&&g<=e.h&&f<=e.w?c.position="fixed":d.locked||(c.top+=e.y,c.left+=e.x);c.top=w(Math.max(c.top,c.top+(e.h-g)*d.topRatio));c.left=w(Math.max(c.left,c.left+(e.w-f)*d.leftRatio));return c},_afterZoomIn:function(){var a=b.current;a&&(b.isOpen=b.isOpened=!0,b.wrap.css("overflow","visible").addClass("fancybox-opened"),b.update(),(a.closeClick||a.nextClick&&1<b.group.length)&&b.inner.css("cursor","pointer").bind("click.fb",function(d){!f(d.target).is("a")&&!f(d.target).parent().is("a")&&(d.preventDefault(),
b[a.closeClick?"close":"next"]())}),a.closeBtn&&f(a.tpl.closeBtn).appendTo(b.skin).bind("click.fb",function(a){a.preventDefault();b.close()}),a.arrows&&1<b.group.length&&((a.loop||0<a.index)&&f(a.tpl.prev).appendTo(b.outer).bind("click.fb",b.prev),(a.loop||a.index<b.group.length-1)&&f(a.tpl.next).appendTo(b.outer).bind("click.fb",b.next)),b.trigger("afterShow"),!a.loop&&a.index===a.group.length-1?b.play(!1):b.opts.autoPlay&&!b.player.isActive&&(b.opts.autoPlay=!1,b.play()))},_afterZoomOut:function(a){a=
a||b.current;f(".fancybox-wrap").trigger("onReset").remove();f.extend(b,{group:{},opts:{},router:!1,current:null,isActive:!1,isOpened:!1,isOpen:!1,isClosing:!1,wrap:null,skin:null,outer:null,inner:null});b.trigger("afterClose",a)}});b.transitions={getOrigPosition:function(){var a=b.current,d=a.element,e=a.orig,c={},f=50,g=50,h=a.hPadding,j=a.wPadding,m=b.getViewport();!e&&(a.isDom&&d.is(":visible"))&&(e=d.find("img:first"),e.length||(e=d));t(e)?(c=e.offset(),e.is("img")&&(f=e.outerWidth(),g=e.outerHeight())):
(c.top=m.y+(m.h-g)*a.topRatio,c.left=m.x+(m.w-f)*a.leftRatio);if("fixed"===b.wrap.css("position")||a.locked)c.top-=m.y,c.left-=m.x;return c={top:w(c.top-h*a.topRatio),left:w(c.left-j*a.leftRatio),width:w(f+j),height:w(g+h)}},step:function(a,d){var e,c,f=d.prop;c=b.current;var g=c.wrapSpace,h=c.skinSpace;if("width"===f||"height"===f)e=d.end===d.start?1:(a-d.start)/(d.end-d.start),b.isClosing&&(e=1-e),c="width"===f?c.wPadding:c.hPadding,c=a-c,b.skin[f](l("width"===f?c:c-g*e)),b.inner[f](l("width"===
f?c:c-g*e-h*e))},zoomIn:function(){var a=b.current,d=a.pos,e=a.openEffect,c="elastic"===e,k=f.extend({opacity:1},d);delete k.position;c?(d=this.getOrigPosition(),a.openOpacity&&(d.opacity=0.1)):"fade"===e&&(d.opacity=0.1);b.wrap.css(d).animate(k,{duration:"none"===e?0:a.openSpeed,easing:a.openEasing,step:c?this.step:null,complete:b._afterZoomIn})},zoomOut:function(){var a=b.current,d=a.closeEffect,e="elastic"===d,c={opacity:0.1};e&&(c=this.getOrigPosition(),a.closeOpacity&&(c.opacity=0.1));b.wrap.animate(c,
{duration:"none"===d?0:a.closeSpeed,easing:a.closeEasing,step:e?this.step:null,complete:b._afterZoomOut})},changeIn:function(){var a=b.current,d=a.nextEffect,e=a.pos,c={opacity:1},f=b.direction,g;e.opacity=0.1;"elastic"===d&&(g="down"===f||"up"===f?"top":"left","down"===f||"right"===f?(e[g]=w(l(e[g])-200),c[g]="+=200px"):(e[g]=w(l(e[g])+200),c[g]="-=200px"));"none"===d?b._afterZoomIn():b.wrap.css(e).animate(c,{duration:a.nextSpeed,easing:a.nextEasing,complete:b._afterZoomIn})},changeOut:function(){var a=
b.previous,d=a.prevEffect,e={opacity:0.1},c=b.direction;"elastic"===d&&(e["down"===c||"up"===c?"top":"left"]=("up"===c||"left"===c?"-":"+")+"=200px");a.wrap.animate(e,{duration:"none"===d?0:a.prevSpeed,easing:a.prevEasing,complete:function(){f(this).trigger("onReset").remove()}})}};b.helpers.overlay={defaults:{closeClick:!0,speedOut:200,showEarly:!0,css:{},locked:!s,fixed:!0},overlay:null,fixed:!1,el:f("html"),create:function(a){a=f.extend({},this.defaults,a);this.overlay&&this.close();this.overlay=
f('<div class="fancybox-overlay"></div>').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?
b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth),
p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"===
f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d=
b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('<div class="fancybox-title fancybox-title-'+c+'-wrap">'+e+"</div>");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner('<span class="child"></span>'),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d,
e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+
":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('<div style="position:fixed;top:20px;"></div>').appendTo("body");var e=20===
d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("<style type='text/css'>.fancybox-margin{margin-right:"+(d-a)+"px;}</style>").appendTo("head")})})(window,document,jQuery);
\ 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: Language configurations(en_US) of plugin fancybox.
# Version: 1.0.0.0, Apr 21, 2012
# Author: Liang Ding
#
#
# 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: Language configurations(zh_CN) of plugin fancybox.
# Version: 1.0.0.0, Apr 21, 2012
# Author: Liang Ding
#
<script type="text/javascript">
(function () {
var $groups = $("a[rel=group]"),
$fancybox = $(".fancybox");
if ($groups.length > 0 || $fancybox.length > 0) {
if (document.createStyleSheet) {
document.createStyleSheet("${staticServePath}/plugins/fancybox/js/jquery.fancybox.css");
} else {
$("head").append($("<link rel='stylesheet' href='${staticServePath}/plugins/fancybox/js/jquery.fancybox.css' type='text/css' charset='utf-8' />"));
}
$.ajax({
url: "${staticServePath}/plugins/fancybox/js/jquery.fancybox.pack.js",
dataType: "script",
cache: true,
complete: function() {
$groups.fancybox({
openEffect : 'none',
closeEffect : 'none',
prevEffect : 'none',
nextEffect : 'none'
});
$fancybox.fancybox({
openEffect : 'none',
closeEffect : 'none',
prevEffect : 'none',
nextEffect : 'none'
});
}
});
}
})();
</script>
#
# 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: Description of plugin fancybox.
# Version: 1.0.0.0, Apr 21, 2012
# Author: Liang Ding
#
rendererId=footer.ftl
author=<a href="http://88250.b3log.org">88250</a>
name=Facybox
version=0.0.1
types=PUBLIC
classesDirPath=/WEB-INF/classes/
# TODO: libDirPath=/WEB-INF/lib/
pluginClass=
eventListenerClasses=
\ 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: Table of contents generator.
# Version: 1.0.0.0, May 30, 2014
# Author: Liang Ding
#
rendererId=footer.ftl
author=<a href="http://88250.b3log.org">88250</a>
name=Table of Contents Generator
version=0.0.1
types=PUBLIC
classesDirPath=/WEB-INF/classes/
pluginClass=
eventListenerClasses=org.b3log.solo.plugin.list.ListHandler
\ No newline at end of file
/*
* Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 B3log Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* List plugin style.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.0, Jul 14, 2014
*/
.b3-solo-list {
margin: 20px 30px;
list-style: none;
font-size: 0.8em;
}
.b3-solo-list-h1 {
}
.b3-solo-list-h2 {
margin-left: 16px;
}
.b3-solo-list-h3 {
margin-left: 32px;
}
.b3-solo-list-h4 {
margin-left: 48px;
}
.b3-solo-list-h5 {
margin-left: 62px;
}
\ 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: Language configurations(en_US) of plugin symphony-interest.
# Version: 1.0.0.1, Feb 20, 2016
# Author: Liang Ding
#
interestLabel=<a href="https://hacpai.com" target="_blank">Interest</a>
\ 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: Language configurations(zh_CN) of plugin symphony-interest.
# Version: 1.0.0.1, Feb 20, 2016
# Author: Liang Ding
#
interestLabel=<a href="https://hacpai.com" target="_blank">\u793e\u533a\u63a8\u8350</a>
<link type="text/css" rel="stylesheet" href="${staticServePath}/plugins/symphony-interest/style.css"/>
<div id="symphonyInterestPanel">
<div class="module-panel">
<div class="module-header">
<h2>${interestLabel}</h2>
</div>
<div class="module-body padding12">
<div id="symphonyInterest">
</div>
</div>
</div>
</div>
<script type="text/javascript">
plugins.symphonyInterest = {
init: function () {
$("#loadMsg").text("${loadingLabel}");
$("#symphonyInterest").css("background",
"url(${staticServePath}/images/loader.gif) no-repeat scroll center center transparent");
$.ajax({
url: "${servePath}/blog/interest-tags",
type: "GET",
dataType: "json",
error: function () {
$("#symphonyInterest").html("Loading Interest failed :-(").css("background", "none");
},
success: function (result, textStatus) {
var tags = result.data;
if (0 === tags.length) {
return;
}
$.ajax({
url: "https://hacpai.com/apis/articles?p=1&size=7&tags=" + tags.join(),
type: "GET",
dataType: "jsonp",
jsonp: "callback",
error: function () {
$("#symphonyInterest").html("Loading Interest failed :-(").css("background", "none");
},
success: function (data, textStatus) {
var articles = data.articles;
if (0 === articles.length) {
return;
}
var listHTML = "<ul>";
for (var i = 0; i < articles.length; i++) {
var article = articles[i];
var articleLiHtml = "<li>"
+ "<a target='_blank' href='" + article.articlePermalink + "'>"
+ article.articleTitle + "</a>&nbsp; <span class='date'>" + $.bowknot.getDate(article.articleCreateTime, 1);
+"</span></li>"
listHTML += articleLiHtml
}
listHTML += "</ul>";
$("#symphonyInterest").html(listHTML).css("background", "none");
}
});
}
});
$("#loadMsg").text("");
}
};
/*
* 添加插件
*/
admin.plugin.add({
"id": "symphonyInterest",
"path": "/main/panel1",
"content": $("#symphonyInterestPanel").html()
});
// 移除现有内容
$("#symphonyInterestPanel").remove();
</script>
#
# 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: Description of plugin symphony-interest.
# Version: 1.0.0.0, Dec 17, 2015
# Author: Liang Ding
#
rendererId=admin-main.ftl
author=<a href="http://88250.b3log.org">88250</a>
name=Symphony Interest
version=0.0.1
types=ADMIN
classesDirPath=/WEB-INF/classes/
pluginClass=
eventListenerClasses=
\ No newline at end of file
/*
* plugin style for symphony-interest
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 1.0.0.1, Aug 9, 2011
*/
#symphonyInterest ul {
list-style: none;
}
#symphonyInterest a {
text-decoration: none;
}
#symphonyInterest .date {
color: #686868;
font-size: 12px;
}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>${blogTitle}</title>
<meta name="keywords" content="Solo,Java 博客,开源" />
<meta name="description" content="An open source blog with Java. Java 开源博客" />
<meta name="owner" content="B3log Team" />
<meta name="author" content="B3log Team" />
<meta name="generator" content="Solo" />
<meta name="copyright" content="B3log" />
<meta name="revised" content="B3log, ${year}" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8" />
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png" />
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log" src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main register">
<h2>${registerSoloUserLabel}</h2>
<div class="form">
<label for="userEmail">
${commentEmail1Label}
</label>
<input id="userEmail" />
<label for="userName">
${userName1Label}
</label>
<input id="userName" />
<label for="userURL">
${userURL1Label}
</label>
<input id="userURL" />
<label for="userPassword">
${userPassword1Label}
</label>
<input type="password" id="userPassword" />
<label for="userPasswordConfirm">
${userPasswordConfirm1Label}
</label>
<input type="password" id="userPasswordConfirm" />
<button onclick='getUserInfo();'>${saveLabel}</button>
<span id="tip" ></span>
</div>
</div>
<span class="clear"></span>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year} - <a href="${servePath}">${blogTitle}</a><br/>
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a><a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
</div>
</div>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
<script type="text/javascript">
var validate = function() {
var userName = $("#userName").val().replace(/(^\s*)|(\s*$)/g, "");
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($("#userEmail").val())) {
$("#tip").text("${mailInvalidLabel}");
$("#userEmail").focus();
} else if (2 > userName.length || userName.length > 20) {
$("#tip").text("${nameTooLongLabel}");
$("#userName").focus();
} else if ($("#userPassword").val() === "") {
$("#tip").text("${passwordEmptyLabel}");
$("#userPassword").focus();
} else if ($("#userPassword").val() !== $("#userPasswordConfirm").val()) {
$("#tip").text("${passwordNotMatchLabel}");
$("#userPasswordConfirm").focus();
} else {
$("#tip").text("");
return true;
}
return false;
};
var getUserInfo = function() {
if (validate()) {
var requestJSONObject = {
"userName": $("#userName").val(),
"userEmail": $("#userEmail").val(),
"userURL": $("#userURL").val(),
"userPassword": $("#userPassword").val()
};
$("#tip").html("<img src='${staticServePath}/images/loading.gif'/> loading...")
$.ajax({
url: "${servePath}" + "/console/user/",
type: "POST",
cache: false,
data: JSON.stringify(requestJSONObject),
success: function(result, textStatus) {
$("#tip").text(result.msg);
if (!result.sc) {
return;
}
setTimeout(function() {
window.location.href = "${servePath}";
}, 1000);
}
})
}
}
$(function() {
$("#userPasswordConfirm").keypress(function(event) {
if (event.keyCode === 13) {
getUserInfo();
}
});
});
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>${forgotLabel} Solo!</title>
<meta name="keywords" content="Solo,Java 博客,开源" />
<meta name="description" content="An open source blog with Java. Java 开源博客" />
<meta name="owner" content="B3log Team"/>
<meta name="author" content="B3log Team"/>
<meta name="generator" content="Solo"/>
<meta name="copyright" content="B3log"/>
<meta name="revised" content="B3log, ${year}"/>
<meta name="robots" content="noindex, follow"/>
<meta http-equiv="Window-target" content="_top"/>
<link type="text/css" rel="stylesheet"
href="${staticServePath}/css/default-init${miniPostfix}.css?${staticResourceVersion}" charset="utf-8"/>
<link rel="icon" type="image/png" href="${staticServePath}/favicon.png"/>
</head>
<body>
<div class="wrapper">
<div class="wrap">
<div class="content">
<div class="logo">
<a href="http://b3log.org" target="_blank">
<img border="0" width="153" height="56" alt="B3log" title="B3log"
src="${staticServePath}/images/logo.jpg"/>
</a>
</div>
<div class="main">
<h2>
${forgotLabel}
</h2>
<#if "email" == inputType>
<div class="form">
<label for="emailOrPassword">
${commentEmailLabel}
</label>
<input id="emailOrPassword"/>
<button id="sendBtn" onclick='forgot();'>${sendLabel}</button>
<span id="tip"></span>
</div>
<#else>
<div class="form">
<label for="emailOrPassword">
${userPasswordLabel}
</label>
<input id="emailOrPassword"/>
<input type="hidden" id="userEmailHidden" value="${userEmailHidden}" />
<button id="sendBtn" onclick='reset();'>${ok}</button>
<span id="tip"></span>
</div>
</#if>
<a href="http://b3log.org" target="_blank">
<img border="0" class="icon" alt="B3log" title="B3log" src="${staticServePath}/favicon.png"/>
</a>
</div>
<span class="clear"></span>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
&copy; ${year} - <a href="${servePath}">${blogTitle}</a><br/>
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a><a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
</div>
</div>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
<script type="text/javascript">
(function() {
$("#emailOrPassword").focus();
$("#emailOrPassword").keypress(function(event) {
if (13 === event.keyCode) { // Enter pressed
$('#sendBtn').click();
}
});
// if no JSON, add it.
try {
JSON
} catch (e) {
document.write("<script src=\"${staticServePath}/js/lib/json2.js\"><\/script>");
}
})();
var reset = function() {
if ($("#emailOrPassword").val() === "") {
$("#tip").text("${passwordEmptyLabel}");
$("#emailOrPassword").focus();
return;
}
var requestJSONObject = {
"newPwd": $("#emailOrPassword").val(),
"userEmail": $("#userEmailHidden").val()
};
$("#tip").html("<img src='${staticServePath}/images/loading.gif'/> loading...");
$.ajax({
url: "${servePath}/reset",
type: "POST",
contentType: "application/json",
data: JSON.stringify(requestJSONObject),
error: function() {
// alert("reset password error!");
},
success: function(data, textStatus) {
if (data.succeed) {
window.location.href = data.to;
} else {
$("#tip").text(data.msg);
}
}
});
};
var forgot = function() {
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($("#emailOrPassword" + status).val())) {
$("#tip").text("${mailInvalidLabel}");
$("#emailOrPassword").focus();
return;
}
var requestJSONObject = {
"userEmail": $("#emailOrPassword").val()
};
$("#tip").html("<img src='${staticServePath}/images/loading.gif'/> loading...")
$.ajax({
url: "${servePath}/forgot",
type: "POST",
contentType: "application/json",
data: JSON.stringify(requestJSONObject),
error: function() {
// alert("reset password error!");
},
success: function(data, textStatus) {
if (data.succeed) {
window.location.href = data.to;
} else {
$("#tip").text(data.msg);
}
}
});
};
</script>
</body>
</html>
User-agent: *
Allow: /blog-articles-feed.do
Allow: /tag-articles-feed.do*
Disallow: /*.do
Disallow: /login
Disallow: /logout
Disallow: /authors/*
Disallow: /console/*
Disallow: /error/*
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} (${archiveDate.archiveDatePublishedArticleCount}) - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveDate.archiveDateYear}${archiveDate.archiveDateMonth}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body class="classic-wptouch-bg ">
<#include "header.ftl">
<div class="content single">
<div class="post">
<h2 class="marginLeft12 marginBottom12">${archive1Label}
<#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} (${archiveDate.archiveDatePublishedArticleCount})
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} (${archiveDate.archiveDatePublishedArticleCount})
</#if>
</h2>
</div>
</div>
<#include "article-list.ftl">
<#include "footer.ftl">
</body>
</html>
<div class="content">
<div class="result-text"><!--TODO wptouch_core_body_result_text()--></div>
<#list articles as article>
<div class="post" id="post-${article.oId}">
<#if 0 lt article.articleCommentCount>
<div class="comment-bubble">${article.articleCommentCount}</div>
</#if>
<script type="text/javascript">
$wpt(document).ready(function(){
$wpt("a#arrow-${article.oId}").bind( touchStartOrClick, function(e) {
$wpt(this).toggleClass("post-arrow-down");
$wpt('#entry-${article.oId}').wptouchFadeToggle(500);
});
});
</script>
<a class="post-arrow" id="arrow-${article.oId}" href="javascript: return false;"></a>
<div class="calendar">
<div class="cal-month month-${article.articleUpdateDate?string("MM")}">${article.articleUpdateDate?string("MM")}</div>
<div class="cal-date">${article.articleUpdateDate?string("dd")}</div>
</div>
<a rel="bookmark" class="h2" href="${servePath}${article.articlePermalink}">${article.articleTitle}</a>
<div class="post-author">
<span class="lead">By</span> ${article.authorName}<br />
<span class="lead">${tags1Label}</span>
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a><#if articleTag_has_next>,</#if>
</#list>
</div>
<div class="clearer"></div>
<div id="entry-${article.oId}" style="display:none" class="mainentry left-justified">
${article.articleAbstract}
<a class="read-more" href="${servePath}${article.articlePermalink}">${readThisPost}</a>
</div>
</div>
</div>
</#list>
<!--TODO ajax load page
<div id="call${paginationCurrentPageNum}" class="ajax-load-more">
<div id="spinner${paginationCurrentPageNum}" class="spin" style="display:none"></div>
<a class="ajax" href="javascript:void(0)" onclick="$wpt('#spinner${paginationCurrentPageNum}').fadeIn(200); $wpt('#ajaxentries${paginationCurrentPageNum}').load('${path}/${paginationPreviousPageNum}', {}, function(){ $wpt('#call${paginationCurrentPageNum}').fadeOut();});">
Load more entries...
</a>
</div>
<div id="ajaxentries${paginationCurrentPageNum}"></div>
-->
<#if 0 != paginationPageCount>
<div class="ajax-load-more">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}/1">${firstPageLabel}</a>
<a id="previousPage" href="${servePath}${path}/${paginationPreviousPageNum}">${previousPageLabel}</a>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<a href="${servePath}${path}/${paginationPageNum}" class="selected">${paginationPageNum}</a>
<#else>
<a href="${servePath}${path}/${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount>
<a id="nextPage" href="${servePath}${path}/${paginationNextPageNum}">${nextPagePabel}</a>
<a href="${servePath}${path}/${paginationPageCount}">${lastPageLabel}</a>
</#if>
&nbsp;&nbsp;${sumLabel} ${paginationPageCount} ${pageLabel}
</div>
</#if>
</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 class="classic-wptouch-bg">
<#include "header.ftl">
<div class="content single">
<div class="post">
<a class="sh2" href="${servePath}${article.articlePermalink}" rel="bookmark">${article.articleTitle}</a>
<div class="single-post-meta-top">
<#if article.hasUpdated>
${article.articleUpdateDate?string("yyyy-MM-dd HH:mm:ss")}
<#else>
${article.articleCreateDate?string("yyyy-MM-dd HH:mm:ss")}
</#if>
&rsaquo; ${article.authorName}<br />
<a rel="nofollow" href="#comments">${skipToComment}</a>
</div>
</div>
<div class="clearer"></div>
<div class="post article-body" id="post-${article.oId}">
<div id="singlentry" class="left-justified">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div class=""><!--TODO sign class-->
${article.articleSign.signHTML}
</div>
</#if>
</div>
<!-- Categories and Tags post footer -->
<div class="single-post-meta-bottom">
${tags1Label}
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}" rel="tag">${articleTag}</a><#if articleTag_has_next>,</#if>
</#list>
</div>
<ul id="post-options">
<#if nextArticlePermalink??>
<li><a href="${servePath}${nextArticlePermalink}" id="oprev"></a></li>
</#if>
<li><a href="mailto:?subject=${article.authorName} - ${article.articleTitle}&body=Check out this post: ${servePath}${article.articlePermalink}" id="omail"></a></li>
<li><a href="javascript:void(0)" onclick="window.open('http://service.weibo.com/share/share.php?url=${servePath}${article.articlePermalink}&title=B3LOG%20-%20${article.articleTitle}', '_blank');" id="otweet"></a></li>
<li><a href="javascript:void(0)" id="obook"></a></li>
<#if previousArticlePermalink??>
<li><a href="${servePath}${previousArticlePermalink}" id="onext"></a></li>
</#if>
</ul>
</div>
<div id="bookmark-box" style="display:none">
<ul>
<li><a href="http://del.icio.us/post?url=${servePath}/?p=12&title=${article.articleTitle}" target="_blank"><img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/bookmarks/delicious.jpg" alt="" /> Del.icio.us</a></li>
<li><a href="http://digg.com/submit?phase=2&url=${servePath}/?p=12&title=${article.articleTitle}" target="_blank"><img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/bookmarks/digg.jpg" alt="" /> Digg</a></li>
<li><a href="http://technorati.com/faves?add=${servePath}/?p=12" target="_blank"><img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/bookmarks/technorati.jpg" alt="" /> Technorati</a></li>
<li><a href="http://ma.gnolia.com/bookmarklet/add?url=${servePath}/?p=12&title=${article.articleTitle}" target="_blank"><img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/bookmarks/magnolia.jpg" alt="" /> Magnolia</a></li>
<li><a href="http://www.newsvine.com/_wine/save?popoff=0&u=${servePath}/?p=12&h=${article.articleTitle}" target="_blank"><img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/bookmarks/newsvine.jpg" target="_blank"> Newsvine</a></li>
<li class="noborder"><a href="http://reddit.com/submit?url=${servePath}/?p=12&title=${article.articleTitle}" target="_blank"><img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/bookmarks/reddit.jpg" alt="" /> Reddit</a></li>
</ul>
</div>
<div id="externalRelevantArticles" class="post"></div>
<@comments commentList=articleComments article=article></@comments>
</div>
<#include "footer.ftl">
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
<#if 0 != randomArticlesDisplayCount>
page.loadRandomArticles();
</#if>
<#if 0 != relevantArticlesDisplayCount>
page.loadRelevantArticles('${article.oId}', '<h4>${relevantArticles1Label}</h4>');
</#if>
<#if 0 != externalRelevantArticlesDisplayCount>
page.loadExternalRelevantArticles("<#list article.articleTags?split(",") as articleTag>${articleTag}<#if articleTag_has_next>,</#if></#list>");
</#if>
</@comment_script>
</body>
</html>
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${authorName} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${authorName}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body class="classic-wptouch-bg ">
<#include "header.ftl">
<div class="content single">
<div class="post">
<h2 >
${author1Label}${authorName}
</h2>
</div>
</div>
<#include "article-list.ftl">
<#include "footer.ftl">
</body>
</html>
<!-- Here we're establishing whether the page was loaded via Ajax or not, for dynamic purposes. If it's ajax, we're not bringing in footer.php -->
<div id="footer">
<center>
<div id="wptouch-switch-link">
<script type="text/javascript">function switch_delayer() { location.reload();}</script>${mobileLabel} <a id="switch-link" onclick="wptouch_switch_confirmation('normal');" href="javascript:void(0)"></a> </div>
</center>
<p><span style="color: gray;">&copy; ${year}</span> - <a href="${servePath}">${blogTitle}</a>${footerContent}</p>
<p>Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a> • <a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version},
Theme by <a rel="friend" href="http://dx.b3log.org" target="_blank">dx</a> &lt
<a rel="friend" href="http://www.bravenewcode.com/products/wptouch-pro">WPtouch</a>.</p>
</div>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
<script type="text/javascript" src="${staticServePath}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript">
var latkeConfig = {
"servePath": "${servePath}",
"staticServePath": "${staticServePath}"
};
var Label = {
"skinDirName": "${skinDirName}",
"em00Label": "${em00Label}",
"em01Label": "${em01Label}",
"em02Label": "${em02Label}",
"em03Label": "${em03Label}",
"em04Label": "${em04Label}",
"em05Label": "${em05Label}",
"em06Label": "${em06Label}",
"em07Label": "${em07Label}",
"em08Label": "${em08Label}",
"em09Label": "${em09Label}",
"em10Label": "${em10Label}",
"em11Label": "${em11Label}",
"em12Label": "${em12Label}",
"em13Label": "${em13Label}",
"em14Label": "${em14Label}"
};
$(document).ready(function () {
Util.init();
var toggleArchive = function (it) {
var $it = $(it);
$it.next().slideToggle(260, function () {
var h4Obj = $it.find("h4");
if (this.style.display === "none") {
h4Obj.html("${archiveLabel} +");
} else {
h4Obj.html("${archiveLabel} -");
}
});
}
});
</script>
${plugins}
<!--TODO i18n-->
<!-- New noscript check, we need js on now folks -->
<noscript>
<div id="noscript-wrap">
<div id="noscript">
<h2>Notice</h2>
<p>JavaScript for Mobile Safari is currently turned off.</p>
<p>Turn it on in <em>Settings &rsaquo; Safari</em><br /> to view this website.</p>
</div>
</div>
</noscript>
<!-- Prowl: if DM is sent, let's tell the user what happened -->
<!-- #start The Search Overlay -->
<div id="wptouch-search">
<div id="wptouch-search-inner">
<form target="_blank" id="searchform" action="http://zhannei.baidu.com/cse/site">
<input id="search" placeholder="Search..." type="text" name="q" />
<input type="submit" id="search-submit" value="" />
<input type="hidden" name="cc" value="${serverHost}">
<a href="javascript:void(0)"><img class="head-close" src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/head-close.png" alt="close" /></a>
</form>
</div>
</div>
<div id="wptouch-menu" class="dropper">
<div id="wptouch-menu-inner">
<div id="menu-head">
<div id="tabnav">
<a href="#head-pages"><img src="${staticServePath}/skins/${skinDirName}/images/icon-pool/Pages.png" alt=""/></a>
<a href="#head-tags"><img src="${staticServePath}/skins/${skinDirName}/images/icon-pool/Tags.png" alt=""/></a>
<a href="#head-cats"><img src="${staticServePath}/skins/${skinDirName}/images/icon-pool/Archives.png" alt=""/></a>
</div>
<ul id="head-pages">
<li id="admin" data-login="${isLoggedIn?string}"><a href="${servePath}/admin-index.do#main"><img src="${staticServePath}/skins/${skinDirName}/images/icon-pool/Home.png" alt=""/>Admin</a></li>
<#list pageNavigations as page>
<li><a href="${page.pagePermalink}" target="${page.pageOpenTarget}"><img src="${staticServePath}/skins/${skinDirName}/images/icon-pool/Apps.png" alt=""/>${page.pageTitle}</a></li>
</#list>
<li><a rel="alternate" href="${servePath}/blog-articles-rss.do"><img src="${staticServePath}/skins/${skinDirName}/images/icon-pool/RSS.png" alt="" />RSS Feed</a></li>
</ul>
<ul id="head-tags">
<#if 0 != mostUsedTags?size>
<#list mostUsedTags as tag>
<li><a href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">${tag.tagTitle} <span>(${tag.tagPublishedRefCount})</span></a></li>
</#list>
</#if>
</ul>
<ul id="head-cats">
<#if 0 != archiveDates?size>
<#list archiveDates as archiveDate>
<li>
<#if "en" == localeString?substring(0, 2)>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear} <span>(${archiveDate.archiveDatePublishedArticleCount})</span></a>
<#else>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel} <span>(${archiveDate.archiveDatePublishedArticleCount})</span></a>
</#if>
</li>
</#list>
</#if>
</ul>
</div>
</div>
</div>
<div id="headerbar">
<div id="headerbar-title">
<!-- This fetches the admin selection logo icon for the header, which is also the bookmark icon -->
<img id="logo-icon" src="${staticServePath}/skins/${skinDirName}/images/icon-pool/Apps.png" alt="aln" />
<a rel="nofollow" href="${servePath}">${blogTitle}</a>
</div>
<div id="headerbar-menu">
<a href="javascript:void(0)"></a>
</div>
</div>
<div id="drop-fade">
<a id="searchopen" class="top" href="javascript:void(0)">${searchLabel}</a>
<!-- #start the Prowl Message Area -->
<div id="prowl-message" style="display:none">
<div id="push-style-bar"></div><!-- filler to get the styling just right -->
<img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/push-icon.png" alt="push icon" />
<h4>Send a Message</h4>
<p>This message will be pushed to the admin's iPhone instantly.</p><!--TODO instant msg-->
<form id="prowl-direct-message" method="post" action="/blog/">
<p>
<input name="prowl-msg-name" id="prowl-msg-name" type="text" />
<label for="prowl-msg-name">Name</label>
</p>
<p>
<input name="prowl-msg-email" id="prowl-msg-email" type="text" />
<label for="prowl-msg-email">E-Mail</label>
</p>
<textarea name="prowl-msg-message"></textarea>
<input type="hidden" name="wptouch-prowl-message" value="1" />
<input type="hidden" name="_nonce" value="3690953c13" />
<input type="submit" name="prowl-submit" value="Send Now" id="prowl-submit" />
</form>
<div class="clearer"></div>
</div>
</div>
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<#if metaKeywords??>
<meta name="keywords" content="${metaKeywords}"/>
</#if>
<#if metaDescription??>
<meta name="description" content="${metaDescription}"/>
</#if>
</@head>
</head>
<body class="classic-wptouch-bg">
<#include "header.ftl">
<#include "article-list.ftl">
<#include "footer.ftl">
</body>
</html>
/*
* 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.
*/
function convertEntities(b){var d,a;d=function(c){if(/&[^;]+;/.test(c)){var f=document.createElement("div");f.innerHTML=c;return !f.firstChild?c:f.firstChild.nodeValue}return c};if(typeof b==="string"){return d(b)}else{if(typeof b==="object"){for(a in b){if(typeof b[a]==="string"){b[a]=d(b[a])}}}}return b};
\ 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.
*/
function convertEntities(t){var e,n;if(e=function(t){if(/&[^;]+;/.test(t)){var e=document.createElement("div");return e.innerHTML=t,e.firstChild?e.firstChild.nodeValue:t}return t},"string"==typeof t)return e(t);if("object"==typeof t)for(n in t)"string"==typeof t[n]&&(t[n]=e(t[n]));return t}
\ 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: Mobile skin language configurations(en_US).
# Version: 1.0.0.3, Aug 30, 2012
# Author: Liang Ding
# Author: Liyuan Li
#
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
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
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?
mobileLabel=Mobile Theme
responses=Responses
commentSuccess=Success! Comment added.
refresh2CComment=&lt; Refresh the page to see your comment.
readThisPost=Read This Post
skipToComment=&darr; Skip to comments
searchLabel=Search
publishing=Publishing...
#
# 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: Mobile skin language configurations(zh_CN).
# Version: 1.0.0.3, Aug 30, 2012
# Author: Liang Ding
# Author: Liyuan Li
#
adminConsoleLabel=\u540e\u53f0\u7ba1\u7406
adminIndexLabel=\u540e\u53f0\u9996\u9875
postArticleLabel=\u53d1\u5e03\u6587\u7ae0
articleListLabel=\u6587\u7ae0\u7ba1\u7406
commentListLabel=\u8bc4\u8bba\u7ba1\u7406
draftListLabel=\u8349\u7a3f\u5939
userManageLabel=\u7528\u6237\u7ba1\u7406
commonUserLabel=\u4e00\u822c\u7528\u6237
addUserLabel=\u6dfb\u52a0\u7528\u6237
updateUserLabel=\u66f4\u65b0\u7528\u6237
linkManagementLabel=\u94fe\u63a5\u7ba1\u7406
pluginMgmtLabel=\u63d2\u4ef6\u7ba1\u7406
pluginNameLabel=\u63d2\u4ef6\u540d
versionLabel=\u7248\u672c
statusLabel=\u72b6\u6001
enabledLabel=\u5df2\u542f\u7528
disabledLabel=\u5df2\u7981\u7528
enableLabel=\u542f\u7528
disableLabel=\u7981\u7528
preferenceLabel=\u504f\u597d\u8bbe\u5b9a
localeString1Label=\u8bed\u8a00\uff1a
timeZoneId1Label=\u65f6\u533a\uff1a
adminLabel=\u7ba1\u7406
administratorLabel=\u7ba1\u7406\u5458
loginLabel=\u767b\u5f55
logoutLabel=\u767b\u51fa
initLabel=\u521d\u59cb\u5316
popTagsLabel=\u5206\u7c7b\u6807\u7b7e
tag1Label=\u6807\u7b7e\uff1a
tags1Label=\u6807\u7b7e\uff1a
recentArticlesLabel=\u6700\u65b0\u6587\u7ae0
recentCommentsLabel=\u6700\u65b0\u8bc4\u8bba
postCommentsLabel=\u53d1\u8868\u8bc4\u8bba
mostCommentArticlesLabel=\u8bc4\u8bba\u6700\u591a\u7684\u6587\u7ae0
mostViewCountArticlesLabel=\u8bbf\u95ee\u6700\u591a\u7684\u6587\u7ae0
em00Label=\u5fae\u7b11
em01Label=\u5927\u7b11
em02Label=\u9ad8\u5174
em03Label=\u60b2\u4f24
em04Label=\u54ed\u6ce3
em05Label=\u65e0\u8bed
em06Label=\u70e6\u8e81
em07Label=\u751f\u6c14
em08Label=\u6211\u7785
em09Label=\u60ca\u8bb6
em10Label=\u9177
em11Label=\u987d\u76ae
em12Label=\u7231\u5fc3
em13Label=\u5fc3\u788e
em14Label=\u9b54\u9b3c
linkLabel=\u53cb\u60c5\u94fe\u63a5
sumLabel=\u5171
pageLabel=\u9875
commentLabel=\u8bc4\u8bba
linkTitleLabel=\u94fe\u63a5\u6807\u9898
linkTitle1Label=\u6807\u9898\uff1a
updateLabel=\u66f4\u65b0
removeLabel=\u5220\u9664
putTopLabel=\u7f6e\u9876
cancelPutTopLabel=\u53d6\u6d88\u7f6e\u9876
downloadCountLabel=\u4e0b\u8f7d\u6b21\u6570
sizeLabel=\u5927\u5c0f
uploadDateLabel=\u4e0a\u4f20\u65e5\u671f
downloadURLLabel=\u4e0b\u8f7d\u5730\u5740
downloadLabel=\u4e0b\u8f7d
createDateLabel=\u521b\u5efa\u65e5\u671f
updateDateLabel=\u66f4\u65b0\u65e5\u671f
titleLabel=\u6807\u9898
title1Label=\u6807\u9898\uff1a
content1Label=\u6b63\u6587\uff1a
abstract1Label=\u6458\u8981\uff1a
publishLabel=\u53d1\u5e03
unPublishLabel=\u53d6\u6d88\u53d1\u5e03
urlLabel=URL
url1Label=URL (\u8bf7\u4ee5\u534f\u8bae\u5f00\u5934\uff0c\u5982: http://)\uff1a
addLinkLabel=\u6dfb\u52a0\u94fe\u63a5
updateLinkLabel=\u66f4\u65b0\u94fe\u63a5
archiveLabel=\u5b58\u6863
archive1Label=\u5b58\u6863\uff1a
yearLabel=\u5e74
monthLabel=\u6708
blogSyncLabel=\u535a\u5ba2\u540c\u6b65
pageLabel=\u9875\u9762
pageMgmtLabel=\u9875\u9762\u7ba1\u7406
othersLabel=\u5176\u4ed6
fileListLabel=\u6587\u4ef6\u7ba1\u7406
submitUploadLabel=\u4e0a\u4f20
fileNameLabel=\u6587\u4ef6\u540d
paramSettingsLabel=\u53c2\u6570\u8bbe\u7f6e
skinLabel=\u76ae\u80a4
signLabel=\u7b7e\u540d\u6863
sign1Label=\u7b7e\u540d\u6863\uff1a
noSignLabel=\u4e0d\u4f7f\u7528\u7b7e\u540d\u6863
signIsNullLabel=\u8be5\u7b7e\u540d\u6863\u4e3a\u7a7a
statisticLabel=\u535a\u5ba2\u7edf\u8ba1
viewLabel=\u6d4f\u89c8
countLabel=\u7bc7
viewCount1Label=\u6d4f\u89c8\u6b21\u6570\uff1a
articleCount1Label=\u6587\u7ae0\u603b\u6570\uff1a
commentCountLabel=\u8bc4\u8bba\u6570
commentCount1Label=\u8bc4\u8bba\u603b\u6570\uff1a
commentEmotions1Label=\u8868\u60c5\uff1a
commentEmotionsLabel=\u8868\u60c5
commentName1Label=\u59d3\u540d\uff1a
commentNameLabel=\u59d3\u540d
commentEmail1Label=\u90ae\u7bb1\uff1a
commentEmailLabel=\u90ae\u7bb1
commentURL1Label=URL\uff1a
commentURLLabel=URL
commentContent1Label=\u8bc4\u8bba\u5185\u5bb9\uff1a
commentContentLabel=\u8bc4\u8bba\u5185\u5bb9
getDateLabel=\u83b7\u53d6\u65e5\u671f
getArticleLabel=\u83b7\u53d6\u6587\u7ae0
selectDateLabel=\u9009\u62e9\u65e5\u671f
selectDate1Label=\u9009\u62e9\u65e5\u671f\uff1a
importLabel=\u5bfc\u5165
chooseBlog1Label=\u8bf7\u9009\u62e9\u9700\u8981\u7ba1\u7406\u7684\u535a\u5ba2\uff1a
blogArticleImportLabel=\u6587\u7ae0\u5bfc\u5165
blogSyncMgmtLabel=\u535a\u5ba2\u540c\u6b65\u7ba1\u7406
syncMgmtLabel=\u540c\u6b65\u7ba1\u7406\u535a\u5ba2
userName1Label=\u7528\u6237\u540d\uff1a
userPassword1Label=\u5bc6\u7801\uff1a
syncPostLabel=\u540c\u6b65\u53d1\u5e03
syncUpdateLabel=\u540c\u6b65\u66f4\u65b0
syncRemoveLabel=\u540c\u6b65\u5220\u9664
categoryLabel=\u5206\u7c7b
noticeBoard1Label=\u516c\u544a\uff1a
noticeBoardLabel=\u516c\u544a
htmlhead1Label=HTML head\uff1a
indexTagDisplayCnt1Label= \u9996\u9875\u6807\u7b7e\u663e\u793a\u6570\uff1a
indexRecentArticleDisplayCnt1Label=\u6700\u65b0\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a
indexRecentCommentDisplayCnt1Label=\u6700\u65b0\u8bc4\u8bba\u663e\u793a\u6570\u76ee\uff1a
indexMostCommentArticleDisplayCnt1Label=\u8bc4\u8bba\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a
indexMostViewArticleDisplayCnt1Label=\u8bbf\u95ee\u6700\u591a\u6700\u591a\u6587\u7ae0\u663e\u793a\u6570\u76ee\uff1a
relevantArticlesDisplayCnt1Label=\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a
randomArticlesDisplayCnt1Label=\u968f\u673a\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a
externalRelevantArticlesDisplayCnt1Label=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\u663e\u793a\u6570\u76ee\uff1a
windowSize1Label=\u5206\u9875\u9875\u7801\u6700\u5927\u5bbd\u5ea6\uff1a
pageSize1Label=\u5206\u9875\u6bcf\u9875\u663e\u793a\u6587\u7ae0\u6570\uff1a
blogTitle1Label=\u535a\u5ba2\u6807\u9898\uff1a
blogSubtitle1Label=\u535a\u5ba2\u5b50\u6807\u9898\uff1a
blogHost1Label=\u535a\u5ba2\u5730\u5740\uff1a
submmitCommentLabel=\u63d0\u4ea4\u8bc4\u8bba
saveLabel=\u4fdd\u5b58
tagLabel=\u6807\u7b7e
tagsLabel=\u6807\u7b7e
importedLabel=\u5df2\u5bfc\u5165
captcha1Label=\u9a8c\u8bc1\u7801\uff1a
captchaLabel=\u9a8c\u8bc1\u7801
indexLabel=\u9996\u9875
nextArticle1Label=\u65b0\u4e00\u7bc7\uff1a
previousArticle1Label=\u65e7\u4e00\u7bc7\uff1a
updatedLabel=\u6709\u66f4\u65b0\uff01
topArticleLabel=\u7f6e\u9876\uff01
CSDNBlogLabel=CSDN \u535a\u5ba2
BlogJavaLabel=BlogJava
CnBlogsLabel=\u535a\u5ba2\u56ed
previousPageLabel=\u4e0a\u4e00\u9875
nextPagePabel=\u4e0b\u4e00\u9875
firstPageLabel=\u7b2c\u4e00\u9875
lastPageLabel=\u6700\u540e\u4e00\u9875
returnTo1Label=\u8fd4\u56de\uff1a
tencentLabel=\u817e\u8baf
appKey1Label=App Key:
appSecret1Label=App Secret:
postToTencentMicroblogWhilePublishArticleLabel=\u53d1\u6587\u7ae0\u65f6\u540c\u6b65\u5230\u817e\u8baf\u5fae\u535a\uff1a
postToCommunityLabel=\u53d1\u5e03\u5230\u793e\u533a\uff1a
authorizeTencentMicroblog1Label=\u70b9\u51fb\u56fe\u6807\u8fdb\u884c\u6388\u6743:
googleLabel=Google
OAuthConsumerSecret1Label=OAuth Consumer Secret\uff1a
atomLabel=Atom
relevantArticles1Label=\u76f8\u5173\u9605\u8bfb\uff1a
randomArticles1Label=\u968f\u673a\u9605\u8bfb\uff1a
externalRelevantArticles1Label=\u7ad9\u5916\u76f8\u5173\u9605\u8bfb\uff1a
metaKeywords1Label=Meta Keywords:
metaDescription1Label=Meta Description:
removeUnusedTagsLabel=\u79fb\u9664\u672a\u4f7f\u7528\u6807\u7b7e
goTopLabel=\u9876\u90e8
permalink1Label=\u94fe\u63a5\uff1a
permalinkLabel=\u94fe\u63a5
killBrowserLabel=<h2>\u8ba9\u6211\u4eec\u653e\u5f03\u4f7f\u7528\u90a3\u4e9b\u8fc7\u65f6\u3001\u4e0d\u5b89\u5168\u7684\u6d4f\u89c8\u5668\u5427\uff01</h2><p>\u4e3a\u4e86\u8ba9\u6d4f\u89c8\u5668\u66f4\u597d\u7684\u53d1\u5c55\uff0c\u4eba\u7c7b\u66f4\u52a0\u7684\u8fdb\u6b65\uff0c\u62e5\u6709\u66f4\u597d\u7684\u4f53\u9a8c\uff0c\u8ba9\u6211\u4eec\u653e\u5f03\u4f7f\u7528\u90a3\u4e9b\u8fc7\u65f6\u3001\u4e0d\u5b89\u5168\u7684\u6d4f\u89c8\u5668\u3002</p>\u60a8\u53ef\u4ee5\u4e0b\u8f7d<ul><li><a href="http://www.mozilla.com/" target="_blank">\u706b\u72d0</a></li><li><a href="http://www.google.com/chrome" target="_blank">\u8c37\u6b4c\u6d4f\u89c8\u5668</a></li><li><a href="http://windows.microsoft.com/en-US/internet-explorer/downloads/ie" target="_blank">IE8 / IE9</a></li><li><a href="http://www.maxthon.com/" target="_blank">\u9068\u6e38</a>\u6216\u8005<a href="http://www.google.com" target="_blank">\u5176\u5b83\u6d4f\u89c8\u5668</a>.</li></ul>
readmoreLabel=\u9605\u8bfb\u66f4\u591a\u00bb
readmore2Label=\u9605\u8bfb\u66f4\u591a
replyLabel=\u56de\u590d\u00bb
homeLabel=\u9996\u9875
enableArticleUpdateHint1Label=\u542f\u7528\u6587\u7ae0\u66f4\u65b0\u63d0\u793a\uff1a
allowVisitDraftViaPermalink1Label=\u5141\u8bb8\u901a\u8fc7\u94fe\u63a5\u8bbf\u95ee\u8349\u7a3f\uff1a
author1Label=\u4f5c\u8005\uff1a
authorLabel=\u4f5c\u8005
keyOfSolo1Label=Solo Key\uff1a
articleLabel=\u6587\u7ae0
tagArticlesLabel=\u6807\u7b7e\u6587\u7ae0\u5217\u8868
dateArticlesLabel=\u5b58\u6863\u6587\u7ae0\u5217\u8868
authorArticlesLabel=\u4f5c\u8005\u6587\u7ae0\u5217\u8868
indexArticleLabel=\u9996\u9875\u6587\u7ae0\u5217\u8868
allTagsLabel=\u6807\u7b7e\u5899
customizedPageLabel=\u81ea\u5b9a\u4e49\u9875\u9762
killBrowserPageLabel=Kill Browser Page
pageNumLabel=\u9875\u53f7
####
forbiddenLabel=\u64cd\u4f5c\u88ab\u7981\u6b62\uff01
sorryLabel=\u5bf9\u4e0d\u8d77\uff01
notFoundLabel=\u627e\u4e0d\u5230\uff01
unPulbishSuccLabel=\u53d6\u6d88\u53d1\u5e03\u6210\u529f
unPulbishFailLabel=\u53d6\u6d88\u53d1\u5e03\u5931\u8d25
removeSuccLabel=\u5220\u9664\u6210\u529f
removeFailLabel=\u5220\u9664\u5931\u8d25
removeUserFailSkinNeedMulUsersLabel=\u5220\u9664\u5931\u8d25\uff0c\u5f53\u524d\u4f7f\u7528\u7684\u76ae\u80a4\u9700\u8981\u591a\u7528\u6237\u652f\u6301
putTopSuccLabel=\u7f6e\u9876\u6210\u529f
putTopFailLabel=\u7f6e\u9876\u5931\u8d25
cancelTopSuccLabel=\u53d6\u6d88\u7f6e\u9876\u6210\u529f
cancelTopFailLabel=\u53d6\u6d88\u7f6e\u9876\u5931\u8d25
addSuccLabel=\u6dfb\u52a0\u6210\u529f
addFailLabel=\u6dfb\u52a0\u5931\u8d25
updateSuccLabel=\u66f4\u65b0\u6210\u529f
updateFailLabel=\u66f4\u65b0\u5931\u8d25
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
passwordEmptyLabel=\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01
blogEmptyLabel=\u8bf7\u9009\u62e9\u535a\u5ba2\u670d\u52a1\uff01
blogArticleEmptyLabel=\u8bf7\u9009\u62e9\u9700\u8981\u5bfc\u5165\u7684\u6587\u7ae0
nameTooLongLabel=\u59d3\u540d\u53ea\u80fd\u4e3a 2 \u5230 20 \u4e2a\u5b57\u7b26\uff01
mailCannotEmptyLabel=\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a\uff01
mailInvalidLabel=\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e\uff01
commentContentCannotEmptyLabel=\u8bc4\u8bba\u5185\u5bb9\u53ea\u80fd\u4e3a 2 \u5230 500 \u4e2a\u5b57\u7b26\uff01
captchaCannotEmptyLabel=\u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a\uff01
loadingLabel=\u8f7d\u5165\u4e2d....
titleEmptyLabel=\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a\uff01
contentEmptyLabel=\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a\uff01
orderEmptyLabel=\u5e8f\u53f7\u4e0d\u80fd\u4e3a\u7a7a\uff01
abstractEmptyLabel=\u6458\u8981\u4e0d\u80fd\u4e3a\u7a7a\uff01
tagsEmptyLabel=\u6807\u7b7e\u4e0d\u80fd\u4e3a\u7a7a\uff01
addressEmptyLabel=\u5730\u5740\u4e0d\u80fd\u4e3a\u7a7a\uff01
noAuthorizationURLLabel=\u4ece Google \u83b7\u53d6\u6388\u6743\u5730\u5740\u5931\u8d25\uff0c\u8bf7\u786e\u8ba4\u60a8\u8f93\u5165\u7684 \
<em>Consumer Secret</em> \u662f\u6b63\u786e\u7684\uff0c\u7136\u540e\u8fdb\u884c\u91cd\u8bd5\u3002
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
mobileLabel=\u79fb\u52a8\u7248
responses=\u56de\u590d
commentSuccess=\u8bc4\u8bba\u6210\u529f\uff01
refresh2CComment=&lt; \u9a6c\u4e0a\u5237\u65b0\u9875\u9762\u5c31\u80fd\u770b\u5230\u8bc4\u8bba\u4e86
readThisPost=\u9605\u8bfb\u5168\u6587
skipToComment=&darr; \u53d1\u8868\u8bc4\u8bba
searchLabel=\u641c\u7d22
publishing=\u6b63\u5728\u63d0\u4ea4...
<#macro comments commentList article>
<!-- Let's rock the comments -->
<!-- You can start editing below here... but make a backup first! -->
<div class="comment_wrapper" id="comments">
<#if 0 lt commentList?size>
<h3 onclick="bnc_showhide_coms_toggle();" id="com-head">
${commentList?size} ${responses}
</h3>
</#if>
<ol class="commentlist" id="commentlist">
<#list commentList as comment>
<li id="${comment.oId}">
<div class="comwrap">
<div class="comtop"><!--TODO comment->comment_approved == '0') : comtop preview;-->
<img alt='${comment.commentName}' src='${comment.commentThumbnailURL}' class='avatar avatar-64 photo' height='64' width='64' />
<div class="com-author">
<#if "http://" == comment.commentURL>
<a>${comment.commentName}</a>
<#else>
<a href='${comment.commentURL}' rel='external nofollow' target="_blank" class='url'>${comment.commentName}</a>
</#if>
<#if comment.isReply>
@
<a href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}">${comment.commentOriginalCommentName}</a>
</#if>
</div>
<#if article.commentable>
<div class="comdater">
<!--<span>TODO wptouch_moderate_comment_link(get_comment_ID())</span>-->
${comment.commentDate?string("yyyy-MM-dd HH:mm:ss")}
<a rel="nofollow" href="javascript:replyTo('${comment.oId}');">${replyLabel}</a>
</div>
</#if>
</div><!--end comtop-->
<div class="combody">
<p>${comment.commentContent}</p>
</div>
</div>
</li>
</#list>
</ol>
<#if article.commentable>
<div id="textinputwrap">
<div id="refresher" style="display:none;">
<img src="${staticServePath}/skins/${skinDirName}/images/good.png" alt="checkmark" />
<h3>${commentSuccess}</h3>
<a href="javascript:this.location.reload();">${refresh2CComment}</a>
</div>
<div id="commentForm">
<h3 id="respond">${postCommentsLabel}</h3>
<#if !isLoggedIn>
<p>
<input type="text" id="commentName" size="22" tabindex="1"/>
<label for="author">${commentNameLabel} *</label>
</p>
<p>
<input type="text" id="commentEmail" size="22" tabindex="2" />
<label for="email">${commentEmailLabel} *</label>
</p>
<p>
<input type="text" id="commentURL" size="22" tabindex="3" />
<label for="url">${commentURLLabel}</label>
</p>
</#if>
<p>
<span id="commentErrorTip" style="display:none;"></span>
</p>
<p><textarea id="comment" tabindex="4"></textarea></p>
<#if !isLoggedIn>
<p>
<input type="text" id="commentValidate" tabindex="5" />
<label for="url">${captchaLabel}</label>
<img id="captcha" alt="validate" src="${servePath}/captcha.do" />
</p>
</#if>
<p>
<input class="reply-button" id="submitCommentButton" type="submit" onclick="page.submitComment();" value="${submmitCommentLabel}" tabindex="6" />
<div id="loading" style="display:none">
<img src="${staticServePath}/skins/${skinDirName}/themes/core/core-images/comment-ajax-loader.gif" alt="" /> <p>${publishing}</p>
</div>
</p>
</div>
</div>
</#if><!--textinputwrap div-->
</div>
</#macro>
<#macro comment_script oId>
<script type="text/javascript" src="${staticServePath}/js/page${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript">
Page.prototype.submitComment = function(commentId, state) {
if (!state) {
state = '';
}
var 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 (!$("#admin").data("login")) {
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) {
$("#commentValidate" + state).val("").focus();
$("#commentErrorTip" + state).html(result.msg);
$("#captcha" + state).attr("src", "/captcha.do?code=" + Math.random());
$wpt('#commentErrorTip' + state).show();
$wpt("#loading").fadeOut(400);
return;
}
$wpt("#commentForm").hide();
$wpt("#loading").fadeOut(400);
$wpt("#refresher").fadeIn(400);
$("#comment" + state).val("");
$("#commentValidate" + state).val("");
$("#replyForm").remove();
}, // end success
error: function() {
} //end error
});
}
};
var replyTo = function(id) {
var commentFormHTML = "<div id='replyForm'>";
page.addReplyForm(id, commentFormHTML, "</div>");
};
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}"
});
(function() {
page.load();
// emotions
page.replaceCommentsEm("#commentlist .combody");
<#nested>
})();
</script>
</#macro>
\ No newline at end of file
<#macro head title>
<meta charset="utf-8" />
<title>${title}</title>
<#nested>
<meta name="author" content="${blogTitle?html}" />
<meta name="generator" content="B3log Solo" />
<meta name="copyright" content="B3log" />
<meta name="owner" content="B3log Team" />
<meta name="revised" content="${blogTitle?html}, ${year}" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes" />
<meta http-equiv="Window-target" content="_top" />
<link type="text/css" rel="stylesheet" href="${staticServePath}/skins/${skinDirName}/themes/default/style.css?${staticResourceVersion}" charset="utf-8" />
<style type="text/css">
#headerbar, #wptouch-login, #wptouch-search {
background: #000000 url(/skins/${skinDirName}/themes/core/core-images/head-fade-bk.png);
}
#headerbar-title, #headerbar-title a {
color: #eeeeee;
}
#wptouch-menu-inner a:hover {
color: #006bb3;
}
#catsmenu-inner a:hover {
color: #006bb3;
}
#drop-fade {
background: #333333;
}
a, h3#com-head {
color: #006bb3;
}
a.h2, a.sh2, .page h2 {
font-family: 'Helvetica Neue';
}
a.h2{
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
</style>
<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" />
<script type='text/javascript' src='${staticServePath}/skins/${skinDirName}/js/l10n${miniPostfix}.js?${staticResourceVersion}'></script>
<script type="text/javascript" src="${staticServePath}/js/lib/jquery/jquery.min.js" charset="utf-8"></script>
<script type='text/javascript' src='${staticServePath}/skins/${skinDirName}/themes/core/core.js?${staticResourceVersion}'></script>
<script type="text/javascript">
// Hides the addressbar on non-post pages
function hideURLbar() { window.scrollTo(0,1); }
addEventListener('load', function() { setTimeout(hideURLbar, 0); }, false );
</script>
${htmlHead}
</#macro>
\ No newline at end of file
<#include "macro-head.ftl">
<#include "macro-comments.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${page.pageTitle} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${page.pageTitle}" />
<meta name="description" content="${metaDescription}" />
</@head>
</head>
<body class="classic-wptouch-bg ">
<#include "header.ftl">
<div class="content single">
<div class="post article-body">
${page.pageContent}
</div>
<@comments commentList=pageComments article=page></@comments>
</div>
<#include "footer.ftl">
<@comment_script oId=page.oId></@comment_script>
</body>
</html>
\ No newline at end of file
<div id="sideNavi" class="side-navi">
<#if "" != noticeBoard>
<ul class="marginTop12">
<li>
<h4>${noticeBoardLabel}</h4>
</li>
<li class="side-navi-notice">${noticeBoard}</li>
</ul>
<div class="line"></div>
</#if>
<#if 0 != recentComments?size>
<ul>
<li>
<h4>${recentCommentsLabel}</h4>
</li>
<li>
<ul id="recentComments">
<#list recentComments as comment>
<li>
<#if "http://" == comment.commentURL>
${comment.commentName}<#else>
<a target="_blank" href="${comment.commentURL}">
${comment.commentName}</a></#if>:
<a rel="nofollow" class='side-comment' title="${comment.commentContent}" href="${servePath}${comment.commentSharpURL}">
${comment.commentContent}
</a>
</li>
</#list>
</ul>
</li>
</ul>
<div class="line"></div>
</#if>
<#if 0 != mostCommentArticles?size>
<ul>
<li>
<h4>${mostCommentArticlesLabel}</h4>
</li>
<li>
<ul>
<#list mostCommentArticles as article>
<li>
<sup>[${article.articleCommentCount}]</sup><a rel="nofollow" title="${article.articleTitle}"
href="${servePath}${article.articlePermalink}">${article.articleTitle}</a>
</li>
</#list>
</ul>
</li>
</ul>
<div class="line"></div>
</#if>
<#if 0 != mostViewCountArticles?size>
<ul>
<li>
<h4>${mostViewCountArticlesLabel}</h4>
</li>
<li>
<ul id="mostViewCountArticles">
<#list mostViewCountArticles as article>
<li>
<sup>[${article.articleViewCount}]</sup><a rel="nofollow" title="${article.articleTitle}" href="${servePath}${article.articlePermalink}">${article.articleTitle}</a>
</li>
</#list>
</ul>
</li>
</ul>
<div class="line"></div>
</#if>
<#if 0 != mostUsedTags?size>
<ul>
<li>
<h4>${popTagsLabel}</h4>
</li>
<li>
<ul>
<#list mostUsedTags as tag>
<li>
<a rel="alternate" href="${servePath}/tag-articles-feed.do?oId=${tag.oId}" class="no-underline">
<img alt="${tag.tagTitle}" src="${staticServePath}/images/feed.png"/>
</a>
<a rel="tag" title="${tag.tagTitle}(${tag.tagPublishedRefCount})" href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
${tag.tagTitle}</a>
(${tag.tagPublishedRefCount})
</li>
</#list>
</ul>
</li>
</ul>
<div class="line"></div>
</#if>
<#if 0 != links?size>
<ul>
<li>
<h4>${linkLabel}</h4>
</li>
<li>
<ul id="sideLink">
<#list links as link>
<li>
<a rel="friend" href="${link.linkAddress}" title="${link.linkTitle}" target="_blank">
<img alt="${link.linkTitle}"
src="${faviconAPI}<#list link.linkAddress?split('/') as x><#if x_index=2>${x}<#break></#if></#list>" width="16" height="16" /></a>
<a rel="friend" href="${link.linkAddress}" title="${link.linkTitle}" target="_blank">${link.linkTitle}
</a>
<#-- ${link.linkDescription} -->
</li>
</#list>
</ul>
</li>
</ul>
<div class="line"></div>
</#if>
<#if 0 != archiveDates?size>
<ul>
<li onclick="toggleArchive(this)" class="pointer">
<h4>${archiveLabel} +</h4>
</li>
<li class="none">
<ul>
<#list archiveDates as archiveDate>
<li>
<#if "en" == localeString?substring(0, 2)>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}"
title="${archiveDate.monthName} ${archiveDate.archiveDateYear}(${archiveDate.archiveDatePublishedArticleCount})">
${archiveDate.monthName} ${archiveDate.archiveDateYear}</a>(${archiveDate.archiveDatePublishedArticleCount})
<#else>
<a href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}"
title="${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}(${archiveDate.archiveDatePublishedArticleCount})">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}</a>(${archiveDate.archiveDatePublishedArticleCount})
</#if>
</li>
</#list>
</ul>
</li>
</ul>
</#if>
</div>
#
# 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: Mobile skin.
# Version: 1.0.0.14, Aug 10, 2016
# Author: Liang Ding
#
name=Mobile
version=0.1.5
forSolo=1.6.0
memo=\u8bf7\u4e0d\u8981\u4ece\u90e8\u7f72\u76ee\u5f55\u4e2d\u5220\u9664\u8be5\u76ae\u80a4\uff0c\u5426\u5219\u79fb\u52a8\u8bbe\u5907\u8bbf\u95ee\u65f6\u535a\u5ba2\u5c06\u4e0d\u53ef\u7528\u3002
<#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 class="classic-wptouch-bg ">
<#include "header.ftl">
<div class="content single">
<div class="post">
<h2 >${tag1Label}
<a rel="alternate" href="${servePath}/tag-articles-feed.do?oId=${tag.oId}"><span id="tagArticlesTag">
${tag.tagTitle}
</span>(${tag.tagPublishedRefCount})</a>
</h2>
</div>
</div>
<#include "article-list.ftl">
<#include "footer.ftl">
</body>
</html>
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${allTagsLabel} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${allTagsLabel}"/>
<meta name="description" content="<#list tags as tag>${tag.tagTitle}<#if tag_has_next>,</#if></#list>"/>
</@head>
</head>
<body class="classic-wptouch-bg ">
${topBarReplacement}
<#include "header.ftl">
<div class="content single">
<div class="post">
<ul id="tags">
<#list tags as tag>
<span>
<a rel="tag" data-count="${tag.tagPublishedRefCount}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}" title="${tag.tagTitle}">
<span>${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>)
</a>
</span>&nbsp;&nbsp;
</#list>
</ul>
</div>
</div>
<#include "footer.ftl">
</body>
</html>
/*
* WPtouch 1.9.x -The WPtouch Core JS File
*/
var $wpt = jQuery.noConflict();
if ( ( navigator.platform == 'iPhone' || navigator.platform == 'iPod' ) && typeof orientation != 'undefined' ) {
var touchStartOrClick = 'touchstart';
} else {
var touchStartOrClick = 'click';
};
/* Try to get out of frames! */
if ( window.top != window.self ) {
window.top.location = self.location.href
}
$wpt.fn.wptouchFadeToggle = function( speed, easing, callback ) {
return this.animate( {
opacity: 'toggle'
}, speed, easing, callback );
};
/**
* @description Cookie 相关操作
* @static
*/
var Cookie = {
/**
* @description 读取 cookie
* @param {String} name cookie key
* @returns {String} 对应 key 的值,如 key 不存在则返回 ""
*/
readCookie: function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length));
}
return "";
},
/**
* @description 清除 Cookie
* @param {String} name 清除 key 为 name 的该条 Cookie
*/
eraseCookie: function (name) {
this.createCookie(name,"",-1);
},
/**
* @description 创建 Cookie
* @param {String} name 每条 Cookie 唯一的 key
* @param {String} value 每条 Cookie 对应的值,将被 UTF-8 编码
* @param {Int} days Cookie 保存时间
*/
createCookie: function (name, value, days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
document.cookie = name+"="+encodeURIComponent(value)+expires+"; path=/";
}
};
function wptouch_switch_confirmation(skin, e ) {
if ( document.cookie && document.cookie.indexOf( 'btouch_switch_toggle' ) > -1 ) {
// just switch
Cookie.createCookie("btouch_switch_toggle", skin, 365);
$wpt( 'a#switch-link' ).toggleClass( 'offimg' );
setTimeout('switch_delayer()', 1250 );
} else {
// ask first
Cookie.createCookie("btouch_switch_toggle", skin, 365);
if ( confirm( "Switch to regular view? \n \n You can switch back again in the top bar." ) ) {
$wpt( 'a#switch-link' ).toggleClass( 'offimg' );
setTimeout( 'switch_delayer()', 1350 );
} else {
e.preventDefault();
e.stopImmediatePropagation();
}
}
}
if ( $wpt( '#prowl-success' ).length ) {
setTimeout( function() {
$wpt( '#prowl-success' ).fadeOut( 350 );
}, 5250 );
}
if ( $wpt( '#prowl-fail' ).length ) {
setTimeout( function() {
$wpt( '#prowl-fail' ).fadeOut( 350 );
}, 5250 );
}
$wpt(function() {
var tabContainers = $wpt( '#menu-head > ul' );
$wpt( '#tabnav a' ).bind(touchStartOrClick, function () {
tabContainers.hide().filter( this.hash ).show();
$wpt( '#tabnav a' ).removeClass( 'selected' );
$wpt( this ).addClass( 'selected' );
return false;
}).filter( ':first' ).trigger( touchStartOrClick );
});
function bnc_showhide_coms_toggle() {
$wpt( '#commentlist' ).wptouchFadeToggle( 350 );
$wpt( 'img#com-arrow' ).toggleClass( 'com-arrow-down' );
$wpt( 'h3#com-head' ).toggleClass( 'comhead-open' );
}
function doWPtouchReady() {
$wpt( '#headerbar-menu a' ).bind( touchStartOrClick, function( e ){
$wpt( '#wptouch-menu' ).wptouchFadeToggle( 350 );
$wpt( '#headerbar-menu a' ).toggleClass( 'open' );
});
$wpt( 'a#searchopen, #wptouch-search-inner a' ).bind( touchStartOrClick, function( e ){
$wpt( '#wptouch-search' ).wptouchFadeToggle( 350 );
});
$wpt( 'a#prowlopen' ).bind( touchStartOrClick, function( e ){
$wpt( '#prowl-message' ).wptouchFadeToggle( 350 );
});
$wpt( 'a#wordtwitopen' ).bind( touchStartOrClick, function( e ){
$wpt( '#wptouch-wordtwit' ).wptouchFadeToggle( 350 );
});
$wpt( 'a#gigpressopen' ).bind( touchStartOrClick, function( e ){
$wpt( '#wptouch-gigpress' ).wptouchFadeToggle( 350 );
});
$wpt( 'a#loginopen, #wptouch-login-inner a' ).bind( touchStartOrClick, function( e ){
$wpt( '#wptouch-login' ).wptouchFadeToggle(350);
});
$wpt( 'a#obook' ).bind( touchStartOrClick, function() {
$wpt( '#bookmark-box' ).wptouchFadeToggle(350);
});
$wpt( '.singlentry img, .singlentry .wp-caption' ).each( function() {
if ( $wpt( this ).width() <= 250 ) {
$wpt( this ).addClass( 'aligncenter' );
}
});
if ( $wpt( '#FollowMeTabLeftSm' ).length ) {
$wpt( '#FollowMeTabLeftSm' ).remove();
}
$wpt( '.post' ).fitVids();
}
$wpt( document ).ready( function() {
doWPtouchReady();
} );
/*!
* FitVids 1.0
* Copyright 2011, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
* Released under the WTFPL license - http://sam.zoy.org/wtfpl/
* Date: Thu Sept 01 18:00:00 2011 -0500
*/
(function( $ ){
$.fn.fitVids = function( options ) {
var settings = {
customSelector: null
}
var div = document.createElement('div'),
ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0];
div.className = 'fit-vids-style';
div.innerHTML = '&shy;<style> \
.fluid-width-video-wrapper { \
width: 100%; \
position: relative; \
padding: 0; \
} \
\
.fluid-width-video-wrapper iframe, \
.fluid-width-video-wrapper object, \
.fluid-width-video-wrapper embed { \
position: absolute; \
top: 0; \
left: 0; \
width: 100%; \
height: 100%; \
} \
</style>';
ref.parentNode.insertBefore(div,ref);
if ( options ) {
$.extend( settings, options );
}
return this.each(function(){
var selectors = [
"iframe[src^='http://player.vimeo.com']",
"iframe[src^='http://www.youtube.com']",
"iframe[src^='http://www.kickstarter.com']",
"object",
"embed"
];
if (settings.customSelector) {
selectors.push(settings.customSelector);
}
var $allVideos = $(this).find(selectors.join(','));
$allVideos.each(function(){
var $this = $(this),
height = this.tagName == 'OBJECT' ? $this.attr('height') : $this.height(),
aspectRatio = height / $this.width();
$this.wrap('<div class="fluid-width-video-wrapper" />').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+"%");
$this.removeAttr('height').removeAttr('width');
});
});
}
})( jQuery );
\ No newline at end of file
/* @override
http://beta.bravenewcode.com/wordpress/wp-content/plugins/wptouch/themes/default/style.css
http://www.bravenewcode.com/wordpress/wp-content/plugins/wptouch/themes/default/style.css
*/
/*
Theme Name: WPtouch Mobile Plugin & Theme For WordPress
Theme URI: http://www.bravenewcode.com/wptouch/
Description: A slick theme for your blog or website that is shown only when visitors are using an iPhone, iPod touch, or Android Mobile Device
Author: BraveNewCode Inc.
Author URI: http://www.bravenewcode.com/
*/
/* @group Body and Theme-Wide Elements */
body {
margin: 0;
padding: 0;
font: 12px Helvetica;
-webkit-text-size-adjust: none;
min-height: 460px;
background-repeat: repeat;
background-position: 0 0;
}
ul {
margin: 0;
padding: 0 20px 0 20px;
list-style-type: circle;
list-style-position: outside;
}
ol {
margin: 0;
padding: 0 25px 0 20px;
list-style-type: decimal;
list-style-position: outside;
}
li {
margin-bottom: 5px;
color: #555;
list-style-type: disc;
text-align: left;
padding-bottom: 5px;
font-size: 12px;
margin-right: -15px;
padding-top: 0;
}
a {
text-decoration: none;
}
input, textarea {
font: 12px Helvetica;
max-width: 96%;
}
img {
vertical-align: middle;
}
code {
font-family: Courier, "Courier New", mono;
color: red;
}
blockquote {
text-align: left;
padding: 1px 10px 1px 15px;
font-size: 90%;
border-left: 2px solid #ccc;
margin: 5px 15px;
}
.clearer {
clear: both;
}
.content {
margin-top: 15px;
position: relative;
}
.result-text {
color: #475d79;
text-shadow: #eee 1px 1px 0;
font-size: 15px;
font-weight: bold;
margin-bottom: 10px;
margin-left: 10px;
letter-spacing: 0;
border-style: none;
}
.result-text-footer {
color: #475d79;
text-shadow: #eee 1px 1px 0;
letter-spacing: 0;
font-size: 15px;
font-weight: bold;
margin-bottom: 10px;
margin-left: 10px;
text-align: center;
display: block;
}
.pageentry h1, .mainentry h1 {
font-size: 22px;
}
.pageentry h2, .mainentry h2 {
font-size: 18px;
text-shadow: #f9f9f9 -1px -1px 0;
text-align: left;
padding-bottom: 10px;
color: #222;
}
.pageentry h3, .mainentry h3 {
text-align: left;
color: #666;
font-size: 15px;
border-bottom: 1px solid #adadad;
border-top: 1px solid #adadad;
padding: 10px;
font-weight: bold;
line-height: 14px;
background-color: #eee;
margin: 15px -10px;
text-shadow: #fff -1px 1px 0;
}
.pageentry h4, .mainentry h4 {
font-size: 13px;
text-shadow: #f9f9f9 -1px -1px 0;
padding: 0 0 10px;
padding-bottom: 10px;
color: #666;
}
.pageentry h5, .mainentry h5 {
text-shadow: #f9f9f9 -1px -1px 0;
font-size: 12px;
padding: 0;
}
.mainentry img, #singlentry img, .pageentry img, ol.commentlist li img {
max-width: 100%;
height: auto;
}
.fontsize {
font-size: 1.2em;
line-height: 140%;
}
.aligncenter {
text-align: center;
margin-left: auto;
display: block;
margin-right: auto;
}
/* @end */
/* @group Header */
#headerbar *, #wptouch-menu * {
-webkit-touch-callout: none;
}
#headerbar {
width: 100%;
background-position: 0 0;
background-repeat: repeat-x;
height: 45px;
border-bottom: 1px solid #1e1e1e;
font-size: 19px;
-webkit-touch-callout: none;
}
#headerbar-title {
text-shadow: #242424 -1px -1px 1px;
padding-top: 10px;
padding-left: 10px;
display: block;
margin: 0;
border-style: none;
padding-bottom: 4px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
width: 85%;
font-weight: bold;
height: 29px;
}
#headerbar-title a {
text-decoration: none;
letter-spacing: -1px;
position: relative;
font-family: HelveticaNeue-Bold, sans-serif;
}
#headerbar-title img#logo-icon {
position: relative;
margin-right: 7px;
max-width: 30px;
float: left;
width: 28px;
height: 28px;
padding: 0;
bottom: 1px;
}
#headerbar-menu {
position: absolute;
top: 0;
right: 0;
margin: 0;
padding: 0;
}
#headerbar-menu a {
height: 45px;
display: block;
background: url(../core/core-images/wptouch-menu-dropper.png) 0 0;
width: 30px;
margin: 0;
padding: 0;
}
#headerbar-menu .open {
background-position: 0 -45px;
}
/* @group Sub-Menu */
#drop-fade {
width: 100%;
display: block;
position: relative;
-webkit-box-shadow: #000 -3px 2px 3px;
text-align: right;
border-top: 1px solid #3e3e3e;
height: 20px;
top: 0;
z-index: 1;
}
#drop-fade a.top {
margin-right: 8px;
position: relative;
bottom: 3px;
color: #eee;
text-shadow: #000000 0px -1px 1px;
display: block;
float: right;
font: bold 11px "Helvetica Neue", Helvetica, Arial, sans-serif;
height: 18px;
padding: 6px 2px 2px 0;
}
#drop-fade #prowlopen {
padding-left: 18px;
background: url(../core/core-images/menu-sprite.png) no-repeat 2px -60px;
padding-top: 3px;
padding-bottom: 1px;
margin-top: 3px;
}
#drop-fade #wordtwitopen {
padding-left: 18px;
background: url(../core/core-images/menu-sprite.png) no-repeat 2px -74px;
}
#drop-fade #searchopen {
padding-left: 18px;
background: url(../core/core-images/menu-sprite.png) no-repeat 2px -94px;
height: 15px;
overflow: hidden;
padding-bottom: 0;
padding-top: 3px;
margin-top: 3px;
}
#drop-fade #gigpressopen {
padding-left: 18px;
background: url(../core/core-images/menu-sprite.png) no-repeat 2px -109px;
padding-top: 3px;
padding-bottom: 1px;
margin-top: 3px;
}
/* @end */
/* @group DropDown Menu */
.dropper {
width: 100%;
position: relative;
z-index: 1;
margin: 0;
padding: 0;
border-top: 1px solid #1b1b1b;
font-size: 13px;
background-color: #2c2c2c;
}
.dropper ul {
position: relative;
list-style-type: none;
margin: 0;
padding: 0;
}
.dropper ul#head-tags li, .dropper ul#head-cats li {
width: 100%;
margin: 0;
padding: 0;
}
.dropper ul#head-pages li, .dropper ul#head-cats li, .dropper ul#head-tags li li, .dropper ul#head-account li, ul#tweets li {
border-bottom: 1px solid #1d1d1d;
background: url(../core/core-images/arrow.png) no-repeat right center;
border-top: 1px solid #363636;
padding: 0;
text-align: left;
margin: 0;
}
.dropper ul#head-account li.text {
color: #eee;
text-shadow: #111 0 -1px 1px;
text-align: center;
background-image: none;
padding-top: 25px;
padding-bottom: 25px;
text-transform: none;
}
.dropper ul#head-account li.text a {
display: inline;
margin: 0;
padding: 0;
text-decoration: underline;
}
.dropper ul#head-cats li:hover, .dropper ul#head-tags li li:hover, .dropper ul#head-pages li:hover {
background-color: #222;
border-top: 1px solid #222;
position: relative;
z-index: 2;
}
.dropper a {
font-weight: bold;
display: block;
text-shadow: #000 -1px -1px 1px;
color: #d2d2d2;
margin: 0;
width: auto;
padding: 12px 35px 12px 15px;
text-align: left;
}
.dropper ul#head-tags a {
padding-top: 11px;
padding-bottom: 12px;
}
.dropper ul#head-cats a {
padding-top: 12px;
padding-bottom: 12px;
}
/* @group Tab Menus */
#wptouch-menu {
position: absolute;
z-index: 2;
top: 45px;
-webkit-box-shadow: #333 -6px 6px 6px;
display: none;
}
#wptouch-menu-inner {
position: relative;
}
#wptouch-menu-inner img {
float: left;
position: relative;
bottom: 7px;
width: 28px;
padding-right: 10px;
right: 0;
}
#tabnav {
background-color: #444;
padding-top: 3px;
border-bottom: 1px solid #1b1b1b;
border-top: 1px solid #575757;
padding-left: 7px;
height: 38px;
margin-bottom: -1px;
}
#tabnav img{
position: relative;
margin-top: 3px;
max-width: 30px;
float: left;
width: 28px;
height: 28px;
padding: 0;
bottom: 1px;
}
#tabnav a {
display: inline-block;
margin: 0;
padding: 2px 8px 7px;
color: #999;
text-shadow: #111 0 -1px 1px;
}
#tabnav a.selected {
background-color: #2c2c2c;
position: relative;
z-index: 1;
-webkit-border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
border: 1px solid #1b1b1b;
margin-left: -1px;
margin-right: -1px;
color: #fff !important;
-webkit-box-shadow: #222 0px -2px 3px;
border-bottom: 1px solid #2c2c2c;
text-shadow: #000000 0 -1px 1px;
}
#tabnav a:hover, #tabnav a:active {
color: #fff !important;
}
/* @end */
/* @end */
/* @group WordTwit Menu */
#wptouch-wordtwit {
position: absolute;
border-top: 1px solid #3e3e3e;
background-color: #222;
top: 20px;
text-align: left;
z-index: 2;
left: 0;
right: 0;
}
#wptouch-wordtwit #twitter-style-bar {
display: block;
border-top: 1px solid #1e1e1e;
}
#wordtwit-avatar {
text-align: left;
padding-bottom: 10px;
-webkit-border-radius: 8px;
padding-left: 5px;
padding-top: 5px;
border: 1px solid #555;
background-image: none;
background-color: #444;
margin: 10px;
}
#wordtwit-avatar img {
-webkit-box-reflect: below -1px -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0.8, transparent), to(white));
border: 1px solid #222;
float: left;
margin-right: 15px;
-webkit-border-radius: 2px;
width: 32px;
height: 32px;
}
#wptouch-wordtwit a#follow-arrow {
border-style: none;
width: 18px;
height: 18px;
position: absolute;
top: 22px;
right: 15px;
padding: 5px;
margin: 0;
}
#wordtwit-avatar p {
padding: 0;
margin: 0;
color: #777;
}
#wordtwit-avatar p.twitter_username {
color: #eee;
text-shadow: #222 0 -1px 1px;
font-size: 15px;
font-weight: bold;
}
#wordtwit-avatar a {
display: inline-block;
font-size: 11px;
color: #999;
text-shadow: #222 0 -1px 0;
padding: 3px 0 0;
}
#wptouch-wordtwit ul#tweets li {
color: #ccc;
font-size: 12px;
text-shadow: #000000 0 -1px 0;
background-image: none;
background-color: #2c2c2c;
padding: 10px 50px 10px 10px;
}
#wptouch-wordtwit ul#tweets li:last-child {
padding-bottom: 30px;
}
#wptouch-wordtwit li p.time {
color: #777;
font-size: 11px;
padding: 0;
margin: 0;
}
/* @end */
/* @group Push Message Area */
#prowl-message {
color: #eee;
text-shadow: #000000 0 -1px 1px;
clear: both;
padding: 10px;
text-align: left;
font-size: 11px;
border-top: 1px solid #3e3e3e;
background-color: #222;
position: absolute;
top: 20px;
right: 0;
left: 0;
}
#prowl-message #push-style-bar {
display: block;
border-top: 1px solid #1e1e1e;
margin-left: -10px;
margin-right: -10px;
margin-top: -10px;
padding-top: 10px;
}
#prowl-message form p {
font-weight: bold;
font-size: 12px;
position: relative;
margin-bottom: 10px;
margin-top: 10px;
clear: both;
}
#prowl-message label {
margin-left: 5px;
}
#prowl-message input {
width: 60%;
-webkit-border-radius: 10px;
padding: 3px;
color: #222;
border: 1px solid #1b1b1b;
font: 14px "Helvetica Neue", Helvetica, Geneva, Arial, sans-serif;
}
#prowl-message input#prowl-submit {
width: 100px;
text-align: center;
color: #fff;
text-shadow: #333 0 -1px 1px;
font-weight: bold;
border: 1px solid #333;
margin-top: 10px;
float: right;
}
#prowl-message textarea {
width: 98%;
-webkit-border-radius: 10px;
padding: 3px;
color: #222;
border: 1px solid #1b1b1b;
height: 70px;
overflow: auto;
margin-top: 2px;
font: 14px "Helvetica Neue", Helvetica, Geneva, Arial, sans-serif;
}
#prowl-message h4 {
font-size: 14px;
margin: 10px 0 15px;
padding: 0;
}
#prowl-message img {
float: left;
margin-right: 10px;
}
/* @group Success */
#prowl-success {
color: #eee;
text-shadow: #000000 0 -1px 1px;
font: bold 16px "Helvetica Neue", Helvetica, Geneva, Arial, sans-serif;
text-align: center;
background: #000 url(../core/core-images/push-success.png) no-repeat center 50px;
position: absolute;
top: 0;
left: 0;
z-index: 1000;
opacity: 0.9;
width: 90%;
margin-left: 5%;
margin-top: 25px;
-webkit-border-radius: 15px;
-webkit-box-shadow: #444 0px 0px 15px;
}
#prowl-success p, #prowl-fail p {
margin-top: 125px;
margin-left: 20%;
margin-right: 20%;
}
#prowl-fail {
color: #eee;
text-shadow: #000000 0 -1px 1px;
font: bold 16px "Helvetica Neue", Helvetica, Geneva, Arial, sans-serif;
text-align: center;
background: #000 url(../core/core-images/push-fail.png) no-repeat center 50px;
position: absolute;
top: 0;
left: 0;
z-index: 1000;
opacity: 0.9;
width: 90%;
margin-left: 5%;
margin-top: 25px;
-webkit-border-radius: 15px;
-webkit-box-shadow: #444 0px 0px 15px;
}
/* @end */
/* @end */
/* @group Login & Search */
#wptouch-login {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
display: none;
}
#wptouch-login-inner {
padding-top: 8px;
width: 100%;
height: 35px;
background-repeat: repeat-x;
text-align: center;
padding-bottom: 2px;
}
#wptouch-login input#log {
width: 120px;
-webkit-border-radius: 10px;
padding: 3px;
font-size: 13px;
color: #222;
font-weight: bold;
border: 1px solid #1b1b1b;
}
#wptouch-login input#pwd {
width: 120px;
-webkit-border-radius: 10px;
padding: 3px;
font-size: 13px;
color: #222;
font-weight: bold;
border: 1px solid #1b1b1b;
margin-left: 5px;
}
#wptouch-login input#logsub {
visibility: hidden;
width: 0;
height: 0;
float: left;
overflow: hidden;
display: inline;
margin: 0 0 0 -22px;
padding: 0;
}
#wptouch-search {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
display: none;
}
#wptouch-search-inner {
width: 100%;
height: 40px;
background-repeat: repeat-x;
text-align: center;
padding-top: 5px;
}
input#search {
-webkit-border-radius: 10px;
padding: 4px;
width: 80%;
font-size: 13px;
color: #222;
text-align: left;
margin-top: 6px;
border: 1px solid #1b1b1b;
font-weight: bold;
}
input#search-submit {
display: none;
}
img.head-close {
display: inline;
position: relative;
top: 6px;
left: 5px;
}
/* @end */
/* @end */
/* @group Index Page */
.post {
background-color: #fff;
padding: 10px;
margin-bottom: 12px;
margin-right: 10px;
margin-left: 10px;
border: 1px solid #b1b1b1;
-webkit-border-radius: 8px;
position: relative;
z-index: 0;
box-shadow: rgba(255,255,255,.8) 0px 1px 0px;
}
.big {
height: 200px;
}
a.post-arrow {
width: 22px;
height: 21px;
float: right;
margin-top: 1px;
padding: 0;
background: #f4f4f4 url(../core/core-images/post-arrow.png) no-repeat center 8px;
border: 1px solid #ddd;
-webkit-border-radius: 5px;
-webkit-transform: scale(1.0) rotate(0deg);
-webkit-transition-duration: 0.6s;
-webkit-touch-callout: none;
}
a.post-arrow-down {
-webkit-transform: scale(1.0) rotate(180deg);
-webkit-transition-duration: 0.6s;
background: #dfe3e3 url(../core/core-images/post-arrow.png) no-repeat center -12px;
border: 1px solid #b8b8b8;
}
a.h2 {
color: #222;
text-decoration: none;
display: block;
margin-top: 2px;
text-align: left;
letter-spacing: -1px;
margin-bottom: 4px;
font-size: 15px;
font-weight: bold;
line-height: 19px;
margin-right: 10px;
}
.mainentry {
color: #444;
line-height: 145%;
display: block;
}
.mainentry p {
margin: 2% 0 1%;
padding: 0;
}
.mainentry a.read-more {
display: block;
padding-top: 10px;
border-top: 1px solid #c1c1c1;
position: relative;
padding-left: 10px;
color: #222;
font-weight: bold;
background: url(../core/core-images/arrow.png) no-repeat right 7px;
padding-bottom: 10px;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
margin: 10px -10px -10px;
}
.mainentry a.read-more:hover {
background-color: #dcdcdc;
}
.comment-bubble, .comment-bubble-big {
background: -webkit-gradient(linear, left top, left bottom, from(#de939e), to(#a40717), color-stop(0.5, #be4958));
-webkit-background-clip: padding-box;
height: 16px;
display: block;
-webkit-border-radius: 32px;
padding: 0 5px;
color: #fff;
text-shadow: #7b0805 0 1px 1px;
text-align: center;
border-style: solid;
border-width: 2px;
-webkit-box-shadow: rgba(0,0,0, .6) 0px 2px 3px;
position: absolute;
top: 3px;
font: bold 12px "Helvetica Neue", Helvetica, Geneva, Arial, sans-serif;
z-index: 1;
width: auto;
}
.comment-bubble {
border: 2px solid #FFFFFF;
box-shadow: 0 0 2px #666666;
font-size: 10px;
height: auto;
left: 44px;
padding: 0 3px;
}
.comment-bubble-big {
left: 36px;
}
.nothing-shown {
margin-left: -11px;
margin-top: -11px;
}
.archive-top {
margin: -11px -11px 7px;
-webkit-border-top-right-radius: 8px;
}
.archive-top-right .post-arrow, .archive-top-right .post-arrow-down {
margin-right: 5px;
margin-top: 28px;
}
.archive-top-left.month-01, #arc-top.month-02, #arc-top.month-03, #arc-top.month-04, #arc-top.month-05, #arc-top.month-06, #arc-top.month-07, #arc-top.month-08, #arc-top.month-09, #arc-top.month-10, #arc-top.month-11, #arc-top.month-12 {
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
padding-top: 5px;
padding-bottom: 5px;
padding-left: 10px;
font-weight: bold;
color: #eee;
text-shadow: #535353 0 -1px 1px;
}
.main-navigation {
-webkit-border-radius: 8px;
background-color: #fff;
margin-bottom: 12px;
position: relative;
margin-right: 10px;
margin-left: 10px;
border: 1px solid #b1b1b1;
overflow: hidden;
font-weight: bold;
padding: 10px;
}
.main-navigation .alignleft a {
float: left;
display: block;
background: url(../core/core-images/sprite.png) no-repeat 0 -46px;
padding-top: 3px;
padding-bottom: 3px;
padding-left: 23px;
}
.main-navigation .alignright a {
float: right;
display: block;
padding-top: 3px;
padding-bottom: 3px;
padding-right: 35px;
background: url(../core/core-images/sprite.png) no-repeat right -26px;
position: relative;
left: 15px;
}
/* @group Calendar CSS Icons */
.calendar {
text-align: center;
position: relative;
margin-bottom: 5px;
margin-right: 10px;
margin-top: 0;
border: 1px solid #c9c9c9;
-webkit-border-radius: 7px;
-webkit-background-clip: padding-box;
top: 3px;
float: left;
-webkit-box-shadow: #c6c6c6 1px 1px 3px;
}
.cal-month {
font-size: 10px;
font-weight: bold;
color: #fff;
letter-spacing: 0;
border-bottom: 1px solid #474848;
text-transform: uppercase;
padding: 3px 15px;
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
}
.cal-date {
color: #222;
background-color: #e9e9e9;
text-shadow: white -1px -1px 1px;
-webkit-border-bottom-left-radius: 6px;
-webkit-border-bottom-right-radius: 6px;
letter-spacing: -2px;
font: bold 21px Helvetica, "Arial Rounded MT Bold", Geneva, sans-serif;
padding: 1px 4px 2px 0;
text-align: center;
border: 1px solid #fff;
border-top-style: none;
}
/* @group Cal Month Colors */
.month-01 {
background-color: #767c8f;
}
.month-02 {
background-color: #345abe;
}
.month-03 {
background-color: #37838d;
}
.month-04 {
background-color: #55b06c;
}
.month-05 {
background-color: #409ad5;
}
.month-06 {
background-color: #be63c5;
}
.month-07 {
background-color: #f79445;
}
.month-08 {
background-color: #4e1e00;
}
.month-09 {
background-color: #a04262;
}
.month-10 {
background-color: #284461;
}
.month-11 {
background-color: #4d1d77;
}
.month-12 {
background-color: #af1919;
}
/* @end */
/* @end */
.post-author {
color: #555;
font-size: 10px;
line-height: 13px;
position: relative;
font-weight: bold;
letter-spacing: 0;
text-align: left;
width: 72%;
float: left;
padding-top: 2px;
padding-bottom: 1px;
}
.post-author span.lead {
font-weight: normal;
font-style: normal;
}
.post .sticky-icon {
width: 16px;
height: 16px;
display: block;
background: url(../core/core-images/sticky.png) no-repeat 0 0;
position: absolute;
left: 43px;
z-index: 1;
top: 5px;
}
.post .sticky-icon-none {
width: 16px;
height: 16px;
display: block;
background: url(../core/core-images/sticky.png) no-repeat 0 0;
position: absolute;
left: 43px;
z-index: 1;
top: 5px;
margin-top: -12px;
margin-left: -22px;
}
/* @end */
/* @group Ajax */
.ajax-load-more {
margin-top: 15px;
margin-right: auto;
display: block;
margin-left: auto;
width: 160px;
}
.spin {
height: 16px;
background: url(../core/core-images/ajax-loader.gif) no-repeat;
display: inline-block;
width: 16px;
position: relative;
float: left;
top: 0;
right: 5px;
}
a.ajax {
color: #475d79;
text-shadow: #eee 1px 1px 0;
letter-spacing: 0;
height: 16px;
font: bold 14px Helvetica, Geneva, Arial, sans-serif;
-webkit-touch-callout: none;
}
/* @end */
/* @group Single Post Page */
a.sh2 {
letter-spacing: -1px;
margin: 0;
padding: 0 0 2px;
color: #222;
display: block;
line-height: 145%;
font-size: 19px;
font-weight: bold;
text-align: left;
}
#singlentry {
line-height: 150%;
color: #333;
display: block;
overflow: hidden;
font-size: 14px;
}
.single-post-meta-top {
text-align: left;
color: #999;
font-size: 10px;
font-weight: bold;
line-height: 15px;
}
.single-post-meta-bottom {
text-align: left;
color: #666;
font-size: 11px;
border-bottom: 1px solid #adadad;
border-top: 1px solid #adadad;
padding: 10px;
font-weight: bold;
line-height: 14px;
background-color: #e5eff5;
margin: 5px -10px;
text-shadow: #fafafa 0 1px 1px;
}
/* @group Post Options Bar */
.single-post-meta-bottom .post-page-nav {
font-size: 14px;
line-height: 25px;
text-indent: -99px;
margin-left: 100px;
text-align: left;
padding: 0;
margin-bottom: 10px;
letter-spacing: 0;
}
.single-post-meta-bottom .post-page-nav a {
padding: 2px 5px 2px 8px;
background-color: #fff;
border: 1px solid #ccc;
-webkit-border-radius: 4px;
width: 16px;
margin-right: 1px;
letter-spacing: 2px;
}
ul#post-options {
-webkit-border-bottom-left-radius: 7px;
-webkit-border-bottom-right-radius: 7px;
list-style-type: none;
background-color: #e6e6e6;
padding: 0 4px 0 0;
text-align: center;
position: relative;
margin: -5px -10px -10px;
border-top: 1px solid #fbfbfb;
}
ul#post-options li {
margin: 0;
padding: 0;
display: inline-block;
}
ul#post-options li a {
display: inline-block;
width: 36px;
padding: 20px 5px 16px;
margin: 2px 0 0;
}
ul#post-options li a#oprev {
background: url(../core/core-images/post-options.png) no-repeat 5px -210px;
border-right: 1px solid #cfcfcf;
width: 34px;
}
ul#post-options li a#onext {
background: url(../core/core-images/post-options.png) no-repeat -7px -244px;
border-left: 1px solid #cfcfcf;
width: 34px;
}
ul#post-options li a#omail {
background: url(../core/core-images/post-options.png) no-repeat center -1px;
border-left: 1px solid #fbfbfb;
margin-left: -3px;
}
ul#post-options li a#otweet {
background: url(../core/core-images/post-options.png) no-repeat center -82px;
}
ul#post-options li a#facebook {
background: url(../core/core-images/post-options.png) no-repeat center -293px;
}
ul#post-options li a#obook {
background: url(../core/core-images/post-options.png) no-repeat center -39px;
border-right: 1px solid #fbfbfb;
margin-right: -3px;
}
/* @end */
/* @group Gallery / Captions */
#singlentry .wp-caption {
text-align: center;
font-size: 11px;
color: #999;
line-height: 13px;
max-width: 100% !important;
height: auto !important;
}
#singlentry .gallery {
margin: 0;
padding: 0;
width: 100% !important;
height: auto !important;
}
#singlentry .gallery dl.gallery-item img.attachment-thumbnail {
padding: 3px;
margin: 10px;
width: 50% !important;
height: auto;
}
#singlentry .gallery dl.gallery-item {
margin: 0;
}
#singlentry .gallery dl.gallery-item dt.gallery-icon {
margin: 0;
}
#singlentry .gallery dl.gallery-item dd.gallery-caption {
font-size: 11px;
color: #555;
}
/* @end */
/* @group Twitter / Bookmarking */
#twitter-box {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
margin: 10px;
background-color: #fff;
}
#twitter-box img {
float: left;
margin-right: 5px;
position: relative;
bottom: 4px;
right: 3px;
width: 28px;
height: 28px;
}
#twitter-box ul {
list-style-type: none;
margin: 0;
padding: 0;
}
#twitter-box li {
clear: both;
border-bottom: 1px solid #cbcbcb;
margin: 0;
padding: 0;
}
#twitter-box li a {
display: block;
color: #222;
font-size: 13px;
font-weight: bold;
padding-top: 10px;
padding-bottom: 13px;
padding-left: 10px;
margin: 0;
}
#bookmark-box {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
margin: 10px;
background-color: #fff;
}
#bookmark-box img {
float: left;
margin-right: 5px;
position: relative;
bottom: 4px;
right: 3px;
margin-left: 3px;
margin-top: 1px;
}
#bookmark-box ul {
list-style-type: none;
margin: 0;
padding: 0;
}
#bookmark-box li {
clear: both;
border-bottom: 1px solid #cbcbcb;
margin: 0;
padding: 0;
}
#bookmark-box li a {
display: block;
color: #222;
font-size: 13px;
font-weight: bold;
padding-top: 10px;
padding-bottom: 13px;
padding-left: 10px;
margin: 0;
}
#twitter-box li:last-child, #bookmark-box li:last-child {
border-bottom-style: none;
}
/* @end */
/* @end */
/* @group Pages */
.page h2 {
font-size: 22px;
letter-spacing: -1px;
text-align: left;
line-height: 22px;
font-weight: normal;
font-style: normal;
padding-right: 0;
padding-top: 0;
padding-bottom: 0;
position: relative;
border-style: none;
margin: 10px 0 0 42px;
}
.pageentry {
color: #444;
padding: 2px 0 0;
line-height: 145%;
display: block;
}
img.pageicon {
position: relative;
margin-right: 10px;
width: 32px;
height: 32px;
float: left;
margin-top: -5px;
margin-left: 0;
}
.pageentry .wp-caption {
text-align: center;
font-size: 11px;
color: #999;
line-height: 13px;
max-width: 100% !important;
height: auto !important;
}
/* @group Archives */
#wptouch-tagcloud {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
background-color: #fff;
margin-right: 10px;
margin-left: 10px;
padding: 10px;
text-align: justify;
text-transform: capitalize;
line-height: 150%;
}
#wptouch-archives {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
background-color: #fff;
margin-right: 10px;
margin-left: 10px;
}
#wptouch-archives a {
color: #222;
display: block;
padding-bottom: 10px;
padding-left: 10px;
background: url(../core/core-images/arrow.png) no-repeat right center;
padding-top: 10px;
}
#wptouch-archives ul {
padding: 0;
list-style-type: none;
margin: 0;
}
#wptouch-archives li {
border-bottom: 1px solid #ccc;
list-style-type: none;
font-weight: bold;
font-size: 14px;
color: #222;
display: block;
padding: 0;
margin-bottom: 0;
margin-left: -10px;
margin-right: -10px;
}
#wptouch-archives li:first-child {
margin-top: -10px;
}
#wptouch-archives li:last-child {
margin-bottom: -10px;
border-bottom-style: none;
}
/* @end */
/* @group Links */
#wptouch-links a {
color: #222;
display: block;
background: url(../core/core-images/arrow.png) no-repeat right center;
padding: 10px 10% 10px 10px;
}
#wptouch-links h2 {
color: #475d79;
text-shadow: #eee 1px 1px 0;
font-size: 15px;
font-weight: bold;
margin-bottom: 10px;
margin-left: 10px;
letter-spacing: 0;
border-style: none;
text-transform: capitalize;
margin-top: 20px;
}
#wptouch-links ul {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
background-color: #fff;
list-style-type: none;
margin: 10px;
padding: 0;
}
#wptouch-links li {
border-bottom: 1px solid #ccc;
list-style-type: none;
font-weight: bold;
font-size: 13px;
color: #333;
display: block;
padding: 0;
margin: 0;
text-shadow: #fff 0 0 0;
}
#wptouch-links li:first-child {
border-top-style: none;
}
#wptouch-links li:last-child {
border-bottom-style: none;
}
/* @end */
/* @group Photos */
#wptouch-flickr {
text-align: center;
width: auto;
}
#wptouch-flickr img {
padding: 1px;
background-color: #ccc;
margin: 5px;
width: 55px;
height: 55px;
}
/* @end */
/* @group 404 */
#fourohfour {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
background-color: #fff;
text-align: center;
margin: 10px;
padding: 10px;
}
/* @end */
/* @end */
/* @group Comments */
ol#commentlist {
list-style-type: none;
display: none;
margin: 0 10px 0;
position: relative;
padding-right: 0;
padding-bottom: 0;
padding-left: 0;
}
ol.commentlist li {
background-color: #fff;
padding: 10px;
border-bottom: 1px solid #dedede;
margin: 0;
overflow: hidden;
font-size: 12px;
border-right: 1px solid #b1b1b1;
border-left: 1px solid #b1b1b1;
position: relative;
line-height: 17px;
box-shadow: rgba(255,255,255,.8) 0px 1px 0px;
}
h3#com-head {
font-weight: bold;
font-size: 13px;
-webkit-border-radius: 8px;
text-shadow: #fff 0 1px 0;
margin-left: 10px;
margin-right: 10px;
border: 1px solid #b1b1b1;
background: url("/skins/mobile/themes/core/core-images/com_arrow.png") no-repeat scroll 10px 11px #FFFFFF;
position: relative;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 29px;
cursor: pointer;
display: block;
}
h3#com-head img#com-arrow {
margin-right: 5px;
position: relative;
top: 1px;
-webkit-transform: scale(1.0) rotate(0deg);
-webkit-transition-duration: 0.6s;
}
.comhead-open {
-webkit-border-bottom-left-radius: 0px !important;
-webkit-border-bottom-right-radius: 0px !important;
margin-bottom: -1px;
background-color: #eee !important;
}
.com-arrow-down {
-webkit-transform: scale(1.0) rotate(90deg) !important;
-webkit-transition-duration: 0.6s !important;
}
ol.commentlist li:first-child {
border-top: 1px solid #b1b1b1;
}
ol.commentlist li:last-child {
border-bottom: 1px solid #b1b1b1;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
}
ol.commentlist li img.avatar {
float: left;
border-right: 1px solid #f9f9f9;
margin-right: 5px;
width: 32px;
height: 32px;
}
ol.commentlist li ul {
padding: 0;
margin: 0;
list-style-type: none;
}
ol.commentlist .parent {
background-color: #fefdec;
}
ol.commentlist .parent ul.children li {
border: 1px solid #ddd;
background-color: #e9f8fd;
-webkit-border-radius: 8px;
}
ol.commentlist ul.children .parent ul.children li.alt {
border: 1px solid #ddd;
background-color: #fff;
padding: 10px;
margin: 10px 0 0;
-webkit-border-radius: 8px;
}
ol.commentlist ul.children .parent ul.children li.even {
border: 1px solid #ddd !important;
background-color: #f9fbf6;
padding: 10px;
margin: 10px 0 0;
-webkit-border-radius: 8px;
}
ol.commentlist .reply a, .comdater {
position: absolute;
top: 6px;
right: 5px;
font-weight: bold;
font-size: 10px;
background-color: #e5e5e5;
padding: 1px 5px;
border: 1px solid #fff;
-webkit-border-radius: 3px;
text-shadow: #fff 0 1px 0px;
}
ol.commentlist .comdater span {
margin-right: 3px;
border-right: 1px solid #fefefe;
display: inline-block;
}
ol.commentlist .comdater span a {
padding-right: 7px;
}
ol.commentlist .comdater span a:last-child {
border-right: 1px solid #ccc;
display: inline-block;
}
ol.commentlist .comment-author {
font-weight: bold;
}
ol.commentlist .comment-meta a {
font-size: 11px;
color: #999;
}
.navigation.commentnav {
height: 17px;
padding-right: 0;
padding-top: 10px;
padding-left: 10px;
}
.navigation.commentnav .alignright a {
background-repeat: no-repeat;
background-position: right -26px;
padding-right: 35px;
}
.navigation.commentnav .alignleft a {
background-repeat: no-repeat;
background-position: left -46px;
padding-left: 25px;
}
.comtop {
background-color: #f5f5f5;
padding-left: 0;
padding-bottom: 15px;
border-bottom: 1px solid #dedede;
margin-top: -10px;
margin-left: -10px;
margin-right: -10px;
height: 17px;
}
.com-author a {
font-weight: bold;
text-transform: capitalize;
font-size: 13px;
text-shadow: #fff 0 1px 0;
-webkit-border-top-right-radius: 0px;
}
.com-author {
font-weight: bold;
text-transform: capitalize;
font-size: 13px;
position: relative;
text-shadow: #fff 0 1px 0;
-webkit-border-top-right-radius: 0px;
padding-left: 10px;
padding-top: 7px;
}
/*
@end */
/* @group Leaving A Comment */
h3#comments, h3#respond {
color: #475d79;
text-shadow: #eee 1px 1px 0;
letter-spacing: -1px;
font-size: 17px;
padding-left: 10px;
padding-top: 20px;
}
h3.coms-closed {
text-align: center;
margin-top: 25px;
}
.preview {
background-color: #fdeeab;
color: #bf7b20;
font-weight: bold;
text-shadow: #fff 0 1px 1px;
font-size: 11px;
}
.preview span {
position: absolute;
right: 62px;
top: 8px;
padding-right: 15px;
}
p.logged {
color: #475d79;
text-shadow: #eee 1px 1px 0;
font-size: 11px;
font-weight: bold;
position: relative;
top: 2px;
margin-top: 35px;
}
#commentForm {
margin-left: 10px;
margin-right: 10px;
}
#commentForm input, #replyForm input, .reply-button {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
padding: 3px;
margin: 0;
font-size: 13px;
color: #444;
width: 170px;
vertical-align: middle;
}
.reply-button {
color: #555;
font-weight: bold;
width: 25%;
opacity: 1;
background-color: #eee;
border: 1px solid #aaa;
text-shadow: #fff 0 1px 0;
}
textarea#comment, textarea#commentReply {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
font-size: 13px;
color: #444;
height: 110px;
width: 98%;
padding: 3px;
box-shadow: rgba(255,255,255,.8) 0px 1px 0px;
}
#loading {
position: relative;
background-color: #dedede;
-webkit-border-radius: 8px;
border: 1px solid #9fa5ac;
opacity: 0.85;
z-index: 9;
margin: 0;
bottom: 166px;
text-align: center;
width: 98%;
height: 64px;
max-width: 453px;
padding: 50px 3px 2px;
}
#loading p {
display: inline;
position: relative;
bottom: 3px;
left: 3px;
text-shadow: #fff 0 1px 0;
font-size: 12px;
color: #2f4e71;
font-weight: bold;
}
#commentForm label, #replyForm label {
color: #475d79;
text-shadow: #eee 1px 1px 0;
font-size: 12px;
font-weight: bold;
}
#refresher {
-webkit-border-radius: 8px;
padding: 10px 10px 10px 18px;
border: 1px solid #b1b1b1;
background-color: #e9f5f8;
color: #475d79;
font-weight: bold;
margin-left: 10px;
margin-right: 10px;
text-shadow: #f5f5f5 0 1px 1px;
margin-top: 20px;
}
#refresher img {
float: left;
margin-right: 3px;
margin-left: -10px;
}
#refresher h3 {
padding: 0;
margin: 0 0 5px;
color: #475d79;
text-shadow: #f5f5f5 0 1px 1px;
}
p.subscribe-to-comments {
padding: 8px;
-webkit-border-radius: 8px;
background-color: #eee;
border: 1px solid #adadad;
}
p.subscribe-to-comments label {
text-shadow: #fff 0 1px 0 !important;
color: #333 !important;
}
p.subscribe-to-comments input#subscribe {
padding-right: 3px;
vertical-align: top;
}
#commentErrorTip, #commentErrorTipReply {
background-color: #fed4d2;
border: 1px solid red;
padding: 8px;
text-align: center;
font-weight: bold;
text-shadow: #ffecec 0 1px 0;
-webkit-border-radius: 8px;
}
/*
@end */
/* @group Text Options */
.full-justified {
text-align: justify;
}
.left-justifed {
text-align: left;
}
.small-text {
font-size: 1.1em;
}
.medium-text {
font-size: 1.2em;
}
.large-text {
font-size: 1.3em;
}
/* @end */
/* @group Background Options */
.classic-wptouch-bg {
background-image: url(../core/core-images/pinstripes-classic.gif);
}
.argyle-wptouch-bg {
background-image: url(../core/core-images/argyle-tie.gif);
}
.horizontal-wptouch-bg {
background-image: url(../core/core-images/pinstripes-horizontal.gif);
}
.diagonal-wptouch-bg {
background-image: url(../core/core-images/pinstripes-diagonal.gif);
}
.skated-wptouch-bg {
background-image: url(../core/core-images/skated-concrete.gif);
}
.grid-wptouch-bg {
background-image: url(../core/core-images/grid.gif);
}
/* @end */
/* @group Footer */
#footer {
text-align: center;
color: #475d79;
font-size: 10px;
font-weight: bold;
text-shadow: #eee 1px 1px 0;
margin-top: 60px;
line-height: 13px;
padding: 0 0 10px;
}
#footer p {
margin: 0;
padding: 0 25px 5px;
}
/* @group Switch Link */
#wptouch-switch-link {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
margin-right: 10px;
margin-left: 10px;
margin-bottom: 20px;
position: relative;
max-width: 300px;
padding: 13px 10px 12px 8px;
color: #222;
text-shadow: #fff 0 0 0;
font-size: 13px;
text-align: left;
background-color: #fff;
box-shadow: rgba(255,255,255,.8) 0px 1px 0px;
}
#wptouch-switch-link a {
position: relative;
display: block;
width: 77px;
background: url(../core/core-images/onoff.jpg) no-repeat left top;
height: 22px;
float: right;
left: 2px;
bottom: 5px;
}
.offimg {
width: 77px;
background: url(../core/core-images/onoff.jpg) no-repeat 0 -22px !important;
height: 22px;
}
/* @end */
/* @end */
/* @group WPtouch Adsense area */
#adsense-area {
height: 50px;
overflow: none;
margin-bottom: 12px;
background: transparent;
}
#adsense-area iframe {
height: 50px!important;
overflow: none;
}
/* @end */
/* @group No Script Overlay */
#noscript-wrap {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background-color: #eee;
z-index: 1000;
opacity: 0.9;
}
#noscript {
color: #ddd;
display: block;
height: 54%;
text-shadow: #000000 -1px -1px 0;
-webkit-border-radius: 15px;
-webkit-box-shadow: #444 0px 0px 15px;
width: auto;
padding-right: 25px;
padding-left: 25px;
background: #0d0d0d url(../../images/saved.png) no-repeat center top;
padding-top: 110px;
text-align: center;
border: 3px solid #444;
font: 14px Helvetica, Arial, sans-serif;
margin: 25px;
}
/* @end */
/* @group Post Thumbnails (2.9+ only) */
.wptouch-post-thumb-wrap {
position: relative;
margin-right: 8px;
display: block;
margin-bottom: 4px;
width: 46px;
height: 46px;
float: left;
}
.wptouch-post-thumb img {
width: 46px;
height: 46px;
}
.wptouch-post-thumb-wrap .thumb-top-left {
position: absolute;
top: 0;
left: 0;
height: 9px;
width: 9px;
background: url(../core/core-images/thumb-corners.png) no-repeat 0 0;
}
.wptouch-post-thumb-wrap .thumb-top-right {
position: absolute;
top: 0;
right: 0;
width: 9px;
height: 9px;
background: url(../core/core-images/thumb-corners.png) no-repeat right top;
}
.wptouch-post-thumb-wrap .thumb-bottom-left {
position: absolute;
bottom: 0;
left: 0;
width: 9px;
height: 9px;
background: url(../core/core-images/thumb-corners.png) no-repeat 0 -9px;
}
.wptouch-post-thumb-wrap .thumb-bottom-right {
position: absolute;
bottom: 0;
right: 0;
width: 9px;
height: 9px;
background: url(../core/core-images/thumb-corners.png) 9px -9px;
}
/* @end */
/* @group iOS 5 */
.ios5 #headerbar {
position: fixed;
top: 0;
z-index: 1;
}
.ios5 #drop-fade {
position: fixed;
top: 46px;
}
.ios5 #wptouch-menu {
position: fixed;
}
.ios5 .content {
padding-top: 56px;
}
.ios5 .content.single {
padding-top: 66px;
}
.ios5 #wptouch-search {
z-index: 2;
position: fixed;
}
/* @end */
/* @group Compatibility */
#livefyre {
margin-left: 9px;
margin-right: 9px;
width: 100%;
background-color: #fff;
border: 1px solid #CCC;
-webkit-border-radius: 8px;
padding: 10px;
}
#wwsgd-optin, #outbrain_container_0_stripBox, #outbrain_container_0_stars, .linkedin_share_container, .dd_post_share, .tweetmeme_button, #dd_ajax_float {
display: none;
}
/* @group Dynamic Contact Form */
#dwp-contact-button, .dwpcontact-page {
display: none !important;
}
/* @end */
/* @group Banner Cycler */
#cycler, #cyclerNav {
display: none;
}
/* @end */
/* @group Gravity Forms */
.gform_wrapper li, .gform_wrapper form li {
list-style-type: none!important;
padding-left: 30px;
}
.gform_wrapper .gform_footer {
margin-top: 0;
margin-left: 20px;
}
body.wptouch-pro .post .gform_wrapper .gform_body ul.gform_fields {
text-indent: 0!important;
margin: 0;
padding: 0
}
body.wptouch-pro .post .gform_wrapper .gform_body ul.gform_fields li {
padding-left: 0!important
}
/* @end */
/* @group WP Skypscraper */
.wp_skyscraper_c2 {
display: none;
}
/* @end */
/* @group AddThis / Tweet This */
.addthis_container {
display: none !important;
}
a.tt {
display: none !important;
}
/* @end */
/* @group Peter's Anti Spam Support */
#secureimgdiv img#cas_image {
-webkit-border-radius: 2px !important;
border: 1px solid #adadad !important;
width: auto !important;
height: 21px !important;
float: left !important;
}
#secureimgdiv p label {
color: #475d79;
text-shadow: #eee 1px 1px 0;
font-size: 14px;
font-weight: bold;
}
#secureimgdiv p small {
display: block;
margin-top: 5px;
font-size: 11px;
text-align: justify;
}
#secureimgdiv p input#securitycode {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
padding: 3px;
margin: 0 0 0 0;
font-size: 13px;
color: #444;
width: 101px;
-webkit-border-top-left-radius: 1px;
-webkit-border-bottom-left-radius: 1px;
}
/* @end */
/* @group Ribbon Manager Plugin Override */
a#ribbon {
display: none !important;
}
/* @end */
/* @group Subscribe To Comments */
p.subscribe-to-comments {
padding: 8px;
-webkit-border-radius: 8px;
background-color: #fff;
border: 1px solid #adadad;
}
p.subscribe-to-comments label {
text-shadow: #fff 0 1px 0 !important;
color: #333 !important;
}
p.subscribe-to-comments input#subscribe {
padding-right: 3px;
vertical-align: top;
width: auto;
height: auto;
}
.commentlist p.subscribe-to-comments {
}
/* @end */
/* @group Digg Box */
span.db-body {
display: none;
}
/* @end */
/* @group WP Thread Comment */
p.thdrpy, p.thdmang {
display: inline;
margin-right: 10px;
}
/* @end */
/* @group WP Greet Box */
#greet_block {
display: none;
}
/* @end */
/* @group Comment Reply Notification */
#commentForm input#comment_mail_notify {
margin-right: 5px;
margin-top: 15px;
margin-bottom: 5px;
}
/* @end */
/* @group Share and Follow */
.footer #follow.right {
display: none !important;
}
.content ul.socialwrap {
display: none;
}
/* @end */
/* @group Disqus */
#disqus_thread {
-webkit-border-radius: 8px;
border: 1px solid #adadad;
background-color: #fff;
padding: 10px;
margin-left: 10px;
margin-right: 10px;
margin-top: 50px;
}
/* @end */
/* @group WP Tweet Button */
#content .tw_button {
display: none !important;
}
/* @end */
/* @group Follow Me */
#followMeTabLeftSm, #followMeTabLeftSm img {
display: none !important;
height: 0 !important;
width: 0 !important;
visibility: hidden !important;
position: -1000em !important;
}
/* @end */
/* @group Comment Quicktags */
#commentForm #ed_toolbar {
margin-left: 9px;
}
#commentForm #ed_toolbar .ed_button {
width: auto !important;
margin-bottom: 10px;
margin-top: 5px;
margin-right: 3px;
-webkit-border-radius: 4px !important;
padding: 2px 6px !important;
font-size: 11px;
font-weight: bold;
}
/* @end */
/* @group Zenbox */
#zenbox_tab {display: none !important;}
/* @end */
/* @group AttentionGrabber */
#attentionGrabber, #attentionGrabberWrap #openAttentionGrabber {
display: none !important;
}
/* @end */
/* @group smartPop-Up Box */
#smartPopupfade, #pietimerholder {
display: none !important;
}
/* @end */
/* @group Mega Dropdown */
.megadropdown-wrapper {
display: none !important;
}
/* @end */
/* @group Easy Button */
.buttonfixed {
display: none !important;
}
/* @end */
/* @group AS Sharebar */
#as-share-window {
display:none !important;
}
/* @end */
/* @end */
\ No newline at end of file
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear} (${archiveDate.archiveDatePublishedArticleCount}) - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveDate.archiveDateYear}${archiveDate.archiveDateMonth}"/>
<meta name="description" content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<#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}..!
<#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear}
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if>
${sumLabel} ${archiveDate.archiveDatePublishedArticleCount} ${fightLabel}
</span>
</section>
<#include "article-list.ftl">
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
</body>
</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>
<footer class="footer">
<div class="wrapper fn-clear">
<a href="${servePath}">${blogTitle}</a> •
${onlineVisitor1Label}${onlineVisitorCnt} <br/>
&copy; ${year}
${footerContent}
Powered by <a href="http://b3log.org" target="_blank">B3log 开源</a> •
<a href="http://b3log.org/services/#solo" target="_blank">Solo</a> ${version}
<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>
</div>
</footer>
<div class="back-to-top" 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/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">
var latkeConfig = {
"servePath": "${servePath}",
"staticServePath": "${staticServePath}",
"isLoggedIn": "${isLoggedIn?string}",
"userName": "${userName}"
};
var Label = {
"skinDirName": "${skinDirName}",
"em00Label": "${em00Label}",
"em01Label": "${em01Label}",
"em02Label": "${em02Label}",
"em03Label": "${em03Label}",
"em04Label": "${em04Label}",
"em05Label": "${em05Label}",
"em06Label": "${em06Label}",
"em07Label": "${em07Label}",
"em08Label": "${em08Label}",
"em09Label": "${em09Label}",
"em10Label": "${em10Label}",
"em11Label": "${em11Label}",
"em12Label": "${em12Label}",
"em13Label": "${em13Label}",
"em14Label": "${em14Label}",
"tocLabel": "${tocLabel}",
"siteViewLabel": "${siteViewLabel}"
};
</script>
${plugins}
<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
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${blogTitle}">
<#if metaKeywords??>
<meta name="keywords" content="${metaKeywords}"/>
</#if>
<#if metaDescription??>
<meta name="description" content="${metaDescription}"/>
</#if>
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<#include "article-list.ftl">
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
</body>
</html>
/*
* 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.
*/
/**
* @fileoverview util and every page should be used.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.2.1.0, Sep 6, 2016
*/
/**
* @description next 皮肤脚本
* @static
*/
var NexT = {
init: function () {
$('.sidebar-toggle').click(function () {
var $sidebar = $('.sidebar');
if ($(this).hasClass('sidebar-active')) {
$(this).removeClass('sidebar-active');
$('body').animate({
'padding-right': 0
});
$sidebar.animate({
right: -320
});
$sidebar.find('section').css('opacity', 0);
} else {
$(this).addClass('sidebar-active');
$('body').animate({
'padding-right': 320
});
$sidebar.animate({
right: 0
}, function () {
$sidebar.find('section:first').animate({
'opacity': 1
});
});
}
});
$('.site-nav-toggle').click(function () {
$('.site-nav').slideToggle();
});
$(document).ready(function () {
setTimeout(function () {
// logo animate
$('.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 () {
// 当有文章页面有目录时,回调不放这里,侧边栏就会一片空白
if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) {
$('.sidebar-toggle').click();
}
});
});
});
$('.logo-line-after i').animate({
'right': '0'
});
}, 500);
});
},
initArticle: function () {
if ($('.b3-solo-list li').length > 0 && $(window).width() > 1000) {
// add color to sidebar menu
$('.sidebar-toggle').addClass('has-toc');
// append toc to sidebar menu
var articleTocHTML = '<ul><li class="current" data-tab="toc">' + Label.tocLabel + '</li><li data-tab="site">' + Label.siteViewLabel + '</li></ul><section></section>';
$('.sidebar').prepend(articleTocHTML);
var $sectionF = $('.sidebar section:first').html($('.b3-solo-list')),
$sectionL = $('.sidebar section:last');
// 切换 tab
$('.sidebar > ul > li').click(function () {
if ($(this).data('tab') === 'toc') {
$sectionL.animate({
"opacity": '0',
"top": '-50px'
}, 300, function () {
$sectionF.show().css('top', '-50px');
$sectionF.animate({
"opacity": '1',
"top": '0'
}, 300);
});
} else {
$sectionF.animate({
"opacity": '0',
"top": '-50px'
}, 300, function () {
$sectionF.hide().css('top', '-50px');
$sectionL.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.
*/
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
<#macro head title>
<meta charset="utf-8" />
<title>${title}</title>
<#nested>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="author" content="${blogTitle?html}" />
<meta name="generator" content="Solo" />
<meta name="owner" content="B3log Team" />
<meta name="revised" content="${blogTitle?html}, ${year}" />
<meta name="copyright" content="B3log" />
<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 href="${servePath}/blog-articles-rss.do" title="RSS" type="application/rss+xml" rel="alternate" />
<link rel="icon" type="image/png" href="${servePath}/favicon.png" />
${htmlHead}
</#macro>
\ No newline at end of file
<#include "macro-head.ftl">
<#include "macro-comments.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${page.pageTitle} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${page.pageTitle}" />
<meta name="description" content="${metaDescription}" />
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<article class="post-body">
${page.pageContent}
</article>
<@comments commentList=pageComments article=page></@comments>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
<@comment_script oId=page.oId></@comment_script>
</body>
</html>
<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
......@@ -22,5 +22,5 @@
name=next
version=1.0.0
forSolo=1.5.0
forSolo=1.6.0
memo=https://github.com/iissnan/hexo-theme-next
<#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>
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${allTagsLabel} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${allTagsLabel}"/>
<meta name="description" content="<#list tags as tag>${tag.tagTitle}<#if tag_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<#include "header.ftl">
<main class="main wrapper">
<div class="content">
<div class="tag-cloud">
${sumLabel} ${tags?size} ${tagLabel}
<ul class="tag-cloud-tags fn-clear" id="tags">
<#list tags as tag>
<li>
<a rel="tag" data-count="${tag.tagPublishedRefCount}"
href="${servePath}/tags/${tag.tagTitle?url('UTF-8')}">
<span>${tag.tagTitle}</span>
(<b>${tag.tagPublishedRefCount}</b>)
</a>
</li>
</#list>
</ul>
</div>
</div>
<#include "side.ftl">
</main>
<#include "footer.ftl">
<script>
Util.buildTags();
</script>
</body>
</html>
<style type="text/css">
#top {
background-color: #FFF;
background-image: linear-gradient(#FFFFFF,#E5E5E5);
background-image: -ms-linear-gradient(#FFFFFF,#E5E5E5);
background-image: -o-linear-gradient(#FFFFFF,#E5E5E5);
background-image: -webkit-linear-gradient(#FFFFFF,#E5E5E5);
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#FFFFFF', endColorstr='#E5E5E5');
border-bottom: 1px solid #E5E5E5;
line-height: 26px;
display: none;
}
#top a, #top span span {
border-right: 1px solid #D9D9D9;
color: #4C4C4C;
float: left;
line-height: 14px;
margin: 6px 0;
padding: 0 6px;
text-decoration: none;
text-shadow: 0 -1px 0 #FFFFFF;
font-weight: normal;
}
#top a:hover, #top a.hover {
background-color: #EEF2FA;
border-left-color: #707070;
border-radius: 0 13px 13px 0;
margin: 0px;
line-height: 26px;
}
#showTop {
background-image: url("${staticServePath}/images/arrow-right.png");
cursor: pointer;
height: 26px;
right: 0;
position: absolute;
top: 0;
width: 26px;
border-radius: 0 0 0 15px;
z-index: 10;
}
#showTop:hover {
background-image: url("${staticServePath}/images/arrow-right.gif");
}
#top #hideTop {
background-image: url("${staticServePath}/images/arrow-left.png");
height: 26px;
margin: 0;
padding: 0;
width: 26px;
border: 0;
}
#top #hideTop:hover {
background-image: url("${staticServePath}/images/arrow-left.gif");
border-radius: 0;
}
</style>
<div id="showTop"></div>
<div id="top">
<a href="https://github.com/b3log/solo" target="_blank" class="hover">
Solo
</a>
<span class="left">&nbsp;${onlineVisitor1Label}${onlineVisitorCnt}</span>
<span class="right" id="admin" data-login="${isLoggedIn?string}">
<#if isLoggedIn>
<span id="adminName">${userName}</span>
<#if !isVisitor>
<a href="${servePath}/admin-index.do#main" title="${adminLabel}">
${adminLabel}
</a>
</#if>
<a href="${logoutURL}" title="${logoutLabel}">${logoutLabel}</a>
<#else>
<a href="${loginURL}" title="${loginLabel}">${loginLabel}</a>
<a href="${servePath}/register" title="${registerLabel}">${registerLabel}</a>
</#if>
<#if isMobileRequest>
<a href="javascript:void(0)" onclick="Util.switchMobile('mobile');" title="${mobileLabel}">${mobileLabel}</a>
</#if>
<a href="javascript:void(0)" id="hideTop"></a>
</span>
<div class="clear"></div>
</div>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
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