flattr: New plugin.

Thanks to jaywalk for the initial implementation at a flattr plugin!

This one is less configurable, but simpler.
master
Joey Hess 2010-08-12 16:53:52 -04:00
parent a68241838b
commit 80102c042d
6 changed files with 160 additions and 0 deletions

View File

@ -0,0 +1,97 @@
#!/usr/bin/perl
package IkiWiki::Plugin::flattr;
use warnings;
use strict;
use IkiWiki 3.00;
sub import {
hook(type => "getsetup", id => "flattr", call => \&getsetup);
hook(type => "preprocess", id => "flattr", call => \&preprocess);
hook(type => "format", id => "flattr", call => \&format);
}
sub getsetup () {
return
plugin => {
safe => 1,
rebuild => undef,
},
flattr_userid => {
type => "string",
example => 'joeyh',
description => "userid or user name to use by default for Flattr buttons",
advanced => 0,
safe => 1,
rebuild => undef,
},
}
my %flattr_pages;
sub preprocess (@) {
my %params=@_;
$flattr_pages{$params{destpage}}=1;
my $url=$params{url};
if (! defined $url) {
$url=urlto($params{page}, "", 1);
}
my @fields;
foreach my $field (qw{language uid button hidden category tags}) {
if (exists $params{$field}) {
push @fields, "$field:$params{$field}";
}
}
return '<a class="FlattrButton" href="'.$url.'"'.
(exists $params{title} ? ' title="'.$params{title}.'"' : '').
' rev="flattr;'.join(';', @fields).';"'.
'>'.
(exists $params{description} ? $params{description} : '').
'</a>';
}
sub format (@) {
my %params=@_;
# Add flattr's javascript to pages with flattr buttons.
if ($flattr_pages{$params{page}}) {
if (! ($params{content}=~s!^(<body[^>]*>)!$1.flattrjs()!em)) {
# no <body> tag, probably in preview mode
$params{content}=flattrjs().$params{content};
}
}
return $params{content};
}
my $js_cached;
sub flattrjs {
return $js_cached if defined $js_cached;
my $js_url='https://api.flattr.com/js/0.5.0/load.js?mode=auto';
if (defined $config{flattr_userid}) {
my $userid=$config{flattr_userid};
$userid=~s/[^-A-Za-z0-9_]//g; # sanitize for inclusion in javascript
$js_url.="&uid=$userid";
}
# This is Flattr's standard javascript snippet to include their
# external javascript file, asynchronously.
return $js_cached=<<"EOF";
<script type="text/javascript">
<!--//--><![CDATA[//><!--
(function() {
var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];
s.type = 'text/javascript';
s.async = true;
s.src = '$js_url';
t.parentNode.insertBefore(s, t);
})();//--><!]]>
</script>
EOF
}
1

2
debian/changelog vendored
View File

@ -2,6 +2,8 @@ ikiwiki (3.20100805) UNRELEASED; urgency=low
* filecheck: Fall back to using the file command if the freedesktop
magic file cannot identify a file.
* flattr: New plugin. (Thanks to jaywalk for the initial implementation
at a flattr plugin! This one is less configurable, but simpler.)
-- Joey Hess <joeyh@debian.org> Mon, 09 Aug 2010 13:18:28 -0400

View File

@ -0,0 +1,45 @@
The `flattr` directive is supplied by the [[!iki plugins/flattr desc=flattr]] plugin.
This directive allows easily inserting Flattr buttons onto wiki pages.
Flattr supports both static buttons and javascript buttons. This directive
only creates dynamic javascript buttons. If you want to insert a static
Flattr button, you can simply copy the html code for it from Flattr, instead.
Note that this directive inserts javascript code into the page, that
loads more javascript code from Flattr.com. So only use it if you feel
comfortable with that.
The directive can be used to display a button for a thing you have already
manually submitted to Flattr. In this mode, the only parameter you need to
include is the exact url to the thing that was submitted to Flattr.
(If the button is for the current page, you can leave that out.) For
example, this is the Flattr button for ikiwiki. Feel free to add it to all
your pages. ;)
\[[!flattr url="http://ikiwiki.info/" button=compact]]
The directive can also be used to create a button that automatically
submits a page to Flattr when a user clicks on it. In this mode you
need to include parameters to specify your uid, and a title, category, tags,
and description for the page. For example, this is a Flattr button for
a blog post:
\[[!flattr uid=25634 title="my new blog post" category=text
tags="blog,example" description="This is a post on my blog."]]
Here are all possible parameters you can pass to the Flattr directive.
* `button` - Set to "compact" for a small button.
* `url` - The url to the thing to be Flattr'd. If omitted, defaults
to the url of the current page.
* `uid` - Your numeric Flattr userid. Not needed if the flattr plugin
has been configured with a global `flattr_userid`.
* `title` - A short title for the thing, to show on its Flattr page.
* `description` - A description of the thing, to show on its Flattr
page.
* `category` - One of: text, images, video, audio, software, rest.
* `tags` - A list of tags separated by a comma.
* `language` - A language code.
* `hidden` - Set to 1 to hide the button from listings on Flattr.com.
[[!meta robots="noindex, follow"]]

View File

@ -10,6 +10,9 @@ I wrote some notes on [jonatan.walck.se](http://jonatan.walck.se/software/ikiwik
This plugin is licensed under [CC0](http://creativecommons.org/publicdomain/zero/1.0/) (public domain).
Note that there is now a [[plugins/flattr]] plugin bundled with ikiwiki. It
is less configurable, not supporting static buttons, but simpler to use.
# Usage #
# [[!flattr args]] where args are in the form of arg=value.

View File

@ -0,0 +1,9 @@
[[!template id=plugin name=flattr author="[[Joey]]"]]
[[!tag type/web]]
[Flattr](http://flattr.com/) is a social micropayment platform.
This plugin allows easily adding Flattr buttons to pages,
using the [[ikiwiki/directive/flattr]] directive.
This plugin has a configuration setting. `flattr_userid` can be set
to either your numeric flatter userid, or your flattr username.

View File

@ -449,6 +449,10 @@ li.L8 { list-style: upper-alpha; }
background: #ff9900;
}
.FlattrButton {
display: none;
}
/* openid selector */
#openid_choice {
display: none;