Make the sponsors note more flexible
authorFrank Lichtenheld <frank@lichtenheld.de>
Sun, 15 Mar 2009 17:43:44 +0000 (18:43 +0100)
committerFrank Lichtenheld <frank@lichtenheld.de>
Sun, 15 Mar 2009 17:43:44 +0000 (18:43 +0100)
It is now possible to define more than one sponsor which will be used
in a round-robin fashion.

lib/Template/Plugin/Math.pm [new file with mode: 0644]
templates/config.tmpl
templates/html/foot.tmpl

diff --git a/lib/Template/Plugin/Math.pm b/lib/Template/Plugin/Math.pm
new file mode 100644 (file)
index 0000000..ff40004
--- /dev/null
@@ -0,0 +1,242 @@
+#============================================================= -*-Perl-*-
+#
+# Template::Plugin::Math
+#
+# DESCRIPTION
+#   Plugin implementing numerous mathematical functions.
+#
+# AUTHORS
+#   Andy Wardley   <abw@wardley.org>
+#
+# COPYRIGHT
+#   Copyright (C) 2002-2007 Andy Wardley.  All Rights Reserved.
+#
+#   This module is free software; you can redistribute it and/or
+#   modify it under the same terms as Perl itself.
+#
+#============================================================================
+
+package Template::Plugin::Math;
+
+use strict;
+use warnings;
+use base 'Template::Plugin';
+
+our $VERSION = 1.16;
+our $AUTOLOAD;
+
+
+#------------------------------------------------------------------------
+# new($context, \%config)
+#
+# This constructor method creates a simple, empty object to act as a 
+# receiver for future object calls.  No doubt there are many interesting
+# configuration options that might be passed, but I'll leave that for 
+# someone more knowledgable in these areas to contribute...
+#------------------------------------------------------------------------
+
+sub new {
+    my ($class, $context, $config) = @_;
+    $config ||= { };
+
+    bless {
+        %$config,
+    }, $class;
+}
+
+sub abs   { shift; CORE::abs($_[0]);          }
+sub atan2 { shift; CORE::atan2($_[0], $_[1]); } # prototyped (ugg)
+sub cos   { shift; CORE::cos($_[0]);          }
+sub exp   { shift; CORE::exp($_[0]);          }
+sub hex   { shift; CORE::hex($_[0]);          }
+sub int   { shift; CORE::int($_[0]);          }
+sub log   { shift; CORE::log($_[0]);          }
+sub oct   { shift; CORE::oct($_[0]);          }
+sub rand  { shift; CORE::rand($_[0]);         }
+sub sin   { shift; CORE::sin($_[0]);          }
+sub sqrt  { shift; CORE::sqrt($_[0]);         }
+sub srand { shift; CORE::srand($_[0]);        }
+
+# Use the Math::TrulyRandom module
+# XXX This is *sloooooooowwwwwwww*
+sub truly_random {
+    eval { require Math::TrulyRandom; }
+         or die(Template::Exception->new("plugin",
+            "Can't load Math::TrulyRandom"));
+    return Math::TrulyRandom::truly_random_value();
+}
+
+eval {
+    require Math::Trig;
+    no strict qw(refs);
+    for my $trig_func (@Math::Trig::EXPORT) {
+        my $sub = Math::Trig->can($trig_func);
+        *{$trig_func} = sub { shift; &$sub(@_) };
+    }
+};
+
+# To catch errors from a missing Math::Trig
+sub AUTOLOAD { return; }
+
+1;
+
+__END__
+
+=head1 NAME
+
+Template::Plugin::Math - Plugin providing mathematical functions
+
+=head1 SYNOPSIS
+
+    [% USE Math %]
+
+    [% Math.sqrt(9) %]
+
+=head1 DESCRIPTION
+
+The Math plugin provides numerous mathematical functions for use
+within templates.
+
+=head1 METHODS
+
+C<Template::Plugin::Math> makes available the following functions from
+the Perl core:
+
+=over 4
+
+=item abs
+
+=item atan2
+
+=item cos
+
+=item exp
+
+=item hex
+
+=item int
+
+=item log
+
+=item oct
+
+=item rand
+
+=item sin
+
+=item sqrt
+
+=item srand
+
+=back
+
+In addition, if the L<Math::Trig> module can be loaded, the following
+functions are also available:
+
+=over 4
+
+=item pi
+
+=item tan
+
+=item csc
+
+=item cosec
+
+=item sec
+
+=item cot
+
+=item cotan
+
+=item asin
+
+=item acos
+
+=item atan
+
+=item acsc
+
+=item acosec
+
+=item asec
+
+=item acot
+
+=item acotan
+
+=item sinh
+
+=item cosh
+
+=item tanh
+
+=item csch
+
+=item cosech
+
+=item sech
+
+=item coth
+
+=item cotanh
+
+=item asinh
+
+=item acosh
+
+=item atanh
+
+=item acsch
+
+=item acosech
+
+=item asech
+
+=item acoth
+
+=item acotanh
+
+=item rad2deg
+
+=item rad2grad
+
+=item deg2rad
+
+=item deg2grad
+
+=item grad2rad
+
+=item grad2deg
+
+=back
+
+If the L<Math::TrulyRandom> module is available, and you've got the time
+to wait, the C<truly_random_number> method is available:
+
+    [% Math.truly_random_number %]
+
+=head1 AUTHOR
+
+Andy Wardley E<lt>abw@wardley.orgE<gt> L<http://wardley.org/>
+
+=head1 COPYRIGHT
+
+Copyright (C) 1996-2007 Andy Wardley.  All Rights Reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<Template::Plugin>
+
+=cut
+
+# Local Variables:
+# mode: perl
+# perl-indent-level: 4
+# indent-tabs-mode: nil
+# End:
+#
+# vim: expandtab shiftwidth=4:
index 5ce7cc736eddbc6501d8432c58ccf1b19f09d081..132db6230ada4bc7adec03572f68a7f1e555d46a 100644 (file)
        mail => 'webmaster@debian.org',
    }
    trademarknotes = g('%s is a <a href="%s">trademark</a> of %s', organisation, trademark.url, trademark.name)
-#   sponsor = {
-#      url => 'http://example.invalid/',
-#      name => 'Example Sponsor, Inc.',
-#   }
+   sponsors = [
+   {
+       url => 'http://example.invalid/',
+       name => 'Example Sponsor, Inc.',
+   },
+   {
+       url => 'http://example2.invalid/',
+       name => 'Example2 Sponsor, Inc.',
+   },
+   ]
 -%]
 [%-
    # possible values for importance: high, normal, low
index cbabd66a1b25a1d05841300ed8f942e9e3510590..5a989975f729552740b205f7d66a458d1194af6d 100644 (file)
@@ -35,9 +35,10 @@ Total page evaluation took [% benchmark %]<br>
  <a href="/about/">[% g('Learn more about this site') %]</a>.</p>
 [% END %]
 </div> <!-- end impressum -->
-[% IF sponsor.name %]
+[% IF sponsors.size %]
 <div id="sponsorfooter"><p>
-[% g('Hosting provided by <a href="%s">%s</a>.', sponsor.url, sponsor.name) %]
+[% USE Math; random = Math.int(Math.rand(sponsors.size));
+  g('This service is sponsored by <a href="%s">%s</a>.', sponsors.${random}.url, sponsors.${random}.name) -%]
 </p></div>
 [% END %]
 </div> <!-- end fineprint -->