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; |
27008a87 | 20 | |
ab07d4d5 NR |
21 | StringBuilder builder = new StringBuilder(); |
22 | appendPre(builder); | |
70b18499 | 23 | |
ab07d4d5 | 24 | builder.append("<h1>News</h1>\n"// |
70b18499 NR |
25 | + "<p>You will find here a few pages full of news, mirroring <a href='" |
26 | + gopherUrl + "'>" | |
27 | + gopherUrl | |
28 | + "</a>.</p>\n"// | |
70b18499 | 29 | + "<p>They are simply scrapped from their associated webpage and updated a few times a day.</p>\n"// |
ab07d4d5 | 30 | ); |
27008a87 | 31 | |
ab07d4d5 | 32 | appendPost(builder); |
27008a87 | 33 | |
ab07d4d5 | 34 | return builder.toString(); |
73785268 NR |
35 | } |
36 | ||
37 | @Override | |
38 | public String getIndexFooter() { | |
39 | return ""; | |
40 | } | |
41 | ||
42 | @Override | |
5c056aad | 43 | public String exportHeader(Story story) { |
70b18499 NR |
44 | StringBuilder builder = new StringBuilder(); |
45 | ||
bb0d9eb2 NR |
46 | appendPre(builder); |
47 | ||
70b18499 NR |
48 | builder.append("<div class='story-header'>\n"); |
49 | appendHtml(builder, story, true); | |
50 | builder.append("<hr/>\n"); | |
51 | builder.append("</div>\n"); | |
52 | ||
bb0d9eb2 NR |
53 | appendPost(builder); |
54 | ||
70b18499 | 55 | return builder.toString(); |
73785268 NR |
56 | } |
57 | ||
58 | @Override | |
5c056aad | 59 | public String export(Story story) { |
73785268 | 60 | StringBuilder builder = new StringBuilder(); |
bb0d9eb2 | 61 | appendPre(builder); |
73785268 | 62 | |
70b18499 NR |
63 | builder.append("<div class='story'>\n"); |
64 | appendHtml(builder, story, false); | |
65 | builder.append("<hr/>\n"); | |
73785268 | 66 | |
5c056aad NR |
67 | if (story.getComments() != null) { |
68 | for (Comment comment : story.getComments()) { | |
70b18499 NR |
69 | appendHtml(builder, comment, " "); |
70 | } | |
73785268 NR |
71 | } |
72 | ||
70b18499 NR |
73 | builder.append("</div>\n"); |
74 | ||
bb0d9eb2 NR |
75 | appendPost(builder); |
76 | ||
73785268 NR |
77 | return builder.toString(); |
78 | } | |
79 | ||
bb0d9eb2 NR |
80 | private void appendPre(StringBuilder builder) { |
81 | builder.append("<!DOCTYPE html>\n"); | |
82 | builder.append("<html>\n"); | |
83 | builder.append("<head>\n"); | |
84 | builder.append(" <meta http-equiv='content-type' content='text/html; charset=utf-8'>\n"); | |
85 | builder.append(" <meta name='viewport' content='width=device-width, initial-scale=1.0'>\n"); | |
ab07d4d5 NR |
86 | builder.append(" <style type='text/css'>\n"); |
87 | builder.append(" body { margin: 1em 15%; }\n"); | |
88 | builder.append(" </style>\n"); | |
bb0d9eb2 NR |
89 | builder.append("</head>\n"); |
90 | builder.append("<body>\n"); | |
91 | } | |
92 | ||
93 | private void appendPost(StringBuilder builder) { | |
94 | builder.append("</body>\n"); | |
95 | } | |
96 | ||
73785268 | 97 | private void appendHtml(StringBuilder builder, Comment comment, String space) { |
bb0d9eb2 NR |
98 | builder.append(space) |
99 | .append("<div class='comment' style='display: block; margin-left: 80px'>\n"); | |
73785268 NR |
100 | builder.append(space).append(" <h2>").append(comment.getTitle()) |
101 | .append("</h2>\n"); | |
59eb1223 | 102 | builder.append(space).append(" <div class='by' style='font-style: italic;'>") |
73785268 | 103 | .append(comment.getAuthor()).append("</div>\n"); |
27008a87 NR |
104 | builder.append(space).append(" <div class='comment_content'>"); |
105 | for (String line : comment.getContentLines()) { | |
106 | builder.append("<p>" + line + "</p>"); | |
107 | } | |
108 | builder.append("</div>\n"); | |
73785268 NR |
109 | for (Comment subComment : comment) { |
110 | appendHtml(builder, subComment, space + " "); | |
111 | } | |
bb0d9eb2 | 112 | builder.append(space).append("</div>\n"); |
73785268 NR |
113 | } |
114 | ||
115 | private StringBuilder appendHtml(StringBuilder builder, Story story, | |
70b18499 NR |
116 | boolean resume) { |
117 | if (resume) { | |
73785268 | 118 | builder.append(" <h1><a href='" + story.getId() + ".html'>" |
70b18499 | 119 | + story.getTitle() + "</a></h1>\n"); |
73785268 | 120 | } else { |
70b18499 | 121 | builder.append(" <h1>" + story.getTitle() + "</h1>\n"); |
73785268 | 122 | } |
100a8395 NR |
123 | |
124 | builder.append(" <div class='details'>"); | |
125 | if (story.getDetails() != null && !story.getDetails().isEmpty()) { | |
126 | builder.append("(").append(story.getDetails()).append(")"); | |
127 | } | |
128 | builder.append("</div>\n"); | |
70b18499 NR |
129 | builder.append(" <br/>\n"); |
130 | ||
131 | if (!resume) { | |
132 | builder.append(" <ul>\n"); | |
133 | builder.append(" <li>News link: <a href='" | |
134 | + story.getUrlInternal() + "'>" + story.getUrlInternal() | |
135 | + "</a></li>\n"); | |
136 | builder.append(" <li>Source link: <a href='" | |
137 | + story.getUrlExternal() + "'>" + story.getUrlExternal() | |
138 | + "</a></li>\n"); | |
139 | builder.append(" </ul>\n"); | |
140 | builder.append(" <br/>\n"); | |
141 | } | |
142 | ||
ab07d4d5 | 143 | builder.append(" <div class='content' style='text-align: justify'>\n"); |
5c056aad NR |
144 | if (resume) { |
145 | builder.append(" " + story.getContent() + "\n"); | |
146 | } else { | |
100a8395 NR |
147 | builder.append(" " |
148 | + story.getFullContent().replace("\n", "<br/>") | |
149 | .replace("[ ", "<h2>").replace(" ]", "</h2>") | |
150 | + "\n"); | |
5c056aad | 151 | } |
70b18499 | 152 | builder.append(" </div>\n"); |
73785268 NR |
153 | |
154 | return builder; | |
155 | } | |
156 | } |