WebServer: add story description
[nikiroo-utils.git] / src / be / nikiroo / fanfix / library / WebLibraryServer.java
index 4abd438b6046a31053d71f5f7e772afb825f1314..fe79f96ad455c0814e0c759196ff580c37609733 100644 (file)
@@ -242,8 +242,10 @@ public class WebLibraryServer implements Runnable {
                                        // set options
                                        String optionName = params.get("optionName");
                                        if (optionName != null && !optionName.isEmpty()) {
+                                               String optionNo = params.get("optionNo");
                                                String optionValue = params.get("optionValue");
-                                               if (optionValue == null || optionValue.isEmpty()) {
+                                               if (optionNo != null || optionValue == null
+                                                               || optionValue.isEmpty()) {
                                                        session.getCookies().delete(optionName);
                                                        cookies.remove(optionName);
                                                } else {
@@ -491,12 +493,15 @@ public class WebLibraryServer implements Runnable {
 
                appendPreHtml(builder, true);
 
+               Map<String, String> params = session.getParms();
+
                String filter = cookies.get("filter");
+               if (params.get("optionNo") != null)
+                       filter = null;
                if (filter == null) {
                        filter = "";
                }
 
-               Map<String, String> params = session.getParms();
                String browser = params.get("browser") == null ? ""
                                : params.get("browser");
                String browser2 = params.get("browser2") == null ? ""
@@ -585,11 +590,12 @@ public class WebLibraryServer implements Runnable {
 
                // TODO: javascript in realtime, using visible=false + hide [submit]
                builder.append("<div class='filter'>\n");
-               builder.append("\tFilter: \n");
+               builder.append("\t<span class='label'>Filter: </span>\n");
                builder.append(
                                "\t<input name='optionName'  type='hidden' value='filter' />\n");
                builder.append("\t<input name='optionValue' type='text'   value='"
                                + filter + "' place-holder='...' />\n");
+               builder.append("\t<input name='optionNo'  type='submit' value='x' />");
                builder.append(
                                "\t<input name='submit' type='submit' value='Filter' />\n");
                builder.append("</div>\n");
@@ -813,11 +819,9 @@ public class WebLibraryServer implements Runnable {
                        StringBuilder builder = new StringBuilder();
                        appendPreHtml(builder, false);
 
-                       // TODO: no desc page for images?
+                       // For images documents, always go to the images if not chap 0 desc
                        if (story.getMeta().isImageDocument()) {
-                               if (chapter <= 0)
-                                       chapter = 1;
-                               if (paragraph <= 0)
+                               if (chapter > 0 && paragraph <= 0)
                                        paragraph = 1;
                        }
 
@@ -844,14 +848,13 @@ public class WebLibraryServer implements Runnable {
                        String disabledZoomHeight = "";
 
                        if (paragraph <= 0) {
-                               first = getViewUrl(luid, 1, null);
-                               previous = getViewUrl(luid, (Math.max(chapter - 1, 1)), null);
+                               first = getViewUrl(luid, 0, null);
+                               previous = getViewUrl(luid, (Math.max(chapter - 1, 0)), null);
                                next = getViewUrl(luid,
                                                (Math.min(chapter + 1, story.getChapters().size())),
                                                null);
                                last = getViewUrl(luid, story.getChapters().size(), null);
 
-                               // TODO
                                StringBuilder desc = new StringBuilder();
 
                                if (chapter <= 0) {
@@ -859,11 +862,12 @@ public class WebLibraryServer implements Runnable {
                                        desc.append("\t<div class='cover'>\n");
                                        desc.append("\t\t<img src='/story/" + luid + "/cover'/>\n");
                                        desc.append("\t</div>\n");
-                                       desc.append("\t<table>\n");
-                                       desc.append(
-                                                       "\t\t<tr><th>HEAD 1</th><th>HEAD 2</th></tr>\n");
-                                       desc.append("\t\t<tr><td>KEY 1</td><td>VAL 1</td></tr>\n");
-                                       desc.append("\t\t<tr><td>KEY 2</td><td>VAL 2</td></tr>\n");
+                                       desc.append("\t<table class='details'>\n");
+                                       Map<String, String> details = BasicLibrary
+                                                       .getMetaDesc(story.getMeta());
+                                       for (String key : details.keySet()) {
+                                               appendTableRow(desc, 2, key, details.get(key));
+                                       }
                                        desc.append("\t</table>\n");
                                        desc.append("</div>\n");
                                        desc.append("<h1 class='title'>Description</h1>\n");
@@ -871,11 +875,14 @@ public class WebLibraryServer implements Runnable {
 
                                content.append("<div class='viewer text'>\n");
                                content.append(desc);
+                               String description = new TextOutput(false).convert(chap,
+                                               chapter > 0);
                                content.append(
-                                               new TextOutput(false).convert(chap, chapter > 0));
+                                               description.isEmpty() ? "No description provided."
+                                                               : description);
                                content.append("</div>\n");
 
-                               if (chapter <= 1)
+                               if (chapter <= 0)
                                        disabledLeft = " disabled='disbaled'";
                                if (chapter >= story.getChapters().size())
                                        disabledRight = " disabled='disbaled'";
@@ -892,6 +899,14 @@ public class WebLibraryServer implements Runnable {
                                if (paragraph >= chap.getParagraphs().size())
                                        disabledRight = " disabled='disbaled'";
 
+                               // First -> previous *chapter*
+                               if (chapter > 0)
+                                       disabledLeft = "";
+                               first = getViewUrl(luid, (Math.max(chapter - 1, 0)), null);
+                               if (paragraph <= 1) {
+                                       previous = first;
+                               }
+
                                Paragraph para = null;
                                try {
                                        para = chap.getParagraphs().get(paragraph - 1);
@@ -928,7 +943,9 @@ public class WebLibraryServer implements Runnable {
                                                        zoomStyle, //
                                                        getStoryUrl(luid, chapter, paragraph)));
                                } else {
-                                       content.append(para.getContent());
+                                       content.append(String.format("" //
+                                                       + "<div class='viewer text'>%s</div>", //
+                                                       para.getContent()));
                                }
                        }
 
@@ -1143,6 +1160,24 @@ public class WebLibraryServer implements Runnable {
                builder.append(">").append(name).append("</option>\n");
        }
 
+       private void appendTableRow(StringBuilder builder, int depth,
+                       String... tds) {
+               for (int i = 0; i < depth; i++) {
+                       builder.append("\t");
+               }
+
+               int col = 1;
+               builder.append("<tr>");
+               for (String td : tds) {
+                       builder.append("<td class='col");
+                       builder.append(col++);
+                       builder.append("'>");
+                       builder.append(td);
+                       builder.append("</td>");
+               }
+               builder.append("</tr>\n");
+       }
+
        public static void main(String[] args) throws IOException {
                Instance.init();
                WebLibraryServer web = new WebLibraryServer(false);