diff --git a/src/smeagol/routes/wiki.clj b/src/smeagol/routes/wiki.clj
index 51151bd..da1ff41 100644
--- a/src/smeagol/routes/wiki.clj
+++ b/src/smeagol/routes/wiki.clj
@@ -124,6 +124,7 @@
(merge (util/standard-params request)
{:title page
:page page
+ :side-bar (util/local-links (util/md->html "/content/_side-bar.md"))
:content (util/local-links (util/md->html file-name))
:editable true})))
true (response/redirect (str "/edit?page=" page)))))
diff --git a/src/smeagol/util.clj b/src/smeagol/util.clj
index 8a45339..67f7203 100644
--- a/src/smeagol/util.clj
+++ b/src/smeagol/util.clj
@@ -37,17 +37,23 @@
(md/md-to-html-string (io/slurp-resource filename)))
+;; Error to show if text to be rendered is nil.
+(def no-text-error "No text: does the file exist?")
+
+
(defn local-links
"Rewrite text in `html-src` surrounded by double square brackets as a local link into this wiki."
[^String html-src]
- (cs/replace html-src #"\[\[[^\[\]]*\]\]"
- #(let [text (clojure.string/replace %1 #"[\[\]]" "")
- encoded (url-encode text)
- ;; I use '\_' to represent '_' in wiki markup, because
- ;; '_' is meaningful in Markdown. However, this needs to
- ;; be stripped out when interpreting local links.
- munged (cs/replace encoded #"%26%2395%3B" "_")]
- (format "%s" munged text))))
+ (if html-src
+ (cs/replace html-src #"\[\[[^\[\]]*\]\]"
+ #(let [text (clojure.string/replace %1 #"[\[\]]" "")
+ encoded (url-encode text)
+ ;; I use '\_' to represent '_' in wiki markup, because
+ ;; '_' is meaningful in Markdown. However, this needs to
+ ;; be stripped out when interpreting local links.
+ munged (cs/replace encoded #"%26%2395%3B" "_")]
+ (format "%s" munged text)))
+ no-text-error))
(defn standard-params
diff --git a/test/smeagol/test/util.clj b/test/smeagol/test/util.clj
new file mode 100644
index 0000000..d5e94f9
--- /dev/null
+++ b/test/smeagol/test/util.clj
@@ -0,0 +1,13 @@
+(ns smeagol.test.util
+ (:use clojure.test
+ ring.mock.request
+ smeagol.util))
+
+(deftest test-local-links
+ (testing "Rewriting of local links"
+ (is (= (local-links nil) no-text-error) "Should NOT fail with a no pointer exception!")
+ (is (= (local-links "") "") "Empty string should pass through unchanged.")
+ (is (= (local-links "[[froboz]]") "froboz") "Local link should be rewritten.")
+ (let [text (str "# This is a heading"
+ "[This is a foreign link](http://to.somewhere)")]
+ (is (= (local-links text) text) "Foreign links should be unchanged"))))