localstyle: New plugin, allows overrding the toplevel local.css with one that is closer to a page.

I chose not to have it override style.css, because style.css is not really
intended to be edited; the one from the underlay is intended to be used as
a base that local.css overrides.

I chose to use a plugin rather than changing the default behavior, both
because I didn't want to have to worry about possibly breaking backwards
compatability (though this seems unlikely), and because it seemed cleaner
to not include style template parameters in the main page template code.

I suppose someone might want a way to not override the toplevel
local.css, but instead include it as well as foo/local.css. Probably the
best way to do that would be to have foo/local.css @import ../local.css
(modulo browser compatability issues). Alternatively, edit page.tmpl
to always include the toplevel local.css, or swap out this plugin for
another one.
master
Joey Hess 2009-11-09 13:32:08 -05:00
parent 1fec2fdd20
commit 9f0931ce21
5 changed files with 57 additions and 0 deletions

View File

@ -0,0 +1,35 @@
#!/usr/bin/perl
package IkiWiki::Plugin::localstyle;
use warnings;
use strict;
use IkiWiki 3.00;
sub import {
hook(type => "getsetup", id => "localstyle", call => \&getsetup);
hook(type => "pagetemplate", id => "localstyle", call => \&pagetemplate);
}
sub getsetup () {
return
plugin => {
safe => 1,
rebuild => 1,
},
}
sub pagetemplate (@) {
my %params=@_;
my $template=$params{template};
if ($template->query(name => "local_css")) {
my $best=bestlink($params{page}, 'local.css');
if ($best) {
$template->param(local_css => $best);
}
}
}
1

2
debian/changelog vendored
View File

@ -8,6 +8,8 @@ ikiwiki (3.20091032) UNRELEASED; urgency=low
the template is filled out. This improves the search plugin's indexing,
since it will not include navigational elements from the page template
or sidebar.
* localstyle: New plugin, allows overrding the toplevel local.css
with one that is closer to a page.
-- Joey Hess <joeyh@debian.org> Fri, 06 Nov 2009 12:04:29 -0500

View File

@ -16,3 +16,6 @@ files.
The [[plugins/meta]] plugin can be used to add additional style sheets to a
page.
The [[plugins/localstyle]] plugin can be used to override the toplevel
[[local.css]] for a whole section of the wiki.

View File

@ -0,0 +1,12 @@
[[!template id=plugin name=localstyle author="[[Joey]]"]]
[[!tag type/chrome]]
This plugin allows styling different sections of a wiki using different
versions of the local.css [[CSS]] file. Normally this file is read from the
top level of the wiki, but with this plugin enabled, standard
[[ikiwiki/subpage/LinkingRules]] are used to find the closest local.css
file to each page.
So, for example, to use different styling for page `foo`, as well as all
of its [[SubPages|ikiwiki/subpage]], such as `foo/bar`, create a
`foo/local.css`.

View File

@ -7,8 +7,13 @@
<TMPL_IF NAME="FAVICON">
<link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" />
</TMPL_IF>
<TMPL_IF NAME="STYLE_CSS">
<link rel="stylesheet" href="<TMPL_VAR BASEURL>style.css" type="text/css" />
<TMPL_IF NAME="LOCAL_CSS">
<link rel="stylesheet" href="<TMPL_VAR BASEURL><TMPL_VAR LOCAL_CSS>" type="text/css" />
<TMPL_ELSE>
<link rel="stylesheet" href="<TMPL_VAR BASEURL>local.css" type="text/css" />
</TMPL_IF>
<TMPL_IF NAME="EDITURL">
<link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" />
</TMPL_IF>