X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/2f3f826b5bf123886d4e65eb8bd709b12639ca8b..f734ca2c64b457bc6ec7b48bc9199931f0719690:/IkiWiki/Plugin/theme.pm

diff --git a/IkiWiki/Plugin/theme.pm b/IkiWiki/Plugin/theme.pm
index ba6966381..9b84ea7f0 100644
--- a/IkiWiki/Plugin/theme.pm
+++ b/IkiWiki/Plugin/theme.pm
@@ -8,6 +8,8 @@ use IkiWiki 3.00;
 sub import {
 	hook(type => "getsetup", id => "theme", call => \&getsetup);
 	hook(type => "checkconfig", id => "theme", call => \&checkconfig);
+	hook(type => "needsbuild", id => "theme", call => \&needsbuild);
+	hook(type => "pagetemplate", id => "theme", call => \&pagetemplate);
 }
 
 sub getsetup () {
@@ -22,7 +24,7 @@ sub getsetup () {
 			example => "actiontabs",
 			description => "name of theme to enable",
 			safe => 1,
-			rebuild => 1,
+			rebuild => 0,
 		},
 }
 
@@ -34,4 +36,40 @@ sub checkconfig () {
 	}
 }
 
+sub needsbuild ($) {
+	my $needsbuild=shift;
+	if (($config{theme} || '') ne ($wikistate{theme}{currenttheme} || '')) {
+		# theme changed; ensure all files in the theme are built
+		my %needsbuild=map { $_ => 1 } @$needsbuild;
+		if ($config{theme}) {
+			foreach my $file (glob("$config{underlaydirbase}/themes/$config{theme}/*")) {
+				if (-f $file) {
+					my $f=IkiWiki::basename($file);
+					push @$needsbuild, $f
+						unless $needsbuild{$f};
+				}
+			}
+		}
+		elsif ($wikistate{theme}{currenttheme}) {
+			foreach my $file (glob("$config{underlaydirbase}/themes/$wikistate{theme}{currenttheme}/*")) {
+				my $f=IkiWiki::basename($file);
+				if (-f $file && defined eval { srcfile($f) }) {
+					push @$needsbuild, $f;
+				}
+			}
+		}
+		
+		$wikistate{theme}{currenttheme}=$config{theme};
+	}
+	return $needsbuild;
+}
+
+sub pagetemplate (@) {
+	my %params=@_;
+	my $template=$params{template};
+	if (exists $config{theme} && length $config{theme})  {
+		$template->param("theme_$config{theme}" => 1);
+	}
+}
+
 1