From bbc0c3b0259e763e00211106167c4c2caca0aa73 Mon Sep 17 00:00:00 2001 From: Roland Hieber Date: Mon, 21 Oct 2013 05:32:14 +0200 Subject: [PATCH] fork page.tmpl and add flattrthing plugin to auto-generate Flattr buttons --- plugins/IkiWiki/Plugin/flattrthing.pm | 135 +++++++++++++++ templates/page.tmpl | 239 ++++++++++++++++++++++++++ 2 files changed, 374 insertions(+) create mode 100644 plugins/IkiWiki/Plugin/flattrthing.pm create mode 100644 templates/page.tmpl diff --git a/plugins/IkiWiki/Plugin/flattrthing.pm b/plugins/IkiWiki/Plugin/flattrthing.pm new file mode 100644 index 0000000..c917ed4 --- /dev/null +++ b/plugins/IkiWiki/Plugin/flattrthing.pm @@ -0,0 +1,135 @@ +#!/usr/bin/perl + +# This plugin allows your page templates to include Flattr buttons, so +# Flattr buttons are automatically added on every page that uses the template. +# If you don't specify a thing ID with the flattrthing directive, it adds +# auto-submit buttons so things are created when the button is clicked the first +# time. +# +# The plugin is customizable through the following configuration options: +# - flattrthing_pagespec: allows you to specify a pagespec on which pages the +# plugin is active. If empty, no Flattr buttons are generated at all. +# - flattrthing_defaultuser: sets the default user that owns the Flattr things +# which are created by the auto-submit buttons. +# +# Also, the plugin adds the flattrthing directive, which allows you to customize +# the behaviour for one page. It knows the following parameters: +# - id: the Flattr thing ID (like in http://flattr.com/thing/12341234). If you +# specify this option, a button with a thing URL is generated instead of an +# auto-submit button. This allows you to link to things which already exist +# by the time you create your page. +# - user: a Flattr username that owns the thing created by the generated +# auto-submit button. This parameter has no effect when an ID is specified, +# since in this case, the owner is already known to Flattr. +# +# This plugin sets the following template variables which your templates should +# process and generate the according buttons with the right URLs: +# - FLATTR_ENABLE: contains a truthful value if the page matches the pagespec +# configured with flattrthing_pagespec. You can use it with TMPL_IF to +# generate code specific to pages which have a Flattr button. +# - FLATTR_THING_ID: if a thing ID was specified with the flattrthing directive, +# this variable contains the ID that was given in the directive. +# - FLATTR_THING_ID_SET: contains a thurthful value if FLATTR_THING_ID is set. +# - FLATTR_USER: contains the username that was specified with the flattrthing +# directive, or if that was not the case, the username that was configured +# with flattrthing_defaultuser in your setup file. +# - FLATTR_THING_URL: contains the full URL to the page. + +package IkiWiki::Plugin::flattrthing; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "flattrthing", call => \&getsetup); + hook(type => "scan", id => "flattrthing", call => \&scan); + hook(type => "preprocess", id => "flattrthing", call => \&preprocess); + hook(type => "pagetemplate", id => "flattrthing", call => \&pagetemplate); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => undef, + section => "widget", + }, + flattrthing_pagespec => { + type => "pagespec", + example => "!*/Discussion", + description => "Pages on which flattr button should be inserted. If empty, flattr buttons are not shown on any page.", + link => "ikiwiki/PageSpec", + safe => 1, + rebuild => undef, + }, + flattrthing_defaultuser => { + type => "string", + example => "!*/Discussion", + description => "Default flattr user that owns a thing if the username is not changed with the flattrthing directive", + safe => 1, + rebuild => undef, + }, +} + +sub scan { + my %params = @_; + my $page = $params{page}; + my $destpage = $params{destpage}; + my $baseurl = $config{url}; + $baseurl .= "/" unless substr($baseurl, -1) eq "/"; + if($destpage) { + $baseurl .= $destpage; + } else { + $baseurl .= $page; + } + $pagestate{$page}{flattrthing}{url} = $baseurl; + + if(exists $config{flattrthing_defaultuser} && + length $config{flattrthing_defaultuser}) { + $pagestate{$page}{flattrthing}{user} = $config{flattrthing_defaultuser}; + } else { + return error("Please set flattrthing_defaultuser in configuration!"); + } +} + +sub preprocess { + return "" unless @_; + my %params = @_; + + return error("flattrthing: please specify id or user") unless ($params{id} + or $params{user}); + + my $page = $params{page}; + $pagestate{$page}{flattrthing}{id} = int($params{id}) if $params{id}; + $pagestate{$page}{flattrthing}{user} = int($params{user}) if $params{user}; + + return ""; +} + +sub pagetemplate { + my %params = @_; + my $page = $params{page}; + my $template = $params{template}; + + if(exists $config{flattrthing_pagespec} && + length $config{flattrthing_pagespec} && + exists $pagestate{$page}{flattrthing}{user} && + length $pagestate{$page}{flattrthing}{user} && + pagespec_match($params{page}, $config{flattrthing_pagespec})) { + $template->param(FLATTR_ENABLED => 1); + $template->param( + FLATTR_THING_URL => $pagestate{$page}{flattrthing}{url}, + FLATTR_USER => $pagestate{$page}{flattrthing}{user}, + ); + + if(exists $pagestate{$page}{flattrthing}{id}) { + $template->param( + FLATTR_THING_ID_SET => 1, + FLATTR_THING_ID => $pagestate{$page}{flattrthing}{id}, + ); + } + } +} + +1; diff --git a/templates/page.tmpl b/templates/page.tmpl new file mode 100644 index 0000000..ae7fd01 --- /dev/null +++ b/templates/page.tmpl @@ -0,0 +1,239 @@ + + + + + + + + + + + + +<TMPL_VAR TITLE> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + +
+
+ + + +
+ + + + +
Comments on this page are closed.
+
+
+
+
+ + + +
+ + + + + + +
+ +
+ + + -- 2.20.1