Wikka-markup in Comments
Working for 1.1.6.0 to 1.1.6.4 (latest)
To make comments a little bit more flexible, why don't add a part of wikkas markup? I thought about: italic, bold, monospace, strikethough, underlined, notes, WikiWords and InterWikiLinks
1. Problem
There is no backwards compatibility to older comments now because of the following problem:Since a formatter for comments does not exist, "handlers/page/addcomment.php", uses nl2br to store the html in the table itself. So older commenst will show up "<br />" at the end of every line.
If you have a wiki without older comments, everything will work fine.
The Code
0. In handlers/page/addcomments.php change the line:
into the following one:
Remaining problem: the <br /> in the already existing comments remain, and will show up now (see above).
1. Search in handlers/page/show.php for display comments themselves:
There you can find these lines:
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$comment['comment']."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84
'<span id="comment_'.$comment['id'].'"></span>'.$comment['comment']."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84
change these statements into these ones!
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$this->Format($comment['comment'], 'comments')."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user'],'comments') : $comment['user']; // #84
'<span id="comment_'.$comment['id'].'"></span>'.$this->Format($comment['comment'], 'comments')."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user'],'comments') : $comment['user']; // #84
2. Save the following as formatters/comments.php:
<?php
// This may look a bit strange, but all possible formatting tags have to be in a single regular expression for this to work correctly. Yup!
//#dotmg [many lines] : Unclosed tags fix! For more info, [email protected] ((only indents? --NilsLindenberg))
if (!function_exists("comments2callback"))
{
function comments2callback($things)
{
$thing = $things[1];
$result='';
static $trigger_bold = 0;
static $trigger_italic = 0;
static $trigger_underline = 0;
static $trigger_monospace = 0;
static $trigger_notes = 0;
static $trigger_strike = 0;
static $trigger_sup = 0;
static $trigger_sub = 0;
static $br = 1;
global $wakka;
if ((!is_array($things)) && ($things == 'closetags'))
{
if ($trigger_bold % 2) echo('</strong>');
if ($trigger_italic % 2) echo('</em>');
if ($trigger_underline % 2) echo('</span>');
if ($trigger_monospace % 2) echo('</tt>');
if ($trigger_notes % 2) echo ('</span>');
if ($trigger_strike % 2) echo ('</span>');
if ($trigger_sup % 2) echo '</sup>';
if ($trigger_sub % 2) echo '</sub>';
$trigger_bold = $trigger_italic = $trigger_underline = $trigger_monospace = $trigger_notes = $trigger_strike = $trigger_sup = $trigger_sub = 0;
return;
}
// convert HTML thingies
if ($thing == "<") return "<";
else if ($thing == ">") return ">";
// bold
else if ($thing == "**")
{
return (++$trigger_bold % 2 ? "<strong>" : "</strong>");
}
// italic
else if ($thing == "//")
{
return (++$trigger_italic % 2 ? "<em>" : "</em>");
}
// underlinue
else if ($thing == "__")
{
return (++$trigger_underline % 2 ? "<span class=\"underline\">" : "</span>");
}
// monospace
else if ($thing == "##")
{
return (++$trigger_monospace % 2 ? "<tt>" : "</tt>");
}
// notes
else if ($thing == "''")
{
return (++$trigger_notes % 2 ? "<span class=\"notes\">" : "</span>");
}
// strikethrough
else if ($thing == "++")
{
return (++$trigger_strike % 2 ? "<span class=\"strikethrough\">" : "</span>");
}
/*
// superscript
else if ($thing == "^^")
{
return (++$trigger_sup % 2 ? "<sup>" : "</sup>");
}
// subscript
else if ($thing == "vv")
{
return (++$trigger_sub % 2 ? "<sub>" : "</sub>");
}
*/
// interwiki links!
else if (preg_match("/^[A-ZÄÖÜ][A-Za-zÄÖÜßäöü]+[:]\S*$/s", $thing))
{
return $wakka->Link($thing);
}
// wiki links!
else if (preg_match("/^[A-ZÄÖÜ]+[a-zßäöü]+[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*$/s", $thing))
{
return $wakka->Link($thing);
}
// new lines
else if ($thing == "\n")
{
$result .= ($br ? "<br />\n" : "\n");
$br = 1;
return $result;
}
// if we reach this point, it must have been an accident.
return $thing;
}
}
$text = str_replace("\r\n", "\n", $text);
// replacing part of urls so the don't get italic
$text = preg_replace('#://#', "DUMPTEXT", $text);
$text = preg_replace_callback(
"/(".
"\[\[[^\[]*?\]\]|". # forced link
"<|>|". #html-tags
"\*\*|\'\'|\#\#|\+\+|__|<|>|\/\/|". # Wiki markup
"\b[A-ZÄÖÜ][A-Za-zÄÖÜßäöü]+[:](?![=_])\S*\b|". # InterWiki link
"\b([A-ZÄÖÜ]+[a-zßäöü]+[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*)\b|". # CamelWords
"\n".
")/ms", "comments2callback", $text);
// we're cutting the last <br />
$text = preg_replace("/<br \/>$/","", $text);
// re-replacing the url-part
$text = ereg_replace("DUMPTEXT", "://", $text);
// $text = $this->Typography($text); // only needed for SmartyPants in comments (see there)
echo ($text);
comments2callback('closetags');
?>
// This may look a bit strange, but all possible formatting tags have to be in a single regular expression for this to work correctly. Yup!
//#dotmg [many lines] : Unclosed tags fix! For more info, [email protected] ((only indents? --NilsLindenberg))
if (!function_exists("comments2callback"))
{
function comments2callback($things)
{
$thing = $things[1];
$result='';
static $trigger_bold = 0;
static $trigger_italic = 0;
static $trigger_underline = 0;
static $trigger_monospace = 0;
static $trigger_notes = 0;
static $trigger_strike = 0;
static $trigger_sup = 0;
static $trigger_sub = 0;
static $br = 1;
global $wakka;
if ((!is_array($things)) && ($things == 'closetags'))
{
if ($trigger_bold % 2) echo('</strong>');
if ($trigger_italic % 2) echo('</em>');
if ($trigger_underline % 2) echo('</span>');
if ($trigger_monospace % 2) echo('</tt>');
if ($trigger_notes % 2) echo ('</span>');
if ($trigger_strike % 2) echo ('</span>');
if ($trigger_sup % 2) echo '</sup>';
if ($trigger_sub % 2) echo '</sub>';
$trigger_bold = $trigger_italic = $trigger_underline = $trigger_monospace = $trigger_notes = $trigger_strike = $trigger_sup = $trigger_sub = 0;
return;
}
// convert HTML thingies
if ($thing == "<") return "<";
else if ($thing == ">") return ">";
// bold
else if ($thing == "**")
{
return (++$trigger_bold % 2 ? "<strong>" : "</strong>");
}
// italic
else if ($thing == "//")
{
return (++$trigger_italic % 2 ? "<em>" : "</em>");
}
// underlinue
else if ($thing == "__")
{
return (++$trigger_underline % 2 ? "<span class=\"underline\">" : "</span>");
}
// monospace
else if ($thing == "##")
{
return (++$trigger_monospace % 2 ? "<tt>" : "</tt>");
}
// notes
else if ($thing == "''")
{
return (++$trigger_notes % 2 ? "<span class=\"notes\">" : "</span>");
}
// strikethrough
else if ($thing == "++")
{
return (++$trigger_strike % 2 ? "<span class=\"strikethrough\">" : "</span>");
}
/*
// superscript
else if ($thing == "^^")
{
return (++$trigger_sup % 2 ? "<sup>" : "</sup>");
}
// subscript
else if ($thing == "vv")
{
return (++$trigger_sub % 2 ? "<sub>" : "</sub>");
}
*/
// interwiki links!
else if (preg_match("/^[A-ZÄÖÜ][A-Za-zÄÖÜßäöü]+[:]\S*$/s", $thing))
{
return $wakka->Link($thing);
}
// wiki links!
else if (preg_match("/^[A-ZÄÖÜ]+[a-zßäöü]+[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*$/s", $thing))
{
return $wakka->Link($thing);
}
// new lines
else if ($thing == "\n")
{
$result .= ($br ? "<br />\n" : "\n");
$br = 1;
return $result;
}
// if we reach this point, it must have been an accident.
return $thing;
}
}
$text = str_replace("\r\n", "\n", $text);
// replacing part of urls so the don't get italic
$text = preg_replace('#://#', "DUMPTEXT", $text);
$text = preg_replace_callback(
"/(".
"\[\[[^\[]*?\]\]|". # forced link
"<|>|". #html-tags
"\*\*|\'\'|\#\#|\+\+|__|<|>|\/\/|". # Wiki markup
"\b[A-ZÄÖÜ][A-Za-zÄÖÜßäöü]+[:](?![=_])\S*\b|". # InterWiki link
"\b([A-ZÄÖÜ]+[a-zßäöü]+[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*)\b|". # CamelWords
"\n".
")/ms", "comments2callback", $text);
// we're cutting the last <br />
$text = preg_replace("/<br \/>$/","", $text);
// re-replacing the url-part
$text = ereg_replace("DUMPTEXT", "://", $text);
// $text = $this->Typography($text); // only needed for SmartyPants in comments (see there)
echo ($text);
comments2callback('closetags');
?>
Configurable comment markup
1. Add the following line to wikka.config.php: "markup_comments" => "1",
where '1' means to allow markup and '0' means to disallow it.
2. In handlers/page/addcomments.php change the line:
into the following statement:
if (($this->GetConfigValue('markup_comments') == 1) && file_exists('formatters/comments.php'))
{
$body = $this->htmlspecialchars_ent(trim($_POST["body"]));
}
else {
$body = nl2br($this->htmlspecialchars_ent(trim($_POST["body"])));
}
{
$body = $this->htmlspecialchars_ent(trim($_POST["body"]));
}
else {
$body = nl2br($this->htmlspecialchars_ent(trim($_POST["body"])));
}
3. Search in handlers/page/show.php for display comments themselves:
There you can find these lines:
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$comment['comment']."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84
'<span id="comment_'.$comment['id'].'"></span>'.$comment['comment']."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84
change these statements into these ones!
if (($this->GetConfigValue('markup_comments') == 1) && file_exists('formatters/comments.php'))
{
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$this->Format($comment['comment'], 'comments')."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user'],'comments') : $comment['user']; // #84
}
else {
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$comment['comment']."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84
}
{
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$this->Format($comment['comment'], 'comments')."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user'],'comments') : $comment['user']; // #84
}
else {
echo '<div class="comment">'."\n".
'<span id="comment_'.$comment['id'].'"></span>'.$comment['comment']."\n".
"\t".'<div class="commentinfo">'."\n-- ";
echo ($this->LoadUser($comment['user']))? $this->Format($comment['user']) : $comment['user']; // #84
}
3. Use the comments.php from above.
CategoryUsercontributions