Commit f0f34f5d authored by Liang Ding's avatar Liang Ding

#12459

parent 29e4779b
...@@ -39,12 +39,12 @@ import org.b3log.latke.servlet.annotation.RequestProcessor; ...@@ -39,12 +39,12 @@ import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.JSONRenderer; import org.b3log.latke.servlet.renderer.JSONRenderer;
import org.b3log.latke.servlet.renderer.TextHTMLRenderer; import org.b3log.latke.servlet.renderer.TextHTMLRenderer;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.*; import org.b3log.latke.util.*;
import org.b3log.solo.SoloServletListener; import org.b3log.solo.SoloServletListener;
import org.b3log.solo.event.EventTypes; import org.b3log.solo.event.EventTypes;
import org.b3log.solo.model.*; import org.b3log.solo.model.*;
import org.b3log.solo.processor.renderer.ConsoleRenderer; import org.b3log.solo.processor.renderer.ConsoleRenderer;
import org.b3log.solo.processor.renderer.SkinRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.*; import org.b3log.solo.service.*;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
...@@ -67,7 +67,7 @@ import java.util.*; ...@@ -67,7 +67,7 @@ import java.util.*;
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="http://zephyr.b3log.org">Zephyr</a> * @author <a href="http://zephyr.b3log.org">Zephyr</a>
* @version 1.4.4.1, Apr 13, 2018 * @version 1.4.4.2, Jun 22, 2018
* @since 0.3.1 * @since 0.3.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -745,7 +745,7 @@ public class ArticleProcessor { ...@@ -745,7 +745,7 @@ public class ArticleProcessor {
@RequestProcessing(value = "/authors/**", method = HTTPRequestMethod.GET) @RequestProcessing(value = "/authors/**", method = HTTPRequestMethod.GET)
public void showAuthorArticles(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) public void showAuthorArticles(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response)
throws IOException, JSONException { throws IOException, JSONException {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(request);
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName("author-articles.ftl"); renderer.setTemplateName("author-articles.ftl");
...@@ -838,7 +838,7 @@ public class ArticleProcessor { ...@@ -838,7 +838,7 @@ public class ArticleProcessor {
@RequestProcessing(value = "/archives/**", method = HTTPRequestMethod.GET) @RequestProcessing(value = "/archives/**", method = HTTPRequestMethod.GET)
public void showArchiveArticles(final HTTPRequestContext context, public void showArchiveArticles(final HTTPRequestContext context,
final HttpServletRequest request, final HttpServletResponse response) { final HttpServletRequest request, final HttpServletResponse response) {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(request);
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName("archive-articles.ftl"); renderer.setTemplateName("archive-articles.ftl");
...@@ -961,7 +961,7 @@ public class ArticleProcessor { ...@@ -961,7 +961,7 @@ public class ArticleProcessor {
LOGGER.log(Level.DEBUG, "Article[id={0}]", articleId); LOGGER.log(Level.DEBUG, "Article[id={0}]", articleId);
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(request);
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName("article.ftl"); renderer.setTemplateName("article.ftl");
......
...@@ -30,13 +30,13 @@ import org.b3log.latke.servlet.HTTPRequestMethod; ...@@ -30,13 +30,13 @@ import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Requests; import org.b3log.latke.util.Requests;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
import org.b3log.solo.model.Article; import org.b3log.solo.model.Article;
import org.b3log.solo.model.Category; import org.b3log.solo.model.Category;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.processor.renderer.SkinRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.*; import org.b3log.solo.service.*;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
...@@ -55,7 +55,7 @@ import java.util.Map; ...@@ -55,7 +55,7 @@ import java.util.Map;
* Category processor. * Category processor.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.1.2, Apr 21, 2017 * @version 1.0.1.3, Jun 22, 2018
* @since 2.0.0 * @since 2.0.0
*/ */
@RequestProcessor @RequestProcessor
...@@ -149,10 +149,8 @@ public class CategoryProcessor { ...@@ -149,10 +149,8 @@ public class CategoryProcessor {
*/ */
@RequestProcessing(value = "/category/**", method = HTTPRequestMethod.GET) @RequestProcessing(value = "/category/**", method = HTTPRequestMethod.GET)
public void showCategoryArticles(final HTTPRequestContext context) throws IOException { public void showCategoryArticles(final HTTPRequestContext context) throws IOException {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context.getRequest());
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName("category-articles.ftl"); renderer.setTemplateName("category-articles.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
...@@ -161,7 +159,6 @@ public class CategoryProcessor { ...@@ -161,7 +159,6 @@ public class CategoryProcessor {
try { try {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
if (!requestURI.endsWith("/")) { if (!requestURI.endsWith("/")) {
requestURI += "/"; requestURI += "/";
} }
......
...@@ -32,7 +32,6 @@ import org.b3log.latke.servlet.URIPatternMode; ...@@ -32,7 +32,6 @@ import org.b3log.latke.servlet.URIPatternMode;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.latke.util.Requests; import org.b3log.latke.util.Requests;
import org.b3log.latke.util.freemarker.Templates; import org.b3log.latke.util.freemarker.Templates;
...@@ -41,6 +40,7 @@ import org.b3log.solo.model.Common; ...@@ -41,6 +40,7 @@ import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Skin; import org.b3log.solo.model.Skin;
import org.b3log.solo.processor.renderer.ConsoleRenderer; import org.b3log.solo.processor.renderer.ConsoleRenderer;
import org.b3log.solo.processor.renderer.SkinRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.StatisticMgmtService; import org.b3log.solo.service.StatisticMgmtService;
...@@ -61,7 +61,7 @@ import java.util.Set; ...@@ -61,7 +61,7 @@ import java.util.Set;
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author <a href="mailto:385321165@qq.com">DASHU</a> * @author <a href="mailto:385321165@qq.com">DASHU</a>
* @version 1.2.4.6, Jun 28, 2017 * @version 1.2.4.7, Jun 22, 2018
* @since 0.3.1 * @since 0.3.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -117,7 +117,7 @@ public class IndexProcessor { ...@@ -117,7 +117,7 @@ public class IndexProcessor {
*/ */
@RequestProcessing(value = {"/\\d*", ""}, uriPatternsMode = URIPatternMode.REGEX, method = HTTPRequestMethod.GET) @RequestProcessing(value = {"/\\d*", ""}, uriPatternsMode = URIPatternMode.REGEX, method = HTTPRequestMethod.GET)
public void showIndex(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) { public void showIndex(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(request);
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName("index.ftl"); renderer.setTemplateName("index.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
......
...@@ -27,11 +27,11 @@ import org.b3log.latke.servlet.HTTPRequestMethod; ...@@ -27,11 +27,11 @@ import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Stopwatchs; import org.b3log.latke.util.Stopwatchs;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Page; import org.b3log.solo.model.Page;
import org.b3log.solo.processor.renderer.SkinRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.CommentQueryService; import org.b3log.solo.service.CommentQueryService;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
...@@ -51,7 +51,7 @@ import java.util.Map; ...@@ -51,7 +51,7 @@ import java.util.Map;
* Page processor. * Page processor.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.0.6, Nov 8, 2016 * @version 1.1.0.7, Jun 22, 2018
* @since 0.3.1 * @since 0.3.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -99,10 +99,8 @@ public class PageProcessor { ...@@ -99,10 +99,8 @@ public class PageProcessor {
*/ */
@RequestProcessing(value = "/page", method = HTTPRequestMethod.GET) @RequestProcessing(value = "/page", method = HTTPRequestMethod.GET)
public void showPage(final HTTPRequestContext context) { public void showPage(final HTTPRequestContext context) {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context.getRequest());
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName("page.ftl"); renderer.setTemplateName("page.ftl");
final Map<String, Object> dataModel = renderer.getDataModel(); final Map<String, Object> dataModel = renderer.getDataModel();
......
...@@ -30,7 +30,6 @@ import org.b3log.latke.servlet.HTTPRequestMethod; ...@@ -30,7 +30,6 @@ import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Paginator; import org.b3log.latke.util.Paginator;
import org.b3log.latke.util.Requests; import org.b3log.latke.util.Requests;
import org.b3log.latke.util.Strings; import org.b3log.latke.util.Strings;
...@@ -38,6 +37,7 @@ import org.b3log.solo.model.Article; ...@@ -38,6 +37,7 @@ import org.b3log.solo.model.Article;
import org.b3log.solo.model.Common; import org.b3log.solo.model.Common;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.model.Tag; import org.b3log.solo.model.Tag;
import org.b3log.solo.processor.renderer.SkinRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.*; import org.b3log.solo.service.*;
import org.b3log.solo.util.Skins; import org.b3log.solo.util.Skins;
...@@ -58,7 +58,7 @@ import java.util.Map; ...@@ -58,7 +58,7 @@ import java.util.Map;
* Tag processor. * Tag processor.
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.1.1.4, Nov 20, 2015 * @version 1.1.1.5, Jun 22, 2018
* @since 0.3.1 * @since 0.3.1
*/ */
@RequestProcessor @RequestProcessor
...@@ -119,7 +119,7 @@ public class TagProcessor { ...@@ -119,7 +119,7 @@ public class TagProcessor {
*/ */
@RequestProcessing(value = "/tags/**", method = HTTPRequestMethod.GET) @RequestProcessing(value = "/tags/**", method = HTTPRequestMethod.GET)
public void showTagArticles(final HTTPRequestContext context) throws IOException { public void showTagArticles(final HTTPRequestContext context) throws IOException {
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(context.getRequest());
context.setRenderer(renderer); context.setRenderer(renderer);
...@@ -229,16 +229,16 @@ public class TagProcessor { ...@@ -229,16 +229,16 @@ public class TagProcessor {
/** /**
* Fills pagination. * Fills pagination.
* *
* @param dataModel the specified data model * @param dataModel the specified data model
* @param pageCount the specified page count * @param pageCount the specified page count
* @param currentPageNum the specified current page number * @param currentPageNum the specified current page number
* @param articles the specified articles * @param articles the specified articles
* @param pageNums the specified page numbers * @param pageNums the specified page numbers
*/ */
private void fillPagination(final Map<String, Object> dataModel, private void fillPagination(final Map<String, Object> dataModel,
final int pageCount, final int currentPageNum, final int pageCount, final int currentPageNum,
final List<JSONObject> articles, final List<JSONObject> articles,
final List<Integer> pageNums) { final List<Integer> pageNums) {
final String previousPageNum = Integer.toString(currentPageNum > 1 ? currentPageNum - 1 : 0); final String previousPageNum = Integer.toString(currentPageNum > 1 ? currentPageNum - 1 : 0);
dataModel.put(Pagination.PAGINATION_PREVIOUS_PAGE_NUM, "0".equals(previousPageNum) ? "" : previousPageNum); dataModel.put(Pagination.PAGINATION_PREVIOUS_PAGE_NUM, "0".equals(previousPageNum) ? "" : previousPageNum);
...@@ -259,7 +259,7 @@ public class TagProcessor { ...@@ -259,7 +259,7 @@ public class TagProcessor {
* Gets the request page number from the specified request URI and tag title. * Gets the request page number from the specified request URI and tag title.
* *
* @param requestURI the specified request URI * @param requestURI the specified request URI
* @param tagTitle the specified tag title * @param tagTitle the specified tag title
* @return page number, returns {@code -1} if the specified request URI can not convert to an number * @return page number, returns {@code -1} if the specified request URI can not convert to an number
*/ */
private static int getCurrentPageNum(final String requestURI, final String tagTitle) { private static int getCurrentPageNum(final String requestURI, final String tagTitle) {
......
...@@ -30,10 +30,10 @@ import org.b3log.latke.servlet.HTTPRequestMethod; ...@@ -30,10 +30,10 @@ import org.b3log.latke.servlet.HTTPRequestMethod;
import org.b3log.latke.servlet.annotation.RequestProcessing; import org.b3log.latke.servlet.annotation.RequestProcessing;
import org.b3log.latke.servlet.annotation.RequestProcessor; import org.b3log.latke.servlet.annotation.RequestProcessor;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer; import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import org.b3log.latke.servlet.renderer.freemarker.FreeMarkerRenderer;
import org.b3log.latke.util.Locales; import org.b3log.latke.util.Locales;
import org.b3log.latke.util.freemarker.Templates; import org.b3log.latke.util.freemarker.Templates;
import org.b3log.solo.model.Option; import org.b3log.solo.model.Option;
import org.b3log.solo.processor.renderer.SkinRenderer;
import org.b3log.solo.processor.util.Filler; import org.b3log.solo.processor.util.Filler;
import org.b3log.solo.service.PreferenceQueryService; import org.b3log.solo.service.PreferenceQueryService;
import org.b3log.solo.service.StatisticMgmtService; import org.b3log.solo.service.StatisticMgmtService;
...@@ -58,7 +58,7 @@ import java.util.Map; ...@@ -58,7 +58,7 @@ import java.util.Map;
* </p> * </p>
* *
* @author <a href="http://88250.b3log.org">Liang Ding</a> * @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.5, Nov 20, 2015 * @version 1.0.0.6, Jun 22, 2018
* @since 0.4.5 * @since 0.4.5
*/ */
@RequestProcessor @RequestProcessor
...@@ -96,21 +96,21 @@ public class UserTemplateProcessor { ...@@ -96,21 +96,21 @@ public class UserTemplateProcessor {
/** /**
* Shows the user template page. * Shows the user template page.
* *
* @param context the specified context * @param context the specified context
* @param request the specified HTTP servlet request * @param request the specified HTTP servlet request
* @param response the specified HTTP servlet response * @param response the specified HTTP servlet response
* @throws IOException io exception * @throws IOException io exception
*/ */
@RequestProcessing(value = "/*.html", method = HTTPRequestMethod.GET) @RequestProcessing(value = "/*.html", method = HTTPRequestMethod.GET)
public void showPage(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response) public void showPage(final HTTPRequestContext context, final HttpServletRequest request, final HttpServletResponse response)
throws IOException { throws IOException {
final String requestURI = request.getRequestURI(); final String requestURI = request.getRequestURI();
String templateName = StringUtils.substringAfterLast(requestURI, "/"); String templateName = StringUtils.substringAfterLast(requestURI, "/");
templateName = StringUtils.substringBefore(templateName, ".") + ".ftl"; templateName = StringUtils.substringBefore(templateName, ".") + ".ftl";
LOGGER.log(Level.DEBUG, "Shows page[requestURI={0}, templateName={1}]", requestURI, templateName); LOGGER.log(Level.DEBUG, "Shows page[requestURI={0}, templateName={1}]", requestURI, templateName);
final AbstractFreeMarkerRenderer renderer = new FreeMarkerRenderer(); final AbstractFreeMarkerRenderer renderer = new SkinRenderer(request);
context.setRenderer(renderer); context.setRenderer(renderer);
renderer.setTemplateName(templateName); renderer.setTemplateName(templateName);
......
/*
* Solo - A beautiful, simple, stable, fast Java blogging system.
* 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/>.
*/
package org.b3log.solo.processor.renderer;
import freemarker.template.Template;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.b3log.latke.Keys;
import org.b3log.latke.logging.Logger;
import org.b3log.latke.servlet.HTTPRequestContext;
import org.b3log.latke.servlet.renderer.freemarker.AbstractFreeMarkerRenderer;
import javax.servlet.http.HttpServletRequest;
import java.io.StringWriter;
import java.util.Map;
/**
* Skin renderer.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @version 1.0.0.0, Jun 22, 2018
* @since 2.9.1
*/
public final class SkinRenderer extends AbstractFreeMarkerRenderer {
/**
* Logger.
*/
private static final Logger LOGGER = Logger.getLogger(SkinRenderer.class);
/**
* HTTP servlet request.
*/
private final HttpServletRequest request;
/**
* Constructs a skin renderer with the specified HTTP servlet request.
*
* @param request the specified HTTP servlet request
*/
public SkinRenderer(final HttpServletRequest request) {
this.request = request;
}
/**
* Processes the specified FreeMarker template with the specified request, data model, pjax hacking.
*
* @param request the specified request
* @param dataModel the specified data model
* @param template the specified FreeMarker template
* @return generated HTML
* @throws Exception exception
*/
protected String genHTML(final HttpServletRequest request, final Map<String, Object> dataModel, final Template template)
throws Exception {
final boolean isPJAX = isPJAX(request);
dataModel.put("pjax", isPJAX);
if (!isPJAX) {
return super.genHTML(request, dataModel, template);
}
final StringWriter stringWriter = new StringWriter();
template.setOutputEncoding("UTF-8");
template.process(dataModel, stringWriter);
final long endTimeMillis = System.currentTimeMillis();
final String dateString = DateFormatUtils.format(endTimeMillis, "yyyy/MM/dd HH:mm:ss");
final long startTimeMillis = (Long) request.getAttribute(Keys.HttpRequest.START_TIME_MILLIS);
final String msg = String.format("\n<!-- Generated by Latke (https://github.com/b3log/latke) in %1$dms, %2$s -->", endTimeMillis - startTimeMillis, dateString);
final String pjaxContainer = request.getHeader("X-PJAX-Container");
return StringUtils.substringBetween(stringWriter.toString(),
"<!---- pjax {" + pjaxContainer + "} start ---->",
"<!---- pjax {" + pjaxContainer + "} end ---->") + msg;
}
@Override
protected void beforeRender(final HTTPRequestContext context) {
}
@Override
protected void afterRender(final HTTPRequestContext context) {
}
/**
* Determines whether the specified request is sending with pjax.
*
* @param request the specified request
* @return {@code true} if it is sending with pjax, otherwise returns {@code false}
*/
private static boolean isPJAX(final HttpServletRequest request) {
final boolean pjax = Boolean.valueOf(request.getHeader("X-PJAX"));
final String pjaxContainer = request.getHeader("X-PJAX-Container");
return pjax && StringUtils.isNotBlank(pjaxContainer);
}
}
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