Note small bug in cocanwiki_links.
[cocanwiki.git] / scripts / page.ml
index e301cae..3657919 100644 (file)
@@ -1,7 +1,7 @@
 (* COCANWIKI - a wiki written in Objective CAML.
  * Written by Richard W.M. Jones <rich@merjis.com>.
  * Copyright (C) 2004 Merjis Ltd.
- * $Id: page.ml,v 1.29 2004/10/10 16:29:23 rich Exp $
+ * $Id: page.ml,v 1.33 2004/10/17 19:43:19 rich Exp $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -25,6 +25,7 @@ open Cgi
 open Printf
 
 open ExtString
+open ExtList
 
 open Cocanwiki
 open Cocanwiki_template
@@ -55,12 +56,12 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
     ({ edit_anon = edit_anon;
        view_anon = view_anon } as host)
     user =
-  let template_page = get_template dbh hostid "page.html" in
-  let template_404  = get_template dbh hostid "page_404.html" in
-
   let page = q#param "page" in
   let page = if page = "" then "index" else page in
 
+  let template_page = get_template ~page dbh hostid "page.html" in
+  let template_404  = get_template dbh hostid "page_404.html" in
+
   (* Host-specific fields. *)
   let sth = dbh#prepare_cached "select css is not null,
                                        feedback_email is not null,
@@ -296,10 +297,11 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
 
     (* Navigation links. *)
     if navigation then (
-      let max_links = 15 in            (* Show no more links than this. *)
+      let max_links = 18 in            (* Show no more links than this. *)
 
       (* What links here. *)
       let wlh = what_links_here dbh hostid page' in
+      let wlh = List.take max_links wlh in
       let wlh_urls = List.map fst wlh in (* Just the URLs ... *)
 
       let rv =
@@ -309,6 +311,7 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
               * links here' section, and don't link to self.
               *)
              let not_urls = page' :: wlh_urls in
+             let limit = max_links - List.length wlh_urls in
              let qs = Dbi.placeholders (List.length not_urls) in
              let sth =
                dbh#prepare_cached
@@ -321,7 +324,7 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
                      limit ?") in
              let args = List.map (fun s -> `String s) not_urls in
              sth#execute
-               ([`Int hostid; `Int userid] @ args @ [`Int max_links]);
+               ([`Int hostid; `Int userid] @ args @ [`Int limit]);
              sth#map
                (function [`String url; `String title; _] ->
                   url, title
@@ -338,6 +341,11 @@ let run r (q : cgi) (dbh : Dbi.connection) hostid
       let table = List.map f rv in
       t#table "recently_visited" table;
       t#conditional "has_recently_visited" (rv <> []);
+
+      (* If both lists are empty (ie. an empty navigation box would
+       * appear), then disable navigation altogether.
+       *)
+      if wlh = [] && rv = [] then t#conditional "navigation" false
     );
 
     (* If we are coming from a search engine then we want to highlight