]> sipb.mit.edu Git - ikiwiki.git/commitdiff
* Search in default location for templates as a fallback when templatedir is
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 12 Jan 2007 20:48:19 +0000 (20:48 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 12 Jan 2007 20:48:19 +0000 (20:48 +0000)
  pointed elsewhere, so that only modified templates need to be copied into
  a templatedir. Based on work by JeremyReed.

IkiWiki.pm
IkiWiki/CGI.pm
debian/changelog
doc/patchqueue/fallback_for_templates.mdwn [deleted file]
doc/usage.mdwn

index 43ef67e8c9ce6ea4824977528a602533962cd47c..8a3c817558781433931e4dd15b3a2bb5e3745df0 100644 (file)
@@ -636,18 +636,35 @@ sub saveindex () { #{{{
        close OUT;
 } #}}}
 
+sub template_file ($) { #{{{
+       my $template=shift;
+
+       foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") {
+               return "$dir/$template" if -e "$dir/$template";
+       }
+       return undef;
+} #}}}
+
 sub template_params (@) { #{{{
-       my $filename=shift;
-       
+       my $filename=template_file(shift);
+
+       if (! defined $filename) {
+               return if wantarray;
+               return "";
+       }
+
        require HTML::Template;
-       return filter => sub {
+       my @ret=(
+               filter => sub {
                        my $text_ref = shift;
                        $$text_ref=&Encode::decode_utf8($$text_ref);
                },
-               filename => "$config{templatedir}/$filename",
+               filename => $filename,
                loop_context_vars => 1,
                die_on_bad_params => 0,
-               @_;
+               @_
+       );
+       return wantarray ? @ret : {@ret};
 } #}}}
 
 sub template ($;@) { #{{{
index 85fc1a38614b17ce38984a597319306140eba2ea..b1f770b05e2d1b677acee15e8b5ffac81b08bcd3 100644 (file)
@@ -129,8 +129,7 @@ sub cgi_signin ($$) { #{{{
                params => $q,
                action => $config{cgiurl},
                header => 0,
-               template => (-e "$config{templatedir}/signin.tmpl" ?
-                            {template_params("signin.tmpl")} : ""),
+               template => scalar template_params("signin.tmpl"),
                stylesheet => baseurl()."style.css",
        );
        my $buttons=["Login"];
@@ -198,8 +197,7 @@ sub cgi_prefs ($$) { #{{{
                javascript => 0,
                params => $q,
                action => $config{cgiurl},
-               template => (-e "$config{templatedir}/prefs.tmpl" ?
-                            {template_params("prefs.tmpl")} : ""),
+               template => scalar template_params("prefs.tmpl"),
                stylesheet => baseurl()."style.css",
        );
        my $buttons=["Save Preferences", "Logout", "Cancel"];
@@ -293,8 +291,7 @@ sub cgi_editpage ($$) { #{{{
                params => $q,
                action => $config{cgiurl},
                table => 0,
-               template => (-e "$config{templatedir}/editpage.tmpl" ?
-                               {template_params("editpage.tmpl")} : ""),
+               template => scalar template_params("editpage.tmpl"),
        );
        
        run_hooks(formbuilder_setup => sub {
index 0fd77766ada2902875c8d046b0b0866cbaa88e3f..fa0ab16d4b6db23684d5132004ff288ea81dfd3b 100644 (file)
@@ -10,8 +10,11 @@ ikiwiki (1.39) UNRELEASED; urgency=low
   * Fix encoding issue with use of Locale::Gettext. Seems that the OO
     interface returns proper utf-8 decoded strings, unlike the traditional
     interface, so use the OO interface.
+  * Search in default location for templates as a fallback when templatedir is
+    pointed elsewhere, so that only modified templates need to be copied into
+    a templatedir. Based on work by JeremyReed.
 
- -- Joey Hess <joeyh@debian.org>  Thu, 11 Jan 2007 18:59:49 -0500
+ -- Joey Hess <joeyh@debian.org>  Fri, 12 Jan 2007 15:34:14 -0500
 
 ikiwiki (1.38) unstable; urgency=low
 
diff --git a/doc/patchqueue/fallback_for_templates.mdwn b/doc/patchqueue/fallback_for_templates.mdwn
deleted file mode 100644 (file)
index 9992996..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-It would be nice if you didn't have to copy all templates to your custom templatedir so you only have your customizations there. And then have it fall back to the location as configured at build time (like /usr/share/ikiwiki/templates/). This would be similar to underlaydir. I don't think any extra configuration directive is needed. As it is now, RecentChanges will have Perl CGI error and Preferences will be an empty page, if you don't have corresponding templates.
-
-I have been testing the following. Sorry if the don't match up as I may have other changes (unrelated) also.
-
-(no markdown for patch, so open in editor to real)
-
---- IkiWiki.pm.save    2007-01-12 09:05:48.000000000 +0900
-+++ IkiWiki.pm 2007-01-12 09:08:24.000000000 +0900
-@@ -638,7 +638,9 @@
-                       my $text_ref = shift;
-                       $$text_ref=&Encode::decode_utf8($$text_ref);
-               },
--              filename => "$config{templatedir}/$filename",
-+              filename => (-e "$config{templatedir}/$filename" ?
-+                      "$config{templatedir}/$filename" :
-+                      "$installdir/share/ikiwiki/templates/$filename"),
-               loop_context_vars => 1,
-               die_on_bad_params => 0,
-               @_;
-
---- IkiWiki/CGI.pm.orig        2007-01-01 07:18:26.000000000 +0900
-+++ IkiWiki/CGI.pm     2007-01-12 10:29:14.000000000 +0900
-@@ -291,8 +294,7 @@
-               params => $q,
-               action => $config{cgiurl},
-               table => 0,
--              template => (-e "$config{templatedir}/editpage.tmpl" ?
--                              {template_params("editpage.tmpl")} : ""),
-+              template => {template_params("editpage.tmpl")},
-       );
-       
-       run_hooks(formbuilder_setup => sub {
-
-
-Note I don't do prefs nor signin because they are not real users of templates.
-Also, the above is a little redundant as by default it will use same path for both.
-
-Once something like this is in source then usage can be updated
\ No newline at end of file
index 47716696fe6be34983dcd2b299e2e9abcd681d8f..29ec09670d225408aa1e1cc0af19c9da7abd70f5 100644 (file)
@@ -101,9 +101,10 @@ configuration options of their own.
 
 * --templatedir
 
-  Specify the directory that the page [[templates]] are stored in.
-  Default is `/usr/share/ikiwiki/templates`, or another location as
-  configured at build time.
+  Specify the directory that the page [[templates]] are stored in. Default
+  is `/usr/share/ikiwiki/templates`, or another location as configured at
+  build time. If the templatedir is changed, missing templates will still
+  be searched for in the default location as a fallback.
 
 * --underlaydir