summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/flattr.pm97
-rw-r--r--IkiWiki/Plugin/relativedate.pm2
-rw-r--r--IkiWiki/Plugin/toggle.pm2
-rw-r--r--debian/changelog2
-rw-r--r--doc/ikiwiki/directive/flattr.mdwn45
-rw-r--r--doc/plugins/contrib/flattr.mdwn3
-rw-r--r--doc/plugins/flattr.mdwn9
-rw-r--r--doc/style.css4
8 files changed, 162 insertions, 2 deletions
diff --git a/IkiWiki/Plugin/flattr.pm b/IkiWiki/Plugin/flattr.pm
new file mode 100644
index 000000000..3aee1eb93
--- /dev/null
+++ b/IkiWiki/Plugin/flattr.pm
@@ -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
diff --git a/IkiWiki/Plugin/relativedate.pm b/IkiWiki/Plugin/relativedate.pm
index c9280ef14..7296889ab 100644
--- a/IkiWiki/Plugin/relativedate.pm
+++ b/IkiWiki/Plugin/relativedate.pm
@@ -27,7 +27,7 @@ sub format (@) {
my %params=@_;
if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
- # no </body> tag, probably in preview mode
+ # no <body> tag, probably in preview mode
$params{content}=include_javascript($params{page}, 1).$params{content};
}
return $params{content};
diff --git a/IkiWiki/Plugin/toggle.pm b/IkiWiki/Plugin/toggle.pm
index 20967d3fd..1f93f87fe 100644
--- a/IkiWiki/Plugin/toggle.pm
+++ b/IkiWiki/Plugin/toggle.pm
@@ -69,7 +69,7 @@ sub format (@) {
if ($params{content}=~s!(<div class="toggleable(?:-open)?" id="[^"]+">\s*)</div>!$1!g) {
$params{content}=~s/<div class="toggleableend">//g;
if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
- # no </body> tag, probably in preview mode
+ # no <body> tag, probably in preview mode
$params{content}=include_javascript($params{page}, 1).$params{content};
}
}
diff --git a/debian/changelog b/debian/changelog
index 440bee34f..f90fd8855 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
index 000000000..5083005ce
--- /dev/null
+++ b/doc/ikiwiki/directive/flattr.mdwn
@@ -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"]]
diff --git a/doc/plugins/contrib/flattr.mdwn b/doc/plugins/contrib/flattr.mdwn
index f8f005c31..e9b4bf857 100644
--- a/doc/plugins/contrib/flattr.mdwn
+++ b/doc/plugins/contrib/flattr.mdwn
@@ -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
index 000000000..5da279518
--- /dev/null
+++ b/doc/plugins/flattr.mdwn
@@ -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.
diff --git a/doc/style.css b/doc/style.css
index 8dd3b1c15..66d962bd6 100644
--- a/doc/style.css
+++ b/doc/style.css
@@ -449,6 +449,10 @@ li.L8 { list-style: upper-alpha; }
background: #ff9900;
}
+.FlattrButton {
+ display: none;
+}
+
/* openid selector */
#openid_choice {
display: none;