From efb4418fca44d2063378f9b98dc708cb7e75e7b6 Mon Sep 17 00:00:00 2001 From: Frank Lichtenheld Date: Sun, 15 Mar 2009 18:43:44 +0100 Subject: [PATCH] Make the sponsors note more flexible It is now possible to define more than one sponsor which will be used in a round-robin fashion. --- lib/Template/Plugin/Math.pm | 242 ++++++++++++++++++++++++++++++++++++ templates/config.tmpl | 14 ++- templates/html/foot.tmpl | 5 +- 3 files changed, 255 insertions(+), 6 deletions(-) create mode 100644 lib/Template/Plugin/Math.pm diff --git a/lib/Template/Plugin/Math.pm b/lib/Template/Plugin/Math.pm new file mode 100644 index 0000000..ff40004 --- /dev/null +++ b/lib/Template/Plugin/Math.pm @@ -0,0 +1,242 @@ +#============================================================= -*-Perl-*- +# +# Template::Plugin::Math +# +# DESCRIPTION +# Plugin implementing numerous mathematical functions. +# +# AUTHORS +# Andy Wardley +# +# 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 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 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 module is available, and you've got the time +to wait, the C method is available: + + [% Math.truly_random_number %] + +=head1 AUTHOR + +Andy Wardley Eabw@wardley.orgE L + +=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 + +=cut + +# Local Variables: +# mode: perl +# perl-indent-level: 4 +# indent-tabs-mode: nil +# End: +# +# vim: expandtab shiftwidth=4: diff --git a/templates/config.tmpl b/templates/config.tmpl index 5ce7cc7..132db62 100644 --- a/templates/config.tmpl +++ b/templates/config.tmpl @@ -48,10 +48,16 @@ mail => 'webmaster@debian.org', } trademarknotes = g('%s is a trademark 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 diff --git a/templates/html/foot.tmpl b/templates/html/foot.tmpl index cbabd66..5a98997 100644 --- a/templates/html/foot.tmpl +++ b/templates/html/foot.tmpl @@ -35,9 +35,10 @@ Total page evaluation took [% benchmark %]
[% g('Learn more about this site') %].

[% END %] -[% IF sponsor.name %] +[% IF sponsors.size %]

-[% g('Hosting provided by %s.', sponsor.url, sponsor.name) %] +[% USE Math; random = Math.int(Math.rand(sponsors.size)); + g('This service is sponsored by %s.', sponsors.${random}.url, sponsors.${random}.name) -%]

[% END %] -- 2.39.2