HTML Handler


This is the development page for the HTML handler.
 


This handler generates "standalone" HTML, without the header/footer/menu items.

Dependency

None.

The code

Copy css/wikka.css to css/html.css, then add the following line to the top of html.css:

.header, .footer, .commentsheader, .copyright, .smallprint { display:none; }


Create handlers/page/html.php (version <=1.1.6.3) or handlers/html/html.php (version >=1.1.7):

<?php
if ($this->HasAccess("read") && $this->page) {
    // display page
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title><?php echo $this->GetPageTag(); ?></title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <style type="text/css">
    <?php include("css/html.css") ?>  
    </style>
</head>
<body>
<div id="content">
<?php
    $this->config['external_link_tail'] = '';
    print($this->Format($this->page["body"], "html"));
}
?>
</div>
</body>
</html>


Add the following after about line 1109 (version < 1.1.6.2) or line 1030 (version 1.1.6.2/1.1.6.3) in wikka.php (just before the final else statement):

        elseif ($this->method == "html")
        {
            print($this->Method($this->method));
        }


Add the code above after about line 2183 (version 1.2) in libs/Wakka.class.php (just before the final else statement).

Add the following after about line 2879 (version = 1.1.7) in libs/Wakka.class.php :

        // Handler to generate html
        elseif ($this->handler == 'html')
        {
            print($this->Handler($this->handler));
        }


The Wikka parsing engine doesn't differentiate between relative URIs and absolute URIs (the default is to prepend any "unidentified" URIs with http:). To enable relative URIs, copy formatters/wakka.php to formatters/html.php, then make the following changes starting at around line 240 (version < 1.1.6.2), line 284 (version 1.1.6.2/1.1.6.3), or line 527 (version >= 1.1.7):

        // forced links
        // \S : any character that is not a whitespace character
        // \s : any whitespace character
--->change start<---
        // Hack to pick up leading . and / characters in URI
        else if (preg_match("/^\[\[([\S|\.|\/]*)(\s+(.+))?\]\]$/s", $thing, $matches))      # recognize forced links across lines
        {
--->change end<---
            list (, $url, , $text) = $matches;
            if ($url)
            {
                //if ($url!=($url=(preg_replace("/@@|££||\[\[/","",$url))))$result="</span>";
                if (!$text) $text = $url;
                //$text=preg_replace("/@@|££|\[\[/","",$text);
--->change start<---
                $link = $wakka->Link($url, "", $text);
                // Hack to handle relative URIs (i.e., links to files
                // in the same directory)
                if(strstr($link, "http://.") || strstr($link, "http:///"))
                    $link = preg_replace("/^(.*)http:\/\/(.*)$/",
                                         "\${1}\${2}",
                                         $link);
                return $result.$link;
--->change end<---
            }


To disable the display of CamelWords and InterWiki as clickable links, also delete the following lines from formatters/html.php:

    "\b[A-Z???][A-Za-z???????]+[:](?![=_])\S*\b|".                                          
              # InterWiki link
    "\b([A-Z???]+[a-z????]+[A-Z0-9???][A-Za-z0-9???????]*)\b|".                            
              # CamelWords


Dumping an entire wiki

This is some proof-of-concept code I hacked together rather quickly for a Wikka user in need of a way to dump all of his Wikka pages to a directory. I've only tested this on version 1.1.6.0, so your results may vary. By default, html files are dumped in /tmp/wikka_test/.

<?php      
// Get list of all wiki pages on site
$pages = $this->LoadAllPages();
           
foreach($pages as $page)
{  
    if ($this->HasAccess("read") && $page) {
        // dump pages
        ob_start();
        ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html>
        <head>
            <title><?php echo $page['tag'] ?></title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <style type="text/css">
            <?php include("css/html.css") ?>
            </style>
        </head>
        <body>
        <?php
            $this->config['external_link_tail'] = '';
            print($this->Format($page['body'], "html"));
    }
    $buffer = ob_get_flush();
    $filename = $page['tag'].".html";
    file_put_contents("/tmp/wikka_test/".$filename, $buffer);
}
$this->Redirect();
?>


To Do

  • Provide option to exclude inline CSS (with option to display listing of CSS to save in separate file)
  • Provide "raw" html (no html, head, body tags)
  • Clean up kludge in wikka.php (there should be no need to modify this file to accomodate a new handler type)
  • Convince DarTar to include this formatter in the next release so we can show Exports HTML == yes in the WikkaWiki entry on WikiMatrix!



Categories
CategoryDevelopmentHandlers
CategoryUserContributions
Comments
Comment by MasinAlDujaili
2006-06-08 04:38:19
That seems to be what I need for a static HTML export of the whole Wiki ... I'll give it a try ...
Comment by BrianKoontz
2006-10-27 13:41:45
There are two schools of thought as to what an HTML formatter should accomplish:

--One suggests an HTML dump devoid of all "wikish" elements (headers, footers, CamelCase links, etc.). This is useful when one is using Wikka strictly as an HTML editor using the wiki markup instead of HTML markup.

--The other suggests an HTML dump that would closely resemble the original Wikka page, but with internalized links externalized in a static form. This is useful if one wanted a complete portable dump or snapshot of a wiki, with all internal links converted to static relative links so the entire wiki could still be navigated.

I originally set out to accomplish the first case. My thinking is that the two cases should be handled separately. In the first case, many wiki elements are simply excluded from the output. In the second case, each wiki element must be checked to determine (1) if it can be converted to a static link, or (2) if it should be disabled. Thoughts?
Comment by DomBonj
2007-03-07 12:29:25
Brian,
For your second case, you can have a look at the FileexportAction in HTML mode. It renders hyperlinks as static relative links or external links, depending whether the target page belongs to the set of exported pages or not. This is an "optimistic" approach: instead of disabling the link, it is kept as is, event though it may not be reachable (e.g. in the case of an intranet).
Comment by SpectreMoo
2009-04-12 14:02:58
I just started a handler to do this on my own installation, good thing I found this before I got too far along. Thanks much.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki