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

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
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 out.print( "\r\n document.write(\"<div style='margin:.5em 0'>\");\r\n document.write(\"<span style='color:#000;background:#FFF;padding:.5em'>\");\r\n document.write(\"<b>This forum doesn't exist.</b><br>\");\r\n " );
71 if (Jtp.supportUrl() != null) {
72 out.print( "\r\n document.write(\"Please contact <a href='" );
73 out.print( (Jtp.supportUrl()) );
74 out.print( "'>Nabble Support</a> if you need help.\");\r\n " );
75 }
76 out.print( "\r\n document.write(\"</span>\");\r\n document.write(\"</div>\");\r\n" );
77
78 }
79
80 static void jsLoadNode(long siteId, long nodeId, HttpServletRequest request, PrintWriter out) {
81 String base = Jtp.getBaseUrl(request);
82
83 out.print( "\r\n var link=document.getElementById(\"nabblelink\");\r\nif (link != null) {\r\n link.style.display=\"none\";\r\n document.write(\"<div id='nabbleforum' style='width:100%'><div style='height:700px'><img src='" );
84 out.print( (base) );
85 out.print( "/images/loading.png' width='94' height='33' alt='Loading...'></div></div>\");\r\n var e = document.createElement(\"script\");\r\n e.src = '" );
86 out.print( (base) );
87 out.print( "/embed/JsEmbed.jtp?site=" );
88 out.print( (siteId) );
89 out.print( "&node=" );
90 out.print( (nodeId) );
91 out.print( "&url=' + encodeURIComponent(location.href);\r\n e.type=\"text/javascript\";\r\n document.getElementsByTagName(\"head\")[0].appendChild(e);\r\n}\r\n" );
92
93 }
94 }
95