]> sipb.mit.edu Git - ikiwiki.git/commitdiff
put the patch in the patchqueue
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Thu, 12 Jul 2007 21:47:41 +0000 (21:47 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Thu, 12 Jul 2007 21:47:41 +0000 (21:47 +0000)
doc/patchqueue/varioki_--_add_template_variables___40__with_closures_for_values__41___in_ikiwiki.setup.mdwn

index 7e144bc88d06c8f10bf0c0b649a9a8abc7509450..41f92d554c82a41454f05c2b894221b816344d80 100644 (file)
@@ -18,3 +18,216 @@ ManojSrivastava
 >     \[[if test="destpage(/index)" then="""...""" else="""..."""]]
 >
 > --[[JoshTriplett]]
 >     \[[if test="destpage(/index)" then="""...""" else="""..."""]]
 >
 > --[[JoshTriplett]]
+
+> Here's a dump of the file Manoj sent me, for reference.
+> 
+> My take on this is that simple plugins can do the same sort of things, this is
+> kind of wanting to avoid the plugin mechanism and just use templates and
+> stuff in the config file. Not too thrilled about that. --[[Joey]]
+
+----
+
+<pre>
+* looking for srivasta@debian.org--2006-misc/ikiwiki--upstream--1.0--patch-488 to compare with
+* comparing to srivasta@debian.org--2006-misc/ikiwiki--upstream--1.0--patch-488: ................................................................ done.
+
+* added files
+
+--- /dev/null
++++ mod/IkiWiki/Plugin/.arch-ids/varioki.pm.id
+@@ -0,0 +1 @@
++Manoj Srivastava <srivasta@debian.org> Thu Dec  7 12:59:07 2006 12659.0
+--- /dev/null
++++ mod/IkiWiki/Plugin/varioki.pm
+@@ -0,0 +1,190 @@
++#!/usr/bin/perl
++#                              -*- Mode: Cperl -*- 
++# varioki.pm --- 
++# Author           : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com ) 
++# Created On       : Wed Dec  6 22:25:44 2006
++# Created On Node  : glaurung.internal.golden-gryphon.com
++# Last Modified By : Manoj Srivastava
++# Last Modified On : Thu Dec  7 13:07:36 2006
++# Last Machine Used: glaurung.internal.golden-gryphon.com
++# Update Count     : 127
++# Status           : Unknown, Use with caution!
++# HISTORY          : 
++# Description      : 
++# 
++# arch-tag: 6961717b-156f-4ab2-980f-0d6a973aea21
++#
++# Copyright (c) 2006 Manoj Srivastava <srivasta@debian.org>
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++#
++
++require 5.002;
++
++package IkiWiki::Plugin::varioki;
++
++use warnings;
++use strict;
++use IkiWiki '1.00';
++
++our $VERSION = "0.1";
++my $file = __FILE__;
++
++
++=head1 NAME
++
++varioki - Add variables for use in ikiwiki templates
++
++=cut
++
++=head1 DESCRIPTION
++
++This plugin attempts to provide a means to add templates for use in
++ikiwiki templates, based on a hash variable set in the ikiwiki
++configuration file. The motivation for this plugin was to provide an
++easy way for end users to add information to be used in templates --
++for example, my C<Blosxom> blog entry template does fancy things with
++the date components of the entry, and there was no easy way to get
++that information into the template. Or if one wants to have a
++different page template for the top level index page than for the rest
++of the pages in the wiki (for example, to only put special content,
++like, say, C<last.fm> play lists, only on the front page).
++
++This plugin hooks itsef into the C<pagetemplate> hook, and adds
++parameters to the appropriate templates based on the type. For
++example, the following inseted into C<ikiwiki.setup> creates
++C<TMPL_VAR MOTTO>, C<ARRAYVAR>, C<HASHVAR> and C<TOPLVL> which can
++then be used in your templates. The array and hash variables are only
++for completeness; I suspect that the first two forms are all that are
++really required.
++
++ varioki => {
++   'motto'    => '"Manoj\'s musings"',
++   'toplvl'   => 'sub {return $page eq "index"}',
++   'arrayvar' => '[0, 1, 2, 3]',
++   'hashvar'  => '{1, 1, 2, 2}'
++ },
++
++Please note that the values in the hash must be simple strings which
++are then eval'd, so a string value has to be double quoted, as above
++(the eval strips off the outer quotes).  
++
++=cut
++
++
++sub import { #{{{
++      hook(type => "pagetemplate", id => "varioki", call => \&pagetemplate);
++} # }}}
++
++
++=pod
++
++For every key in the configured hash, the corresponding value is
++evaluated.  Based on whether the value was a stringified scalar, code,
++array, or hash, the value of the template parameter is generated on
++the fly.  The available variables are whatever is available to
++C<pagetemplate> hook scripts, namely, C<$page>, C<$destpage>, and
++C<$template>.  Additionally, the global variables and functions as
++defined in the Ikiwiki documentation
++(L<http://ikiwiki.kitenet.net/plugins/write.html>) may be used.
++
++=cut
++
++sub pagetemplate (@) { #{{{
++      my %params=@_;
++      my $page=$params{page};
++      my $template=$params{template};
++        
++        return unless defined $config{varioki};
++         for my $var (keys %{$config{varioki}}) {
++           my $value;
++           my $foo;
++           eval "\$foo=$config{varioki}{$var}";
++           if (ref($foo) eq "CODE") {
++             $value = $foo->();
++           }
++           elsif (ref($foo) eq "SCALAR") {
++             $value = $foo;
++           }
++           elsif (ref($foo) eq "ARRAY") {
++             $value = join ' ', @$foo;
++           }
++           elsif (ref($foo) eq "HASH") {
++             for my $i (values %$foo ) {
++               $value .= ' ' . "$i";
++             }
++           }
++           else {
++             $value = $foo;
++           }
++           warn "$page $var $value\n";
++           if ($template->query(name => "$var")) {
++             $template->param("$var" =>"$value");
++           }
++        }
++} # }}}
++
++1;
++
++=head1 CAVEATS
++
++This is very inchoate, at the moment, and needs testing. Also, there
++is no good way to determine how to handle hashes as values --
++currently, the code just joins all hash values with spaces, but it
++would be easier for the user to just use an anonymous sub instead of
++passing in a hash or an array.
++
++=cut
++
++=head1 BUGS
++
++Since C<ikiwiki> evals the configuration file, the values have to all
++on a single physical line. This is the reason we need to use strings
++and eval, instead of just passing in real anonymous sub references,
++since the eval pass converts the coderef into a string of the form
++"(CODE 12de345657)" which can't be dereferenced.
++
++=cut
++
++=head1 AUTHOR
++
++Manoj Srivastava <srivasta@debian.org>
++
++=head1 COPYRIGHT AND LICENSE
++
++This script is a part of the Devotee package, and is 
++
++Copyright (c) 2002 Manoj Srivastava <srivasta@debian.org>
++
++This program is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2 of the License, or
++(at your option) any later version.
++
++This program is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++GNU General Public License for more details.
++
++You should have received a copy of the GNU General Public License
++along with this program; if not, write to the Free Software
++Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++
++=cut
++
++1;
++
++__END__
++
+</pre>