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