flattr: New plugin.
authorJoey Hess <joey@kitenet.net>
Thu, 12 Aug 2010 20:53:52 +0000 (16:53 -0400)
committerJoey Hess <joey@kitenet.net>
Thu, 12 Aug 2010 20:53:55 +0000 (16:53 -0400)
Thanks to jaywalk for the initial implementation at a flattr plugin!

This one is less configurable, but simpler.

IkiWiki/Plugin/flattr.pm [new file with mode: 0644]
debian/changelog
doc/ikiwiki/directive/flattr.mdwn [new file with mode: 0644]
doc/plugins/contrib/flattr.mdwn
doc/plugins/flattr.mdwn [new file with mode: 0644]
doc/style.css

diff --git a/IkiWiki/Plugin/flattr.pm b/IkiWiki/Plugin/flattr.pm
new file mode 100644 (file)
index 0000000..3aee1eb
--- /dev/null
@@ -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
index 440bee34f6c0c2bd7b211a867126ee5ea82f6a7e..f90fd8855296656788f08b836938b9020994c2d8 100644 (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
 
diff --git a/doc/ikiwiki/directive/flattr.mdwn b/doc/ikiwiki/directive/flattr.mdwn
new file mode 100644 (file)
index 0000000..5083005
--- /dev/null
@@ -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"]]
index f8f005c319dadbb8bda326143a10632413bc6c6a..e9b4bf85728e2d7d771f4ac37094e45d667b5b82 100644 (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.
diff --git a/doc/plugins/flattr.mdwn b/doc/plugins/flattr.mdwn
new file mode 100644 (file)
index 0000000..5da2795
--- /dev/null
@@ -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.
index 8dd3b1c151905d0c2f8fdae03c0b8bda8c38bf55..66d962bd640d3e2991c11eedb789c3e040d62da4 100644 (file)
@@ -449,6 +449,10 @@ li.L8 { list-style: upper-alpha; }
        background: #ff9900;
 }
 
+.FlattrButton {
+       display: none;
+}
+
 /* openid selector */
 #openid_choice {
        display: none;