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
parent
bfe959167a
commit
e41dd1e24e
|
@ -144,12 +144,13 @@ sub cgi_signin ($$) { #{{{
|
||||||
$session->param("name", $form->field("name"));
|
$session->param("name", $form->field("name"));
|
||||||
if (defined $form->field("do") &&
|
if (defined $form->field("do") &&
|
||||||
$form->field("do") ne 'signin') {
|
$form->field("do") ne 'signin') {
|
||||||
print $q->redirect(
|
print $q->redirect(cgiurl(
|
||||||
"$config{cgiurl}?do=".$form->field("do").
|
do => $form->field("do"),
|
||||||
"&page=".$form->field("page").
|
page => $form->field("page"),
|
||||||
"&title=".$form->field("title").
|
title => $form->field("title"),
|
||||||
"&subpage=".$form->field("subpage").
|
subpage => $form->field("subpage"),
|
||||||
"&from=".$form->field("from"));;
|
from => $form->field("from"),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
print $q->redirect($config{url});
|
print $q->redirect($config{url});
|
||||||
|
|
|
@ -186,7 +186,7 @@ sub postprocess_html_inline { #{{{
|
||||||
$ret.=$template->output;
|
$ret.=$template->output;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $ret;
|
return "</p>$ret<p>";
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub genpage ($$$) { #{{{
|
sub genpage ($$$) { #{{{
|
||||||
|
@ -202,10 +202,10 @@ sub genpage ($$$) { #{{{
|
||||||
filename => "$config{templatedir}/page.tmpl");
|
filename => "$config{templatedir}/page.tmpl");
|
||||||
|
|
||||||
if (length $config{cgiurl}) {
|
if (length $config{cgiurl}) {
|
||||||
$template->param(editurl => "$config{cgiurl}?do=edit&page=$page");
|
$template->param(editurl => cgiurl(do => "edit", page => $page));
|
||||||
$template->param(prefsurl => "$config{cgiurl}?do=prefs");
|
$template->param(prefsurl => cgiurl(do => "prefs"));
|
||||||
if ($config{rcs}) {
|
if ($config{rcs}) {
|
||||||
$template->param(recentchangesurl => "$config{cgiurl}?do=recentchanges");
|
$template->param(recentchangesurl => cgiurl(do => "recentchanges"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,35 @@ editing the [[templates]] BTW.
|
||||||
|
|
||||||
Current problems:
|
Current problems:
|
||||||
|
|
||||||
* A doctype should be added: do we want XHTML 1.0 or HTML 4.01 Trans as default?
|
* A doctype should be added: do we want XHTML 1.0 or HTML 4.01 Trans as
|
||||||
* If XHTML: In templates <hr> should become <hr\> etc.
|
default?
|
||||||
|
|
||||||
|
Need to choose a doctype that corresponds to what [[MarkDown]]
|
||||||
|
generates. For example, it does generate <hr />
|
||||||
|
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 <center>.
|
||||||
|
--[[Joey]]
|
||||||
|
|
||||||
|
* If XHTML: In templates <hr> should become <hr /> etc.
|
||||||
* Image wikilinks should provide an alt text (maybe '$filname wiki-image'?).
|
* 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;.
|
* &'s in (cgi-)url's must be escaped as &amp;.
|
||||||
|
|
||||||
|
Fixed --[[Joey]]
|
||||||
|
|
||||||
* [ [inlinepage] ] gets wrapped in <p>...</p> which has a high chance of invalidating the page.
|
* [ [inlinepage] ] gets wrapped in <p>...</p> 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 </p> and end with
|
||||||
|
<p>. 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
12
ikiwiki
|
@ -259,6 +259,12 @@ sub titlepage ($) { #{{{
|
||||||
return $title;
|
return $title;
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
|
sub cgiurl (@) { #{{{
|
||||||
|
my %params=@_;
|
||||||
|
|
||||||
|
return $config{cgiurl}."?".join("&", map "$_=$params{$_}", keys %params);
|
||||||
|
} #}}}
|
||||||
|
|
||||||
sub htmllink ($$;$$$) { #{{{
|
sub htmllink ($$;$$$) { #{{{
|
||||||
my $page=shift;
|
my $page=shift;
|
||||||
my $link=shift;
|
my $link=shift;
|
||||||
|
@ -286,13 +292,15 @@ sub htmllink ($$;$$$) { #{{{
|
||||||
$bestlink=htmlpage($bestlink);
|
$bestlink=htmlpage($bestlink);
|
||||||
}
|
}
|
||||||
if (! grep { $_ eq $bestlink } values %renderedfiles) {
|
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));
|
$bestlink=File::Spec->abs2rel($bestlink, dirname($page));
|
||||||
|
|
||||||
if (! $noimageinline && isinlinableimage($bestlink)) {
|
if (! $noimageinline && isinlinableimage($bestlink)) {
|
||||||
return "<img src=\"$bestlink\">";
|
return "<img src=\"$bestlink\" alt=\"$linktext\">";
|
||||||
}
|
}
|
||||||
return "<a href=\"$bestlink\">$linktext</a>";
|
return "<a href=\"$bestlink\">$linktext</a>";
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<hr>
|
<hr />
|
||||||
<form action="<TMPL_VAR CGIURL>" method="GET">
|
<form action="<TMPL_VAR CGIURL>" method="GET">
|
||||||
<input type="hidden" name="do" value="blog">
|
<input type="hidden" name="do" value="blog">
|
||||||
<input type="hidden" name="from" value="<TMPL_VAR ROOTPAGE>">
|
<input type="hidden" name="from" value="<TMPL_VAR ROOTPAGE>">
|
||||||
|
@ -6,4 +6,4 @@
|
||||||
Add a new post titled: <input name=title size=40>
|
Add a new post titled: <input name=title size=40>
|
||||||
<input type="submit" value="Edit">
|
<input type="submit" value="Edit">
|
||||||
</form>
|
</form>
|
||||||
<hr>
|
<hr />
|
||||||
|
|
|
@ -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>
|
<html>
|
||||||
<head><title><TMPL_VAR FORM-TITLE></title></head>
|
<head><title><TMPL_VAR FORM-TITLE></title></head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -16,18 +18,18 @@ confict and commit again to save your changes.
|
||||||
<TMPL_VAR FIELD-FROM>
|
<TMPL_VAR FIELD-FROM>
|
||||||
<TMPL_VAR FIELD-RCSINFO>
|
<TMPL_VAR FIELD-RCSINFO>
|
||||||
<TMPL_IF NAME="PAGE_SELECT">
|
<TMPL_IF NAME="PAGE_SELECT">
|
||||||
Page location: <TMPL_VAR FIELD-PAGE><br>
|
Page location: <TMPL_VAR FIELD-PAGE><br />
|
||||||
<TMPL_ELSE>
|
<TMPL_ELSE>
|
||||||
<TMPL_VAR FIELD-PAGE>
|
<TMPL_VAR FIELD-PAGE>
|
||||||
</TMPL_IF>
|
</TMPL_IF>
|
||||||
<TMPL_VAR FIELD-CONTENT><br>
|
<TMPL_VAR FIELD-CONTENT><br />
|
||||||
<TMPL_IF NAME="CAN_COMMIT">
|
<TMPL_IF NAME="CAN_COMMIT">
|
||||||
Optional comment about this change:</br>
|
Optional comment about this change:<br />
|
||||||
<TMPL_VAR FIELD-COMMENTS><br>
|
<TMPL_VAR FIELD-COMMENTS><br />
|
||||||
</TMPL_IF>
|
</TMPL_IF>
|
||||||
<TMPL_VAR FORM-SUBMIT>
|
<TMPL_VAR FORM-SUBMIT>
|
||||||
<TMPL_VAR FORM-END>
|
<TMPL_VAR FORM-END>
|
||||||
<hr>
|
<hr />
|
||||||
<TMPL_IF NAME="PAGE_PREVIEW">
|
<TMPL_IF NAME="PAGE_PREVIEW">
|
||||||
<h1>Page preview:</h1>
|
<h1>Page preview:</h1>
|
||||||
<TMPL_VAR PAGE_PREVIEW>
|
<TMPL_VAR PAGE_PREVIEW>
|
||||||
|
|
|
@ -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>
|
<html>
|
||||||
<head><title><TMPL_VAR TITLE></title></head>
|
<head><title><TMPL_VAR TITLE></title></head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -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>
|
<html>
|
||||||
<head><title><TMPL_VAR TITLE></title></head>
|
<head><title><TMPL_VAR TITLE></title></head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -25,11 +27,11 @@
|
||||||
<a href="<TMPL_VAR PREFSURL>">Preferences</a>
|
<a href="<TMPL_VAR PREFSURL>">Preferences</a>
|
||||||
</TMPL_IF>
|
</TMPL_IF>
|
||||||
|
|
||||||
<TMPL_VAR DISCUSSIONLINK><br>
|
<TMPL_VAR DISCUSSIONLINK><br />
|
||||||
|
|
||||||
<hr>
|
<hr />
|
||||||
<TMPL_VAR CONTENT>
|
<TMPL_VAR CONTENT>
|
||||||
<hr>
|
<hr />
|
||||||
|
|
||||||
<TMPL_IF NAME="BACKLINKS">
|
<TMPL_IF NAME="BACKLINKS">
|
||||||
<p>Links:
|
<p>Links:
|
||||||
|
|
|
@ -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>
|
<html>
|
||||||
<head><title><TMPL_VAR TITLE></title></head>
|
<head><title><TMPL_VAR TITLE></title></head>
|
||||||
<body>
|
<body>
|
||||||
|
@ -6,7 +8,7 @@
|
||||||
<TMPL_VAR INDEXLINK>/ <TMPL_VAR TITLE>
|
<TMPL_VAR INDEXLINK>/ <TMPL_VAR TITLE>
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<hr>
|
<hr />
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<TMPL_LOOP NAME="CHANGELOG">
|
<TMPL_LOOP NAME="CHANGELOG">
|
||||||
|
@ -17,13 +19,13 @@
|
||||||
(<a href="<TMPL_VAR NAME="DIFFURL">">diff</a>)
|
(<a href="<TMPL_VAR NAME="DIFFURL">">diff</a>)
|
||||||
</TMPL_IF>
|
</TMPL_IF>
|
||||||
</TMPL_LOOP>
|
</TMPL_LOOP>
|
||||||
<br>
|
<br />
|
||||||
<!-- <TMPL_VAR NAME="COMMITTYPE"> -->
|
<!-- <TMPL_VAR NAME="COMMITTYPE"> -->
|
||||||
changed <TMPL_VAR NAME="WHEN"> by <TMPL_VAR NAME="USER">:
|
changed <TMPL_VAR NAME="WHEN"> by <TMPL_VAR NAME="USER">:
|
||||||
<i>
|
<i>
|
||||||
<TMPL_LOOP NAME="MESSAGE">
|
<TMPL_LOOP NAME="MESSAGE">
|
||||||
<TMPL_IF NAME="LINE">
|
<TMPL_IF NAME="LINE">
|
||||||
<TMPL_VAR NAME="LINE"><br>
|
<TMPL_VAR NAME="LINE"><br />
|
||||||
</TMPL_IF>
|
</TMPL_IF>
|
||||||
</TMPL_LOOP>
|
</TMPL_LOOP>
|
||||||
</i>
|
</i>
|
||||||
|
|
Loading…
Reference in New Issue