Commit 1e6dd504 authored by Liang Ding's avatar Liang Ding

💚 集成测试用例使用 main 源码

parent 1dcd9497
......@@ -283,6 +283,7 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<additionalClasspathElements>src\main\webapp\</additionalClasspathElements>
<useSystemClassLoader>false</useSystemClassLoader>
<skipTests>false</skipTests>
</configuration>
......
......@@ -38,18 +38,21 @@ public class MockHttpServletRequest implements HttpServletRequest {
* Header.
*/
private Map<String, String> headers = new HashMap<>();
/**
* Request URI.
*/
private String requestURI = "/";
/**
* Context path.
*/
private String contextPath = "";
/**
* Attributes.
*/
private Map<String, Object> attributes = new HashMap<String, Object>();
private Map<String, Object> attributes = new HashMap<>();
@Override
public String getAuthType() {
......
......@@ -30,7 +30,7 @@ import org.testng.annotations.Test;
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="https://github.com/nanolikeyou">nanolikeyou</a>
* @version 1.0.0.2, Aug 14, 2017
* @version 1.0.0.3, Feb 11, 2019
*/
@Test(suiteName = "service")
public class UserQueryServiceTestCase extends AbstractTestCase {
......@@ -102,7 +102,7 @@ public class UserQueryServiceTestCase extends AbstractTestCase {
final UserQueryService userQueryService = getUserQueryService();
final String loginURL = userQueryService.getLoginURL("redirectURL");
Assert.assertEquals(loginURL, "/start?goto=http%3A%2F%2Flocalhost%3A8080redirectURL");
Assert.assertEquals(loginURL, "/start?referer=http%3A%2F%2Flocalhost%3A8080redirectURL");
}
/**
......@@ -112,6 +112,6 @@ public class UserQueryServiceTestCase extends AbstractTestCase {
final UserQueryService userQueryService = getUserQueryService();
final String logoutURL = userQueryService.getLogoutURL();
Assert.assertEquals(logoutURL, "/logout?goto=http%3A%2F%2Flocalhost%3A8080%2F");
Assert.assertEquals(logoutURL, "/logout?referer=http%3A%2F%2Flocalhost%3A8080");
}
}
......@@ -17,25 +17,18 @@
*/
package org.b3log.solo.util;
import org.apache.commons.io.IOUtils;
import org.b3log.latke.Latkes;
import org.b3log.latke.util.Stopwatchs;
import org.b3log.latke.util.Strings;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.io.FileInputStream;
import java.net.URL;
import java.net.URLDecoder;
import java.util.List;
import java.util.Locale;
/**
* {@link org.b3log.solo.util.Markdowns} test case.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.4, Dec 16, 2017
* @version 1.0.1.5, Feb 11, 2019
* @since 0.4.5
*/
public final class MarkdownsTestCase {
......@@ -58,36 +51,9 @@ public final class MarkdownsTestCase {
Assert.assertEquals(html, "");
markdownText = "# Solo Markdown Editor";
markdownText = "Solo Markdown";
html = Markdowns.toHTML(markdownText);
final URL testFile = MarkdownsTestCase.class.getResource("/markdown_syntax.text");
final String path = URLDecoder.decode(testFile.getPath(), "UTF-8");
//System.out.println(path);
final StringBuilder markdownTextBuilder = new StringBuilder();
final List<String> lines = IOUtils.readLines(new FileInputStream(path), "UTF-8");
for (final String line : lines) {
markdownTextBuilder.append(line).append(Strings.LINE_SEPARATOR);
}
markdownText = markdownTextBuilder.toString();
//System.out.println(markdownText);
Stopwatchs.start("Markdowning");
html = Markdowns.toHTML(markdownText);
Stopwatchs.end();
//System.out.println(html);
//System.out.println("Stopwatch: ");
//System.out.println(Stopwatchs.getTimingStat());
// HTML entity test
markdownText = "The first: &#39; <br/> The second: &AElig;";
html = Markdowns.toHTML(markdownText);
Assert.assertEquals(html, "<p>The first: ' <br> The second: Æ</p>");
Assert.assertEquals(html, "<p>Solo Markdown</p>");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<Context antiJARLocking="true" path=""/>
<?xml version="1.0" encoding="utf-8"?>
<!--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!--
Description: 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="/LICENSE.txt" />
</static-files>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!--
Description: Solo web deployment descriptor for testing.
Version: 1.0.5.3, Sep 25, 2018
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>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</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/error/401</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/403</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500</location>
</error-page>
</web-app>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div class="module-panel">
<div class="module-header">
<h2>${aboutLabel}</h2>
</div>
<div class="module-body padding12 fn__flex">
<div class="about-logo">
<a href="https://b3log.org" target="_blank">
<img width="128" src="${staticServePath}/images/logo.png" alt="Solo" title="Solo" />
</a>
</div>
<div class="left content-reset about__panel" style="margin-left: 20px;">
<div id="aboutLatest" class="about-margin left">
${checkingVersionLabel}
</div>
<iframe src="https://ghbtns.com/github-btn.html?user=b3log&repo=solo&type=star&count=true&size=large"
frameborder="0" scrolling="0" width="160px" height="30px" class="about__iframe"
style="margin: 21px 0 0 20px;border: 0"
class="left"></iframe>
<div class="clear"></div>
${aboutContentLabel}
<ul class="about-list">
<li><a target="_blank" href="https://hacpai.com/article/1492881378588">用户指南</a></li>
<li><a target="_blank" href="https://hacpai.com/article/1537690756242">Solo 从设计到实现</a></li>
<li><a target="_blank" href="https://hacpai.com/article/1493814851007">皮肤开发指南</a></li>
</ul>
<button class="right" onclick="window.open('https://b3log.org/donate.html')">${sponsorLabel}</button>
</div>
<span class="clear" /> <br/>
</div>
</div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div class="form margin12">
<input type="text" id="articleListInput">
<button class="search-btn" id="articleListBtn">${searchLabel}</button>
</div>
<div id="articleTable">
</div>
<div id="articlePagination" class="right margin12">
</div>
<div id="articleComments" class="none">
</div>
<div class="clear"></div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div class="form">
<div>
<label>${title1Label}</label>
<input id="title" type="text"/>
</div>
<div>
<label>${content1Label}</label>
<div class="right">
<label for="articleThumbnail" style="margin-bottom: 0">
${useTumbnailLabel}
<input type="checkbox" style="vertical-align: middle;"
id="articleThumbnail" onclick="$('.article__thumbnail').slideToggle()" />
</label>
</div>
<div class="clear"></div>
<div class="article__thumbnail">
<div class="thumbnail__img"></div>
<button id="articleThumbnailBtn">${chageLabel}</button>
</div>
<div>
<div id="articleContent" name="articleContent"
style="height: 500px;width:100%;"></div>
</div>
</div>
<div>
<label>${tags1WithTips1Label}</label>
<div class="tag__select">
<input id="tag" type="text"/>
</div>
</div>
<div class="comment-content">
<label>${abstract1Label}</label>
<div>
<div id="abstract" style="height: 200px;width: 100%;" name="abstract"></div>
</div>
</div>
<div class="fn__flex">
<div class="fn__flex fn__flex1" style="align-items: center">
<label for="permalink" class="permalink__label" style="margin-bottom: 0">${permalink1Label}</label>
<input id="permalink" class="fn__flex1" type="text" style="margin: 0 12px 0 6px;" />
</div>
<div class="right viewpwd__panel">
<label for="viewPwd">${articleViewPwd1Label}</label>
<input id="viewPwd" type="text" style="width: 156px" />
</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 article-commentable__panel">
<label class="checkbox">
<input type="checkbox" id="articleCommentable" checked />
${allowCommentLabel}
</label>
&nbsp;
<span id="postToCommunityPanel">
<label class="checkbox">
<input id="postToCommunity" type="checkbox" checked="checked" />
<a href="https://hacpai.com/article/1546941897596" target="_blank">${syncToCommunityLabel}</a>
</label>
</span>
</div>
<div class="clear"></div>
</div>
<div class="right">
<button id="unSubmitArticle" class="none marginRight12" onclick="admin.article.unPublish();">${unPublishLabel}</button>
<button class="marginRight12" id="saveArticle">${saveLabel}${draftListLabel}</button>
<button id="submitArticle">${publishLabel}</button>
</div>
<div class="clear"></div>
</div>
${plugins}
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div>
<div id="categoryTable"></div>
<div id="categoryPagination" class="margin12 right"></div>
</div>
<div class="clear"></div>
<div class="form form__no-table">
${addCategoryLabel}
<label for="categoryName">${linkTitle1Label}</label>
<input id="categoryName" type="text"/>
<label for="categoryURI">URI:</label>
<input id="categoryURI" type="text"/>
<label for="categoryDesc">${linkDescription1Label}</label>
<input id="categoryDesc" type="text"/>
<label for="categoryTags">${tags1Label}</label>
<span class="tag__select">
<input id="categoryTags" type="text"/>
</span><br>
<button onclick="admin.categoryList.add();" class="right">${saveLabel}</button>
<div class="clear"></div>
</div>
<div id="categoryUpdate" class="none form__no-table form" data-title="${updateCategoryLabel}">
<label for="categoryNameUpdate">${linkTitle1Label}</label>
<input id="categoryNameUpdate" type="text"/>
<label for="categoryURIUpdate">URI:</label>
<input id="categoryURIUpdate" type="text"/>
<label for="categoryDescUpdate">${linkDescription1Label}</label>
<input id="categoryDescUpdate" type="text"/>
<label for="categoryTagsUpdate">${tags1Label}</label>
<input id="categoryTagsUpdate" type="text"/> <br><br>
<button onclick="admin.categoryList.update();" class="right">${updateLabel}</button>
<div class="clear"></div>
</div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="commentTable">
</div>
<div id="commentPagination" class="right margin12">
</div>
<div class="clear"></div>
${plugins}
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="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
This diff is collapsed.
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<script type="text/javascript">
var latkeConfig = {
"staticServePath": "${staticServePath}",
"servePath": "${servePath}",
"isLoggedIn": "true"
};
var Label = {
"pushSuccLabel": '${pushSuccLabel}',
"pushToHacpaiLabel": '${pushToHacpaiLabel}',
"uploadMsg": '${uploadMsg}',
"uploadToken": "${uploadToken}",
"uploadURL": "${uploadURL}",
"markedAvailable": ${markedAvailable?c},
"skinDirName": "${skinDirName}",
"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}",
"dateLabel": "${dateLabel}",
"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}",
"userNameLabel": "${userNameLabel}",
"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}",
"categoryTooLongLabel": "${categoryTooLongLabel}",
"descriptionLabel": "${descriptionLabel}",
"autoSaveLabel": "${autoSaveLabel}",
"addBoldLabel": '${addBoldLabel}',
"addItalicLabel": '${addItalicLabel}',
"insertQuoteLabel": '${insertQuoteLabel}',
"addBulletedLabel": '${addBulletedLabel}',
"addNumberedListLabel": '${addNumberedListLabel}',
"addLinkLabel": '${addLinkLabel}',
"undoLabel": '${undoLabel}',
"redoLabel": '${redoLabel}',
"previewLabel": '${previewLabel}',
"helpLabel": '${helpLabel}',
"fullscreenLabel": '${fullscreenLabel}',
"uploadFilesLabel": '${uploadFilesLabel}'
};
admin.init();
</script>
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div>
<div id="linkTable"></div>
<div id="linkPagination" class="margin12 right"></div>
</div>
<div class="clear"></div>
<div class="form form__no-table">
${addLinkLabel}
<label>${linkTitle1Label}</label>
<input id="linkTitle" type="text"/>
<label>${url1Label}</label>
<input id="linkAddress" type="text"/>
<label>${linkDescription1Label}</label>
<input id="linkDescription" type="text"/> <br><br>
<button onclick="admin.linkList.add();" class="right">${saveLabel}</button>
<div class="clear"></div>
</div>
<div id="updateLink" class="none form form__no-table" data-title="${updateLinkLabel}">
<label>${linkTitle1Label}</label>
<input id="linkTitleUpdate" type="text"/>
<label>${url1Label}</label>
<input id="linkAddressUpdate" type="text"/>
<label>${linkDescription1Label}</label>
<input id="linkDescriptionUpdate" type="text"/><br><br>
<button onclick="admin.linkList.update();" class="right">${updateLabel}</button>
<div class="clear"></div>
</div>
${plugins}
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="mainPanel1"></div>
<div id="mainPanel2"></div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="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_tag">
<a href="#tools/others/tag">${clearTagLabel}</a>
</div>
</li>
<li>
<div id="tabOthers_data">
<a href="#tools/others/data">${exportDataLabel}</a>
</div>
</li>
</ul>
</div>
<div id="tabOthersPanel" class="sub-tabs-main">
<div id="tabOthersPanel_email" class="form form__no-table">
<label for="replayEmailTemplateTitle">${emailSubject1Label}</label>
<input id="replayEmailTemplateTitle" type="text"/>
<label for="replayEmailTemplateBody">${emailContent1Label}</label>
<textarea rows="9" id="replayEmailTemplateBody"></textarea><br><br>
<button onclick="admin.others.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<div class="content-reset">
${replayEmailExplanationLabel}
</div>
</div>
<div id="tabOthersPanel_tag" class="none">
<button class="margin12" onclick="admin.others.removeUnusedTags();">${removeUnusedTagsLabel}</button>
</div>
<div id="tabOthersPanel_data" class="none">
<#if supportExport>
<button class="margin12" onclick="admin.others.exportSQL();">${exportSQLLabel}</button>
</#if>
<button class="margin12" onclick="admin.others.exportJSON();">${exportJSONLabel}</button>
<button class="margin12" onclick="admin.others.exportHexo();">${exportHexoLabel}</button>
</div>
</div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div>
<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>${icon1Label}</label>
<input id="pageIcon" 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 class="page-list__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">
<div id="pageContent" style="height: 430px;width: 100%;" name="pageContent"></div>
<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}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="pluginTable">
</div>
<div id="pluginPagination" class="margin12 right">
</div>
<div id="pluginSetting" class="none">
</div>
<div class="clear"></div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<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>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div id="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>
</ul>
</div>
<div id="tabPreferencePanel" class="sub-tabs-main">
<div id="tabPreferencePanel_config" class="form">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<label for="blogTitle">${blogTitle1Label}</label>
<input id="blogTitle" type="text"/>
<label for="blogSubtitle">${blogSubtitle1Label}</label>
<input id="blogSubtitle" type="text"/>
<label for="blogHost">${blogHost1Label}</label>
<input id="blogHost" type="text" value="${servePath}" readonly="true"/>
<label for="metaKeywords">${metaKeywords1Label}</label>
<input id="metaKeywords" type="text"/>
<label for="metaDescription">${metaDescription1Label}</label>
<input id="metaDescription" type="text"/>
<label for="htmlHead">${htmlhead1Label}</label>
<textarea rows="6" id="htmlHead"></textarea>
<label for="noticeBoard">${noticeBoard1Label}</label>
<textarea rows="6" id="noticeBoard"></textarea>
<label for="footerContent">${footerContent1Label}</label>
<textarea rows="2" id="footerContent"></textarea><br><br>
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
</div>
<div id="tabPreferencePanel_setting" class="none form">
<button class="right" onclick="admin.preference.update()">${updateLabel}</button>
<div class="clear"></div>
<label for="localeString">${localeString1Label}</label>
<select id="localeString">
<option value="zh_CN">简体中文</option>
<option value="en_US">Englisth(US)</option>
</select>
<label for="timeZoneId">${timeZoneId1Label}</label>
<select id="timeZoneId">
${timeZoneIdOptions}
</select>
<label for="articleListDisplay">${articleListDisplay1Label}</label>
<select id="articleListDisplay">
<option value="titleOnly">${titleOnlyLabel}</option>
<option value="titleAndAbstract">${titleAndAbstractLabel}</option>
<option value="titleAndContent">${titleAndContentLabel}</option>
</select>
<label for="mostUsedTagDisplayCount">${indexTagDisplayCnt1Label}</label>
<input id="mostUsedTagDisplayCount" class="normalInput" type="text"/>
<label for="recentCommentDisplayCount">${indexRecentCommentDisplayCnt1Label}</label>
<input id="recentCommentDisplayCount" class="normalInput" type="text"/>
<label for="mostCommentArticleDisplayCount">${indexMostCommentArticleDisplayCnt1Label}</label>
<input id="mostCommentArticleDisplayCount" class="normalInput" type="text"/>
<label for="mostViewArticleDisplayCount">${indexMostViewArticleDisplayCnt1Label}</label>
<input id="mostViewArticleDisplayCount" class="normalInput" type="text"/>
<label for="articleListDisplayCount">${pageSize1Label}</label>
<input id="articleListDisplayCount" class="normalInput" type="text"/>
<label for="articleListPaginationWindowSize">${windowSize1Label}</label>
<input id="articleListPaginationWindowSize" class="normalInput" type="text"/>
<label for="randomArticlesDisplayCount">${randomArticlesDisplayCnt1Label}</label>
<input id="randomArticlesDisplayCount" class="normalInput" type="text"/>
<label for="relevantArticlesDisplayCount">${relevantArticlesDisplayCnt1Label}</label>
<input id="relevantArticlesDisplayCount" class="normalInput" type="text"/>
<label for="externalRelevantArticlesDisplayCount">${externalRelevantArticlesDisplayCnt1Label}</label>
<input id="externalRelevantArticlesDisplayCount" class="normalInput" type="text"/>
<label for="enableArticleUpdateHint">${enableArticleUpdateHint1Label}</label>
<input id="enableArticleUpdateHint" type="checkbox" class="normalInput"/>
<label for="allowVisitDraftViaPermalink">${allowVisitDraftViaPermalink1Label}</label>
<input id="allowVisitDraftViaPermalink" type="checkbox" class="normalInput"/>
<label for="commentable">${allowComment1Label}</label>
<input id="commentable" type="checkbox" class="normalInput"/>
<label for="allowRegister">${allowRegister1Label}</label>
<input id="allowRegister" type="checkbox" class="normalInput"/>
<label for="feedOutputMode">${feedOutputModel1Label}</label>
<select id="feedOutputMode">
<option value="abstract">${abstractLabel}</option>
<option value="fullContent">${fullContentLabel}</option>
</select>
<label for="feedOutputCnt">${feedOutputCnt1Label}</label>
<input id="feedOutputCnt" class="normalInput" type="text"/>
<label for="customVars">${customVars1Label}</label>
<input id="customVars" class="normalInput" type="text"/><br/><br/>
<button class="right" onclick="admin.preference.update()">${updateLabel}</button>
<div class="clear"></div>
</div>
<div id="tabPreferencePanel_skins" class="none form">
<table class="form" width="100%" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<a href="https://github.com/b3log/solo/issues/12449" target="_blank">新皮肤推荐</a> •
<a href="https://hacpai.com/article/1493814851007" target="_blank">皮肤开发指南</a>
<button style="float: right" onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
<tr>
<td>
<div id="skinMain"></div>
</td>
</tr>
<tr>
<td>
<a href="https://github.com/b3log/solo/issues/12449" target="_blank">新皮肤推荐</a> •
<a href="https://hacpai.com/article/1493814851007" target="_blank">皮肤开发指南</a>
<button style="float: right" onclick="admin.preference.update()">${updateLabel}</button>
</td>
</tr>
</tbody>
</table>
</div>
<div id="tabPreferencePanel_signs" class="none form">
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
<button id="preferenceSignButton1">${signLabel}1</button>
<textarea rows="8" id="preferenceSign1"></textarea>
<button id="preferenceSignButton2">${signLabel}2</button>
<textarea rows="8" id="preferenceSign2"></textarea>
<button id="preferenceSignButton3">${signLabel}3</button>
<textarea rows="8" id="preferenceSign3"></textarea><br><br>
<button onclick="admin.preference.update()" class="right">${updateLabel}</button>
<div class="clear"></div>
</div>
</div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<div>
<div id="userTable"></div>
<div id="userPagination" class="margin12 right"></div>
</div>
<div class="clear"></div>
<div class="form form__no-table">
<div id="userUpdate" class="none form form__no-table">
<label for="userNameUpdate">${userName1Label}</label>
<input id="userNameUpdate" type="text"/>
<label for="userEmailUpdate">${commentEmail1Label}</label>
<input id="userEmailUpdate" type="text"/>
<label for="userURLUpdate">${userURL1Label}</label>
<input id="userURLUpdate" type="text"/>
<label for="userAvatarUpdate">${userAvatar1Label}</label>
<input id="userAvatarUpdate" type="text"/>
<label for="userB3KeyUpdate">B3 Key</label>
<input id="userB3KeyUpdate" type="text"/>
<br><br>
<button onclick="admin.userList.update();" class="right">${updateLabel}</button>
<div class="clear"></div>
</div>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "../macro-common-page.ftl">
<@commonPage "${articleViewPwdLabel}">
<h2>
${articleTitle}
</h2>
<br><br><br>
<form class="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}" />
<div style="text-align: right">
<#if msg??>
<span class="error">${msg}</span>
</#if>
<button id="confirm" type="submit">${confirmLabel}</button>
</div>
</form>
<br><br><br>
</@commonPage>
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!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="https://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="https://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="https://b3log.org" target="_blank">B3log 开源</a>, ver ${version}
</div>
</div>
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!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="https://b3log.org" target="_blank">B3log 开源</a>, ver ${version}
</div>
</div>
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!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="https://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="https://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="https://b3log.org" target="_blank">B3log 开源</a>, ver ${version}
</div>
</div>
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "macro-common-page.ftl">
<@commonPage "403 Forbidden!">
${killBrowserLabel}
<br/>
<div style="text-align: right">
<button onclick="closeIframe();">${closeLabel}</button> &nbsp;
<button onclick="closeIframeForever();">${closeForeverLabel}</button>
</div>
<img src='${staticServePath}/images/kill-browser.png' title='Kill IE6' style="float: right;
margin: -171px 0 0 0;" alt='Kill IE6'/>
<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>
</@commonPage>
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#macro commonPage title>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width">
<meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1" media="(device-height: 568px)">
<meta name="robots" content="none"/>
<title><#if blogTitle??>${blogTitle} - </#if>${title}</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"/>
<link rel="apple-touch-icon" href="${staticServePath}/favicon.png">
</head>
<body>
<div class="wrap">
<div class="content-wrap">
<div class="content">
<div class="logo">
<a href="https://b3log.org" target="_blank">
<img width="128" border="0" alt="Solo" title="Solo" src="${staticServePath}/images/logo.png"/>
</a>
</div>
<div class="main">
<#nested>
</div>
</div>
</div>
<div class="footerWrapper">
<div class="footer">
Powered by <a href="https://b3log.org" target="_blank">B3log 开源</a><a href="https://solo.b3log.org" target="_blank">Solo</a> ${version}
</div>
</div>
</div>
</body>
</html>
</#macro>
{
"name": "Solo - 博客",
"short_name": "Solo",
"start_url": ".",
"display": "standalone",
"background_color": "#f1f2f7",
"orientation": "portrait",
"theme_color": "#1fb5ad",
"description": "一个用 Java 实现的博客系统,为你或你的团队创建个博客吧!",
"icons": [
{
"src": "images/logo/logo@48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "images/logo/logo@72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "images/logo/logo@96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "images/logo/logo@144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "images/logo/logo@192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "images/logo/logo@512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
\ No newline at end of file
This diff is collapsed.
/**
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*! 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
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: Language configurations(en_US) of plugin fancybox.
# Version: 1.0.0.0, Apr 21, 2012
# Author: Liang Ding
#
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: Language configurations(zh_CN) of plugin fancybox.
# Version: 1.0.0.0, Apr 21, 2012
# Author: Liang Ding
#
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<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>
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: 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
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: 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
/**
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* 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
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: 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
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: 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>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<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: 'https://hacpai.com/apis/articles?',
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>
#
# Solo - A small and beautiful blogging system written in Java.
# Copyright (c) 2010-2019, b3log.org & hacpai.com
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
#
# Description: 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
/**
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
* 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
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width">
<meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1" media="(device-height: 568px)">
<title>${searchLabel} - ${blogTitle}${searchLabel}</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"/>
<link rel="apple-touch-icon" href="${staticServePath}/favicon.png">
</head>
<body class="search__body">
<div class="search__header fn-clear">
<a href="${servePath}"><img width="44" border="0" alt="Solo" title="Solo" src="${staticServePath}/images/logo.png"/></a>
<div class="search__input">
<input value="${keyword}" id="keyword" type="text" onkeypress="if(event.keyCode===13){document.getElementById('searchBtn').click()}">
<button id="searchBtn" onclick="window.location.href='${servePath}/search?keyword=' + document.getElementById('keyword').value">搜索</button>
</div>
<span class="fn-right">
<#if isLoggedIn>
<a href="${servePath}/admin-index.do#main">${adminLabel}</a> &nbsp;
<a href="${logoutURL}">${logoutLabel}</a>
<#else>
<a href="${servePath}/start">${startToUseLabel}</a>
</#if>
</span>
</div>
<div class="search">
<div class="search__articles">
<#list articles as article>
<article>
<header>
<h1>
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
</h1>
<div class="meta">
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
&nbsp;
${article.articleCommentCount} ${commentLabel}
&nbsp;
${article.articleViewCount} ${viewLabel}
</div>
</header>
<div class="content-reset">
${article.articleAbstract}
</div>
<footer>
<#list article.articleTags?split(",") as articleTag>
<a class="tag" rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}">${articleTag}</a>
<#if articleTag_has_next> · ‎</#if>
</#list>
</footer>
</article>
</#list>
</div>
<#if 0 != articles?size>
<nav class="search__pagination">
<#if 1 != pagination.paginationPageNums?first>
<a href="${servePath}/search?keyword=${keyword}&p=${pagination.paginationCurrentPageNum - 1}">&laquo;</a>
<a href="${servePath}/search?keyword=${keyword}&p=1">1</a> <span class="page-number">...</span>
</#if>
<#list pagination.paginationPageNums as paginationPageNum>
<#if paginationPageNum == pagination.paginationCurrentPageNum>
<span>${paginationPageNum}</span>
<#else>
<a href="${servePath}/search?keyword=${keyword}&p=${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if pagination.paginationPageNums?last != pagination.paginationPageCount>
<span>...</span>
<a href="${servePath}/search?keyword=${keyword}&p=${pagination.paginationPageCount}">${pagination.paginationPageCount}</a>
<a href="${servePath}/search?keyword=${keyword}&p=${pagination.paginationCurrentPageNum + 1}">&raquo;</a>
</#if>
</nav>
<#else>
No Result, Return to <a href="${servePath}">Index</a> or <a href="https://hacpai.com">HacPai</a>.
</#if>
</div>
<div class="footerWrapper">
<div class="footer">
Powered by <a href="https://b3log.org" target="_blank">B3log 开源</a> • Solo ${version}
</div>
</div>
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "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">
<div id="pjax" class="wrapper">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<div class="article__item">
<h2 class="article__title">
<a href="${servePath}/archives.html">
<i class="icon__inbox"></i>
${archiveLabel}
</a>
</h2>
<div class="article__more">
<#if "en" == localeString?substring(0, 2)>
${archiveDate.archiveDateMonth} ${archiveDate.archiveDateYear}
<#else>
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
</#if>
- ${archiveDate.archiveDatePublishedArticleCount} ${articleLabel}
</div>
</div>
<#include "article-list.ftl">
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${archiveLabel} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${archiveLabel}"/>
<meta name="description" content="${metaDescription},${archiveLabel}"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax" class="wrapper">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<div class="article__item">
<h2 class="article__title">
<i class="icon__inbox"></i> ${archiveLabel}${articleLabel}
</h2>
<div class="ft__gray">
${statistic.statisticPublishedBlogArticleCount} ${countLabel}
</div>
<div class="tags tags--align fn__clear">
<#list archiveDates as archiveDate>
<#if "en" == localeString?substring(0, 2)>
<a class="ft__red" href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.monthName} ${archiveDate.archiveDateYear}
<span class="ft__gray">(${archiveDate.archiveDatePublishedArticleCount})</span>
</a>
<#else>
<a class="ft__red"
href="${servePath}/archives/${archiveDate.archiveDateYear}/${archiveDate.archiveDateMonth}">
${archiveDate.archiveDateYear} ${yearLabel} ${archiveDate.archiveDateMonth} ${monthLabel}
<span class="ft__gray">(${archiveDate.archiveDatePublishedArticleCount})</span>
</a>
</#if>
</#list>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#list articles as article>
<article class="article__item">
<h2 class="article__title">
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h2>
<div class="ft__gray fn__clear">
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
&nbsp;
<span class="mobile__none">
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" class="ft__red" href="${servePath}/tags/${articleTag?url('UTF-8')}">
${articleTag}</a><#if articleTag_has_next>, </#if>
</#list>
</span>
<div class="fn__right">
<a class="ft__red" href="${servePath}${article.articlePermalink}#comments"><#if article.articleCommentCount gt 0>${article.articleCommentCount} </#if>${commentLabel}</a>
<a class="ft__red" href="${servePath}${article.articlePermalink}">${article.articleViewCount} ${viewLabel}</a>
</div>
</div>
<div class="content-reset article__content">
${article.articleAbstract}
</div>
<a class="article__more" href="${servePath}${article.articlePermalink}">More...</a>
</article>
</#list>
<#if 0 != paginationPageCount>
<nav class="fn__flex pagination">
<#if 1 != paginationPageNums?first>
<a href="${servePath}${path}?p=${paginationPreviousPageNum}" class="pagination__item fn__flex-center">&laquo; Prev</a>
</#if>
<div class="fn__flex-1 ft__center">
<#if 1 != paginationPageNums?first>
<a class="pagination__item" href="${servePath}${path}">1</a>
<span class="pagination__item">...</span>
</#if>
<#list paginationPageNums as paginationPageNum>
<#if paginationPageNum == paginationCurrentPageNum>
<span class="pagination__item pagination__item--current">${paginationPageNum}</span>
<#else>
<a class="pagination__item"
href="${servePath}${path}?p=${paginationPageNum}">${paginationPageNum}</a>
</#if>
</#list>
<#if paginationPageNums?last != paginationPageCount>
<span class="pagination__item">...</span>
<a href="${servePath}${path}?p=${paginationPageCount}"
class="pagination__item">${paginationPageCount}</a>
</#if>
</div>
<#if paginationPageNums?last != paginationPageCount>
<a href="${servePath}${path}?p=${paginationNextPageNum}" class="pagination__item fn__flex-center">Next &raquo;</a>
</#if>
</nav>
</#if>
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "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>
<#if previousArticlePermalink??>
<link rel="prev" title="${previousArticleTitle}" href="${servePath}${previousArticlePermalink}">
</#if>
<#if nextArticlePermalink??>
<link rel="next" title="${nextArticleTitle}" href="${servePath}${nextArticlePermalink}">
</#if>
<!-- Open Graph -->
<meta property="og:locale" content="zh_CN"/>
<meta property="og:type" content="article"/>
<meta property="og:title" content="${article.articleTitle}"/>
<meta property="og:description" content="${article.articleAbstract?html}"/>
<meta property="og:image" content="${article.authorThumbnailURL}"/>
<meta property="og:url" content="${servePath}${article.articlePermalink}"/>
<meta property="og:site_name" content="Solo"/>
<!-- Twitter Card -->
<meta name="twitter:card" content="summary"/>
<meta name="twitter:description" content="${article.articleAbstract?html}"/>
<meta name="twitter:title" content="${article.articleTitle}"/>
<meta name="twitter:image" content="${article.authorThumbnailURL}"/>
<meta name="twitter:url" content="${servePath}${article.articlePermalink}"/>
<meta name="twitter:site" content="@DL88250"/>
<meta name="twitter:creator" content="@DL88250"/>
</head>
<body>
<#include "header.ftl">
<div id="pjax" class="wrapper">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<div class="article__item">
<h2 class="article__title">
<a rel="bookmark" href="${servePath}${article.articlePermalink}">
${article.articleTitle}
</a>
<#if article.articlePutTop>
<sup>
${topArticleLabel}
</sup>
</#if>
<#if article.hasUpdated>
<sup>
${updatedLabel}
</sup>
</#if>
</h2>
<div class="ft__gray fn__clear">
<time>
${article.articleCreateDate?string("yyyy-MM-dd")}
</time>
&nbsp;
<span class="mobile__none">
<#list article.articleTags?split(",") as articleTag>
<a rel="tag" href="${servePath}/tags/${articleTag?url('UTF-8')}" class="ft__red">
${articleTag}</a><#if articleTag_has_next>, </#if>
</#list>
</span>
<div class="fn__right">
<a class="ft__red" href="${servePath}${article.articlePermalink}#comments"><#if article.articleCommentCount gt 0>${article.articleCommentCount} </#if>${commentLabel}</a>
${article.articleViewCount} ${viewLabel}
</div>
</div>
<div class="content-reset article__content">
${article.articleContent}
<#if "" != article.articleSign.signHTML?trim>
<div>
${article.articleSign.signHTML}
</div>
</#if>
</div>
<#if previousArticlePermalink?? || nextArticlePermalink??>
<div class="article__near fn__flex">
<#if nextArticlePermalink??>
<a href="${servePath}${nextArticlePermalink}" rel="next"
class="fn__flex-1 first">
<strong>NEWER</strong>
${nextArticleLabel}
</a>
<#else>
<a class="fn__flex-1 first">&nbsp;</a>
</#if>
<#if previousArticlePermalink??>
<a href="${servePath}${previousArticlePermalink}" rel="prev" class="fn__flex-1">
<strong>OLDER</strong>
${previousArticleTitle}
</a>
<#else>
<a class="fn__flex-1">&nbsp;</a>
</#if>
</div>
</#if>
</div>
<@comments commentList=articleComments article=article></@comments>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<@comment_script oId=article.oId>
page.tips.externalRelevantArticlesDisplayCount = "${externalRelevantArticlesDisplayCount}";
</@comment_script>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${categoryLabel} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${categoryLabel}"/>
<meta name="description"
content="<#list categories as category>${category.categoryTitle}<#if category_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax" class="wrapper">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<div class="article__item">
<h2 class="article__title">
<i class="icon__category"></i> ${categoryLabel}${articleLabel}
</h2>
<div class="ft__gray">
${categories?size} ${cntLabel}${categoryLabel}
</div>
<div class="tags fn__clear">
<#list categories as category>
<a href="${servePath}/category/${category.categoryURI}"
class="ft__red">
${category.categoryTitle}
<span class="ft__gray">(${category.categoryTagCnt} ${tagsLabel})</span>
</a>
</#list>
</div>
</div>
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "macro-head.ftl">
<!DOCTYPE html>
<html>
<head>
<@head title="${category.categoryTitle} - ${blogTitle}">
<meta name="keywords" content="${metaKeywords},${category.categoryTitle}"/>
<meta name="description"
content="<#list articles as article>${article.articleTitle}<#if article_has_next>,</#if></#list>"/>
</@head>
</head>
<body>
<#include "header.ftl">
<div id="pjax" class="wrapper">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<div class="article__item">
<h2 class="article__title">
<a href="${servePath}/categories.html">
<i class="icon__category"></i>
${categoryLabel}
</a>
</h2>
<div class="article__more">
${category.categoryTitle}
</div>
</div>
<#include "article-list.ftl">
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<li id="${comment.oId}" class="comment__item">
<div class="fn__flex">
<div class="comment__avatar" style="background-image: url(${comment.commentThumbnailURL})"></div>
<main class="comment__main fn__flex-1">
<div class="fn__clear ft__gray">
<#if "http://" == comment.commentURL>
${comment.commentName}
<#else>
<a href="${comment.commentURL}" target="_blank" class="ft__red">${comment.commentName}</a>
</#if>
<#if comment.isReply>
@<a href="${servePath}${article.permalink}#${comment.commentOriginalCommentId}"
onmouseover="page.showComment(this, '${comment.commentOriginalCommentId}', 2);"
onmouseout="page.hideComment('${comment.commentOriginalCommentId}')"
class="ft__red"
>${comment.commentOriginalCommentName}</a>
</#if>
<time>${comment.commentDate2?string("yyyy-MM-dd HH:mm")}</time>
<#if article.commentable>
<span class="fn__right comment__btn" onclick="replyTo('${comment.oId}')">
<i class="icon__comments"></i>
</span>
</#if>
</div>
<div class="content-reset comment__content">
${comment.commentContent}
</div>
</main>
</div>
</li>
\ No newline at end of file
/**
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2018, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?oyqnlj');
src: url('fonts/icomoon.eot?oyqnlj#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?oyqnlj') format('truetype'),
url('fonts/icomoon.woff?oyqnlj') format('woff'),
url('fonts/icomoon.svg?oyqnlj#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__page:before {
content: "\e902";
}
.icon__list:before {
content: "\f0ca";
}
.icon__home:before {
content: "\f015";
}
.icon__comments:before {
content: "\f0e6";
}
.icon__date:before {
content: "\f073";
}
.icon__search:before {
content: "\f002";
}
.icon__up:before {
content: "\f077";
}
.icon__inbox:before {
content: "\f01c";
}
.icon__tags:before {
content: "\f02c";
}
.icon__link:before {
content: "\f0c1";
}
.icon__refresh:before {
content: "\f021";
}
.icon__category:before {
content: "\e9bc";
}
.icon__logout:before {
content: "\ea14";
}
.icon__views:before {
content: "\e900";
}
.icon__register:before {
content: "\e973";
}
.icon__setting:before {
content: "\e994";
}
.icon__login:before {
content: "\ea13";
}
.icon__rss:before {
content: "\e901";
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/**
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2018, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
* skin style
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.1.0.0, Dec 7, 2018
*/
@import "../../../scss/reset";
@import "../../../scss/reset-content";
@import "../../../scss/function";
@import "../../../scss/tooltipped";
@import "../../../scss/comment";
@import "../../../scss/nprogress";
@import "icon";
$red: #991a1a !default;
$gray: #999 !default;
// reset
body {
&::-webkit-scrollbar {
display: none;
}
}
a {
transition: all .3s;
}
.ft__red {
color: $red;
}
.ft__gray {
color: $gray;
}
.content-reset {
overflow: hidden;
color: #555;
font-size: 14px;
a {
color: $red;
}
blockquote {
font-family: Georgia, "Times New Roman", serif;
background: #f7f7f7;
margin: 20px 0;
padding: 10px 20px;
border-left: 4px solid $red;
}
pre > code {
color: #555;
background-color: #f7f7f7;
padding: 10px;
}
}
.b3-solo-list {
display: none;
}
// header
.header {
padding: 10px 0;
box-sizing: border-box;
top: 0;
background-color: #2a2a2a;
color: #fff;
position: fixed;
right: 0;
height: 100%;
width: 50px;
display: flex;
flex-direction: column;
a, span {
color: #fff;
padding: 10px 0;
display: block;
text-align: center;
font-size: 16px;
width: 100%;
img {
height: 17px;
width: 17px;
}
&.current,
&:hover {
text-decoration: none;
color: $gray;
}
}
}
// framework
.wrapper {
max-width: 768px;
margin: 0 auto;
padding: 0 70px 0 20px;
box-sizing: border-box;
}
// footer
.footer {
color: $gray;
margin: 30px auto;
line-height: 1.6em;
font-size: 0.85em;
a {
color: $red;
}
}
// article
.article {
&__item {
margin: 50px 0;
border-bottom: 1px dashed #d9d9d9;
text-align: justify;
}
&__title {
padding: 20px 0;
a {
text-decoration: none;
font-size: 25px;
font-weight: bold;
color: #555;
transition: color 0.2s;
&:hover {
color: $red;
}
}
sup {
font-weight: normal;
color: $gray;
font-size: 12px;
top: -10px;
}
}
&__content {
margin: 20px 0;
& > p:last-child {
margin-bottom: 0
}
}
&__more {
margin-bottom: 70px;
text-decoration: none;
color: $red;
display: block;
}
&__near {
margin: 50px 0 70px;
position: relative;
&:before {
width: 8px;
height: 8px;
position: absolute;
top: 50%;
left: 50%;
margin-top: -4px;
margin-left: -4px;
content: "";
border-radius: 50%;
background: #ddd;
box-shadow: 0 1px 2px #fff;
}
a {
font-size: 12px;
line-height: 1.6em;
color: $gray;
padding: 0 20px;
&:hover {
text-decoration: none;
color: #555;
}
&.first {
text-align: right;
}
}
strong {
margin-bottom: 6px;
font-size: 14px;
letter-spacing: 2px;
color: #ddd;
font-weight: bold;
display: block;
}
}
}
.pagination {
margin: 20px 0 40px;
&__item {
padding: 10px 10px;
color: $gray;
display: inline-block;
&--current {
color: #991a1a;
font-weight: bold;
}
}
a.pagination__item:hover {
text-decoration: none;
background: $red;
color: #fff;
}
}
// other page
.tags {
line-height: 32px;
margin: 20px 0 70px;
&--align a {
width: 180px;
margin-right: 0 !important;
}
a {
margin-right: 20px;
float: left;
}
}
// comments
#comments {
position: relative;
}
.comment-body-ref {
position: absolute;
width: 80%;
left: 84px;
}
.comments {
&__title {
padding-top: 20px;
}
}
.comment {
&__item {
list-style: none;
margin: 20px 0;
}
&__avatar {
position: relative;
width: 44px;
height: 44px;
border-radius: 3px;
background-size: cover;
background-repeat: no-repeat;
background-position: 50%;
margin-right: 20px;
&:before,
&:after {
position: absolute;
top: 11px;
left: 49px;
display: block;
width: 0;
height: 0;
pointer-events: none;
content: "";
border-color: transparent;
border-style: solid solid outset;
border-width: 8px;
border-right-color: #CFD8DC;
}
&:after {
margin-top: 1px;
margin-left: 2px;
border-width: 7px;
border-right-color: #fff;
}
}
&__main {
border: 1px solid #CFD8DC;
border-radius: 0;
padding: 20px;
background-color: #fff;
}
&__btn {
cursor: pointer;
color: #666;
&:hover {
color: #333;
}
}
&__content {
margin-top: 20px;
& > p:last-child {
margin-bottom: 0;
}
}
}
.form {
width: 100%;
padding: 0 0 0 64px;
#commentErrorTip,
#commentErrorTipReply {
line-height: 37px;
}
#captcha,
#captchaReply {
height: 32px;
display: inline-block;
vertical-align: inherit;
}
input,
textarea,
button {
background-color: #fff;
padding: 7px 8px;
border: 1px solid #CFD8DC;
width: 100%;
box-sizing: border-box;
font-size: 14px;
outline: none;
font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif;
}
button {
width: auto;
vertical-align: bottom;
transition: all 0.3s ease;
cursor: pointer;
margin-top: 20px;
}
button:hover {
background-color: #2a2a2a;
color: #FFF;
border-color: #2a2a2a;
}
input:focus,
textarea:focus {
border-color: #2a2a2a;
}
}
@media (max-width: 768px) {
.header {
position: inherit;
width: 100%;
height: 45px;
flex-direction: row;
padding-right: 10px;
a, span {
float: left;
width: auto;
padding: 0;
line-height: 25px;
margin-left: 10px;
}
}
.wrapper {
padding-right: 20px;
}
.article {
&__item {
margin: 20px 0;
.tag {
display: none;
}
}
&__more {
margin-bottom: 40px;
}
}
.footer {
text-align: right;
}
.icon__up {
display: none;
}
.pagination > .ft__center {
visibility: hidden;
height: 36px;
}
.mobile__none {
display: none;
}
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<footer class="footer wrapper fn__clear">
&copy; ${year}
${footerContent}
<a href="${servePath}">${blogTitle}</a> <span class="fn__none--m">&nbsp; • &nbsp;</span>
<div class="fn__none"></div>
<a href="https://solo.b3log.org" target="_blank">Solo</a> ${version}
<div class="fn__right">
Powered by <a href="https://b3log.org" target="_blank">B3log</a> 开源
<div class="fn__none"></div>
&nbsp; &heartsuit; &nbsp;
Theme <a rel="friend" href="https://github.com/b3log/solo-skins" target="_blank">Jane</a> by <a href="http://vanessa.b3log.org" target="_blank">Vanessa</a>
</div>
</footer>
<div class="icon-up" onclick="Util.goTop()"></div>
<script type="text/javascript" src="${staticServePath}/js/lib/compress/pjax.min.js" charset="utf-8"></script>
<script type="text/javascript" src="${staticServePath}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<script type="text/javascript" src="${staticServePath}/skins/${skinDirName}/js/common${miniPostfix}.js?${staticResourceVersion}" charset="utf-8"></script>
<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}"
};
Util.parseMarkdown('content-reset');
Util.killIE(8)
</script>
${plugins}
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<header class="header">
<div class="fn__flex-1">
<a href="${servePath}" rel="start" class="tooltipped__w tooltipped" aria-label="${blogTitle}">
<i class="icon__home"></i>
</a>
<#list pageNavigations as page>
<a href="${page.pagePermalink}" target="${page.pageOpenTarget}"
class="tooltipped__w tooltipped" rel="section" aria-label="${page.pageTitle}">
<#if page.pageIcon != ''><img src="${page.pageIcon}"><#else>
<i class="icon__page"></i>
</#if>
</a>
</#list>
<a href="${servePath}/categories.html" rel="section" aria-label="${categoryLabel}" class="tooltipped tooltipped__w">
<i class="icon__category"></i>
</a>
<a href="${servePath}/tags.html" rel="section" aria-label="${allTagsLabel}" class="tooltipped tooltipped__w">
<i class="icon__tags"></i>
</a>
<a href="${servePath}/archives.html" aria-label="${archiveLabel}" class="tooltipped tooltipped__w">
<i class="icon__inbox"></i>
</a>
<a rel="archive" href="${servePath}/links.html" aria-label="${linkLabel}" class="tooltipped tooltipped__w">
<i class="icon__link"></i>
</a>
<a href="${servePath}/search" class="tooltipped__w tooltipped" aria-label="${searchLabel}">
<i class="icon__search"></i>
</a>
<a rel="alternate" href="${servePath}/rss.xml" rel="section" aria-label="RSS" class="tooltipped tooltipped__w">
<i class="icon__rss"></i>
</a>
</div>
<div>
<#if isLoggedIn>
<a href="${servePath}/admin-index.do#main"
aria-label="${adminLabel}" class="tooltipped tooltipped__w">
<i class="icon__setting"></i>
</a>
<a href="${logoutURL}"
aria-label="${logoutLabel}" class="tooltipped tooltipped__w">
<i class="icon__logout"></i>
</a>
<#else>
<a href="${loginURL}"
aria-label="${loginLabel}" class="tooltipped tooltipped__w">
<i class="icon__login"></i>
</a>
<a href="${servePath}/register"
aria-label="${registerLabel}" class="tooltipped tooltipped__w">
<i class="icon__register"></i>
</a>
</#if>
<span onclick="Util.goTop()"
aria-label="${putTopLabel}" class="tooltipped tooltipped__w">
<i class="icon__up"></i>
</span>
</div>
</header>
\ No newline at end of file
<#--
Solo - A small and beautiful blogging system written in Java.
Copyright (c) 2010-2019, b3log.org & hacpai.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<#include "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">
<div id="pjax" class="wrapper">
<#if pjax><!---- pjax {#pjax} start ----></#if>
<#include "article-list.ftl">
<#if pjax><!---- pjax {#pjax} end ----></#if>
</div>
<#include "footer.ftl">
</body>
</html>
\ No newline at end of file
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/**
* @fileoverview util and every page should be used.
*
* @author <a href="http://vanessa.b3log.org">Liyuan Li</a>
* @version 0.1.0.0, Dec 7, 2018
*/
/**
* @description 皮肤脚本
* @static
*/
var Skin = {
init: function () {
Util.initPjax(function () {
$('.header a').each(function () {
if (this.href === location.href) {
this.className = 'current tooltipped tooltipped__w'
} else {
this.className = 'tooltipped tooltipped__w'
}
})
})
$('.header a').each(function () {
if (this.href === location.href) {
this.className = 'current tooltipped tooltipped__w'
}
}).click(function () {
$('.header a').removeClass('current')
this.className = 'current tooltipped tooltipped__w'
})
$('body').on('click', '.content-reset img', function () {
window.open(this.src)
})
},
}
Skin.init()
\ No newline at end of file
/*
* Solo - A small and beautiful blogging system written in Java.
* Copyright (c) 2010-2019, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
var Skin={init:function(){Util.initPjax(function(){$(".header a").each(function(){this.href===location.href?this.className="current tooltipped tooltipped__w":this.className="tooltipped tooltipped__w"})}),$(".header a").each(function(){this.href===location.href&&(this.className="current tooltipped tooltipped__w")}).click(function(){$(".header a").removeClass("current"),this.className="current tooltipped tooltipped__w"}),$("body").on("click",".content-reset img",function(){window.open(this.src)})}};Skin.init();
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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