Mercurial Hosting > nabble
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