aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-11-09 13:32:08 -0500
committerJoey Hess <joey@gnu.kitenet.net>2009-11-09 13:39:05 -0500
commit9f0931ce21e5f58e2e9de0ef302beca08b8f9177 (patch)
tree0c57de59b093121bb017f78bfd8ec723fa42c0e2
parent1fec2fdd20f04bae4f48980e04681bfa608db99e (diff)
downloadikiwiki-9f0931ce21e5f58e2e9de0ef302beca08b8f9177.tar
ikiwiki-9f0931ce21e5f58e2e9de0ef302beca08b8f9177.tar.gz
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.
-rw-r--r--IkiWiki/Plugin/localstyle.pm35
-rw-r--r--debian/changelog2
-rw-r--r--doc/css.mdwn3
-rw-r--r--doc/plugins/localstyle.mdwn12
-rw-r--r--templates/page.tmpl5
5 files changed, 57 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/localstyle.pm b/IkiWiki/Plugin/localstyle.pm
new file mode 100644
index 000000000..111f4dc30
--- /dev/null
+++ b/IkiWiki/Plugin/localstyle.pm
@@ -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
diff --git a/debian/changelog b/debian/changelog
index 6a5ae30ab..4ab63f175 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
diff --git a/doc/css.mdwn b/doc/css.mdwn
index 20790b3d1..29a335596 100644
--- a/doc/css.mdwn
+++ b/doc/css.mdwn
@@ -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.
diff --git a/doc/plugins/localstyle.mdwn b/doc/plugins/localstyle.mdwn
new file mode 100644
index 000000000..70a909d68
--- /dev/null
+++ b/doc/plugins/localstyle.mdwn
@@ -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`.
diff --git a/templates/page.tmpl b/templates/page.tmpl
index e71ba316d..0e73463ec 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -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>