ikiwiki/ tips/ JavaScript to add index.html to file: links

The source file `foo/bar.mdwn` or `foo/bar.html` generates the page `foo/bar/index.html`, but the links to the page appear as "`foo/bar/`". This is fine (and recommended) for pages served by an http server, but it doesn't work when browsing the pages directly using `file:` URL. The latter might be desirable when testing pages before upload, or if you want to read pages when off-line without access to a web server.

Here is a JavaScript "`onload`" script which fixes the URLs if the `local.protocol` isn't `http` or `https`:

    function fixLinks() {
      var scheme = location.protocol;
     if (scheme=="http:" || scheme=="https:") return;
     var links = document.getElementsByTagName("a");
      for (var i = links.length; --i >= 0; ) {
       var link = links[i];
        var href = link.href;
        var hlen = href.length;
       if (hlen > 0 && link.protocol==scheme && href.charAt(hlen-1) == "/")
         links[i].href = href + "index.html";
      }
    }

This can be placed in `page.tmpl`:

    <html>
    <head>
    <script language="JavaScript">
    function fixLinks() {
    ...
    }
    </script>
    </head>
    <body onload="javascript:fixLinks();">
    ...
    </html>

This script has not been extensively tested.

A version that handles anchors:

    function fixLinks() {
      var scheme = location.protocol;
      if (scheme != "file:") return;
      var links = document.getElementsByTagName("a");
      for (var i = links.length; --i >= 0; ) {
        var link = links[i];
        var href = link.href;
        var anchor = "";
        var anchorIndex = href.indexOf("#");
        if (anchorIndex != -1) {
          anchor = href.substring(anchorIndex);
          href = href.substring(0, anchorIndex);
        };
        var hlen = href.length;
        if (hlen > 0 && link.protocol==scheme && href.charAt(hlen-1) == "/")
          links[i].href = href + "index.html" + anchor;
      }
    }