0
|
1 <%
|
|
2 package nabble.view.web.embed;
|
|
3
|
|
4 import fschmidt.util.servlet.JtpContext;
|
|
5 import nabble.model.Node;
|
|
6 import nabble.model.Site;
|
|
7 import nabble.view.lib.Jtp;
|
|
8 import nabble.view.lib.UrlMappable;
|
|
9
|
|
10 import javax.servlet.ServletException;
|
|
11 import javax.servlet.http.HttpServlet;
|
|
12 import javax.servlet.http.HttpServletRequest;
|
|
13 import javax.servlet.http.HttpServletResponse;
|
|
14 import java.io.IOException;
|
|
15 import java.io.PrintWriter;
|
|
16 import java.util.HashMap;
|
|
17 import java.util.Map;
|
|
18 import java.util.regex.Matcher;
|
|
19 import java.util.regex.Pattern;
|
|
20
|
|
21
|
|
22 public final class NabbleEmbed extends HttpServlet implements UrlMappable {
|
|
23
|
|
24 private static final Pattern URL_PATTERN = Pattern.compile("/embed/(f|p)?(\\d+)?$");
|
|
25
|
|
26 public String path(String type, String nodeId) {
|
|
27 return "/embed/" + type + nodeId;
|
|
28 }
|
|
29
|
|
30 public Map<String, String[]> getParameterMapFromUrl(HttpServletRequest request,String mappedUrl) {
|
|
31 Matcher m = URL_PATTERN.matcher(mappedUrl);
|
|
32 if( !m.find() )
|
|
33 throw new RuntimeException();
|
|
34 Map<String,String[]> params = new HashMap<String,String[]>();
|
|
35 String type = m.group(1);
|
|
36 String nodeId = m.group(2);
|
|
37 params.put("type",new String[]{type});
|
|
38 params.put("node",new String[]{nodeId});
|
|
39 return params;
|
|
40 }
|
|
41
|
|
42 public Pattern getUrlPattern() {
|
|
43 return URL_PATTERN;
|
|
44 }
|
|
45
|
|
46 protected void service(HttpServletRequest request, HttpServletResponse response)
|
|
47 throws ServletException, IOException
|
|
48 {
|
|
49 JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName);
|
|
50 jtpContext.setEtag(request,response);
|
|
51 response.setHeader("Content-Type","application/x-javascript");
|
|
52 PrintWriter out = response.getWriter();
|
|
53
|
|
54 long nodeId = Long.valueOf(request.getParameter("node"));
|
|
55 Site site = Jtp.getSite(request);
|
|
56 if (site == null) {
|
|
57 response.sendError(HttpServletResponse.SC_NOT_FOUND, "Node not found");
|
|
58 return;
|
|
59 }
|
|
60 Node node = site.getNode(nodeId);
|
|
61 if (node == null) {
|
|
62 response.sendError(HttpServletResponse.SC_NOT_FOUND, "Node not found");
|
|
63 return;
|
|
64 }
|
|
65 jsLoadNode(site.getId(), nodeId, request, out);
|
|
66 }
|
|
67
|
|
68 static void invalidApp(PrintWriter out) {
|
|
69 %>
|
|
70 document.write("<div style='margin:.5em 0'>");
|
|
71 document.write("<span style='color:#000;background:#FFF;padding:.5em'>");
|
|
72 document.write("<b>This forum doesn't exist.</b><br>");
|
|
73 <% if (Jtp.supportUrl() != null) { %>
|
|
74 document.write("Please contact <a href='<%=Jtp.supportUrl()%>'>Nabble Support</a> if you need help.");
|
|
75 <% } %>
|
|
76 document.write("</span>");
|
|
77 document.write("</div>");
|
|
78 <%
|
|
79 }
|
|
80
|
|
81 static void jsLoadNode(long siteId, long nodeId, HttpServletRequest request, PrintWriter out) {
|
|
82 String base = Jtp.getBaseUrl(request);
|
|
83 %>
|
|
84 var link=document.getElementById("nabblelink");
|
|
85 if (link != null) {
|
|
86 link.style.display="none";
|
|
87 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>");
|
|
88 var e = document.createElement("script");
|
|
89 e.src = '<%=base%>/embed/JsEmbed.jtp?site=<%=siteId%>&node=<%=nodeId%>&url=' + encodeURIComponent(location.href);
|
|
90 e.type="text/javascript";
|
|
91 document.getElementsByTagName("head")[0].appendChild(e);
|
|
92 }
|
|
93 <%
|
|
94 }
|
|
95 }
|
|
96 %> |