html validation fixes:

- escape & in urls (also clean up cgi url generation)
 - since markdown wraps inlined pages in <p></p>, close and re-open
   the paragraph tags when generating the embedded html
 - added XHTML 1.0 doctypes to templates
 - fixed <hr /> and <br /> in templates
 - add an alt attribute to inline images, based on the WikiLink to the
   image. Allows things like [[my_image|img.png]] to customise alt text.
master
joey 2006-03-29 03:18:21 +00:00
parent bfe959167a
commit e41dd1e24e
9 changed files with 71 additions and 27 deletions

View File

@ -144,12 +144,13 @@ sub cgi_signin ($$) { #{{{
$session->param("name", $form->field("name"));
if (defined $form->field("do") &&
$form->field("do") ne 'signin') {
print $q->redirect(
"$config{cgiurl}?do=".$form->field("do").
"&page=".$form->field("page").
"&title=".$form->field("title").
"&subpage=".$form->field("subpage").
"&from=".$form->field("from"));;
print $q->redirect(cgiurl(
do => $form->field("do"),
page => $form->field("page"),
title => $form->field("title"),
subpage => $form->field("subpage"),
from => $form->field("from"),
));
}
else {
print $q->redirect($config{url});

View File

@ -186,7 +186,7 @@ sub postprocess_html_inline { #{{{
$ret.=$template->output;
}
return $ret;
return "</p>$ret<p>";
} #}}}
sub genpage ($$$) { #{{{
@ -202,10 +202,10 @@ sub genpage ($$$) { #{{{
filename => "$config{templatedir}/page.tmpl");
if (length $config{cgiurl}) {
$template->param(editurl => "$config{cgiurl}?do=edit&page=$page");
$template->param(prefsurl => "$config{cgiurl}?do=prefs");
$template->param(editurl => cgiurl(do => "edit", page => $page));
$template->param(prefsurl => cgiurl(do => "prefs"));
if ($config{rcs}) {
$template->param(recentchangesurl => "$config{cgiurl}?do=recentchanges");
$template->param(recentchangesurl => cgiurl(do => "recentchanges"));
}
}

View File

@ -6,8 +6,35 @@ editing the [[templates]] BTW.
Current problems:
* A doctype should be added: do we want XHTML 1.0 or HTML 4.01 Trans as default?
* If XHTML: In templates &lt;hr&gt; should become &lt;hr\&gt; etc.
* A doctype should be added: do we want XHTML 1.0 or HTML 4.01 Trans as
default?
Need to choose a doctype that corresponds to what [[MarkDown]]
generates. For example, it does generate &lt;hr /&gt;
So xhml seems a good fit and I'm going to add that to the
templates.
One consideration of course is that regular users might embed html
that uses deprecated presentational elements like &lt;center&gt;.
--[[Joey]]
* If XHTML: In templates &lt;hr&gt; should become &lt;hr /&gt; etc.
* Image wikilinks should provide an alt text (maybe '$filname wiki-image'?).
Now it will be the text of the [[WikiLink]], which even allows
setting a custom alt text like this: \[[my_alt_text|image.png]]
--[[Joey]]
* &'s in (cgi-)url's must be escaped as &amp;amp;.
Fixed --[[Joey]]
* [ [inlinepage] ] gets wrapped in &lt;p&gt;...&lt;/p&gt; which has a high chance of invalidating the page.
Since markdown does this, the only way I can think to fix it is to
make the inlined page text start with &lt;/p&gt; and end with
&lt;p&gt;. Ugly, and of course there could be problems with
markdown enclosing it in other spanning tags in some cases.
I've implemented this hack now. :-/ --[[Joey]]
Test: [validate this page](http://validator.w3.org/check?url=referer)

12
ikiwiki
View File

@ -259,6 +259,12 @@ sub titlepage ($) { #{{{
return $title;
} #}}}
sub cgiurl (@) { #{{{
my %params=@_;
return $config{cgiurl}."?".join("&amp;", map "$_=$params{$_}", keys %params);
} #}}}
sub htmllink ($$;$$$) { #{{{
my $page=shift;
my $link=shift;
@ -286,13 +292,15 @@ sub htmllink ($$;$$$) { #{{{
$bestlink=htmlpage($bestlink);
}
if (! grep { $_ eq $bestlink } values %renderedfiles) {
return "<span><a href=\"$config{cgiurl}?do=create&page=$link&from=$page\">?</a>$linktext</span>"
return "<span><a href=\"".
cgiurl(do => "create", page => $link, from =>$page).
"\">?</a>$linktext</span>"
}
$bestlink=File::Spec->abs2rel($bestlink, dirname($page));
if (! $noimageinline && isinlinableimage($bestlink)) {
return "<img src=\"$bestlink\">";
return "<img src=\"$bestlink\" alt=\"$linktext\">";
}
return "<a href=\"$bestlink\">$linktext</a>";
} #}}}

View File

@ -1,4 +1,4 @@
<hr>
<hr />
<form action="<TMPL_VAR CGIURL>" method="GET">
<input type="hidden" name="do" value="blog">
<input type="hidden" name="from" value="<TMPL_VAR ROOTPAGE>">
@ -6,4 +6,4 @@
Add a new post titled: <input name=title size=40>
<input type="submit" value="Edit">
</form>
<hr>
<hr />

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title><TMPL_VAR FORM-TITLE></title></head>
<body>
@ -16,18 +18,18 @@ confict and commit again to save your changes.
<TMPL_VAR FIELD-FROM>
<TMPL_VAR FIELD-RCSINFO>
<TMPL_IF NAME="PAGE_SELECT">
Page location: <TMPL_VAR FIELD-PAGE><br>
Page location: <TMPL_VAR FIELD-PAGE><br />
<TMPL_ELSE>
<TMPL_VAR FIELD-PAGE>
</TMPL_IF>
<TMPL_VAR FIELD-CONTENT><br>
<TMPL_VAR FIELD-CONTENT><br />
<TMPL_IF NAME="CAN_COMMIT">
Optional comment about this change:</br>
<TMPL_VAR FIELD-COMMENTS><br>
Optional comment about this change:<br />
<TMPL_VAR FIELD-COMMENTS><br />
</TMPL_IF>
<TMPL_VAR FORM-SUBMIT>
<TMPL_VAR FORM-END>
<hr>
<hr />
<TMPL_IF NAME="PAGE_PREVIEW">
<h1>Page preview:</h1>
<TMPL_VAR PAGE_PREVIEW>

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title><TMPL_VAR TITLE></title></head>
<body>

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title><TMPL_VAR TITLE></title></head>
<body>
@ -25,11 +27,11 @@
<a href="<TMPL_VAR PREFSURL>">Preferences</a>&nbsp;
</TMPL_IF>
<TMPL_VAR DISCUSSIONLINK><br>
<TMPL_VAR DISCUSSIONLINK><br />
<hr>
<hr />
<TMPL_VAR CONTENT>
<hr>
<hr />
<TMPL_IF NAME="BACKLINKS">
<p>Links:

View File

@ -1,3 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head><title><TMPL_VAR TITLE></title></head>
<body>
@ -6,7 +8,7 @@
<TMPL_VAR INDEXLINK>/ <TMPL_VAR TITLE>
</h1>
<hr>
<hr />
<ul>
<TMPL_LOOP NAME="CHANGELOG">
@ -17,13 +19,13 @@
(<a href="<TMPL_VAR NAME="DIFFURL">">diff</a>)
</TMPL_IF>
</TMPL_LOOP>
<br>
<br />
<!-- <TMPL_VAR NAME="COMMITTYPE"> -->
changed <TMPL_VAR NAME="WHEN"> by <TMPL_VAR NAME="USER">:
<i>
<TMPL_LOOP NAME="MESSAGE">
<TMPL_IF NAME="LINE">
<TMPL_VAR NAME="LINE"><br>
<TMPL_VAR NAME="LINE"><br />
</TMPL_IF>
</TMPL_LOOP>
</i>