diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/view/web/embed/NabbleEmbed.jtp	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,96 @@
+<%
+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);
+		}
+		<%
+	}
+}
+%>
\ No newline at end of file