Fix some bugs, fix some TODO text
[gofetch.git] / src / be / nikiroo / gofetch / output / Html.java
1 package be.nikiroo.gofetch.output;
2
3 import java.util.List;
4
5 import be.nikiroo.gofetch.data.Comment;
6 import be.nikiroo.gofetch.data.Story;
7 import be.nikiroo.gofetch.support.BasicSupport.Type;
8
9 public class Html extends Output {
10 public Html(Type type, String hostname, String preselector, int port) {
11 super(type, hostname, preselector, port);
12 }
13
14 @Override
15 public String getIndexHeader() {
16 String gopherUrl = "gopher://" + hostname + preselector + ":" + port;
17
18 return "<h1>News</h1>\n"//
19 + "<p>You will find here a few pages full of news, mirroring <a href='"
20 + gopherUrl + "'>"
21 + gopherUrl
22 + "</a>.</p>\n"//
23 + "<br/>\n"//
24 + "<p>They are simply scrapped from their associated webpage and updated a few times a day.</p>\n"//
25 + "<br/>\n"//
26 ;
27 }
28
29 @Override
30 public String getIndexFooter() {
31 return "";
32 }
33
34 @Override
35 public String export(Story story) {
36 StringBuilder builder = new StringBuilder();
37
38 builder.append("<div class='story-header'>\n");
39 appendHtml(builder, story, true);
40 builder.append("<hr/>\n");
41 builder.append("</div>\n");
42
43 return builder.toString();
44 }
45
46 @Override
47 public String export(Story story, List<Comment> comments) {
48 StringBuilder builder = new StringBuilder();
49
50 builder.append("<div class='story'>\n");
51 appendHtml(builder, story, false);
52 builder.append("<hr/>\n");
53
54 if (comments != null) {
55 for (Comment comment : comments) {
56 appendHtml(builder, comment, " ");
57 }
58 }
59
60 builder.append("</div>\n");
61
62 return builder.toString();
63 }
64
65 private void appendHtml(StringBuilder builder, Comment comment, String space) {
66 builder.append(space).append(
67 "<div class='comment' style='display: block; margin-left: "
68 + (20 * space.length()) + "px'>");
69 builder.append(space).append(" <h2>").append(comment.getTitle())
70 .append("</h2>\n");
71 builder.append(space).append(" <div class='by'>")
72 .append(comment.getAuthor()).append("</div>\n");
73 builder.append(space).append(" <div class='comment_content'>")
74 .append(comment.getContent()).append("</div>\n");
75 for (Comment subComment : comment) {
76 appendHtml(builder, subComment, space + " ");
77 }
78 builder.append(space).append("</div>");
79 }
80
81 private StringBuilder appendHtml(StringBuilder builder, Story story,
82 boolean resume) {
83 if (resume) {
84 builder.append(" <h1><a href='" + story.getId() + ".html'>"
85 + story.getTitle() + "</a></h1>\n");
86 } else {
87 builder.append(" <h1>" + story.getTitle() + "</h1>\n");
88 }
89 builder.append(" <div class='details'>(" + story.getDetails()
90 + ")</div>\n");
91 builder.append(" <br/>\n");
92
93 if (!resume) {
94 builder.append(" <ul>\n");
95 builder.append(" <li>News link: <a href='"
96 + story.getUrlInternal() + "'>" + story.getUrlInternal()
97 + "</a></li>\n");
98 builder.append(" <li>Source link: <a href='"
99 + story.getUrlExternal() + "'>" + story.getUrlExternal()
100 + "</a></li>\n");
101 builder.append(" </ul>\n");
102 builder.append(" <br/>\n");
103 }
104
105 builder.append(" <div class='content'>\n");
106 builder.append(" " + story.getContent() + "\n");
107 builder.append(" </div>\n");
108
109 return builder;
110 }
111 }