Commit | Line | Data |
---|---|---|
73785268 NR |
1 | package be.nikiroo.gofetch.output; |
2 | ||
73785268 NR |
3 | import be.nikiroo.gofetch.data.Comment; |
4 | import be.nikiroo.gofetch.data.Story; | |
5 | import be.nikiroo.gofetch.support.BasicSupport.Type; | |
6 | ||
7 | public class Html extends Output { | |
70b18499 NR |
8 | public Html(Type type, String hostname, String preselector, int port) { |
9 | super(type, hostname, preselector, port); | |
73785268 NR |
10 | } |
11 | ||
12 | @Override | |
13 | public String getIndexHeader() { | |
e236e220 NR |
14 | String sel = preselector; |
15 | if (!sel.isEmpty()) { | |
16 | sel = "/1" + sel; | |
17 | } | |
5c056aad | 18 | |
e236e220 | 19 | String gopherUrl = "gopher://" + hostname + sel + ":" + port; |
70b18499 NR |
20 | |
21 | return "<h1>News</h1>\n"// | |
22 | + "<p>You will find here a few pages full of news, mirroring <a href='" | |
23 | + gopherUrl + "'>" | |
24 | + gopherUrl | |
25 | + "</a>.</p>\n"// | |
70b18499 | 26 | + "<p>They are simply scrapped from their associated webpage and updated a few times a day.</p>\n"// |
70b18499 | 27 | ; |
73785268 NR |
28 | } |
29 | ||
30 | @Override | |
31 | public String getIndexFooter() { | |
32 | return ""; | |
33 | } | |
34 | ||
35 | @Override | |
5c056aad | 36 | public String exportHeader(Story story) { |
70b18499 NR |
37 | StringBuilder builder = new StringBuilder(); |
38 | ||
bb0d9eb2 NR |
39 | appendPre(builder); |
40 | ||
70b18499 NR |
41 | builder.append("<div class='story-header'>\n"); |
42 | appendHtml(builder, story, true); | |
43 | builder.append("<hr/>\n"); | |
44 | builder.append("</div>\n"); | |
45 | ||
bb0d9eb2 NR |
46 | appendPost(builder); |
47 | ||
70b18499 | 48 | return builder.toString(); |
73785268 NR |
49 | } |
50 | ||
51 | @Override | |
5c056aad | 52 | public String export(Story story) { |
73785268 | 53 | StringBuilder builder = new StringBuilder(); |
bb0d9eb2 | 54 | appendPre(builder); |
73785268 | 55 | |
70b18499 NR |
56 | builder.append("<div class='story'>\n"); |
57 | appendHtml(builder, story, false); | |
58 | builder.append("<hr/>\n"); | |
73785268 | 59 | |
5c056aad NR |
60 | if (story.getComments() != null) { |
61 | for (Comment comment : story.getComments()) { | |
70b18499 NR |
62 | appendHtml(builder, comment, " "); |
63 | } | |
73785268 NR |
64 | } |
65 | ||
70b18499 NR |
66 | builder.append("</div>\n"); |
67 | ||
bb0d9eb2 NR |
68 | appendPost(builder); |
69 | ||
73785268 NR |
70 | return builder.toString(); |
71 | } | |
72 | ||
bb0d9eb2 NR |
73 | private void appendPre(StringBuilder builder) { |
74 | builder.append("<!DOCTYPE html>\n"); | |
75 | builder.append("<html>\n"); | |
76 | builder.append("<head>\n"); | |
77 | builder.append(" <meta http-equiv='content-type' content='text/html; charset=utf-8'>\n"); | |
78 | builder.append(" <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n"); | |
79 | builder.append("</head>\n"); | |
80 | builder.append("<body>\n"); | |
81 | } | |
82 | ||
83 | private void appendPost(StringBuilder builder) { | |
84 | builder.append("</body>\n"); | |
85 | } | |
86 | ||
73785268 | 87 | private void appendHtml(StringBuilder builder, Comment comment, String space) { |
bb0d9eb2 NR |
88 | builder.append(space) |
89 | .append("<div class='comment' style='display: block; margin-left: 80px'>\n"); | |
73785268 NR |
90 | builder.append(space).append(" <h2>").append(comment.getTitle()) |
91 | .append("</h2>\n"); | |
92 | builder.append(space).append(" <div class='by'>") | |
93 | .append(comment.getAuthor()).append("</div>\n"); | |
94 | builder.append(space).append(" <div class='comment_content'>") | |
95 | .append(comment.getContent()).append("</div>\n"); | |
96 | for (Comment subComment : comment) { | |
97 | appendHtml(builder, subComment, space + " "); | |
98 | } | |
bb0d9eb2 | 99 | builder.append(space).append("</div>\n"); |
73785268 NR |
100 | } |
101 | ||
102 | private StringBuilder appendHtml(StringBuilder builder, Story story, | |
70b18499 NR |
103 | boolean resume) { |
104 | if (resume) { | |
73785268 | 105 | builder.append(" <h1><a href='" + story.getId() + ".html'>" |
70b18499 | 106 | + story.getTitle() + "</a></h1>\n"); |
73785268 | 107 | } else { |
70b18499 | 108 | builder.append(" <h1>" + story.getTitle() + "</h1>\n"); |
73785268 NR |
109 | } |
110 | builder.append(" <div class='details'>(" + story.getDetails() | |
70b18499 NR |
111 | + ")</div>\n"); |
112 | builder.append(" <br/>\n"); | |
113 | ||
114 | if (!resume) { | |
115 | builder.append(" <ul>\n"); | |
116 | builder.append(" <li>News link: <a href='" | |
117 | + story.getUrlInternal() + "'>" + story.getUrlInternal() | |
118 | + "</a></li>\n"); | |
119 | builder.append(" <li>Source link: <a href='" | |
120 | + story.getUrlExternal() + "'>" + story.getUrlExternal() | |
121 | + "</a></li>\n"); | |
122 | builder.append(" </ul>\n"); | |
123 | builder.append(" <br/>\n"); | |
124 | } | |
125 | ||
126 | builder.append(" <div class='content'>\n"); | |
5c056aad NR |
127 | if (resume) { |
128 | builder.append(" " + story.getContent() + "\n"); | |
129 | } else { | |
130 | builder.append(" " + story.getFullContent() + "\n"); | |
131 | } | |
70b18499 | 132 | builder.append(" </div>\n"); |
73785268 NR |
133 | |
134 | return builder; | |
135 | } | |
136 | } |