view src/nabble/view/web/embed/NabbleEmbed.jtp @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line source

<%
package nabble.view.web.embed;

import fschmidt.util.servlet.JtpContext;
import nabble.model.Node;
import nabble.model.Site;
import nabble.view.lib.Jtp;
import nabble.view.lib.UrlMappable;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public final class NabbleEmbed extends HttpServlet implements UrlMappable {

	private static final Pattern URL_PATTERN = Pattern.compile("/embed/(f|p)?(\\d+)?$");

	public String path(String type, String nodeId) {
		return "/embed/" + type + nodeId;
	}

	public Map<String, String[]> getParameterMapFromUrl(HttpServletRequest request,String mappedUrl) {
		Matcher m = URL_PATTERN.matcher(mappedUrl);
		if( !m.find() )
			throw new RuntimeException();
		Map<String,String[]> params = new HashMap<String,String[]>();
		String type = m.group(1);
		String nodeId = m.group(2);
		params.put("type",new String[]{type});
		params.put("node",new String[]{nodeId});
		return params;
	}

	public Pattern getUrlPattern() {
		return URL_PATTERN;
	}

	protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName);
		jtpContext.setEtag(request,response);
		response.setHeader("Content-Type","application/x-javascript");
		PrintWriter out = response.getWriter();

		long nodeId = Long.valueOf(request.getParameter("node"));
		Site site = Jtp.getSite(request);
		if (site == null) {
			response.sendError(HttpServletResponse.SC_NOT_FOUND, "Node not found");
				return;
			}
		Node node = site.getNode(nodeId);
		if (node == null) {
			response.sendError(HttpServletResponse.SC_NOT_FOUND, "Node not found");
			return;
		}
		jsLoadNode(site.getId(), nodeId, request, out);
	}

	static void invalidApp(PrintWriter out) {
		%>
			document.write("<div style='margin:.5em 0'>");
			document.write("<span style='color:#000;background:#FFF;padding:.5em'>");
			document.write("<b>This forum doesn't exist.</b><br>");
			<% if (Jtp.supportUrl() != null) { %>
			document.write("Please contact <a href='<%=Jtp.supportUrl()%>'>Nabble Support</a> if you need help.");
			<% } %>
			document.write("</span>");
			document.write("</div>");
		<%
	}

	static void jsLoadNode(long siteId, long nodeId, HttpServletRequest request, PrintWriter out) {
		String base = Jtp.getBaseUrl(request);
		%>
        var link=document.getElementById("nabblelink");
		if (link != null) {
			link.style.display="none";
			document.write("<div id='nabbleforum' style='width:100%'><div style='height:700px'><img src='<%=base%>/images/loading.png' width='94' height='33' alt='Loading...'></div></div>");
			var e = document.createElement("script");
			e.src = '<%=base%>/embed/JsEmbed.jtp?site=<%=siteId%>&node=<%=nodeId%>&url=' + encodeURIComponent(location.href);
            e.type="text/javascript";
			document.getElementsByTagName("head")[0].appendChild(e);
		}
		<%
	}
}
%>