Added style dir as a first step towards getting css out of .java files.
diff --git a/build.xml b/build.xml --- a/build.xml +++ b/build.xml @@ -5,6 +5,7 @@ <property name="classes" value="./build/classes" /> <property name="doc" value="./doc" /> <property name="templates" value="./templates" /> + <property name="style" value="./style" /> <property name="jars" value="./build/jar" /> <target name="clean"> @@ -50,6 +51,8 @@ </manifest> <fileset dir="${doc}" includes="quickstart.txt"/> <fileset dir="${templates}" includes="*.html"/> + <!-- A place to stash snippets of .css --> + <fileset dir="${style}" includes="*.css"/> </jar> </target> diff --git a/src/fniki/wiki/WikiApp.java b/src/fniki/wiki/WikiApp.java --- a/src/fniki/wiki/WikiApp.java +++ b/src/fniki/wiki/WikiApp.java @@ -334,7 +334,7 @@ public class WikiApp implements ChildCon } else if (keyName.equals("form_password") && mFormPassword != null) { return mFormPassword; } else if (keyName.equals("default_wikitext")) { - return getDefaultWikiText(); + return getString("/quickstart.txt", "Couldn't load default wikitext from jar???"); } else if (keyName.equals("wikiname")) { if (mArchiveManager.getBissName() != null) { return mArchiveManager.getBissName(); @@ -343,6 +343,13 @@ public class WikiApp implements ChildCon if (mArchiveManager.getFmsGroup() != null) { return mArchiveManager.getFmsGroup(); } + } else if (keyName.startsWith("/")) { + // Assume any name starting with a "/" is a UTF-8 encoded file in the jar. + try { + return IOUtil.readUtf8StringAndClose(WikiApp.class.getResourceAsStream(keyName)); + } catch (IOException ioe) { + /* NOP: Caller gets default */ + } } return defaultValue; @@ -481,12 +488,4 @@ public class WikiApp implements ChildCon } mRequest = request; } - - private static String getDefaultWikiText() { - try { - return IOUtil.readUtf8StringAndClose(WikiApp.class.getResourceAsStream("/quickstart.txt")); - } catch (IOException ioe) { - return "Couldn't load default wikitext from jar???"; - } - } } 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 @@ -147,7 +147,7 @@ public class WikiContainer implements Ch private String getPageHtml(WikiContext context, String name) throws IOException { StringBuilder buffer = new StringBuilder(); - addHeader(name, buffer); + addHeader(context, name, buffer); if (context.getStorage().hasPage(name)) { buffer.append(renderXHTML(context, context.getStorage().getPage(name))); } else { @@ -166,7 +166,7 @@ public class WikiContainer implements Ch return buffer.toString(); } - private void addHeader(String name, StringBuilder buffer) throws IOException { + private void addHeader(WikiContext context, String name, 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"); @@ -174,10 +174,11 @@ public class WikiContainer implements Ch buffer.append("<head><title>\n"); buffer.append(escapeHTML(unescapedTitleFromName(name))); buffer.append("</title>\n"); - buffer.append("<style type=\"text/css\">div.indent{margin-left:20px;} " + - "div.center{text-align:center;} " + - "blockquote{margin-left:20px;background-color:#e0e0e0;} " + - "span.underline{text-decoration:underline;}</style>\n"); + buffer.append("<style type=\"text/css\">\n"); + // CAREFUL: MUST audit .css files built into .jar to make sure they are safe. + // Load .css snippet from jar. Names can only have 1 '/' and must be globally unique. + buffer.append(context.getString("/add_header.css", "")); + buffer.append("</style>\n"); buffer.append("</head>\n"); buffer.append("<body>\n"); buffer.append("<h1>\n"); diff --git a/style/add_header.css b/style/add_header.css new file mode 100644 --- /dev/null +++ b/style/add_header.css @@ -0,0 +1,6 @@ +div.indent{margin-left:20px;} +div.center{text-align:center;} +blockquote{margin-left:20px;background-color:#e0e0e0;} +span.underline{text-decoration:underline;} +body { background-color: #FFFFFF; color: #000000 } +a { color: #1f6b9e }