Fix html (gopher links with selectors, useless BR)
[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 sel = preselector;
17 if (!sel.isEmpty()) {
18 sel = "/1" + sel;
19 }
20
21 String gopherUrl = "gopher://" + hostname + sel + ":" + port;
22
23 return "<h1>News</h1>\n"//
24 + "<p>You will find here a few pages full of news, mirroring <a href='"
25 + gopherUrl + "'>"
26 + gopherUrl
27 + "</a>.</p>\n"//
28 + "<p>They are simply scrapped from their associated webpage and updated a few times a day.</p>\n"//
29 ;
30 }
31
32 @Override
33 public String getIndexFooter() {
34 return "";
35 }
36
37 @Override
38 public String export(Story story) {
39 StringBuilder builder = new StringBuilder();
40
41 builder.append("<div class='story-header'>\n");
42 appendHtml(builder, story, true);
43 builder.append("<hr/>\n");
44 builder.append("</div>\n");
45
46 return builder.toString();
47 }
48
49 @Override
50 public String export(Story story, List<Comment> comments) {
51 StringBuilder builder = new StringBuilder();
52
53 builder.append("<div class='story'>\n");
54 appendHtml(builder, story, false);
55 builder.append("<hr/>\n");
56
57 if (comments != null) {
58 for (Comment comment : comments) {
59 appendHtml(builder, comment, " ");
60 }
61 }
62
63 builder.append("</div>\n");
64
65 return builder.toString();
66 }
67
68 private void appendHtml(StringBuilder builder, Comment comment, String space) {
69 builder.append(space).append(
70 "<div class='comment' style='display: block; margin-left: "
71 + (20 * space.length()) + "px'>");
72 builder.append(space).append(" <h2>").append(comment.getTitle())
73 .append("</h2>\n");
74 builder.append(space).append(" <div class='by'>")
75 .append(comment.getAuthor()).append("</div>\n");
76 builder.append(space).append(" <div class='comment_content'>")
77 .append(comment.getContent()).append("</div>\n");
78 for (Comment subComment : comment) {
79 appendHtml(builder, subComment, space + " ");
80 }
81 builder.append(space).append("</div>");
82 }
83
84 private StringBuilder appendHtml(StringBuilder builder, Story story,
85 boolean resume) {
86 if (resume) {
87 builder.append(" <h1><a href='" + story.getId() + ".html'>"
88 + story.getTitle() + "</a></h1>\n");
89 } else {
90 builder.append(" <h1>" + story.getTitle() + "</h1>\n");
91 }
92 builder.append(" <div class='details'>(" + story.getDetails()
93 + ")</div>\n");
94 builder.append(" <br/>\n");
95
96 if (!resume) {
97 builder.append(" <ul>\n");
98 builder.append(" <li>News link: <a href='"
99 + story.getUrlInternal() + "'>" + story.getUrlInternal()
100 + "</a></li>\n");
101 builder.append(" <li>Source link: <a href='"
102 + story.getUrlExternal() + "'>" + story.getUrlExternal()
103 + "</a></li>\n");
104 builder.append(" </ul>\n");
105 builder.append(" <br/>\n");
106 }
107
108 builder.append(" <div class='content'>\n");
109 builder.append(" " + story.getContent() + "\n");
110 builder.append(" </div>\n");
111
112 return builder;
113 }
114 }