site

(djk)
2011-05-15: Added a Discussion link to the page headers.

Added a Discussion link to the page headers.

diff --git a/doc/latest_release.txt b/doc/latest_release.txt
--- a/doc/latest_release.txt
+++ b/doc/latest_release.txt
@@ -0,0 +1,9 @@
+I added explicit support for "Discussion" links in page headers.
+The special page, "TalkPageDoesNotExist" is displayed if no talk page exists yet.
+
+I had to modify the DumpWiki CLI client to handle the new page header format.
+You need to handle a new %s for the talk page href.
+See ./templates/wiki_dump_template.html for an example.
+
+
+
diff --git a/freesite.cfg b/freesite.cfg
--- a/freesite.cfg
+++ b/freesite.cfg
@@ -2,7 +2,7 @@
 [default]
 # Human readable site name.
 # MUST match value in cut_release.py
-site_name = jfniki_releases_tst002
+site_name = jfniki_releases
 # Directory to insert from relative to the repository root.
 site_dir = release/generated_freesite
 # Optional external file to load the site key from, relative
diff --git a/readme.txt b/readme.txt
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
-20110429
+20110515
 djk@isFiaD04zgAgnrEC5XJt1i4IE7AkNPqhBG5bONi6Yks
 
 WARNING:
@@ -84,13 +84,13 @@ sethcg@a-tin0kMl1I~8xn5lkQDqYZRExKLzJITr
 ---
 Dev notes
 ---
+BUG: Header links to discussion pages. [requested by a real user]
 BUG: Default FCP port wrong for CLI client. [requested by a real user]
 BUG: fix the discover UI to correctly handle posts from a different nym than the insert
 BUG: wikitext should use unix line terminators not DOS (+1 byte per line)
 BUG: MUST show in the UI when edited wikitext has been truncated because it's too big.
 *BUG: Make Freetalk configuration work like fms configuration. i.e. no need for public key.
 ---
-CHORE: Write a script to cut releases and insert them into freeneet.
 CHORE: Fix references to "FMS" to reflect the fact that either Freetalk or FMS may be used.
 
 ---
@@ -141,3 +141,5 @@ 08d1b85d8ddd: IDEA: Pillage glog graph d
          PUNT: Don't worry about it. Attacker has to break SHA1 to create a cycle
                because of the way the version is string is generated.
 
