diff options
-rw-r--r-- | IkiWiki/Plugin/flattr.pm | 97 | ||||
-rw-r--r-- | IkiWiki/Plugin/relativedate.pm | 2 | ||||
-rw-r--r-- | IkiWiki/Plugin/toggle.pm | 2 | ||||
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | doc/ikiwiki/directive/flattr.mdwn | 45 | ||||
-rw-r--r-- | doc/plugins/contrib/flattr.mdwn | 3 | ||||
-rw-r--r-- | doc/plugins/flattr.mdwn | 9 | ||||
-rw-r--r-- | doc/style.css | 4 |
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; |