HTML style change (author in italics)
[gofetch.git] / src / be / nikiroo / gofetch / output / Html.java
1 package be.nikiroo.gofetch.output;
2
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 {
8 public Html(Type type, String hostname, String preselector, int port) {
9 super(type, hostname, preselector, port);
10 }
11
12 @Override
13 public String getIndexHeader() {
14 String sel = preselector;
15 if (!sel.isEmpty()) {
16 sel = "/1" + sel;
17 }
18
19 String gopherUrl = "gopher://" + hostname + sel + ":" + port;
20
21 StringBuilder builder = new StringBuilder();
22 appendPre(builder);
23
24 builder.append("<h1>News</h1>\n"//
25 + "<p>You will find here a few pages full of news, mirroring <a href='"
26 + gopherUrl + "'>"
27 + gopherUrl
28 + "</a>.</p>\n"//
29 + "<p>They are simply scrapped from their associated webpage and updated a few times a day.</p>\n"//
30 );
31
32 appendPost(builder);
33
34 return builder.toString();
35 }
36
37 @Override
38 public String getIndexFooter() {
39 return "";
40 }
41
42 @Override
43 public String exportHeader(Story story) {
44 StringBuilder builder = new StringBuilder();
45
46 appendPre(builder);
47
48 builder.append("<div class='story-header'>\n");
49 appendHtml(builder, story, true);
50 builder.append("<hr/>\n");
51 builder.append("</div>\n");
52
53 appendPost(builder);
54
55 return builder.toString();
56 }
57
58 @Override
59 public String export(Story story) {
60 StringBuilder builder = new StringBuilder();
61 appendPre(builder);
62
63 builder.append("<div class='story'>\n");
64 appendHtml(builder, story, false);
65 builder.append("<hr/>\n");
66
67 if (story.getComments() != null) {
68 for (Comment comment : story.getComments()) {
69 appendHtml(builder, comment, " ");
70 }
71 }
72
73 builder.append("</div>\n");
74
75 appendPost(builder);
76
77 return builder.toString();
78 }
79
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");
86 builder.append(" <style type='text/css'>\n");
87 builder.append(" body { margin: 1em 15%; }\n");
88 builder.append(" </style>\n");
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
97 private void appendHtml(StringBuilder builder, Comment comment, String space) {
98 builder.append(space)
99 .append("<div class='comment' style='display: block; margin-left: 80px'>\n");
100 builder.append(space).append(" <h2>").append(comment.getTitle())
101 .append("</h2>\n");
102 builder.append(space).append(" <div class='by' style='font-style: italic;'>")
103 .append(comment.getAuthor()).append("</div>\n");
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");
109 for (Comment subComment : comment) {
110 appendHtml(builder, subComment, space + " ");
111 }
112 builder.append(space).append("</div>\n");
113 }
114
115 private StringBuilder appendHtml(StringBuilder builder, Story story,
116 boolean resume) {
117 if (resume) {
118 builder.append(" <h1><a href='" + story.getId() + ".html'>"
119 + story.getTitle() + "</a></h1>\n");
120 } else {
121 builder.append(" <h1>" + story.getTitle() + "</h1>\n");
122 }
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");
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
143 builder.append(" <div class='content' style='text-align: justify'>\n");
144 if (resume) {
145 builder.append(" " + story.getContent() + "\n");
146 } else {
147 builder.append(" "
148 + story.getFullContent().replace("\n", "<br/>")
149 .replace("[ ", "<h2>").replace(" ]", "</h2>")
150 + "\n");
151 }
152 builder.append(" </div>\n");
153
154 return builder;
155 }
156 }