+Finished Chores:
+cce3742a46d6: CHORE: Write a script to cut releases and insert them into freeneet.
diff --git a/release/cut_release.py b/release/cut_release.py
--- a/release/cut_release.py
+++ b/release/cut_release.py
@@ -22,7 +22,7 @@
 """
 
 # This script isn't really for public consumption.
-#
+# It is brittle and not fully debugged.
 # It assumes you have hg infocalypse installed and configured.
 #
 # BUG: ANONYMITY ISSUE: This script currently leaks the *nix user id
@@ -53,10 +53,10 @@ FMS_HOST = '127.0.0.1'
 FMS_PORT =  11119
 
 FMS_ID = 'djk'
-FMS_GROUP = 'test'
+FMS_GROUP = 'sites'
 
 # REQUIRES: must match name in freesite.cfg. LATER: fix.
-SITE_NAME = 'jfniki_releases_tst002'
+SITE_NAME = 'jfniki_releases'
 
 PUBLIC_SITE = "USK@kRM~jJVREwnN2qnA8R0Vt8HmpfRzBZ0j4rHC2cQ-0hw," + \
               "2xcoQVdQLyqfTpF2DpkdUIbHFCeL4W~2X1phUYymnhM,AQACAAE/%s/%%d/" % \
@@ -67,7 +67,7 @@ PUBLIC_SITE = "USK@kRM~jJVREwnN2qnA8R0Vt
 
 FREENET_DOC_WIKI_IDX = 30
 FNIKI_IDX = 81
-REPO_IDX = 13
+REPO_IDX = 14
 
 ############################################################
 
diff --git a/src/fniki/standalone/DumpWiki.java b/src/fniki/standalone/DumpWiki.java
--- a/src/fniki/standalone/DumpWiki.java
+++ b/src/fniki/standalone/DumpWiki.java
@@ -56,8 +56,9 @@ public class DumpWiki {
         "     [[template_file] [[fcp_port] [fcp_host]]]\n\n" +
         "NOTE:\nfreenet.jar and jfniki.jar MUST be in your classpath.\n\n" +
         "The <dump_path> directory must already exist and any files in it will be overwritten.\n\n" +
-        "The template_file should contain 3 %s place holders. The first two will be replaced \n"+
-        "with the title and the third will be replaced with the wiki content.\n"+
+        "The template_file should contain 4 %s place holders. The first two will be replaced \n"+
+        "with the title. The third will be replaced by the href value for the discusion page.\n" +
+        "The fourth will be replaced with the wiki content.\n"+
         "You can use the literal value 'default' to get the built in template file.\n\n"+
         "DumpWiki was written as part of the fniki Freenet Wiki project\n\n";
 
@@ -161,7 +162,10 @@ public class DumpWiki {
                 FileOutputStream out = new FileOutputStream(ouputDirectory + "/" + name + ".html");
                 PrintStream p = new PrintStream(out);
                 cleanName = unescapeHTML(name.replace("_", " "));
+                String talkName = (archiveManager.getStorage().hasPage("Talk_" + name)) ? "Talk_" + name  + ".html":
+                    "PageDoesNotExist.html";
                 p.printf(wikiTemplate, cleanName, cleanName,
+                         talkName,
                         (archiveManager.getStorage().hasPage(name)) ?
                         new FreenetWikiTextParser(archiveManager.getStorage().getPage(name), mParserDelegate).toString() :
                         "Page doesn't exist in the wiki yet."
diff --git a/src/fniki/wiki/child/WikiContainer.java b/src/fniki/wiki/child/WikiContainer.java
--- a/src/fniki/wiki/child/WikiContainer.java
+++ b/src/fniki/wiki/child/WikiContainer.java
@@ -144,31 +144,56 @@ public class WikiContainer implements Ch
     }
 
     private String unescapedTitleFromName(String name) {
+        if (name.startsWith("Talk_")) {
+            // LATER: Localization.
+            name = "Talk:" + name.substring("Talk_".length());
+        }
         return name.replace("_", " ");
     }
 
+    private String getTalkPage(WikiContext context, String name) throws IOException {
+        if (name.startsWith("Talk_") || (!context.getStorage().hasPage(name))) {
+            return null;
+        }
+        // LATER: Localization
+        return "Talk_" + name;
+    }
+
     private String getPageHtml(WikiContext context, String name) throws IOException {
         StringBuilder buffer = new StringBuilder();
-        addHeader(context, name, buffer);
+        addHeader(context, name, getTalkPage(context, name), buffer);
         if (context.getStorage().hasPage(name)) {
             buffer.append(renderXHTML(context, context.getStorage().getPage(name)));
         } else {
+            // Hmmmm... too branchy
             if (name.equals(context.getString("default_page", "Front_Page"))) {
                 buffer.append(renderXHTML(context,
                                           context.getString("default_wikitext",
                                                             "Page doesn't exist in the wiki yet.")));
-            } else if (context.getStorage().hasPage("PageDoesNotExist")) {
-                // LATER: Revisit. Also, ExternalLink. Evil submissions can change this to something confusing.
-                buffer.append(renderXHTML(context, context.getStorage().getPage("PageDoesNotExist")));
             } else {
-                buffer.append("Page doesn't exist in the wiki yet.");
+                if (name.startsWith("Talk_")) {
+                    if (context.getStorage().hasPage("TalkPageDoesNotExist")) {
+                        // LATER: Revisit. Also, ExternalLink. Evil submissions can change this to something confusing.
+                        buffer.append(renderXHTML(context, context.getStorage().getPage("TalkPageDoesNotExist")));
+                    } else {
+                        buffer.append("Discussion page doesn't exist in the wiki yet.");
+                    }
+                } else {
+                    if (context.getStorage().hasPage("PageDoesNotExist")) {
+                        // LATER: as above.
+                        buffer.append(renderXHTML(context, context.getStorage().getPage("PageDoesNotExist")));
+                    } else {
+                        buffer.append("Page doesn't exist in the wiki yet.");
+                    }
+                }
             }
         }
         addFooter(context, name, buffer);
         return buffer.toString();
     }
 
-    private void addHeader(WikiContext context, String name, StringBuilder buffer) throws IOException {
+    private void addHeader(WikiContext context, String name, String talkName,
+                           StringBuilder buffer) throws IOException {
         buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
         buffer.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
                       "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n");
@@ -183,8 +208,17 @@ public class WikiContainer implements Ch
         buffer.append("</style>\n");
         buffer.append("</head>\n");
         buffer.append("<body>\n");
-        buffer.append("<h1>\n");
+        buffer.append("<h1 class=\"pagetitle\">\n");
         buffer.append(escapeHTML(unescapedTitleFromName(name)));
+        buffer.append("</h1>\n");
+        if (talkName != null) {
+            String talkClass = context.getStorage().hasPage(talkName) ? "talktitle" : "notalktitle";
+            buffer.append(String.format("<h4 class=\"%s\">\n", talkClass));
+            String href = makeHref(context.makeLink("/" + talkName), null, talkName, null, null);
+            buffer.append(String.format("<a class=\"%s\" href=\"%s\">%s</a>",
+                                        talkClass, href, escapeHTML("Discussion")));
+            buffer.append("</h4>\n");
+        }
         buffer.append("</h1><hr>\n");
     }
 
diff --git a/style/add_header.css b/style/add_header.css
--- a/style/add_header.css
+++ b/style/add_header.css
@@ -4,3 +4,6 @@ blockquote{margin-left:20px;background-c
 span.underline{text-decoration:underline;}
 body { background-color: #FFFFFF; color: #000000 }
 a { color: #1f6b9e }
+.pagetitle {text-align:left;}
+.talktitle {text-align:right;}
+.notalktitle {color:#c0c0c0;text-align:right;}
diff --git a/templates/wiki_dump_template.html b/templates/wiki_dump_template.html
--- a/templates/wiki_dump_template.html
+++ b/templates/wiki_dump_template.html
@@ -8,6 +8,7 @@
 </head>
 <body>
 <h1>%s</h1>
+<h4 style="text-align:right;"><a href="%s">Discussion</a></h4>
 <hr>
 %s
 </body>