Revision [20689]

This is an old revision of HTMLHandler made by BrianKoontz on 2009-06-08 15:23:36.

 

HTML Handler


See also:
Documentation: HTMLHandlerInfo.
1.1.7 patch: http://wush.net/trac/wikka/ticket/218
Note: This handler will be included with the 1.2 release; no further code updates will be made to this page. Please visit the SVN repository for the latest code changes.
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>
<?php
    $this->config['external_link_tail'] = '';
    print($this->Format($this->page["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 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
There are 4 comments on this page. [Show comments]
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki