From 2995ce6f2c9c3861547ff681ffbdbdf8c813f8ac Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 15 Oct 2008 23:48:58 -0400 Subject: thought --- doc/todo/clear_page_to_delete.mdwn | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 doc/todo/clear_page_to_delete.mdwn (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn new file mode 100644 index 000000000..0c218c987 --- /dev/null +++ b/doc/todo/clear_page_to_delete.mdwn @@ -0,0 +1,2 @@ +Would it make sense to automatically delete a page if it's edited and +cleared to be entirely empty (or only have whitespace)? Discuss. -- cgit v1.2.3 From c2a55bd735bf2978cc4b998847394a1853b8678f Mon Sep 17 00:00:00 2001 From: pesco Date: Thu, 16 Oct 2008 16:20:08 -0400 Subject: darcs rcs_add fixed. --- doc/todo/darcs.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/darcs.mdwn b/doc/todo/darcs.mdwn index b8ddfd485..e5bf5ee27 100644 --- a/doc/todo/darcs.mdwn +++ b/doc/todo/darcs.mdwn @@ -546,4 +546,6 @@ Regarding the repository layout: There are two darcs repositories. One is the `s >> `rcs_commit_staged`. For some revision control systems, which >> automatically commit modifications, it would be a no-op. --[[Joey]] +>>> Done. --pesco + [[!tag patch]] -- cgit v1.2.3 From 37a0fbebd4d356316189cf147f5e41821234ddb7 Mon Sep 17 00:00:00 2001 From: "http://alcopop.org/me/openid/" Date: Fri, 17 Oct 2008 11:00:37 -0400 Subject: --- doc/todo/clear_page_to_delete.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index 0c218c987..243b9f55e 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -1,2 +1,4 @@ Would it make sense to automatically delete a page if it's edited and cleared to be entirely empty (or only have whitespace)? Discuss. + + I'd say so; yes. A method of deleting pages via the web would be great; I can't think of a use of keeping blank pages around. What about vandalism -- if someone blanks a page and deletes it and someone else wishes to restore it; or is undoing edits via the web a bigger issue? -- [[JonDowland]] -- cgit v1.2.3 From ef4b9b54206bec2930d387b57ebbb5d7b2a5dce2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 17 Oct 2008 21:16:27 -0400 Subject: response --- doc/todo/clear_page_to_delete.mdwn | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index 243b9f55e..1a0d3f008 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -1,4 +1,16 @@ Would it make sense to automatically delete a page if it's edited and -cleared to be entirely empty (or only have whitespace)? Discuss. +cleared to be entirely empty (or only have whitespace)? Discuss. --[[Joey]] - I'd say so; yes. A method of deleting pages via the web would be great; I can't think of a use of keeping blank pages around. What about vandalism -- if someone blanks a page and deletes it and someone else wishes to restore it; or is undoing edits via the web a bigger issue? -- [[JonDowland]] + I'd say so; yes. A method of deleting pages via the web would be great; I +can't think of a use of keeping blank pages around. What about vandalism -- +if someone blanks a page and deletes it and someone else wishes to restore +it; or is undoing edits via the web a bigger issue? -- [[JonDowland]] + +Of course there's already a way to delete pages (remove plugin). So the +question is really: + +* Does it make sense to have a second way to do it, by clearing the page? +* Should it be enabled even if the full remove plugin isn't? + +Re vandalism in general, I am generally happy using git-revert to kill the +offending change. --[[Joey]] -- cgit v1.2.3 From ac8e8f5ad7387a815cb0eb1b0a662694c86f2439 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sun, 19 Oct 2008 18:55:05 -0400 Subject: one more opinion --- doc/todo/clear_page_to_delete.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index 1a0d3f008..eddce79b4 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -14,3 +14,7 @@ question is really: Re vandalism in general, I am generally happy using git-revert to kill the offending change. --[[Joey]] + +I don't think we need a second way to delete pages, which would probably be +used by the only few people who will learn it's possible by random +documentation reading, find it useful, *and* remember it. -- [[intrigeri]] -- cgit v1.2.3 From 214d73775f6595cd65b24922926dfd6aa7b30253 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sun, 19 Oct 2008 19:19:24 -0400 Subject: initial wishlist submission --- doc/todo/httpauth_feature_parity_with_passwordauth.mdwn | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 doc/todo/httpauth_feature_parity_with_passwordauth.mdwn (limited to 'doc/todo') diff --git a/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn b/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn new file mode 100644 index 000000000..8a338ece1 --- /dev/null +++ b/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn @@ -0,0 +1,11 @@ +The only way to have a private ikiwiki, with a shared user database for static pages and CGI authentication, is to use [[plugins/httpauth]]. It would be good for httpauth to be on par with [[plugins/passwordauth]], +i.e. to allow registering users, resetting passwords, and changing passwords; supporting some kind of +`account_creation_password` configuration option would be nice, too. + +I'll probably propose patches implementing this at some point. +I've not had a single look at the code yet, but it may be nice to factorize +the relevant passwordauth code, instead of rewriting it completely in httpauth. + +-- [[intrigeri]] + +[[wishlist]] -- cgit v1.2.3 From 4a958e0c1e1d3f49c665c5d4aa89214ecbd61bdd Mon Sep 17 00:00:00 2001 From: tschwinge Date: Mon, 20 Oct 2008 04:58:04 -0400 Subject: My thoughts. --- doc/todo/clear_page_to_delete.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index eddce79b4..ccb7634e5 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -18,3 +18,9 @@ offending change. --[[Joey]] I don't think we need a second way to delete pages, which would probably be used by the only few people who will learn it's possible by random documentation reading, find it useful, *and* remember it. -- [[intrigeri]] + +On the other hand, clearing the page's whole content essentially means deleting +the page. That's what the user intended to do in this case. The information +content of an empty vs. a deleted page is essentially the same, I'd say. But +having ikiwiki remove those stale pages would save some (minimal, admittedly) +time needed for manual clean-up. --[[tschwinge]] -- cgit v1.2.3 From 044e34f329a989509cf87f21701b23158e2a4af6 Mon Sep 17 00:00:00 2001 From: "http://xma.myopenid.com/" Date: Mon, 20 Oct 2008 10:06:26 -0400 Subject: My opinion --- doc/todo/clear_page_to_delete.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index ccb7634e5..36742fe21 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -24,3 +24,8 @@ the page. That's what the user intended to do in this case. The information content of an empty vs. a deleted page is essentially the same, I'd say. But having ikiwiki remove those stale pages would save some (minimal, admittedly) time needed for manual clean-up. --[[tschwinge]] + +On EmacsWiki, a page is marked for deletion when it contains just the DeletedPage +keyword and if there were no page editions since XX days. Here, I use pages that +can be empty everyday and filled all day long. It does not make sense to me to +delete these pages :). --[[xma]] -- cgit v1.2.3 From 3a07fc2802e05dca7a12319067787ac0761aa5f3 Mon Sep 17 00:00:00 2001 From: "http://alcopop.org/me/openid/" Date: Mon, 20 Oct 2008 10:23:41 -0400 Subject: I was not aware of remove. --- doc/todo/clear_page_to_delete.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index 36742fe21..50ae246bb 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -29,3 +29,5 @@ On EmacsWiki, a page is marked for deletion when it contains just the DeletedPag keyword and if there were no page editions since XX days. Here, I use pages that can be empty everyday and filled all day long. It does not make sense to me to delete these pages :). --[[xma]] + +I was not aware of [[plugins/remove]]. I don't think another method is necessary -- [[JonDowland]] -- cgit v1.2.3 From 170ebe663bdca9bde394291fcb65ab59485c681a Mon Sep 17 00:00:00 2001 From: intrigeri Date: Mon, 20 Oct 2008 18:40:30 -0400 Subject: added link to another idea --- doc/todo/applydiff_plugin.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/applydiff_plugin.mdwn b/doc/todo/applydiff_plugin.mdwn index d3eb9793b..fd0783c2b 100644 --- a/doc/todo/applydiff_plugin.mdwn +++ b/doc/todo/applydiff_plugin.mdwn @@ -54,3 +54,5 @@ modify only *one* page may be easier. Implementation ============== + +Also see [[joey]]'s idea on [[users/xma/discussion]], to allow (filtered) anonymous push to this wiki's repository. -- cgit v1.2.3 From dbf8358d6805fd81925dde1fd9ff3f10dc99fb77 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 20 Oct 2008 20:16:30 -0400 Subject: bit of a design for how a post-receive hook could work --- doc/todo/applydiff_plugin.mdwn | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/applydiff_plugin.mdwn b/doc/todo/applydiff_plugin.mdwn index fd0783c2b..b8ddcd6ce 100644 --- a/doc/todo/applydiff_plugin.mdwn +++ b/doc/todo/applydiff_plugin.mdwn @@ -56,3 +56,40 @@ Implementation ============== Also see [[joey]]'s idea on [[users/xma/discussion]], to allow (filtered) anonymous push to this wiki's repository. + +> Ideally the filtering should apply the same constraints on what's pushed +> as are applied to web edits. So locked pages can't be changed, etc. +> +> That could be accomplished by making the git pre-receive hook be a +> ikiwiki wrapper. A new `git_receive_wrapper` config setting could cause +> the wrapper to be generated, with `$config{receive}` set to true. +> +> When run that way, ikiwiki would call `rcs_receive`. In the case of git, +> that would look at the received changes as fed into the hook on stdin, +> and use `parse_diff_tree` to get a list of the files changed. Then it +> could determine if the changes were allowed. +> +> To do that, it should perhaps first look at what unix user received the +> commit. That could be mapped directly to an ikiwiki user. This would +> typically be an unprivelidged user, but you might also want to set up +> separate users who have fewer limits on what they can push. OTOH, I'm not +> sure how to get this info in an ikiwiki wrapper.. the real and effective +> gid are already trampled. So maybe leave this out and always treat it as +> an anonymous edit from a non-logged in user? +> +> Then it seems like it would want to call `check_canedit` to test if an +> edit to each changed page is allowed. Might also want to call +> `check_canattach` and `check_canremove` if the attach and remove plugins +> are enabled. All three expect to be passed a CGI and a CGI::Session +> object, which is a bit problimatic here. So dummy the objects up? (To call +> `check_canattach` the changed attachment would need to be extracted to a +> temp file for it to check..) +> +> If a change is disallowed, it would print out what was disallowed, and +> exit nonzero. I think that git then discards the pushed objects (or maybe +> they remain in the database until `git-gc` .. if so, that could be used +> to DOS by uploading junk, so need to check this point). +> +> Also, I've not verified that the objects have been recieved already when +> whe pre-receive hook is called. Although the docs seem to say that is the +> case. --[[Joey]] -- cgit v1.2.3 From d66fc7acf17a094759fcea32617fa441e629ae37 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 21 Oct 2008 12:18:22 -0400 Subject: updated with new thoughts on user checking --- doc/todo/applydiff_plugin.mdwn | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/applydiff_plugin.mdwn b/doc/todo/applydiff_plugin.mdwn index b8ddcd6ce..3439196f2 100644 --- a/doc/todo/applydiff_plugin.mdwn +++ b/doc/todo/applydiff_plugin.mdwn @@ -69,13 +69,15 @@ Also see [[joey]]'s idea on [[users/xma/discussion]], to allow (filtered) anonym > and use `parse_diff_tree` to get a list of the files changed. Then it > could determine if the changes were allowed. > -> To do that, it should perhaps first look at what unix user received the +> To do that, it should first look at what unix user received the > commit. That could be mapped directly to an ikiwiki user. This would -> typically be an unprivelidged user, but you might also want to set up -> separate users who have fewer limits on what they can push. OTOH, I'm not -> sure how to get this info in an ikiwiki wrapper.. the real and effective -> gid are already trampled. So maybe leave this out and always treat it as -> an anonymous edit from a non-logged in user? +> typically be an unprivelidged user (that was set up just to allow +> anonymous pushes), but you might also want to set up +> separate users who have fewer limits on what they can push. And, of +> course, pushes from the main user, who owns the wiki, would not be +> checked at all. So, let's say `$config{usermap}` is a hash, something +> like `{usera => "wikiusera", userb => "wikiuserb"}`, and pushes from +> users not in the hash are not checked. > > Then it seems like it would want to call `check_canedit` to test if an > edit to each changed page is allowed. Might also want to call -- cgit v1.2.3 From 0f8883f398e62ff0dc566dba4c32d3d636119d42 Mon Sep 17 00:00:00 2001 From: "http://jblevins.org/" Date: Wed, 22 Oct 2008 14:03:53 -0400 Subject: Link to h1title plugin --- doc/todo/Option_to_make_title_an_h1__63__.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Option_to_make_title_an_h1__63__.mdwn b/doc/todo/Option_to_make_title_an_h1__63__.mdwn index efa07ad79..8676bec48 100644 --- a/doc/todo/Option_to_make_title_an_h1__63__.mdwn +++ b/doc/todo/Option_to_make_title_an_h1__63__.mdwn @@ -6,3 +6,9 @@ Currently, the page title (either the name of the page or the title specified wi > way, # is reserved for h1 if you choose to use headers in your page. --[[Joey]] [[done]] + +> For anyone interested, I've written a small plugin called [h1title][] that does the +> latter, making `#` (only when on the first line) set the page title, removing it from +> the page body. --[[JasonBlevins]], October 22, 2008 + + [h1title]: http://code.jblevins.org/ikiwiki/plugins/h1title.pm -- cgit v1.2.3 From 0fde74b012781b41b3b1c844006062bcb1ae49ca Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 23 Oct 2008 18:16:55 -0400 Subject: update --- doc/todo/applydiff_plugin.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/applydiff_plugin.mdwn b/doc/todo/applydiff_plugin.mdwn index 3439196f2..5f6333691 100644 --- a/doc/todo/applydiff_plugin.mdwn +++ b/doc/todo/applydiff_plugin.mdwn @@ -95,3 +95,8 @@ Also see [[joey]]'s idea on [[users/xma/discussion]], to allow (filtered) anonym > Also, I've not verified that the objects have been recieved already when > whe pre-receive hook is called. Although the docs seem to say that is the > case. --[[Joey]] + +>> Update: The git pre-receive hook stuff is written, and seems to work. +>> I think it makes more sense than using diffs, and so think this todo +>> could probably be closed. +>> --[[Joey]] -- cgit v1.2.3 From 7a89dbb8225b00ec7f1ee559f2b8daad8e0ae404 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Fri, 24 Oct 2008 12:50:05 -0400 Subject: thanks, closing wishlist --- doc/todo/applydiff_plugin.mdwn | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/applydiff_plugin.mdwn b/doc/todo/applydiff_plugin.mdwn index 5f6333691..feb68a808 100644 --- a/doc/todo/applydiff_plugin.mdwn +++ b/doc/todo/applydiff_plugin.mdwn @@ -1,4 +1,4 @@ -[[!tag wishlist]] +[[!tag wishlist done]] [[!toc ]] @@ -100,3 +100,9 @@ Also see [[joey]]'s idea on [[users/xma/discussion]], to allow (filtered) anonym >> I think it makes more sense than using diffs, and so think this todo >> could probably be closed. >> --[[Joey]] + +>>> I agree, closing this. I really prefer this solution to the one I was +>>> initially proposing. +>>> Is this pre-receive hook already enabled on ikiwiki.info? +>>> If not, do you plan to enable it at some point? +>>> --[[intrigeri]] -- cgit v1.2.3 From 52856b307b6451076f82aa7f8f3d70f5ca162dda Mon Sep 17 00:00:00 2001 From: intrigeri Date: Fri, 24 Oct 2008 17:16:52 -0400 Subject: I was answered --- doc/todo/applydiff_plugin.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/applydiff_plugin.mdwn b/doc/todo/applydiff_plugin.mdwn index feb68a808..d26b0dfe9 100644 --- a/doc/todo/applydiff_plugin.mdwn +++ b/doc/todo/applydiff_plugin.mdwn @@ -106,3 +106,5 @@ Also see [[joey]]'s idea on [[users/xma/discussion]], to allow (filtered) anonym >>> Is this pre-receive hook already enabled on ikiwiki.info? >>> If not, do you plan to enable it at some point? >>> --[[intrigeri]] + +>>>> [[news/git_push_to_this_wiki]] gave me the answer. Well done! --[[intrigeri]] -- cgit v1.2.3 From 3044ce0d4a248bac9a3871a9442f4d3e6aa1e5bf Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 24 Oct 2008 17:52:38 -0400 Subject: other DVCS may be able to support anon push --- doc/todo/rcs_updates_needed.mdwn | 10 ++++++++++ doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn | 5 ----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 doc/todo/rcs_updates_needed.mdwn delete mode 100644 doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn (limited to 'doc/todo') diff --git a/doc/todo/rcs_updates_needed.mdwn b/doc/todo/rcs_updates_needed.mdwn new file mode 100644 index 000000000..472a5800f --- /dev/null +++ b/doc/todo/rcs_updates_needed.mdwn @@ -0,0 +1,10 @@ +I've added three new functions to the ikiwiki VCS interface to support +renaming and removing files using the web interface. The mercurial and +tla [[rcs]] backends need implementions of these functions. + +(The maintainers of these backends have been mailed. --[[Joey]]) + +Also, currently git is the only VCS to have support for +[[untrusted_push|tips/untrusted_git_push]]. It _may_ be possible to +implement it for other DVCS, if they offer a hook that can be used to check +incoming pushes early. diff --git a/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn b/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn deleted file mode 100644 index 2af659c3b..000000000 --- a/doc/todo/rcs_updates_needed_for_rename_and_remove.mdwn +++ /dev/null @@ -1,5 +0,0 @@ -I've added three new functions to the ikiwiki VCS interface to support -renaming and removing files using the web interface. The mercurial and -tla [[rcs]] backends need implementions of these functions. - -(The maintainers of these backends have been mailed. --[[Joey]]) -- cgit v1.2.3 From e8652cb0a55e6c458b700a25281eac3f2197a8d2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 26 Oct 2008 19:03:12 -0400 Subject: editdiff already exists --- doc/todo/plugin.mdwn | 4 ---- 1 file changed, 4 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/plugin.mdwn b/doc/todo/plugin.mdwn index 132de4480..b3e3a7889 100644 --- a/doc/todo/plugin.mdwn +++ b/doc/todo/plugin.mdwn @@ -70,10 +70,6 @@ Suggestions of ideas for plugins: > web-server-specific code to list all users, and openid can't feasibly do so > at all. --[[JoshTriplett]] -* It would be nice to be able to have a button to show "Differences" (or - "Show Diff") when editing a page. Is that an option that can be enabled? - Using a plugin? - * For PlaceWiki I want to be able to do some custom plugins, including one that links together subpages about the same place created by different users. This seems to call for a plugin that applies to every page w/o any -- cgit v1.2.3 From 65bf71d387ba406d4fcf697d76151b6953176cf8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 26 Oct 2008 19:43:57 -0400 Subject: organizing and pulling together syntax highlighting info --- doc/plugins/contrib/sourcehighlight.mdwn | 5 ++ doc/todo/syntax_highlighting.mdwn | 54 ++++++++++++++++++++++ ...wiki-formatted_comments_with_syntax_plugin.mdwn | 5 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 doc/todo/syntax_highlighting.mdwn (limited to 'doc/todo') diff --git a/doc/plugins/contrib/sourcehighlight.mdwn b/doc/plugins/contrib/sourcehighlight.mdwn index 2eb22e6ed..fb368945b 100644 --- a/doc/plugins/contrib/sourcehighlight.mdwn +++ b/doc/plugins/contrib/sourcehighlight.mdwn @@ -20,3 +20,8 @@ This problem with sourcehighlight needs to be fixed before it is very useful. - Is there a way to configure the colors used by source-highlight (other than editing the globally installed "default.style" file)? It would help if I could pass the command arbitrary command-line arguments; then I could configure which config file it's supposed to use. For instance, I'm not a fan of hard-coding the colors into the HTML output. IMHO, css-style formatting should be preferred. All that can be set via the command line ... --Peter > I don't really have time right now, but it should be easy to add, if you look at how src-lang is handled. Patches are welcome :-) --[[DavidBremner]] + +Note that [[Will]] wrote a plugin that uses source-highlight also. It's +available +[here|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]]. +--[[Joey]] diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn new file mode 100644 index 000000000..e992cc514 --- /dev/null +++ b/doc/todo/syntax_highlighting.mdwn @@ -0,0 +1,54 @@ +There's been a lot of work on contrib syntax highlighting plugins. One should be +picked and added to ikiwiki core. + +Ideally, it should support both converting whole source files into wiki +pages, as well as doing syntax highlighting as a preprocessor directive +(which is either passed the text, or reads it from a file). + +The big list of possibilities: + +* [[plugins/contrib/highlightcode]] uses [[cpan Syntax::Highlight::Engine::Kate]], + operates on whole source files only, has a few bugs (see + [here](http://u32.net/Highlight_Code_Plugin/), and needs to be updated to + support [[bugs/multiple_pages_with_same_name]]. +* [[cpan IkiWiki-Plugin-syntax]] only operates as a directive. + Interestingly, it supports multiple highlighting backends, including Kate + and Vim. +* [[plugins/contrib/syntax]] only operates as a directive + ([[not_on_source_code_files|automatic_use_of_syntax_plugin_on_source_code_files]]), + and uses [[cpan Text::VimColor]]. +* [[plugins/contrib/sourcehighlight]] uses src-highlight, and operates on + whole source files only. Needs to be updated to + support [[bugs/multiple_pages_with_same_name]]. +* [[sourcecode|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]] + also uses src-highlight, and operates on whole source files. + Has problems with [[bugs/multiple_pages_with_same_name]]. + +General problems: + +* Using non-perl syntax highlighting backends is slow. I'd prefer either + using a perl module, or a multiple-backend solution that can use a perl + module as one option. +* Currently no single plugin supports both modes of operation (directive + and whole source file to page). +* Nothing seems to support + [[wiki-formatted_comments|wiki-formatted_comments_with_syntax_plugin]] + inside source files. Doing this probably means post-processing the + results of the highlighting engine, to find places where it's highlighted + comments, and then running them through the ikiwiki rendering pipeline. + This seems fairly doable with [[cpan Syntax::Highlight::Engine::Kate]], + at least. +* The whole-file plugins tend to have a problem that things that look like + wikilinks in the source code get munged into links by ikiwiki, which can + have confusing results. Similar problem with preprocessor directives. +* The whole-file plugins all get confused if there is a `foo.c` and a `foo.h`. + This is trivially fixable now by passing the keepextension option when + registering the htmlize hooks, though. +* Whole-file plugins register a bunch of htmlize hooks. The wacky thing + about it is that, when creating a new page, you can then pick "c" or + "h" or "pl" etc from the dropdown that normally has "mdwn" etc in it. + Is this a bug, or a feature? (Even if a feature, plugins with many + extensions make the dropdown unusable..) +* The per page highlighters can't handle "Makefile", or other files + without a significant extension. +* diff --git a/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn b/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn index 08ca61b0c..a5244c9ef 100644 --- a/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn +++ b/doc/todo/wiki-formatted_comments_with_syntax_plugin.mdwn @@ -1 +1,4 @@ -[[Wishlist]] item: I'd love to see the ability to optionally switch back to wiki syntax within the comments of code pretty-printed with the [[plugins/contrib/syntax]] plugin. This would allow the use of links and formatting in comments. +[[Wishlist]] item: I'd love to see the ability to optionally switch back to +wiki syntax within the comments of code pretty-printed with the +[[plugins/contrib/syntax]] plugin. This would allow the use of links and +formatting in comments. -- cgit v1.2.3 From a4ddf1e5041ac76e57fb61df687217b491c32e75 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 26 Oct 2008 19:58:40 -0400 Subject: further thoughts --- doc/todo/Feature_parity_with_Trac.mdwn | 1 + doc/todo/syntax_highlighting.mdwn | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/Feature_parity_with_Trac.mdwn b/doc/todo/Feature_parity_with_Trac.mdwn index 8693da5e3..788d565a2 100644 --- a/doc/todo/Feature_parity_with_Trac.mdwn +++ b/doc/todo/Feature_parity_with_Trac.mdwn @@ -10,6 +10,7 @@ Features needed: * This could be improved with [[todo/source_link]]. * Currently the source highlighting is a little problematic, as there can be two source files with the same wikiname. e.g. a `hello-world.c` and `hello-world.h`. See [[bugs/multiple_pages_with_same_name]] + > That bug was fixed before you linked to the page. :-) * Trac 'Timeline' feature: view history of the RCS - the `recentchanges` button. * Trac 'Roadmap' feature: Which TODOs/bugs are needed for which milestones. Use the [[plugins/progress]] directive to show percentage complete for each milestone. * Bug tracking: see [[tips/integrated_issue_tracking_with_ikiwiki]] and [[todo/Updated_bug_tracking_example]]. diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index e992cc514..fec3f963f 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -28,7 +28,8 @@ General problems: * Using non-perl syntax highlighting backends is slow. I'd prefer either using a perl module, or a multiple-backend solution that can use a perl - module as one option. + module as one option. (Or, if there's a great highlighter python module, + we could use an external plugin..) * Currently no single plugin supports both modes of operation (directive and whole source file to page). * Nothing seems to support @@ -41,6 +42,9 @@ General problems: * The whole-file plugins tend to have a problem that things that look like wikilinks in the source code get munged into links by ikiwiki, which can have confusing results. Similar problem with preprocessor directives. + One approach that's also been requested for eg, + [[plugins/contrib/mediawiki]] is to allow controlling which linkification + types a page type can have on it. * The whole-file plugins all get confused if there is a `foo.c` and a `foo.h`. This is trivially fixable now by passing the keepextension option when registering the htmlize hooks, though. @@ -48,7 +52,11 @@ General problems: about it is that, when creating a new page, you can then pick "c" or "h" or "pl" etc from the dropdown that normally has "mdwn" etc in it. Is this a bug, or a feature? (Even if a feature, plugins with many - extensions make the dropdown unusable..) -* The per page highlighters can't handle "Makefile", or other files - without a significant extension. -* + extensions make the dropdown unusable.. One way to deal with that is have + a config setting that lists what extensions to offer highlighting for. + Most people won't need/want the dozens some engines support.) +* The per page highlighters can't handle creating wiki pages from + "Makefile", or other files without a significant extension. + Not clear how to fix this, as ikiwiki is very oriented toward file + extensions. The workaround is to use a directive on a wiki page, pulling + in the Makefile. -- cgit v1.2.3 From 1e561f8b5fc78dbc3675dde30fea396a3590a2b5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 26 Oct 2008 20:13:14 -0400 Subject: another thought --- doc/todo/syntax_highlighting.mdwn | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index fec3f963f..041d92b13 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -5,7 +5,7 @@ Ideally, it should support both converting whole source files into wiki pages, as well as doing syntax highlighting as a preprocessor directive (which is either passed the text, or reads it from a file). -The big list of possibilities: +## The big list of possibilities * [[plugins/contrib/highlightcode]] uses [[cpan Syntax::Highlight::Engine::Kate]], operates on whole source files only, has a few bugs (see @@ -24,7 +24,7 @@ The big list of possibilities: also uses src-highlight, and operates on whole source files. Has problems with [[bugs/multiple_pages_with_same_name]]. -General problems: +## General problems * Using non-perl syntax highlighting backends is slow. I'd prefer either using a perl module, or a multiple-backend solution that can use a perl @@ -60,3 +60,30 @@ General problems: Not clear how to fix this, as ikiwiki is very oriented toward file extensions. The workaround is to use a directive on a wiki page, pulling in the Makefile. + +## format directive + +Rather than making syntax highlight plugins have to provide a preprocessor +directive as well as handling whole source files, perhaps a generic format +directive could be used: + + \[[!format pl """..."""]] + +That would run the text through the pl htmlizer, from the syntax hightligh +plugin. OTOH, if "rst" were given, it would run the text through the rst +htmlizer. So, more generic, allows mixing different types of markup on one +page, as well as syntax highlighting. Does require specifying the type of +format, instead of allows it to be guessed (which some syntax highlighters +can do). + +Hmm, this would also allow comments inside source files to have mdwn +embedded in them, without making the use of mdwn a special case, or needing +to postprocess the syntax highlighter output to find comments. + + /* \[[!format mdwn """ + + This is a comment in my C file. You can use mdwn in here. + + """]] */ + +Note that this assumes that directives are expanded in source files. -- cgit v1.2.3 From f0fc8d158d60822d265457c612e99710fa4c63e7 Mon Sep 17 00:00:00 2001 From: bremner Date: Sun, 26 Oct 2008 20:18:36 -0400 Subject: --- doc/todo/syntax_highlighting/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/todo/syntax_highlighting/discussion.mdwn (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting/discussion.mdwn b/doc/todo/syntax_highlighting/discussion.mdwn new file mode 100644 index 000000000..e6a73ba26 --- /dev/null +++ b/doc/todo/syntax_highlighting/discussion.mdwn @@ -0,0 +1,3 @@ +sourcehighlight is annoyingly slow, but it does support wiki directives +in comments. See [here](http://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/ListMerge/) +for an example (tags). -- cgit v1.2.3 From 3439e3797389ff34d6437249d431e54720682bbf Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Mon, 27 Oct 2008 00:44:34 -0400 Subject: Patch for substitution of sha1 in diffurl --- doc/todo/provide_sha1_for_git_diffurl.mdwn | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 doc/todo/provide_sha1_for_git_diffurl.mdwn (limited to 'doc/todo') diff --git a/doc/todo/provide_sha1_for_git_diffurl.mdwn b/doc/todo/provide_sha1_for_git_diffurl.mdwn new file mode 100644 index 000000000..aac3c6307 --- /dev/null +++ b/doc/todo/provide_sha1_for_git_diffurl.mdwn @@ -0,0 +1,21 @@ +This [[patch]] allows for `\[[sha1]]` substitution in the `diffurl` +for git repositories. This is useful for use with [cgit][] which has +diffurls of the following form: + + /project.git/diff/[[file]]?id=\[[sha1]] + + [cgit]: http://hjemli.net/git/cgit/ + + diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm + index 5bef928..164210d 100644 + --- a/IkiWiki/Plugin/git.pm + +++ b/IkiWiki/Plugin/git.pm + @@ -518,6 +518,7 @@ sub rcs_recentchanges ($) { #{{{ + + my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : ""; + $diffurl =~ s/\[\[file\]\]/$file/go; + + $diffurl =~ s/\[\[sha1\]\]/$sha1/go; + $diffurl =~ s/\[\[sha1_parent\]\]/$ci->{'parent'}/go; + $diffurl =~ s/\[\[sha1_from\]\]/$detail->{'sha1_from'}/go; + $diffurl =~ s/\[\[sha1_to\]\]/$detail->{'sha1_to'}/go; + -- cgit v1.2.3 From 065cae4670d32f7293ab06ea10ac18e59acc0bc8 Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Mon, 27 Oct 2008 00:45:54 -0400 Subject: Fix escaping --- doc/todo/provide_sha1_for_git_diffurl.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/provide_sha1_for_git_diffurl.mdwn b/doc/todo/provide_sha1_for_git_diffurl.mdwn index aac3c6307..af785c3e6 100644 --- a/doc/todo/provide_sha1_for_git_diffurl.mdwn +++ b/doc/todo/provide_sha1_for_git_diffurl.mdwn @@ -2,7 +2,7 @@ This [[patch]] allows for `\[[sha1]]` substitution in the `diffurl` for git repositories. This is useful for use with [cgit][] which has diffurls of the following form: - /project.git/diff/[[file]]?id=\[[sha1]] + /project.git/diff/\[[file]]?id=\[[sha1]] [cgit]: http://hjemli.net/git/cgit/ -- cgit v1.2.3 From 5e9f24bebc6e1568905b0cd1963f67c5be607729 Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Mon, 27 Oct 2008 01:03:37 -0400 Subject: Thoughts --- doc/todo/syntax_highlighting/discussion.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting/discussion.mdwn b/doc/todo/syntax_highlighting/discussion.mdwn index e6a73ba26..adae9c1fb 100644 --- a/doc/todo/syntax_highlighting/discussion.mdwn +++ b/doc/todo/syntax_highlighting/discussion.mdwn @@ -1,3 +1,12 @@ sourcehighlight is annoyingly slow, but it does support wiki directives in comments. See [here](http://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/ListMerge/) for an example (tags). + +* * * * * + +I think having the option to choose source code page types from the +dropdown list is definitely a feature. This gives users an easy way +to contribute programs (say `.pl` files) or code snippets (like, for +example, the Elisp area of the EmacsWiki). Actually, would there any +other way to create a `.pl` file without write access to the +repository? --[[JasonBlevins]] -- cgit v1.2.3 From 8530e827b01a6eed8b8c933e758e152a1dc32035 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 27 Oct 2008 14:45:54 -0400 Subject: git: Allow [[sha1_commit]] to be used in the diffurl, to support cgit. --- IkiWiki/Plugin/git.pm | 3 ++- debian/changelog | 1 + doc/todo/provide_sha1_for_git_diffurl.mdwn | 4 +++- po/ikiwiki.pot | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 5bef92856..1a39d87e5 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -95,7 +95,7 @@ sub getsetup () { #{{{ diffurl => { type => "string", example => "http://git.example.com/gitweb.cgi?p=wiki.git;a=blobdiff;h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_parent]];f=[[file]]", - description => "gitweb url to show a diff ([[sha1_to]], [[sha1_from]], [[sha1_parent]], and [[file]] substituted)", + description => "gitweb url to show a diff ([[sha1_to]], [[sha1_from]], [[sha1_parent]], [[sha1_commit]] and [[file]] substituted)", safe => 1, rebuild => 1, }, @@ -521,6 +521,7 @@ sub rcs_recentchanges ($) { #{{{ $diffurl =~ s/\[\[sha1_parent\]\]/$ci->{'parent'}/go; $diffurl =~ s/\[\[sha1_from\]\]/$detail->{'sha1_from'}/go; $diffurl =~ s/\[\[sha1_to\]\]/$detail->{'sha1_to'}/go; + $diffurl =~ s/\[\[sha1_commit\]\]/$sha1/go; push @pages, { page => pagename($file), diff --git a/debian/changelog b/debian/changelog index 63556c941..299cf1af2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -35,6 +35,7 @@ ikiwiki (2.68) UNRELEASED; urgency=low of a second. * Add support for checking pushes from untrusted git committers. This can be used to set up anonymous git pushes, and other similar things. + * git: Allow [[sha1_commit]] to be used in the diffurl, to support cgit. -- Joey Hess Fri, 17 Oct 2008 20:11:02 -0400 diff --git a/doc/todo/provide_sha1_for_git_diffurl.mdwn b/doc/todo/provide_sha1_for_git_diffurl.mdwn index af785c3e6..dfd848058 100644 --- a/doc/todo/provide_sha1_for_git_diffurl.mdwn +++ b/doc/todo/provide_sha1_for_git_diffurl.mdwn @@ -18,4 +18,6 @@ diffurls of the following form: $diffurl =~ s/\[\[sha1_parent\]\]/$ci->{'parent'}/go; $diffurl =~ s/\[\[sha1_from\]\]/$detail->{'sha1_from'}/go; $diffurl =~ s/\[\[sha1_to\]\]/$detail->{'sha1_to'}/go; - + +> [[done]], but I called it `sha1_commit` since I think that's what it's +> actually a sha1 of. --[[Joey]] diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index cbae46752..7a2891ea5 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-26 20:44-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" -- cgit v1.2.3 From 9fb259af50b4b7ed27610902b15d5a16a47988ef Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 27 Oct 2008 14:47:42 -0400 Subject: responses --- doc/todo/syntax_highlighting/discussion.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting/discussion.mdwn b/doc/todo/syntax_highlighting/discussion.mdwn index adae9c1fb..76f92aacc 100644 --- a/doc/todo/syntax_highlighting/discussion.mdwn +++ b/doc/todo/syntax_highlighting/discussion.mdwn @@ -2,6 +2,10 @@ sourcehighlight is annoyingly slow, but it does support wiki directives in comments. See [here](http://www.cs.unb.ca/~bremner/teaching/java_examples/snippet/ListMerge/) for an example (tags). +> I think that is just a result of it expanding directives, and wikilinks, +> everywhere in the file, which is generally a possible problem.. +> --[[Joey]] + * * * * * I think having the option to choose source code page types from the @@ -10,3 +14,8 @@ to contribute programs (say `.pl` files) or code snippets (like, for example, the Elisp area of the EmacsWiki). Actually, would there any other way to create a `.pl` file without write access to the repository? --[[JasonBlevins]] + +> Well, you can upload them as an attachment if the wiki is configured to +> allow it. Having them in the drop down becomes a problem when there are +> so many wacky extensions in there that you can't find anything. +> --[[Joey]] -- cgit v1.2.3 From cf6843f1baa54e953e1aadf06118806d71c131ca Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 27 Oct 2008 18:38:20 -0400 Subject: Updated patch --- .../discussion.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn index 2fad9f19a..467ec350e 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn @@ -1,6 +1,6 @@ Here is another [[patch]] for this. It is more up to date than either of the patches linked on the previous page. It is most similar to [[plugins/contrib/sourcehighlight]]. -Note that if this is being used with `c` or `c++` then you'll probably want to wait until [[bugs/multiple_pages_with_same_name]] is fixed. +Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. -- [[Will]] @@ -92,7 +92,7 @@ Note that if this is being used with `c` or `c++` then you'll probably want to w foreach my $lang (split(/[, ]+/, $config{sourcecode_lang})) { if ($langs{$lang}) { - hook(type => "htmlize", id => $lang, call => \&htmlize); + hook(type => "htmlize", id => $lang, call => \&htmlize, keepextension => 1); } else { error("Your installation of source-highlight cannot handle sourcecode language $lang!"); } -- cgit v1.2.3 From d2db534f1f5b4dc326fd75e60aba29bbfa0d7d3e Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 27 Oct 2008 18:40:49 -0400 Subject: Note change in src-highlight plugin --- doc/todo/syntax_highlighting.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 041d92b13..43878437f 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -22,7 +22,7 @@ pages, as well as doing syntax highlighting as a preprocessor directive support [[bugs/multiple_pages_with_same_name]]. * [[sourcecode|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]] also uses src-highlight, and operates on whole source files. - Has problems with [[bugs/multiple_pages_with_same_name]]. + Updated to work with the fix for [[bugs/multiple_pages_with_same_name]]. Untested with files with no extension, e.g. `Makefile`. ## General problems -- cgit v1.2.3 From 2ff8ffcc56fe5b0f45d841abae224fdea4f70e9e Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 27 Oct 2008 18:45:22 -0400 Subject: Note sourcecode plugin doesn't pollute drop-down menu --- doc/todo/syntax_highlighting/discussion.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting/discussion.mdwn b/doc/todo/syntax_highlighting/discussion.mdwn index 76f92aacc..7a4095c65 100644 --- a/doc/todo/syntax_highlighting/discussion.mdwn +++ b/doc/todo/syntax_highlighting/discussion.mdwn @@ -19,3 +19,8 @@ repository? --[[JasonBlevins]] > allow it. Having them in the drop down becomes a problem when there are > so many wacky extensions in there that you can't find anything. > --[[Joey]] + +>> I should just note that the +>> [[sourcecode|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]] +>> plugin only adds the file extensions listed in the config. This shouldn't cause +>> massive drop-down menu pollution. -- [[Will]] -- cgit v1.2.3 From cbd6e829102e9e5730c814da81453a3babfbc273 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 27 Oct 2008 18:50:31 -0400 Subject: Notes and more linkage --- doc/todo/Feature_parity_with_Trac.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/Feature_parity_with_Trac.mdwn b/doc/todo/Feature_parity_with_Trac.mdwn index 788d565a2..b2d9d43ed 100644 --- a/doc/todo/Feature_parity_with_Trac.mdwn +++ b/doc/todo/Feature_parity_with_Trac.mdwn @@ -5,12 +5,12 @@ Features needed: * Wiki, duh. * Source code viewing: This can be handled quite well with a [[shortcut|shortcuts]] to an external source viewer, or by putting - the source in the wiki itself (see the [[todo/automatic_use_of_syntax_plugin_on_source_code_files]] wishlist item) and using the - [[plugins/contrib/highlightcode]] or [[plugins/contrib/sourcehighlight]] plugins. + the source in the wiki itself (see the [[todo/automatic_use_of_syntax_plugin_on_source_code_files]] wishlist item and [[todo/syntax_highlighting]] todo item). * This could be improved with [[todo/source_link]]. * Currently the source highlighting is a little problematic, as there can be two source files with the same wikiname. e.g. a `hello-world.c` and `hello-world.h`. See [[bugs/multiple_pages_with_same_name]] > That bug was fixed before you linked to the page. :-) + >> I was the one that fixed it... :) -- [[Will]] * Trac 'Timeline' feature: view history of the RCS - the `recentchanges` button. * Trac 'Roadmap' feature: Which TODOs/bugs are needed for which milestones. Use the [[plugins/progress]] directive to show percentage complete for each milestone. * Bug tracking: see [[tips/integrated_issue_tracking_with_ikiwiki]] and [[todo/Updated_bug_tracking_example]]. -- cgit v1.2.3 From a6412a374e42c4c6f37ba4954e5fc50a1d9837a0 Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Mon, 27 Oct 2008 20:20:50 -0400 Subject: Response re sha1_commit --- doc/todo/provide_sha1_for_git_diffurl.mdwn | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/provide_sha1_for_git_diffurl.mdwn b/doc/todo/provide_sha1_for_git_diffurl.mdwn index dfd848058..9c8b340de 100644 --- a/doc/todo/provide_sha1_for_git_diffurl.mdwn +++ b/doc/todo/provide_sha1_for_git_diffurl.mdwn @@ -2,7 +2,7 @@ This [[patch]] allows for `\[[sha1]]` substitution in the `diffurl` for git repositories. This is useful for use with [cgit][] which has diffurls of the following form: - /project.git/diff/\[[file]]?id=\[[sha1]] + /project.git/diff/\[[file]]?id=\[[sha1_commit]] [cgit]: http://hjemli.net/git/cgit/ @@ -21,3 +21,6 @@ diffurls of the following form: > [[done]], but I called it `sha1_commit` since I think that's what it's > actually a sha1 of. --[[Joey]] + +>> I was at a loss for something more descriptive...I like that much +>> better :) Thanks! --[[JasonBlevins]] -- cgit v1.2.3 From ea28b3a0574c4df167c57a7fb6465c7673963089 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 27 Oct 2008 22:31:34 -0400 Subject: Notes about untrusted push in monotone --- doc/todo/Untrusted_push_in_Monotone.mdwn | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 doc/todo/Untrusted_push_in_Monotone.mdwn (limited to 'doc/todo') diff --git a/doc/todo/Untrusted_push_in_Monotone.mdwn b/doc/todo/Untrusted_push_in_Monotone.mdwn new file mode 100644 index 000000000..a8b1cd7c4 --- /dev/null +++ b/doc/todo/Untrusted_push_in_Monotone.mdwn @@ -0,0 +1,28 @@ +As noted in [[tips/untrusted_git_push]] an untrusted push capability was added recently, but only implemented in git. +(See also [[todo/rcs_updates_needed]]) + +This note describes (but does not implement) an approach for this with the [[rcs/monotone]] rcs backend. + +---- + +Monotone behaves a little differently to git in its networking. Git allows anyone to try to push, and then +check whether it is ok before finally accepting it. Monotone has no way to accept or reject revisions +in this way. However, monotone does have the ability to mark revisions, and to ignore unmarked revisions. + +This marking capability can be used to achieve a somewhat similar effect to what happens with git. The +problem with this is that anyone could put anything into the monotone database, and while this wouldn't +affect ikiwiki, it seems bad to leave open, untrusted storage on the web. + +The Plan +===== + +In the `note_netsync_revision_received` hook in the monotone server, have the server check to make sure +that either a) the revision is signed by someone trusted or, b) the revision is checked using the same +hook that git uses in `pre-receive`. If the revision passes the ikiwiki `pre-receive` check then the +monotone hook signs the revision. This gives that revision the 'ikiwiki seal of approval'. + +You'll also want to update the monotone trust hooks to only trust revisions signed by trusted people, or +ikiwiki. + +Now anyone can upload a revision, but only those signed by a trusted person, or which pass the ikiwiki +check and so get signed by the ikiwiki key, will be seen by ikiwiki. -- cgit v1.2.3 From 309974dfa1dd16add0e042e2218e86c3d32f5a3e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 28 Oct 2008 14:43:29 -0400 Subject: update --- doc/todo/firm_up_plugin_interface.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/firm_up_plugin_interface.mdwn b/doc/todo/firm_up_plugin_interface.mdwn index b0e92e65c..c2e190884 100644 --- a/doc/todo/firm_up_plugin_interface.mdwn +++ b/doc/todo/firm_up_plugin_interface.mdwn @@ -41,7 +41,7 @@ Another problimatic thing is plugins often define functions named 'preprocess', 6 IkiWiki::titlepage These go together; linkpage is needed by all link plugins, and the others are used widely. -All should be exported. +All should be exported. (Done) 7 IkiWiki::saveindex 5 IkiWiki::loadindex -- cgit v1.2.3 From 42f313574f58111abfb370b75cac3de618cad484 Mon Sep 17 00:00:00 2001 From: neale Date: Tue, 28 Oct 2008 18:06:34 -0400 Subject: How I accomplished this and where I'd like to take it --- doc/todo/dynamic_rootpage.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/dynamic_rootpage.mdwn b/doc/todo/dynamic_rootpage.mdwn index fa0e23254..1309b4578 100644 --- a/doc/todo/dynamic_rootpage.mdwn +++ b/doc/todo/dynamic_rootpage.mdwn @@ -23,3 +23,10 @@ What's your opinion, Joey? I hope it's also useful for another ikiwiki lovers :) >>> Seems like a job for good ol' string interpolation. rootpage="post/$current_year/$current_month/$current_day" >>> Ikiwiki could provide some vars, and it would be nice to write plugins to also provide vars. Sort of like templates. >>> Does that feel OK? --[[sabr]] + +> I want the exact same thing. My compromise was to create a `datedblog` module which overrides `inline`'s `sessioncgi` hook +> with something that sets the new page name to `%Y-%m-%d.$page` and sets up a meta directive at the beginning of +> the content, with the title you wanted. Now if you use the `datedblog` module, you get dated blog entries. But I'd +> like to have traditional `inline` functionality too. This would work great if there were a way to change the `do` +> parameter in the `blogpost` template's form; if I could change it to `datedblog` instead of `blog` then I could hook +> my datedblog module in nicely, without having to override anything. What would be the right way to do that? -- cgit v1.2.3 From 1e9f4532a3a03292fe353d393376fd9621d0bcf7 Mon Sep 17 00:00:00 2001 From: neale Date: Tue, 28 Oct 2008 18:07:48 -0400 Subject: oops, attribution --- doc/todo/dynamic_rootpage.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/dynamic_rootpage.mdwn b/doc/todo/dynamic_rootpage.mdwn index 1309b4578..5cf80b0a8 100644 --- a/doc/todo/dynamic_rootpage.mdwn +++ b/doc/todo/dynamic_rootpage.mdwn @@ -29,4 +29,4 @@ What's your opinion, Joey? I hope it's also useful for another ikiwiki lovers :) > the content, with the title you wanted. Now if you use the `datedblog` module, you get dated blog entries. But I'd > like to have traditional `inline` functionality too. This would work great if there were a way to change the `do` > parameter in the `blogpost` template's form; if I could change it to `datedblog` instead of `blog` then I could hook -> my datedblog module in nicely, without having to override anything. What would be the right way to do that? +> my datedblog module in nicely, without having to override anything. What would be the right way to do that? --[[neale]] -- cgit v1.2.3 From 621c3209b03eb86407b703a72ec80c7c59ebc144 Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Wed, 29 Oct 2008 23:21:25 -0400 Subject: Suggest user stylesheets --- doc/todo/provide_inline_diffs_in_recentchanges.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/provide_inline_diffs_in_recentchanges.mdwn b/doc/todo/provide_inline_diffs_in_recentchanges.mdwn index 7724576f5..39a35d0c6 100644 --- a/doc/todo/provide_inline_diffs_in_recentchanges.mdwn +++ b/doc/todo/provide_inline_diffs_in_recentchanges.mdwn @@ -1,3 +1,8 @@ It would rock if I could view diffs from the web without going via feeds. I envision toggle-style buttons on the recentchanges page, or just links to the CGI, which then displays the diff... --[[madduck]] +> The diffs are actually there, enabled by the `recentchangesdiff` +> plugin, but they are hidden in the XHTML version by the stylesheet. +> You might try a user stylesheet with `div.diff { display: block }`. +> --[[JasonBlevins]] + [[!tag wishlist]] -- cgit v1.2.3 From bb841f94f47d865e4c78bd4f27c5f9cc04dc1557 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 31 Oct 2008 16:42:20 -0400 Subject: format: New plugin, allows embedding differntly formatted text inside a page (ie, otl inside a mdwn page, or syntax highlighted code inside a page). --- IkiWiki/Plugin/format.pm | 29 +++++++++++++++++++++++++++++ debian/changelog | 3 +++ doc/ikiwiki/directive/format.mdwn | 21 +++++++++++++++++++++ doc/plugins/format.mdwn | 9 +++++++++ doc/todo/syntax_highlighting.mdwn | 4 ++-- po/bg.po | 29 +++++++++++++++++++---------- po/cs.po | 29 +++++++++++++++++++---------- po/da.po | 29 +++++++++++++++++++---------- po/de.po | 29 +++++++++++++++++++---------- po/es.po | 29 +++++++++++++++++++---------- po/fr.po | 29 +++++++++++++++++++---------- po/gu.po | 29 +++++++++++++++++++---------- po/ikiwiki.pot | 13 +++++++++++-- po/pl.po | 29 +++++++++++++++++++---------- po/sv.po | 29 +++++++++++++++++++---------- po/vi.po | 29 +++++++++++++++++++---------- 16 files changed, 265 insertions(+), 104 deletions(-) create mode 100644 IkiWiki/Plugin/format.pm create mode 100644 doc/ikiwiki/directive/format.mdwn create mode 100644 doc/plugins/format.mdwn (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/format.pm b/IkiWiki/Plugin/format.pm new file mode 100644 index 000000000..a219190e8 --- /dev/null +++ b/IkiWiki/Plugin/format.pm @@ -0,0 +1,29 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::format; + +use warnings; +use strict; +use IkiWiki 2.00; + +sub import { #{{{ + hook(type => "preprocess", id => "format", call => \&preprocess); +} #}}} + +sub preprocess (@) { #{{{ + my $format=$_[0]; + shift; shift; + my $text=$_[0]; + shift; shift; + my %params=@_; + + if (! defined $format || ! defined $text) { + error(gettext("must specify format and text")); + } + elsif (! exists $IkiWiki::hooks{htmlize}{$format}) { + error(sprintf(gettext("unsupported page format %s"), $format)); + } + + return IkiWiki::htmlize($params{page}, $params{destpage}, $format, $text); +} #}}} + +1 diff --git a/debian/changelog b/debian/changelog index 0c3fded41..ca0433d10 100644 --- a/debian/changelog +++ b/debian/changelog @@ -39,6 +39,9 @@ ikiwiki (2.68) UNRELEASED; urgency=low * shortcut: Fix display of shortcuts while previewing. * Preserve syslog setting when doing `ikiwiki -setup foo -dumpsetup bar` * Several fixes to --render mode. + * format: New plugin, allows embedding differntly formatted text inside a + page (ie, otl inside a mdwn page, or syntax highlighted code inside a + page). -- Joey Hess Fri, 17 Oct 2008 20:11:02 -0400 diff --git a/doc/ikiwiki/directive/format.mdwn b/doc/ikiwiki/directive/format.mdwn new file mode 100644 index 000000000..94cf1b04f --- /dev/null +++ b/doc/ikiwiki/directive/format.mdwn @@ -0,0 +1,21 @@ +The `format` directive is supplied by the [[!iki plugins/format desc=format]] +plugin. + +The directive allows formatting a chunk of text using any available page +format. It takes two parameters. First is the type of format to use, +ie the extension that would be used for a standalone file of this type. +Second is the text to format. + +For example, this will embed an otl outline inside a page using mdwn or +some other format: + + \[[!format otl """ + foo + 1 + 2 + bar + 3 + 4 + """]] + +[[!meta robots="noindex, follow"]] diff --git a/doc/plugins/format.mdwn b/doc/plugins/format.mdwn new file mode 100644 index 000000000..91e707fcf --- /dev/null +++ b/doc/plugins/format.mdwn @@ -0,0 +1,9 @@ +[[!template id=plugin name=format core=0 author="[[Joey]]"]] +[[!tag type/format]] + +This plugin allows mixing different page formats together, by embedding +text formatted one way inside a page formatted another way. This is done +using the [[ikiwiki/directive/format]] [[ikiwiki/directive]]. + +For example, it could be used to embed an [[otl]] outline inside a page +that is formatted as [[mdwn]]. diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 43878437f..bb1c84f02 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -73,8 +73,8 @@ That would run the text through the pl htmlizer, from the syntax hightligh plugin. OTOH, if "rst" were given, it would run the text through the rst htmlizer. So, more generic, allows mixing different types of markup on one page, as well as syntax highlighting. Does require specifying the type of -format, instead of allows it to be guessed (which some syntax highlighters -can do). +format, instead of allowing it to be guessed (which some syntax highlighters +can do). (This directive is now implemented..) Hmm, this would also allow comments inside source files to have mdwn embedded in them, without making the use of mdwn a special case, or needing diff --git a/po/bg.po b/po/bg.po index 471e03119..19b0fff50 100644 --- a/po/bg.po +++ b/po/bg.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki-bg\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2007-01-12 01:19+0200\n" "Last-Translator: Damyan Ivanov \n" "Language-Team: Bulgarian \n" @@ -131,7 +131,7 @@ msgstr "създаване на нова страницa „%s”" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "готово" @@ -253,22 +253,31 @@ msgstr "" msgid "failed to process" msgstr "грешка при обработване на шаблона" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "грешшка в приставката „fortune”" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -686,11 +695,11 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 #, fuzzy msgid "missing name or url parameter" msgstr "препратката няма указани параметрите „name” или „url”" @@ -698,7 +707,7 @@ msgstr "препратката няма указани параметрите #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, fuzzy, perl-format msgid "shortcut %s points to %s" msgstr "препратката „%s” сочи към „%s”" @@ -970,11 +979,11 @@ msgstr "" msgid "generating wrappers.." msgstr "генериране на обвивки..." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "обновяване на уики..." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "осъвременяване на уики..." diff --git a/po/cs.po b/po/cs.po index ece992c47..6cbb0c596 100644 --- a/po/cs.po +++ b/po/cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2007-05-09 21:21+0200\n" "Last-Translator: Miroslav Kure \n" "Language-Team: Czech \n" @@ -128,7 +128,7 @@ msgstr "vytvářím novou stránku %s" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "hotovo" @@ -250,22 +250,31 @@ msgstr "" msgid "failed to process" msgstr "nepodařilo se zpracovat:" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "fortune selhal" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -674,18 +683,18 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 msgid "missing name or url parameter" msgstr "chybí parametr jméno nebo url" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "zkratka %s odkazuje na %s" @@ -951,11 +960,11 @@ msgstr "" msgid "generating wrappers.." msgstr "generuji obaly..." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "znovu vytvářím wiki..." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "obnovuji wiki..." diff --git a/po/da.po b/po/da.po index 3d0deca8a..6c3ed3e53 100644 --- a/po/da.po +++ b/po/da.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2008-10-22 19:13+0100\n" "Last-Translator: Jonas Smedegaard \n" "Language-Team: None\n" @@ -132,7 +132,7 @@ msgstr "opretter ny side %s" msgid "deleting bucket.." msgstr "sletter bundt.." -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "færdig" @@ -250,22 +250,31 @@ msgstr "redigeringsskabelon %s registreret for %s" msgid "failed to process" msgstr "dannelsen mislykkedes" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, fuzzy, perl-format +msgid "unsupported page format %s" +msgstr "revisionskontrolsystem %s ikke understøttet" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "spådom (fortune) fejlede" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, fuzzy, perl-format msgid "you are not allowed to change %s" msgstr "du er ikke logget på som en administrator" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 #, fuzzy msgid "you are not allowed to change file modes" msgstr "du er ikke logget på som en administrator" @@ -669,18 +678,18 @@ msgstr "behøver Digest::SHA1 til indeks %s" msgid "search" msgstr "søg" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "genvejsudvidelsen vil ikke fungere uden en shortcuts.mdwn" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 msgid "missing name or url parameter" msgstr "manglende navn eller url parameter" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "genvej %s viser til %s" @@ -949,11 +958,11 @@ msgstr "brug: --set var=værdi" msgid "generating wrappers.." msgstr "bygger wrappers.." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "genopbygger wiki..." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "genopfrisker wiki..." diff --git a/po/de.po b/po/de.po index bef54ad89..022fbfef1 100644 --- a/po/de.po +++ b/po/de.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 2.40\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2008-03-03 21:22+0100\n" "Last-Translator: Kai Wasserbäch \n" "Language-Team: German \n" @@ -128,7 +128,7 @@ msgstr "erstelle neue Seite %s" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "fertig" @@ -247,22 +247,31 @@ msgstr "»edittemplate« %s registriert für %s" msgid "failed to process" msgstr "Bearbeitung fehlgeschlagen" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "»fortune« fehlgeschlagen" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -671,18 +680,18 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "das »shortcut«-Plugin funktioniert nicht ohne eine »shortcuts.mdwn«" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 msgid "missing name or url parameter" msgstr "fehlender Name oder URL-Parameter" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "Shortcut %s zeigt auf %s" @@ -946,11 +955,11 @@ msgstr "Benutzung: --set Variable=Wert" msgid "generating wrappers.." msgstr "erzeuge Wrapper.." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "erzeuge Wiki neu.." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "aktualisiere Wiki.." diff --git a/po/es.po b/po/es.po index 7afb45c14..8dce2940f 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2008-10-22 13:54+0200\n" "Last-Translator: Víctor Moral \n" "Language-Team: Spanish \n" @@ -130,7 +130,7 @@ msgstr "creando nueva página %s" msgid "deleting bucket.." msgstr "borrando el directorio.." -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "completado" @@ -248,22 +248,31 @@ msgstr "plantilla de edición %s registrada para %s" msgid "failed to process" msgstr "fallo en el proceso" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, fuzzy, perl-format +msgid "unsupported page format %s" +msgstr "el sistema de control de versiones %s no está soportado" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "el programa fortune ha fallado" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, fuzzy, perl-format msgid "you are not allowed to change %s" msgstr "No está registrado como un administrador" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 #, fuzzy msgid "you are not allowed to change file modes" msgstr "No está registrado como un administrador" @@ -676,18 +685,18 @@ msgstr "se necesita la instalación de Digest::SHA1 para indexar %s" msgid "search" msgstr "buscar" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "el complemento shortcut no funciona sin una página shortcuts.mdwn" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 msgid "missing name or url parameter" msgstr "shortcut necesita el parámetro 'name' ó el parámetro 'url'" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "El atajo %s apunta a %s" @@ -959,11 +968,11 @@ msgstr "uso: --set variable=valor" msgid "generating wrappers.." msgstr "generando programas auxiliares.." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "reconstruyendo el wiki.." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "actualizando el wiki.." diff --git a/po/fr.po b/po/fr.po index c0c96c476..53095c5e1 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2008-10-11 10:34+0200\n" "Last-Translator: Julien Patriarca \n" "Language-Team: French \n" @@ -133,7 +133,7 @@ msgstr "Création de la nouvelle page %s" msgid "deleting bucket.." msgstr "suppression du compartiment (« bucket »)..." -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "Terminé" @@ -255,22 +255,31 @@ msgstr "edittemplate %s enregistré pour %s" msgid "failed to process" msgstr "Échec du traitement" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, fuzzy, perl-format +msgid "unsupported page format %s" +msgstr "Système de contrôle de version non reconnu" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "Échec du lancement de « fortune »" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, fuzzy, perl-format msgid "you are not allowed to change %s" msgstr "vous n'êtes pas authentifié comme administrateur" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 #, fuzzy msgid "you are not allowed to change file modes" msgstr "vous n'êtes pas authentifié comme administrateur" @@ -683,18 +692,18 @@ msgstr "Digest::SHA1 est nécessaire pour indexer %s" msgid "search" msgstr "recherche" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "Le greffon « shortcut » ne fonctionnera pas sans shortcuts.mdwn" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 msgid "missing name or url parameter" msgstr "Il manque le paramètre nom ou URL." #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "Le raccourci %s pointe vers %s" @@ -967,11 +976,11 @@ msgstr "Syntaxe : -- set var=valeur" msgid "generating wrappers.." msgstr "Création des fichiers CGI..." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "Reconstruction du wiki..." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "Rafraîchissement du wiki..." diff --git a/po/gu.po b/po/gu.po index c48985eb5..13c68afc9 100644 --- a/po/gu.po +++ b/po/gu.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki-gu\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2007-01-11 16:05+0530\n" "Last-Translator: Kartik Mistry \n" "Language-Team: Gujarati \n" @@ -129,7 +129,7 @@ msgstr "નવું પાનું %s બનાવે છે" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "સંપૂર્ણ" @@ -251,22 +251,31 @@ msgstr "" msgid "failed to process" msgstr "ક્રિયા કરવામાં નિષ્ફળ:" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "ભવિષ્ય નિષ્ફળ" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -675,18 +684,18 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 msgid "missing name or url parameter" msgstr "ખોવાયેલ નામ અથવા યુઆરએલ વિકલ્પ" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "ટુંકોરસ્તો %s એ %s નો નિર્દેશ કરે છે" @@ -951,11 +960,11 @@ msgstr "" msgid "generating wrappers.." msgstr "આવરણ બનાવે છે.." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "વીકી ફરીથી બનાવે છે.." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "વીકીને તાજી કરે છે.." diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index ab28f956c..f3eb0eb55 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-29 17:42-0400\n" +"POT-Creation-Date: 2008-10-31 16:38-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -246,6 +246,15 @@ msgstr "" msgid "failed to process" msgstr "" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "" @@ -671,7 +680,7 @@ msgstr "" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:47 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, perl-format msgid "shortcut %s points to %s" msgstr "" diff --git a/po/pl.po b/po/pl.po index 6f262a2be..6f582c71f 100644 --- a/po/pl.po +++ b/po/pl.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 1.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2007-04-27 22:05+0200\n" "Last-Translator: Pawel Tecza \n" "Language-Team: Debian L10n Polish \n" @@ -133,7 +133,7 @@ msgstr "tworzenie nowej strony %s" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "gotowe" @@ -255,22 +255,31 @@ msgstr "" msgid "failed to process" msgstr "awaria w trakcie przetwarzania:" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "awaria fortunki" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -691,11 +700,11 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 #, fuzzy msgid "missing name or url parameter" msgstr "brakujący parametr name lub url" @@ -703,7 +712,7 @@ msgstr "brakujący parametr name lub url" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, fuzzy, perl-format msgid "shortcut %s points to %s" msgstr "skrót %s wskazuje na adres %s" @@ -976,11 +985,11 @@ msgstr "" msgid "generating wrappers.." msgstr "tworzenie osłon..." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "przebudowywanie wiki..." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "odświeżanie wiki..." diff --git a/po/sv.po b/po/sv.po index cc83869cf..6d3e263ee 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2007-01-10 23:47+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" @@ -130,7 +130,7 @@ msgstr "skapar nya sidan %s" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "klar" @@ -252,22 +252,31 @@ msgstr "" msgid "failed to process" msgstr "misslyckades med att behandla mall:" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "fortune misslyckades" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -681,11 +690,11 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 #, fuzzy msgid "missing name or url parameter" msgstr "genväg saknar parameter för namn eller url" @@ -693,7 +702,7 @@ msgstr "genväg saknar parameter för namn eller url" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, fuzzy, perl-format msgid "shortcut %s points to %s" msgstr "genvägen %s pekar på %s" @@ -965,11 +974,11 @@ msgstr "" msgid "generating wrappers.." msgstr "genererar wrappers.." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "bygger om wiki.." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "uppdaterar wiki.." diff --git a/po/vi.po b/po/vi.po index 13d695880..4cc16e1d8 100644 --- a/po/vi.po +++ b/po/vi.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-26 15:03-0400\n" +"POT-Creation-Date: 2008-10-31 16:37-0400\n" "PO-Revision-Date: 2007-01-13 15:31+1030\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" @@ -131,7 +131,7 @@ msgstr "đang tạo trang mới %s" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:205 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 msgid "done" msgstr "xong" @@ -253,22 +253,31 @@ msgstr "" msgid "failed to process" msgstr "mẫu không xử lý được:" +#: ../IkiWiki/Plugin/format.pm:22 +msgid "must specify format and text" +msgstr "" + +#: ../IkiWiki/Plugin/format.pm:25 +#, perl-format +msgid "unsupported page format %s" +msgstr "" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "fortune bị lỗi" -#: ../IkiWiki/Plugin/git.pm:617 ../IkiWiki/Plugin/git.pm:635 +#: ../IkiWiki/Plugin/git.pm:618 ../IkiWiki/Plugin/git.pm:636 #: ../IkiWiki/Receive.pm:129 #, perl-format msgid "you are not allowed to change %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:657 +#: ../IkiWiki/Plugin/git.pm:658 #, perl-format msgid "you cannot act on a file with mode %s" msgstr "" -#: ../IkiWiki/Plugin/git.pm:661 +#: ../IkiWiki/Plugin/git.pm:662 msgid "you are not allowed to change file modes" msgstr "" @@ -682,11 +691,11 @@ msgstr "" msgid "search" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:27 +#: ../IkiWiki/Plugin/shortcut.pm:28 msgid "shortcut plugin will not work without a shortcuts.mdwn" msgstr "" -#: ../IkiWiki/Plugin/shortcut.pm:36 +#: ../IkiWiki/Plugin/shortcut.pm:38 #, fuzzy msgid "missing name or url parameter" msgstr "lối tắt thiếu tên hay tham số url" @@ -694,7 +703,7 @@ msgstr "lối tắt thiếu tên hay tham số url" #. translators: This is used to display what shortcuts are defined. #. translators: First parameter is the name of the shortcut, the second #. translators: is an URL. -#: ../IkiWiki/Plugin/shortcut.pm:45 +#: ../IkiWiki/Plugin/shortcut.pm:48 #, fuzzy, perl-format msgid "shortcut %s points to %s" msgstr "lối tắt %s chỉ tới %s" @@ -966,11 +975,11 @@ msgstr "" msgid "generating wrappers.." msgstr "đang tạo ra các bộ bao bọc.." -#: ../ikiwiki.in:194 +#: ../ikiwiki.in:195 msgid "rebuilding wiki.." msgstr "đang xây dựng lại wiki.." -#: ../ikiwiki.in:197 +#: ../ikiwiki.in:198 msgid "refreshing wiki.." msgstr "đang làm tươi wiki.." -- cgit v1.2.3 From 8a901ad49c12bb5bde9afb6fe7ce36ab2fb83d13 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sun, 2 Nov 2008 05:23:25 -0500 Subject: Thoughts --- doc/todo/syntax_highlighting.mdwn | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index bb1c84f02..645dd56bc 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -32,6 +32,10 @@ pages, as well as doing syntax highlighting as a preprocessor directive we could use an external plugin..) * Currently no single plugin supports both modes of operation (directive and whole source file to page). + + > This is now fixed by the [[ikiwiki/directive/format]] directive for all + > whole-source-file plugins, right? + * Nothing seems to support [[wiki-formatted_comments|wiki-formatted_comments_with_syntax_plugin]] inside source files. Doing this probably means post-processing the @@ -45,6 +49,17 @@ pages, as well as doing syntax highlighting as a preprocessor directive One approach that's also been requested for eg, [[plugins/contrib/mediawiki]] is to allow controlling which linkification types a page type can have on it. + + > The previous two points seem to be related. One thought: instead of + > getting the source from the `content` parameter, the plugin could + > re-load the page source. That would stop directives/links from + > being processed in the source. As noted above, comments + > could then be parsed for directives/links later. + > + > Would it be worth adding a `nodirectives` option when registering + > an htmlize hook that switches off directive and link processing before + > generating the html for a page? + * The whole-file plugins all get confused if there is a `foo.c` and a `foo.h`. This is trivially fixable now by passing the keepextension option when registering the htmlize hooks, though. @@ -61,6 +76,11 @@ pages, as well as doing syntax highlighting as a preprocessor directive extensions. The workaround is to use a directive on a wiki page, pulling in the Makefile. + > I wonder how hard it would be to make a patch where by a file with + > no `.` in the name, and a name that matches a filetype, and where + > that filetype was registered `keepextension`, then the file is just + > chosen as the appropriate type... + ## format directive Rather than making syntax highlight plugins have to provide a preprocessor -- cgit v1.2.3 From 98a5bd23d3004c36b16ccdcdb968ff50ee35f802 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sun, 2 Nov 2008 05:47:19 -0500 Subject: Add patch --- doc/todo/syntax_highlighting.mdwn | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 645dd56bc..5df185705 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -76,10 +76,27 @@ pages, as well as doing syntax highlighting as a preprocessor directive extensions. The workaround is to use a directive on a wiki page, pulling in the Makefile. - > I wonder how hard it would be to make a patch where by a file with + > I wonder how hard it would be to make a patch whereby a file with > no `.` in the name, and a name that matches a filetype, and where > that filetype was registered `keepextension`, then the file is just - > chosen as the appropriate type... + > chosen as the appropriate type. This would allow `Makefile` to + > work. + +like this: + + diff --git a/IkiWiki.pm b/IkiWiki.pm + index 8d728c9..1bd46a9 100644 + --- a/IkiWiki.pm + +++ b/IkiWiki.pm + @@ -618,6 +618,8 @@ sub pagetype ($) { #{{{ + + if ($page =~ /\.([^.]+)$/) { + return $1 if exists $hooks{htmlize}{$1}; + + } elsif ($hooks{htmlize}{$page}{keepextension}) { + + return $page; + } + return; + } #}}} ## format directive -- cgit v1.2.3 From d93b509eeeeda80e9d6cb985186640a3902aa199 Mon Sep 17 00:00:00 2001 From: Jason Blevins Date: Sun, 2 Nov 2008 18:56:12 -0500 Subject: Note about prefix_directives --- doc/todo/New_preprocessor_directive_syntax/discussion.mdwn | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn b/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn index dda1ff5e9..fd104cf6b 100644 --- a/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn +++ b/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn @@ -1,2 +1,12 @@ Err, is this really fixed in 2.21? I can't find it anywhere in 2.32.3 (debian unstable) + +----- + +I just did a `--dumpsetup` with the current version from the Git repository +and the default option is + + # use '!'-prefixed preprocessor directives? + prefix_directives => 0, + +My impression was that this should be enabled by default now. --[[JasonBlevins]] -- cgit v1.2.3 From 1a4c6b5fcf0fa36d0368c8294c7629c850dab676 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Mon, 3 Nov 2008 01:33:33 +0100 Subject: notes and wiki-gardening about pagetitle vs. meta title Signed-off-by: intrigeri --- doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn | 9 +++++++++ doc/todo/using_meta_titles_for_parentlinks.html | 6 ++++++ 2 files changed, 15 insertions(+) (limited to 'doc/todo') diff --git a/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn b/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn index a30ab0fa3..77c86eba1 100644 --- a/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn +++ b/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn @@ -1,3 +1,12 @@ The `IkiWiki::pagetitle` function does not respect title changes via `meta.title`. It really should, so that links rendered with `htmllink` get the proper title in the link text. --[[madduck]] + +> Agreed. [[todo/using_meta_titles_for_parentlinks]] contains a beginning of +> solution. A few quick notes about it: + +> - Using inline would avoid the redefinition + code duplication. +> - A few plugins would need to be upgraded. +> - It may be necessary to adapt the testsuite in `t/pagetitle.t`, as well. + +> --[[intrigeri]] diff --git a/doc/todo/using_meta_titles_for_parentlinks.html b/doc/todo/using_meta_titles_for_parentlinks.html index 651b7fa0f..d04e5a300 100644 --- a/doc/todo/using_meta_titles_for_parentlinks.html +++ b/doc/todo/using_meta_titles_for_parentlinks.html @@ -114,3 +114,9 @@ diff -c /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib /usr/share/perl5/IkiWiki + +

+This is actually a duplicate for +[[bugs/pagetitle_function_does_not_respect_meta_titles]], where I'm +following up a bit. --[[intrigeri]] +

\ No newline at end of file -- cgit v1.2.3 From 75603b4082f43f87802eab8c3739eff92a634453 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Mon, 3 Nov 2008 01:42:44 +0100 Subject: response Signed-off-by: intrigeri --- doc/todo/New_preprocessor_directive_syntax/discussion.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn b/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn index fd104cf6b..f6c0fc0ec 100644 --- a/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn +++ b/doc/todo/New_preprocessor_directive_syntax/discussion.mdwn @@ -10,3 +10,10 @@ and the default option is prefix_directives => 0, My impression was that this should be enabled by default now. --[[JasonBlevins]] + +> As stated in `debian/NEWS`: +>> For backward compatibility with existing wikis, +>> refix_directives currently defaults to false. In ikiwiki 3.0, +>> prefix_directives will default to true [...] +> --[[intrigeri]] + -- cgit v1.2.3 From 4dc4c9586dbae352c27cd316374fbf0e1db1d082 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 4 Nov 2008 13:21:07 -0500 Subject: maintain list --- doc/todo/syntax_highlighting.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 5df185705..97526bae6 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -23,6 +23,8 @@ pages, as well as doing syntax highlighting as a preprocessor directive * [[sourcecode|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]] also uses src-highlight, and operates on whole source files. Updated to work with the fix for [[bugs/multiple_pages_with_same_name]]. Untested with files with no extension, e.g. `Makefile`. +* [[user/jrblevin]]'s code plugin uses src-highlight, and supports both + while file and directive use. ## General problems -- cgit v1.2.3 From e7d04199ec730deecc95b55679515bc5618526f8 Mon Sep 17 00:00:00 2001 From: AlexandreDupas Date: Sat, 8 Nov 2008 11:28:25 -0500 Subject: fix link to Jason Blevins user page --- doc/todo/syntax_highlighting.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 97526bae6..2bdeb62be 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -23,7 +23,7 @@ pages, as well as doing syntax highlighting as a preprocessor directive * [[sourcecode|todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion]] also uses src-highlight, and operates on whole source files. Updated to work with the fix for [[bugs/multiple_pages_with_same_name]]. Untested with files with no extension, e.g. `Makefile`. -* [[user/jrblevin]]'s code plugin uses src-highlight, and supports both +* [[users/jasonblevins]]'s code plugin uses src-highlight, and supports both while file and directive use. ## General problems -- cgit v1.2.3 From 700c4bef294a792d507f6cfc34dd4dd5427f2a7f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 11 Nov 2008 13:40:02 -0500 Subject: let's stop sucking :-) --- doc/todo/avoid_thrashing.mdwn | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 doc/todo/avoid_thrashing.mdwn (limited to 'doc/todo') diff --git a/doc/todo/avoid_thrashing.mdwn b/doc/todo/avoid_thrashing.mdwn new file mode 100644 index 000000000..6c895e7c9 --- /dev/null +++ b/doc/todo/avoid_thrashing.mdwn @@ -0,0 +1,20 @@ +Problem: Suppose a server has 256 mb ram. Each ikiwiki process needs about +15 mb, before it's loaded the index. (And maybe 25 after, but only one such +process runs at any time). That allows for about 16 ikiwiki processes to +run concurrently on a server, before it starts to swap. Of course, anything +else that runs on the server and eats memory will affect this. + +One could just set `MaxClients 16` in the apache config, but then it's also +limited to 16 clients serving static pages, which is silly. Also, 16 is +optimistic -- 8 might be a saner choice. And then, what if something on the +server decides to eat a lot of memory? Ikiwiki can again overflow memory +and thrash. + +It occurred to me that the ikiwiki cgi wrapper could instead do locking of +its own (say of `.ikiwiki/cgilock`). The wrapper only needs a few kb to +run, and it starts *fast*. So hundreds could be running waiting for a lock +with no ill effects. Crank `MaxClients` up to 256? No problem.. + +And there's no real reason to allow more than one ikiwiki cgi to run at a +time. Since almost all uses of the CGI lock the index, only one can really +be doing anything at a time. --[[Joey]] -- cgit v1.2.3 From d1b22b252481134815b1d02d564b6b9622fe7b4b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 11 Nov 2008 15:54:52 -0500 Subject: lockwiki changes * Stop busy-waiting in lockwiki, as this could delay ikiwiki from waking up for up to one second. The bailout code is no longer needed. * Remove support for unused optional wait parameter from lockwiki. --- IkiWiki.pm | 19 +++---------------- debian/changelog | 8 ++++++++ doc/todo/avoid_thrashing.mdwn | 2 ++ po/ikiwiki.pot | 10 +++++----- 4 files changed, 18 insertions(+), 21 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki.pm b/IkiWiki.pm index dc9b66344..d949566d8 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1280,8 +1280,7 @@ sub indexlink () { #{{{ my $wikilock; -sub lockwiki (;$) { #{{{ - my $wait=@_ ? shift : 1; +sub lockwiki () { #{{{ # Take an exclusive lock on the wiki to prevent multiple concurrent # run issues. The lock will be dropped on program exit. if (! -d $config{wikistatedir}) { @@ -1289,20 +1288,8 @@ sub lockwiki (;$) { #{{{ } open($wikilock, '>', "$config{wikistatedir}/lockfile") || error ("cannot write to $config{wikistatedir}/lockfile: $!"); - if (! flock($wikilock, 2 | 4)) { # LOCK_EX | LOCK_NB - if ($wait) { - debug("wiki seems to be locked, waiting for lock"); - my $wait=600; # arbitrary, but don't hang forever to - # prevent process pileup - for (1..$wait) { - return if flock($wikilock, 2 | 4); - sleep 1; - } - error("wiki is locked; waited $wait seconds without lock being freed (possible stuck process or stale lock?)"); - } - else { - return 0; - } + if (! flock($wikilock, 2)) { # LOCK_EX + error("failed to get lock"); } return 1; } #}}} diff --git a/debian/changelog b/debian/changelog index dfc5de2d4..2088b07ec 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,6 +14,14 @@ ikiwiki (2.69) UNRELEASED; urgency=low * tag: Normalize tagbase so leading/trailing slashes in it don't break things. * bzr: Fix dates for recentchanges. + * Avoid multiple ikiwiki cgi processes piling up, eating all memory, + and thrashing, by making the cgi wrapper wait on a cgilock. + If you had to set apache's MaxClients low to avoid ikiwiki thrashing your + server, you can now turn it up to a high value. + * Stop busy-waiting in lockwiki, as this could delay ikiwiki from waking up + for up to one second. The bailout code is no longer needed after above + change. + * Remove support for unused optional wait parameter from lockwiki. -- Joey Hess Thu, 06 Nov 2008 16:01:00 -0500 diff --git a/doc/todo/avoid_thrashing.mdwn b/doc/todo/avoid_thrashing.mdwn index 6c895e7c9..45b11d872 100644 --- a/doc/todo/avoid_thrashing.mdwn +++ b/doc/todo/avoid_thrashing.mdwn @@ -18,3 +18,5 @@ with no ill effects. Crank `MaxClients` up to 256? No problem.. And there's no real reason to allow more than one ikiwiki cgi to run at a time. Since almost all uses of the CGI lock the index, only one can really be doing anything at a time. --[[Joey]] + +[[done]] diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index 34fa5e65b..8cf3853e0 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-07 12:23-0500\n" +"POT-Creation-Date: 2008-11-11 15:36-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -910,19 +910,19 @@ msgstr "" #. translators: The first parameter is a filename, and the second is #. translators: a (probably not translated) error message. -#: ../IkiWiki/Wrapper.pm:79 +#: ../IkiWiki/Wrapper.pm:93 #, perl-format msgid "failed to write %s: %s" msgstr "" #. translators: The parameter is a C filename. -#: ../IkiWiki/Wrapper.pm:135 +#: ../IkiWiki/Wrapper.pm:150 #, perl-format msgid "failed to compile %s" msgstr "" #. translators: The parameter is a filename. -#: ../IkiWiki/Wrapper.pm:155 +#: ../IkiWiki/Wrapper.pm:170 #, perl-format msgid "successfully generated %s" msgstr "" @@ -969,7 +969,7 @@ msgstr "" msgid "preprocessing loop detected on %s at depth %i" msgstr "" -#: ../IkiWiki.pm:1685 +#: ../IkiWiki.pm:1672 msgid "yes" msgstr "" -- cgit v1.2.3 From 408d483dc2938af527100f2201ceea0efb5019af Mon Sep 17 00:00:00 2001 From: intrigeri Date: Thu, 13 Nov 2008 04:32:02 +0100 Subject: reported my need for a global renamepage hook Signed-off-by: intrigeri --- doc/todo/need_global_renamepage_hook.mdwn | 42 +++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 doc/todo/need_global_renamepage_hook.mdwn (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn new file mode 100644 index 000000000..b7aa44880 --- /dev/null +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -0,0 +1,42 @@ +As documented in [[plugins/write]], the current `renamepage` hook is +heavily oriented towards updating links in pages' content: it is run +once per page linking to the renamed page. + +That's fine, but it can't be used to trigger more general actions on +page rename. E.g. it won't be run at all if the page being renamed is +an orphan one. + +This is a real issue for the [[plugins/contrib/po]] development: what +I'm about to achieve is: + +- when a master page is renamed, the plugin takes notice of it (using + the `rename` hook), and later renames the translation pages + accordingly (in the `change` hook) +- when a master page is deleted, the plugin deletes its translations + (using the `delete` hook) + +With the current `renamepage` hook behavior, combining these two goals +has an annoying drawback: a plugin can't notice an orphan master page +has been renamed, so instead of renaming (and preserving) its +translations, it considers the oldpage as deleted, and deletes its +translations. Game over. + +It may seem like a corner case, but I want to be very careful when +deleting files automatically in `srcdir`, which is not always under +version control. + +As an sad workaround, I can still disable any deletion in `srcdir` +when it is not under version control. But I think ikiwiki deserves +a global `renamepage` hook that would be run once per rename +operation. + +My proposal is thus: + +- keep the documented `renamepage` hook as it is +- use something inspired by the trick `preprocess` uses: when `hook` + is passed an optional "global" parameter, set to a true value, the + declared `renamepage` hook is run once per rename operation, and is + passed named parameters: `src`, `srcfile`, `dest` and `destfile`. + +I'm of course volunteering to implement this, or anything related that +would solve my problem. Hmmm? --[[intrigeri]] -- cgit v1.2.3 From a670bac3e1b53908ad880370a683b1218ecbd6aa Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Mon, 17 Nov 2008 06:43:54 -0500 Subject: Link to postcomment --- doc/todo/supporting_comments_via_disussion_pages.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/supporting_comments_via_disussion_pages.mdwn b/doc/todo/supporting_comments_via_disussion_pages.mdwn index e0495c8c2..88effdfd5 100644 --- a/doc/todo/supporting_comments_via_disussion_pages.mdwn +++ b/doc/todo/supporting_comments_via_disussion_pages.mdwn @@ -213,3 +213,5 @@ do you think so far? Known issues include: un-wikiish). --[[smcv]] + +I've updated smcvpostcomment and publicised it as [[plugins/contrib/postcomment]]. --[[smcv]] -- cgit v1.2.3 From 345c94dd9d3405ca8f1115f467937872a1941eb0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 17 Nov 2008 14:36:00 -0500 Subject: response --- doc/todo/need_global_renamepage_hook.mdwn | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index b7aa44880..8265497ae 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -40,3 +40,14 @@ My proposal is thus: I'm of course volunteering to implement this, or anything related that would solve my problem. Hmmm? --[[intrigeri]] + +> I think it would be better to have a different hook that is called for +> renames, since the two hook actions are very different (unlike the +> preprocess hook, which does a very similar thing in scan mode). +> +> Just calling it `rename` seems like a reasonable name, by analogy with +> the `delete` and `change` hooks. +> +> It might make sense to rename `renamepage` to `renamelink` to make it +> clearer what it does. (I'm not very worried about this breaking things, at +> this point.) --[[Joey]] -- cgit v1.2.3 From 7aad3b604784a749c1681dbf9dbb89250147cbff Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 17 Nov 2008 15:21:55 -0500 Subject: where can I pull this from? --- doc/todo/mbox.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mbox.mdwn b/doc/todo/mbox.mdwn index 081d51200..f7744563c 100644 --- a/doc/todo/mbox.mdwn +++ b/doc/todo/mbox.mdwn @@ -14,3 +14,6 @@ I'd like to be able to drop an unmodified RFC2822 email message into ikiwiki, an >>> to page foo). I'm not sure if this is possible and worthwhile to fix. >> It is certainly workable >>> to use a \[[!mailbox ]] directive. -- [[DavidBremner]] + +> Your gitweb doesn't tell me where I can git pull this from, which I'd +> like to do ... --[[Joey]] -- cgit v1.2.3 From 284b79b36aa924366f34048b2ee8c40ea5b8d180 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Tue, 18 Nov 2008 05:12:52 -0500 Subject: update for rename of plugins/contrib/postcomment.mdwn to plugins/contrib/comments.mdwn --- doc/todo/supporting_comments_via_disussion_pages.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/supporting_comments_via_disussion_pages.mdwn b/doc/todo/supporting_comments_via_disussion_pages.mdwn index 88effdfd5..bc4e331d0 100644 --- a/doc/todo/supporting_comments_via_disussion_pages.mdwn +++ b/doc/todo/supporting_comments_via_disussion_pages.mdwn @@ -214,4 +214,4 @@ do you think so far? Known issues include: --[[smcv]] -I've updated smcvpostcomment and publicised it as [[plugins/contrib/postcomment]]. --[[smcv]] +I've updated smcvpostcomment and publicised it as [[plugins/contrib/comments]]. --[[smcv]] -- cgit v1.2.3 From a8090bfff8efba0f04b0ef547b052d2a13a19083 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Sun, 23 Nov 2008 13:56:51 -0500 Subject: generalization of recentchanges_link --- doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn (limited to 'doc/todo') diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn new file mode 100644 index 000000000..ba484c877 --- /dev/null +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -0,0 +1,9 @@ +The [[plugins/recentchanges]] plugin has a `do=recentchanges_link` feature that will +redirect to a given wiki page, or an error page with a creation link. + +In the [[plugins/contrib/comments]] plugin I've found that it would be useful to do +the same for users. For now I've just cloned the functionality into the comments +plugin, but perhaps this functionality could be renamed to `do=goto` or +something, and moved to `IkiWiki/CGI.pm`? + +If there's general approval I'm happy to write a patch. -- cgit v1.2.3 From 70ecf4d1ef98d985ba867864abcb4457bae1f2ad Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Mon, 24 Nov 2008 03:51:28 -0500 Subject: Indicate whose offer of a patch this is :-) --- doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn index ba484c877..1828f0a7b 100644 --- a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -6,4 +6,4 @@ the same for users. For now I've just cloned the functionality into the comments plugin, but perhaps this functionality could be renamed to `do=goto` or something, and moved to `IkiWiki/CGI.pm`? -If there's general approval I'm happy to write a patch. +If there's general approval I'm happy to write a patch. --[[smcv]] -- cgit v1.2.3 From 53af988255ed248d419029e4d5c760f6a4037c5a Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Mon, 24 Nov 2008 04:04:50 -0500 Subject: Suggest ErrorDocument 404 CGI wrapper --- doc/todo/apache_404_ErrorDocument_handler.mdwn | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 doc/todo/apache_404_ErrorDocument_handler.mdwn (limited to 'doc/todo') diff --git a/doc/todo/apache_404_ErrorDocument_handler.mdwn b/doc/todo/apache_404_ErrorDocument_handler.mdwn new file mode 100644 index 000000000..b200ff3b2 --- /dev/null +++ b/doc/todo/apache_404_ErrorDocument_handler.mdwn @@ -0,0 +1,18 @@ +Apache's ErrorDocument directive lets you write a CGI script that will be invoked for all 404s. +IkiWiki could offer one as an optional wrapper; it would do much the same thing that the +existing recentchanges_link (or [[generic___39__do__61__goto__39___for_CGI]]) does when +encountering a nonexistent page. + +I think it'd probably have to be a separate CGI script because the environment with which +404 handlers are invoked is somewhat odd, and because it needs to return a 404 status +(having said that, it might make sense for `recentchanges_link` to return 404 rather than +200 anyway if the page doesn't exist). + +This would give IkiWiki the behaviour of many other wikis, where visiting a page that +does not yet exist prompts you to create it, without having to invoke the CGI for +successful requests. + +Due to [a well-known MSIE misfeature](http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807), +error output needs to be at least 512 bytes long, so some padding might also be required. + +I'm happy to write such a script if there is interest. --[[smcv]] -- cgit v1.2.3 From 2e3473d77dba6f6576a3c443bef17e980e51d2f1 Mon Sep 17 00:00:00 2001 From: "http://thm.id.fedoraproject.org/" Date: Wed, 26 Nov 2008 09:35:14 -0500 Subject: --- doc/todo/location_of_external_plugins.mdwn | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/todo/location_of_external_plugins.mdwn (limited to 'doc/todo') diff --git a/doc/todo/location_of_external_plugins.mdwn b/doc/todo/location_of_external_plugins.mdwn new file mode 100644 index 000000000..b55bca324 --- /dev/null +++ b/doc/todo/location_of_external_plugins.mdwn @@ -0,0 +1,3 @@ +Would it be possible to make the installation location for the external plugins (those talked to via xmlrpc) configurable? Currently, they are installed into (and later expected to be in) /usr/lib/ikiwiki/plugins. For the Fedora package (which I maintain), I move them to /usr/libexec/ikiwiki/plugins. While not covered by the FHS, this seems to be a more appropriate place, see: https://fedoraproject.org/wiki/Packaging/Guidelines#Libexecdir. + +As a side note, the accompanying proxy.py might better be placed into some directory on the python path. -- cgit v1.2.3 From dc31c1100cd58dbe10c1aab10ad2291eaece554a Mon Sep 17 00:00:00 2001 From: "http://thm.id.fedoraproject.org/" Date: Wed, 26 Nov 2008 10:38:27 -0500 Subject: --- doc/todo/location_of_ikiwiki-w3m.cgi.mdwn | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/todo/location_of_ikiwiki-w3m.cgi.mdwn (limited to 'doc/todo') diff --git a/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn b/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn new file mode 100644 index 000000000..6e1941c91 --- /dev/null +++ b/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn @@ -0,0 +1 @@ +The ikiwiki-w3m.cgi script is installed (hard-coded) into /usr/lib/w3m/cgi-bin/. On Fedora however, the w3m package expects it in /usr/libexec/w3m/cgi-bin. So, it would be nice if the destination for this script could be configured. -- cgit v1.2.3 From 30360b3f5349f70dce994f0a6fbc8b71cd7ba708 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 14 Aug 1997 08:26:03 -0400 Subject: add W3M_CGI_BIN setting --- Makefile.PL | 7 +++++-- doc/todo/location_of_ikiwiki-w3m.cgi.mdwn | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/Makefile.PL b/Makefile.PL index 2137b9dde..d92d54d1e 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -23,6 +23,9 @@ PROBABLE_INST_LIB=$(shell \\ fi \\ ) +# Additional configurable path variables. +W3M_CGI_BIN?=$(PREFIX)/lib/w3m/cgi-bin + tflag=$(shell if [ -n "$$NOTAINT" ] && [ "$$NOTAINT" != 1 ]; then printf -- "-T"; fi) extramodules=$(shell if [ "$$PROFILE" = 1 ]; then printf -- "-d:Profile"; fi) @@ -94,8 +97,8 @@ extra_install: install -d $(DESTDIR)$(PREFIX)/sbin install ikiwiki-mass-rebuild $(DESTDIR)$(PREFIX)/sbin - install -d $(DESTDIR)$(PREFIX)/lib/w3m/cgi-bin - install ikiwiki-w3m.cgi $(DESTDIR)$(PREFIX)/lib/w3m/cgi-bin + install -d $(DESTDIR)$(W3M_CGI_BIN) + install ikiwiki-w3m.cgi $(DESTDIR)$(W3M_CGI_BIN) install -d $(DESTDIR)$(PREFIX)/bin install ikiwiki.out $(DESTDIR)$(PREFIX)/bin/ikiwiki diff --git a/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn b/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn index 6e1941c91..2ccb7b088 100644 --- a/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn +++ b/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn @@ -1 +1,3 @@ The ikiwiki-w3m.cgi script is installed (hard-coded) into /usr/lib/w3m/cgi-bin/. On Fedora however, the w3m package expects it in /usr/libexec/w3m/cgi-bin. So, it would be nice if the destination for this script could be configured. + +> You can use W3M_CGI_BIN now. [[done]] --[[Joey]] -- cgit v1.2.3 From 04a03c097a46f28de4b803ef28b33c3dda2c3297 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 14 Aug 1997 08:26:46 -0400 Subject: comment --- doc/todo/location_of_external_plugins.mdwn | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/location_of_external_plugins.mdwn b/doc/todo/location_of_external_plugins.mdwn index b55bca324..28b762080 100644 --- a/doc/todo/location_of_external_plugins.mdwn +++ b/doc/todo/location_of_external_plugins.mdwn @@ -1,3 +1,15 @@ -Would it be possible to make the installation location for the external plugins (those talked to via xmlrpc) configurable? Currently, they are installed into (and later expected to be in) /usr/lib/ikiwiki/plugins. For the Fedora package (which I maintain), I move them to /usr/libexec/ikiwiki/plugins. While not covered by the FHS, this seems to be a more appropriate place, see: https://fedoraproject.org/wiki/Packaging/Guidelines#Libexecdir. +Would it be possible to make the installation location for the external +plugins (those talked to via xmlrpc) configurable? Currently, they are +installed into (and later expected to be in) /usr/lib/ikiwiki/plugins. For +the Fedora package (which I maintain), I move them to +/usr/libexec/ikiwiki/plugins. While not covered by the FHS, this seems to +be a more appropriate place, see: +https://fedoraproject.org/wiki/Packaging/Guidelines#Libexecdir. + +> This would need to be a build time configuration setting so the directory +> is built into ikiwiki for use at runtime. --[[Joey]] As a side note, the accompanying proxy.py might better be placed into some directory on the python path. + +> If someone can show how to do so without needing a Setup.py and all the +> pain that using one entails.. --[[Joey]] -- cgit v1.2.3 From d056a01a55e63388973787c133d27ccd3cc8f4a1 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Thu, 27 Nov 2008 05:15:00 -0500 Subject: Fix formatting by adding `...` --- doc/todo/location_of_ikiwiki-w3m.cgi.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn b/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn index 2ccb7b088..8ca925bee 100644 --- a/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn +++ b/doc/todo/location_of_ikiwiki-w3m.cgi.mdwn @@ -1,3 +1,3 @@ -The ikiwiki-w3m.cgi script is installed (hard-coded) into /usr/lib/w3m/cgi-bin/. On Fedora however, the w3m package expects it in /usr/libexec/w3m/cgi-bin. So, it would be nice if the destination for this script could be configured. +The `ikiwiki-w3m.cgi` script is installed (hard-coded) into `/usr/lib/w3m/cgi-bin`. On Fedora however, the w3m package expects it in `/usr/libexec/w3m/cgi-bin`. So, it would be nice if the destination for this script could be configured. -> You can use W3M_CGI_BIN now. [[done]] --[[Joey]] +> You can use `W3M_CGI_BIN now`. [[done]] --[[Joey]] -- cgit v1.2.3 From 7592a6f5b6349ecd6d52d701c2975cb509c98292 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Thu, 27 Nov 2008 05:26:28 -0500 Subject: I don't think putting proxy.py in the system Python path is appropriate --- doc/todo/location_of_external_plugins.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/location_of_external_plugins.mdwn b/doc/todo/location_of_external_plugins.mdwn index 28b762080..c28003e74 100644 --- a/doc/todo/location_of_external_plugins.mdwn +++ b/doc/todo/location_of_external_plugins.mdwn @@ -13,3 +13,12 @@ As a side note, the accompanying proxy.py might better be placed into some direc > If someone can show how to do so without needing a Setup.py and all the > pain that using one entails.. --[[Joey]] + +>> At the very least I don't think proxy.py should be on the `sys.path` +>> under its current name. If it was renamed to ikiwiki_proxy or some such, +>> possibly; but I think it's more appropriate to have it in an +>> ikiwiki-specific directory (a "private module") since it's not useful for +>> anything outside ikiwiki, and putting it in the same directory as the +>> external plugins means it's automatically in their `sys.path` without +>> needing special configuration. --[[smcv]] +>> (a mostly-inactive member of Debian's Python modules packaging team) -- cgit v1.2.3 From e7594b33eba69099e9143076f5692cc02f9ca782 Mon Sep 17 00:00:00 2001 From: "http://alcopop.org/me/openid/" Date: Tue, 2 Dec 2008 10:00:35 -0500 Subject: update for rename of users/jondowland.mdwn to users/jon.mdwn --- doc/todo/clear_page_to_delete.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/clear_page_to_delete.mdwn b/doc/todo/clear_page_to_delete.mdwn index 50ae246bb..6bab6ef27 100644 --- a/doc/todo/clear_page_to_delete.mdwn +++ b/doc/todo/clear_page_to_delete.mdwn @@ -4,7 +4,7 @@ cleared to be entirely empty (or only have whitespace)? Discuss. --[[Joey]] I'd say so; yes. A method of deleting pages via the web would be great; I can't think of a use of keeping blank pages around. What about vandalism -- if someone blanks a page and deletes it and someone else wishes to restore -it; or is undoing edits via the web a bigger issue? -- [[JonDowland]] +it; or is undoing edits via the web a bigger issue? -- [[users/Jon]] Of course there's already a way to delete pages (remove plugin). So the question is really: @@ -30,4 +30,4 @@ keyword and if there were no page editions since XX days. Here, I use pages that can be empty everyday and filled all day long. It does not make sense to me to delete these pages :). --[[xma]] -I was not aware of [[plugins/remove]]. I don't think another method is necessary -- [[JonDowland]] +I was not aware of [[plugins/remove]]. I don't think another method is necessary -- [[users/Jon]] -- cgit v1.2.3 From c4634dfc92485833ca5b2d36c667c7ee6f24f036 Mon Sep 17 00:00:00 2001 From: "http://alcopop.org/me/openid/" Date: Tue, 2 Dec 2008 10:00:39 -0500 Subject: update for rename of users/jondowland.mdwn to users/jon.mdwn --- doc/todo/source_link.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/source_link.mdwn b/doc/todo/source_link.mdwn index 93791c81a..5d6cb89e8 100644 --- a/doc/todo/source_link.mdwn +++ b/doc/todo/source_link.mdwn @@ -1,6 +1,6 @@ How about a direct link from the page header to the source of the latest version, to avoid the need to either use edit or navigate to the current version via the history link? - I'd like this too (and might try to implement it). -- [[jondowland]] + I'd like this too (and might try to implement it). -- [[users/jon]] I just implemented this. There is one [[patch]] to the default page template, and a new plugin. -- [[Will]] -- cgit v1.2.3 From 6edf1126d7c104b9eee3ea60e05fba47a53d0f71 Mon Sep 17 00:00:00 2001 From: "http://alcopop.org/me/openid/" Date: Tue, 2 Dec 2008 10:25:44 -0500 Subject: provide for ignoring h1s etc. in toc --- ...gin:_set_a_header_ceiling___40__opposite_of_levels__61____41__.mdwn | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/todo/toc_plugin:_set_a_header_ceiling___40__opposite_of_levels__61____41__.mdwn (limited to 'doc/todo') diff --git a/doc/todo/toc_plugin:_set_a_header_ceiling___40__opposite_of_levels__61____41__.mdwn b/doc/todo/toc_plugin:_set_a_header_ceiling___40__opposite_of_levels__61____41__.mdwn new file mode 100644 index 000000000..547c7a80a --- /dev/null +++ b/doc/todo/toc_plugin:_set_a_header_ceiling___40__opposite_of_levels__61____41__.mdwn @@ -0,0 +1,3 @@ +It would be nice if the [[plugins/toc]] plugin let you specify a header level "ceiling" above which (or above and including which) the headers would not be incorporated into the toc. + +Currently, the levels=X parameter lets you tweak how deep it will go for small headers, but I'd like to chop off the h1's (as I use them for my page title) -- [[Jon]] -- cgit v1.2.3 From 28ddf3280f502bedb2da387dc00b2e0de34df166 Mon Sep 17 00:00:00 2001 From: "http://www.iredale.net/b/" Date: Sun, 7 Dec 2008 17:57:49 -0500 Subject: --- doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn b/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn index dfeacbabd..3b9f6c0fd 100644 --- a/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn +++ b/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn @@ -54,3 +54,5 @@ the templates. I'd prefer not having to touch Perl though... ----- Yes, Template::Toolkit is very powerful. But I think it's somehow overkill for a wiki. HTML::Template can keep things simple, though. --[weakish](http://weakish.int.eu.org/blog/) + +I'd have to agree that Template::Toolkit is overkill and personally I'm not a fan, but it is very popular (there is even a book) and the new version (3) is alleged to be much more nimble than current version. --[[ajt]] -- cgit v1.2.3 From 120e7553e3781b90543c480abc4f73526cba6ec2 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Thu, 11 Dec 2008 05:59:24 -0500 Subject: suggest a feature that would improve the comments plugin --- doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn (limited to 'doc/todo') diff --git a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn new file mode 100644 index 000000000..2373181d6 --- /dev/null +++ b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn @@ -0,0 +1,9 @@ +If RSS and Atom are enabled by default, the [[plugins/contrib/comments]] plugin generates a feed, perhaps `/sandbox/index.atom` for comments on the sandbox. If a blog is added to the page, the blog will steal the name `/sandbox/index.atom` and the comments plugin's feed will change to `/sandbox/index.atom2`. + +If `\[[!inline]]` gained a parameter `feedname` or something, the comments plugin could use `feedname=comments` to produce `/sandbox/comments.atom` instead (this would just require minor enhancements to rsspage(), atompage() and targetpage()). + +As a side benefit, [my blog](http://smcv.pseudorandom.co.uk/) could go back to its historical Atom feed URL of `.../feed.atom` (which is currently a symlink to `index.atom` :-) ) + +On sites not using `usedirs` the current feed is `/sandbox.atom`, and we could perhaps change it to `/sandbox-comments.atom` or `/sandbox/comments.atom` if `feedname=comments` is given. + +--[[smcv]] -- cgit v1.2.3 From ec0dff43ce3af3011cb86373b7ad87a3931e4784 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Thu, 11 Dec 2008 06:02:49 -0500 Subject: suggest another feature for the comments plugin's benefit --- doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn (limited to 'doc/todo') diff --git a/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn b/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn new file mode 100644 index 000000000..f998d5654 --- /dev/null +++ b/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn @@ -0,0 +1,4 @@ + < joeyh> 03:49:19> also, I think it may be less visually confusing to + drop the rss/atom buttons for comments when there are none yet + +This seems to me like something that applies to the [[plugins/inline]] plugin in general, rather than the [[plugins/contrib/comments]] plugin specifically. --[[smcv]] -- cgit v1.2.3 From 63eb9d834e2f7e08535473934e169cfe7d7debe6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 11 Dec 2008 14:04:38 -0500 Subject: inline: Support emptyfeeds=no option to skip generating empty feeds. --- IkiWiki/Plugin/inline.pm | 10 ++++++++-- debian/changelog | 1 + doc/ikiwiki/directive/inline.mdwn | 4 +++- doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn | 3 +++ 4 files changed, 15 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 0c8f50384..5e4df95f4 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -161,6 +161,7 @@ sub preprocess_inline (@) { #{{{ my $atom=(($config{atom} || $config{allowatom}) && exists $params{atom}) ? yesno($params{atom}) : $config{atom}; my $quick=exists $params{quick} ? yesno($params{quick}) : 0; my $feeds=exists $params{feeds} ? yesno($params{feeds}) : !$quick; + my $emptyfeeds=exists $params{emptyfeeds} ? yesno($params{emptyfeeds}) : 1; my $feedonly=yesno($params{feedonly}); if (! exists $params{show} && ! $archive) { $params{show}=10; @@ -289,8 +290,13 @@ sub preprocess_inline (@) { #{{{ gettext("Add a new post titled:")); } $ret.=$formtemplate->output; + + # The post form includes the feed buttons, so + # emptyfeeds cannot be hidden. + $emptyfeeds=1; } - elsif ($feeds && !$params{preview}) { + elsif ($feeds && !$params{preview} && + ! (! $emptyfeeds && ! @feedlist)) { # Add feed buttons. my $linktemplate=template("feedlink.tmpl", blind_cache => 1); $linktemplate->param(rssurl => $rssurl) if $rss; @@ -367,7 +373,7 @@ sub preprocess_inline (@) { #{{{ } } - if ($feeds) { + if ($feeds && ! (! $emptyfeeds && ! @feedlist)) { if ($rss) { my $rssp=rsspage($params{destpage}).$feednum; will_render($params{destpage}, $rssp); diff --git a/debian/changelog b/debian/changelog index 8d2b6661f..7f6844366 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ ikiwiki (2.71) UNRELEASED; urgency=low * Fix handling of wrappergroup option. * Correct --dumpsetup to include the srcdir in the setup file. * German translation update from Kai Wasserbäch. Closes: #507056 + * inline: Support emptyfeeds=no option to skip generating empty feeds. -- Joey Hess Mon, 17 Nov 2008 14:02:10 -0500 diff --git a/doc/ikiwiki/directive/inline.mdwn b/doc/ikiwiki/directive/inline.mdwn index 9889cda11..82b532e0c 100644 --- a/doc/ikiwiki/directive/inline.mdwn +++ b/doc/ikiwiki/directive/inline.mdwn @@ -73,6 +73,8 @@ Here are some less often needed parameters: configured to `allowatom`, set to "yes" to enable. * `feeds` - controls generation of all types of feeds. Set to "no" to disable generating any feeds. +* `emptyfeeds` - Set to "no" to disable generation of empty feeds. + Has no effect if `rootpage` or `postform` is set. * `template` - Specifies the template to fill out to display each inlined page. By default the `inlinepage` template is used, while the `archivepage` template is used for archives. Set this parameter to @@ -97,7 +99,7 @@ Here are some less often needed parameters: in the blog. The format string is passed to the strftime(3) function. * `feedpages` - A [[PageSpec]] of inlined pages to include in the rss/atom feeds. The default is the same as the `pages` value above, and only pages - matches by that value are included, but some of those can be excluded by + matched by that value are included, but some of those can be excluded by specifying a tighter [[PageSpec]] here. * `guid` - If a URI is given here (perhaps a UUID prefixed with `urn:uuid:`), the Atom feed will have this as its ``. The default is to use the URL diff --git a/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn b/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn index f998d5654..d046c0cd0 100644 --- a/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn +++ b/doc/todo/inline_plugin:_hide_feed_buttons_if_empty.mdwn @@ -2,3 +2,6 @@ drop the rss/atom buttons for comments when there are none yet This seems to me like something that applies to the [[plugins/inline]] plugin in general, rather than the [[plugins/contrib/comments]] plugin specifically. --[[smcv]] + +>> [[done]] as emptyfeeds option, not on by default for inline, but I think +>> it should be for comments --[[Joey]] -- cgit v1.2.3 From e968dbac13a7343c895eb0f8303cbef2c4e3761f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 11 Dec 2008 14:09:34 -0500 Subject: thoughts --- ...line_plugin:_ability_to_override_feed_name.mdwn | 27 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn index 2373181d6..0aab7b9e6 100644 --- a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn +++ b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn @@ -1,9 +1,28 @@ -If RSS and Atom are enabled by default, the [[plugins/contrib/comments]] plugin generates a feed, perhaps `/sandbox/index.atom` for comments on the sandbox. If a blog is added to the page, the blog will steal the name `/sandbox/index.atom` and the comments plugin's feed will change to `/sandbox/index.atom2`. +If RSS and Atom are enabled by default, the [[plugins/contrib/comments]] +plugin generates a feed, perhaps `/sandbox/index.atom` for comments on the +sandbox. If a blog is added to the page, the blog will steal the name +`/sandbox/index.atom` and the comments plugin's feed will change to +`/sandbox/index.atom2`. -If `\[[!inline]]` gained a parameter `feedname` or something, the comments plugin could use `feedname=comments` to produce `/sandbox/comments.atom` instead (this would just require minor enhancements to rsspage(), atompage() and targetpage()). +If `\[[!inline]]` gained a parameter `feedname` or something, the comments +plugin could use `feedname=comments` to produce `/sandbox/comments.atom` +instead (this would just require minor enhancements to rsspage(), +atompage() and targetpage()). -As a side benefit, [my blog](http://smcv.pseudorandom.co.uk/) could go back to its historical Atom feed URL of `.../feed.atom` (which is currently a symlink to `index.atom` :-) ) +As a side benefit, [my blog](http://smcv.pseudorandom.co.uk/) could go back +to its historical Atom feed URL of `.../feed.atom` (which is currently a +symlink to `index.atom` :-) ) -On sites not using `usedirs` the current feed is `/sandbox.atom`, and we could perhaps change it to `/sandbox-comments.atom` or `/sandbox/comments.atom` if `feedname=comments` is given. +On sites not using `usedirs` the current feed is `/sandbox.atom`, and we +could perhaps change it to `/sandbox-comments.atom` or +`/sandbox/comments.atom` if `feedname=comments` is given. --[[smcv]] + +> This is slightly hard to do, because you have to worry about +> conflicting pages setting feedname, which would cause ikiwiki to blow up. +> +> Particularly for the non-usedirs case, where a page `sandbox/comments` +> would produce the same feed as sandbox with `feedname=comments` . +> I don't think there's a solution in the non-usedirs case, so maybe this +> option would need to only work for usedirs. --[[Joey]] -- cgit v1.2.3 From 3b3127643b1869ccebcb6d311a9e100e5317d803 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 11 Dec 2008 14:12:03 -0500 Subject: rethink --- doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn index 0aab7b9e6..41bae45fa 100644 --- a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn +++ b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn @@ -20,9 +20,11 @@ could perhaps change it to `/sandbox-comments.atom` or --[[smcv]] > This is slightly hard to do, because you have to worry about -> conflicting pages setting feedname, which would cause ikiwiki to blow up. +> conflicting pages setting feedname, which could cause ikiwiki to blow up. > > Particularly for the non-usedirs case, where a page `sandbox/comments` -> would produce the same feed as sandbox with `feedname=comments` . -> I don't think there's a solution in the non-usedirs case, so maybe this -> option would need to only work for usedirs. --[[Joey]] +> would produce the same feed as sandbox with `feedname=comments`. +> +> Hmm, looking some more, since inline tracks `%knownfeeds` and uniquifys +> the names on conflicts, you'd just end up with `sandbox/comments.atom2` +> if there were a conflict -- acceptable. --[[Joey]] -- cgit v1.2.3 From 2cd7eecf896261834bcd66d8ec3a9fd3bb7236d8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 11 Dec 2008 14:26:58 -0500 Subject: looking closer, the existing %knownfeeds won't work --- doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn index 41bae45fa..71bc3bdd6 100644 --- a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn +++ b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn @@ -24,7 +24,4 @@ could perhaps change it to `/sandbox-comments.atom` or > > Particularly for the non-usedirs case, where a page `sandbox/comments` > would produce the same feed as sandbox with `feedname=comments`. -> -> Hmm, looking some more, since inline tracks `%knownfeeds` and uniquifys -> the names on conflicts, you'd just end up with `sandbox/comments.atom2` -> if there were a conflict -- acceptable. --[[Joey]] +> --[[Joey]] -- cgit v1.2.3 From b67632cdcdd333cf0a88d03c0f7e6e62921f32c3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 11 Dec 2008 15:01:26 -0500 Subject: inline: Support feedfile option to change the filename of the feed generated. --- IkiWiki.pm | 8 ++- IkiWiki/Plugin/inline.pm | 63 ++++++++++-------- debian/changelog | 2 + doc/ikiwiki/directive/inline.mdwn | 5 ++ doc/plugins/write.mdwn | 6 +- ...line_plugin:_ability_to_override_feed_name.mdwn | 2 + po/de.po | 74 +++++++++++----------- po/fr.po | 71 +++++++++++---------- po/ikiwiki.pot | 52 +++++++-------- 9 files changed, 156 insertions(+), 127 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki.pm b/IkiWiki.pm index 2ad2f792d..1c68c2cb3 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -666,11 +666,15 @@ sub newpagefile ($$) { #{{{ } } #}}} -sub targetpage ($$) { #{{{ +sub targetpage ($$;$) { #{{{ my $page=shift; my $ext=shift; + my $filename=shift; - if (! $config{usedirs} || $page eq 'index') { + if (defined $filename) { + return $page."/".$filename.".".$ext; + } + elsif (! $config{usedirs} || $page eq 'index') { return $page.".".$ext; } else { diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 5e4df95f4..17cc46e0e 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -26,8 +26,7 @@ sub import { #{{{ # Hook to change to do pinging since it's called late. # This ensures each page only pings once and prevents slow # pings interrupting page builds. - hook(type => "change", id => "inline", - call => \&IkiWiki::pingurl); + hook(type => "change", id => "inline", call => \&IkiWiki::pingurl); } # }}} sub getopt () { #{{{ @@ -238,28 +237,46 @@ sub preprocess_inline (@) { #{{{ @feedlist=grep { pagespec_match($_, $params{feedpages}, location => $params{page}) } @feedlist; } - my $feednum=""; - - my $feedid=join("\0", map { $_."\0".$params{$_} } sort keys %params); - if (exists $knownfeeds{$feedid}) { - $feednum=$knownfeeds{$feedid}; - } - else { - if (exists $page_numfeeds{$params{destpage}}) { - if ($feeds) { - $feednum=$knownfeeds{$feedid}=++$page_numfeeds{$params{destpage}}; + my ($feedbase, $feednum); + if ($feeds) { + # Ensure that multiple feeds on a page go to unique files. + + # Feedfile can lead to conflicts if usedirs is not enabled, + # so avoid supporting it in that case. + delete $params{feedfile} if ! $config{usedirs}; + # Tight limits on legal feedfiles, to avoid security issues + # and conflicts. + if (defined $params{feedfile}) { + if ($params{feedfile} =~ /\// || + $params{feedfile} !~ /$config{wiki_file_regexp}/) { + error("illegal feedfile"); } + $params{feedfile}=possibly_foolish_untaint($params{feedfile}); + } + $feedbase=targetpage($params{destpage}, "", $params{feedfile}); + + my $feedid=join("\0", $feedbase, map { $_."\0".$params{$_} } sort keys %params); + if (exists $knownfeeds{$feedid}) { + $feednum=$knownfeeds{$feedid}; } else { - $feednum=$knownfeeds{$feedid}=""; - if ($feeds) { - $page_numfeeds{$params{destpage}}=1; + if (exists $page_numfeeds{$params{destpage}}{$feedbase}) { + if ($feeds) { + $feednum=$knownfeeds{$feedid}=++$page_numfeeds{$params{destpage}}{$feedbase}; + } + } + else { + $feednum=$knownfeeds{$feedid}=""; + if ($feeds) { + $page_numfeeds{$params{destpage}}{$feedbase}=1; + } } } } - my $rssurl=basename(rsspage($params{destpage}).$feednum) if $feeds && $rss; - my $atomurl=basename(atompage($params{destpage}).$feednum) if $feeds && $atom; + my $rssurl=basename($feedbase."rss".$feednum) if $feeds && $rss; + my $atomurl=basename($feedbase."atom".$feednum) if $feeds && $atom; + my $ret=""; if (length $config{cgiurl} && ! $params{preview} && (exists $params{rootpage} || @@ -375,7 +392,7 @@ sub preprocess_inline (@) { #{{{ if ($feeds && ! (! $emptyfeeds && ! @feedlist)) { if ($rss) { - my $rssp=rsspage($params{destpage}).$feednum; + my $rssp=$feedbase."rss".$feednum; will_render($params{destpage}, $rssp); if (! $params{preview}) { writefile($rssp, $config{destdir}, @@ -386,7 +403,7 @@ sub preprocess_inline (@) { #{{{ } } if ($atom) { - my $atomp=atompage($params{destpage}).$feednum; + my $atomp=$feedbase."atom".$feednum; will_render($params{destpage}, $atomp); if (! $params{preview}) { writefile($atomp, $config{destdir}, @@ -475,14 +492,6 @@ sub absolute_urls ($$) { #{{{ return $content; } #}}} -sub rsspage ($) { #{{{ - return targetpage(shift, "rss"); -} #}}} - -sub atompage ($) { #{{{ - return targetpage(shift, "atom"); -} #}}} - sub genfeed ($$$$$@) { #{{{ my $feedtype=shift; my $feedurl=shift; diff --git a/debian/changelog b/debian/changelog index 7f6844366..1ff78d749 100644 --- a/debian/changelog +++ b/debian/changelog @@ -11,6 +11,8 @@ ikiwiki (2.71) UNRELEASED; urgency=low * Correct --dumpsetup to include the srcdir in the setup file. * German translation update from Kai Wasserbäch. Closes: #507056 * inline: Support emptyfeeds=no option to skip generating empty feeds. + * inline: Support feedfile option to change the filename of the feed + generated. -- Joey Hess Mon, 17 Nov 2008 14:02:10 -0500 diff --git a/doc/ikiwiki/directive/inline.mdwn b/doc/ikiwiki/directive/inline.mdwn index 82b532e0c..40670e1e7 100644 --- a/doc/ikiwiki/directive/inline.mdwn +++ b/doc/ikiwiki/directive/inline.mdwn @@ -104,6 +104,11 @@ Here are some less often needed parameters: * `guid` - If a URI is given here (perhaps a UUID prefixed with `urn:uuid:`), the Atom feed will have this as its ``. The default is to use the URL of the page containing the `inline` directive. +* `feedfile` - Can be used to change the name of the file generated for the + feed. This is particularly useful if a page contains multiple feeds. + For example, set "feedfile=feed" to cause it to generate `page/feed.atom` + and/or `page/feed.rss`. This option is not supported if the wiki is + configured not to use `usedirs`. [[!meta robots="noindex, follow"]] diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index abcabbdc3..b6fa96f91 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -696,11 +696,15 @@ This can be called when creating a new page, to determine what filename to save the page to. It's passed a page name, and its type, and returns the name of the file to create, relative to the srcdir. -#### `targetpage($$)` +#### `targetpage($$;$)` Passed a page and an extension, returns the filename that page will be rendered to. +Optionally, a third parameter can be passed, to specify the preferred +filename of the page. For example, `targetpage("foo", "rss", "feed")` +will yield something like `foo/feed.rss`. + ## Miscellaneous ### Internal use pages diff --git a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn index 71bc3bdd6..df5bf9194 100644 --- a/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn +++ b/doc/todo/inline_plugin:_ability_to_override_feed_name.mdwn @@ -25,3 +25,5 @@ could perhaps change it to `/sandbox-comments.atom` or > Particularly for the non-usedirs case, where a page `sandbox/comments` > would produce the same feed as sandbox with `feedname=comments`. > --[[Joey]] + +> [[done]] as feedfile option --[[Joey]] diff --git a/po/de.po b/po/de.po index 55234a909..d49d0c6ca 100644 --- a/po/de.po +++ b/po/de.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 2.70\n" -"Report-Msgid-Bugs-To: ikiwiki@packages.debian.org\n" -"POT-Creation-Date: 2008-10-31 16:37-0400\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-12-11 14:46-0500\n" "PO-Revision-Date: 2008-11-20 19:58+0100\n" "Last-Translator: Kai Wasserbäch \n" "Language-Team: German \n" @@ -47,7 +47,7 @@ msgstr "Einstellungen gespeichert." msgid "You are banned." msgstr "Sie sind ausgeschlossen worden." -#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1182 +#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1204 msgid "Error" msgstr "Fehler" @@ -110,16 +110,16 @@ msgstr "Feed nicht gefunden" msgid "(invalid UTF-8 stripped from feed)" msgstr "(ungültiges UTF-8-Zeichen wurde aus dem Feed entfernt)" -#: ../IkiWiki/Plugin/aggregate.pm:504 +#: ../IkiWiki/Plugin/aggregate.pm:506 #, perl-format msgid "(feed entities escaped)" msgstr "(Feed-Entitäten maskiert)" -#: ../IkiWiki/Plugin/aggregate.pm:510 +#: ../IkiWiki/Plugin/aggregate.pm:514 msgid "feed crashed XML::Feed!" msgstr "Feed führte zum Absturz von XML::Feed!" -#: ../IkiWiki/Plugin/aggregate.pm:590 +#: ../IkiWiki/Plugin/aggregate.pm:595 #, perl-format msgid "creating new page %s" msgstr "erstelle neue Seite %s" @@ -128,7 +128,7 @@ msgstr "erstelle neue Seite %s" msgid "deleting bucket.." msgstr "Lösche Bucket..." -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:208 msgid "done" msgstr "fertig" @@ -171,7 +171,7 @@ msgid "automatic index generation" msgstr "automatische Index-Erstellung" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:261 -#: ../IkiWiki/Plugin/inline.pm:327 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:344 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -245,11 +245,11 @@ msgstr "»edittemplate« %s registriert für %s" msgid "failed to process" msgstr "Bearbeitung fehlgeschlagen" -#: ../IkiWiki/Plugin/format.pm:22 +#: ../IkiWiki/Plugin/format.pm:20 msgid "must specify format and text" msgstr "Format und Text muss spezifiziert werden" -#: ../IkiWiki/Plugin/format.pm:25 +#: ../IkiWiki/Plugin/format.pm:23 #, perl-format msgid "unsupported page format %s" msgstr "nicht unterstütztes Seitenformat %s" @@ -276,7 +276,8 @@ msgstr "Es ist Ihnen nicht erlaubt, Dateizugriffsrechte zu ändern" #: ../IkiWiki/Plugin/google.pm:27 #, perl-format msgid "Must specify %s when using the google search plugin" -msgstr "%s muss angegeben werden, wenn die Google-Sucherweiterung verwandt wird" +msgstr "" +"%s muss angegeben werden, wenn die Google-Sucherweiterung verwandt wird" #: ../IkiWiki/Plugin/google.pm:31 msgid "Failed to parse url, cannot determine domain name" @@ -320,17 +321,17 @@ msgstr "Größenänderung fehlgeschlagen: %s" msgid "failed to determine size of image %s" msgstr "Größe des Bildes %s konnte nicht festgestellt werden." -#: ../IkiWiki/Plugin/inline.pm:93 +#: ../IkiWiki/Plugin/inline.pm:92 msgid "Must specify url to wiki with --url when using --rss or --atom" msgstr "" "Die URL zum Wiki muss mit --url angegeben werden, wenn --rss oder --atom " "genutzt wird" -#: ../IkiWiki/Plugin/inline.pm:139 +#: ../IkiWiki/Plugin/inline.pm:138 msgid "page editing not allowed" msgstr "Seitenbearbeitungen sind nicht erlaubt" -#: ../IkiWiki/Plugin/inline.pm:156 +#: ../IkiWiki/Plugin/inline.pm:155 msgid "missing pages parameter" msgstr "Fehlender Seitenparameter" @@ -339,20 +340,20 @@ msgstr "Fehlender Seitenparameter" msgid "unknown sort type %s" msgstr "Unbekannter Sortierungstyp %s" -#: ../IkiWiki/Plugin/inline.pm:285 +#: ../IkiWiki/Plugin/inline.pm:297 msgid "Add a new post titled:" msgstr "Füge einen neuen Beitrag hinzu. Titel:" -#: ../IkiWiki/Plugin/inline.pm:301 +#: ../IkiWiki/Plugin/inline.pm:318 #, perl-format msgid "nonexistant template %s" msgstr "nicht-vorhandene Vorlage %s" -#: ../IkiWiki/Plugin/inline.pm:335 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:352 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Diskussion" -#: ../IkiWiki/Plugin/inline.pm:572 +#: ../IkiWiki/Plugin/inline.pm:577 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client nicht gefunden, führe Ping nicht aus" @@ -568,20 +569,18 @@ msgstr "Unzulässiger Prozentwert (%s)" #: ../IkiWiki/Plugin/progress.pm:59 msgid "need either `percent` or `totalpages` and `donepages` parameters" -msgstr "" -"Benötige entweder »percent«- oder »totalpages«- und " -"»donepages«-Parameter" +msgstr "Benötige entweder »percent«- oder »totalpages«- und »donepages«-Parameter" -#: ../IkiWiki/Plugin/recentchanges.pm:100 +#: ../IkiWiki/Plugin/recentchanges.pm:101 msgid "missing page" msgstr "fehlende Seite" -#: ../IkiWiki/Plugin/recentchanges.pm:102 +#: ../IkiWiki/Plugin/recentchanges.pm:103 #, perl-format msgid "The page %s does not exist." msgstr "Die Seite %s existiert nicht." -#: ../IkiWiki/Plugin/recentchangesdiff.pm:36 +#: ../IkiWiki/Plugin/recentchangesdiff.pm:37 msgid "(Diff truncated)" msgstr "(Diff beschnitten)" @@ -593,7 +592,8 @@ msgstr "%s existiert nicht" #: ../IkiWiki/Plugin/remove.pm:38 #, perl-format msgid "%s is not in the srcdir, so it cannot be deleted" -msgstr "%s ist nicht im Quellverzeichnis und kann deshalb nicht gelöscht werden" +msgstr "" +"%s ist nicht im Quellverzeichnis und kann deshalb nicht gelöscht werden" #: ../IkiWiki/Plugin/remove.pm:41 ../IkiWiki/Plugin/rename.pm:45 #, perl-format @@ -928,19 +928,19 @@ msgstr "Dateiname des Wrappers nicht angegeben" #. translators: The first parameter is a filename, and the second is #. translators: a (probably not translated) error message. -#: ../IkiWiki/Wrapper.pm:79 +#: ../IkiWiki/Wrapper.pm:97 #, perl-format msgid "failed to write %s: %s" msgstr "Schreiben von %s fehlgeschlagen: %s" #. translators: The parameter is a C filename. -#: ../IkiWiki/Wrapper.pm:135 +#: ../IkiWiki/Wrapper.pm:154 #, perl-format msgid "failed to compile %s" msgstr "Erzeugen von %s fehlgeschlagen" #. translators: The parameter is a filename. -#: ../IkiWiki/Wrapper.pm:155 +#: ../IkiWiki/Wrapper.pm:174 #, perl-format msgid "successfully generated %s" msgstr "%s wurde erfolgreich erstellt" @@ -953,43 +953,43 @@ msgstr "Benutzung: ikiwiki [Optionen] Quelle Ziel" msgid " ikiwiki --setup configfile" msgstr " ikiwiki --setup Konfigurationsdatei " -#: ../ikiwiki.in:90 +#: ../ikiwiki.in:91 msgid "usage: --set var=value" msgstr "Benutzung: --set Variable=Wert" -#: ../ikiwiki.in:138 +#: ../ikiwiki.in:139 msgid "generating wrappers.." msgstr "erzeuge Wrapper..." -#: ../ikiwiki.in:195 +#: ../ikiwiki.in:197 msgid "rebuilding wiki.." msgstr "erzeuge Wiki neu..." -#: ../ikiwiki.in:198 +#: ../ikiwiki.in:200 msgid "refreshing wiki.." msgstr "aktualisiere Wiki..." -#: ../IkiWiki.pm:466 +#: ../IkiWiki.pm:480 msgid "Must specify url to wiki with --url when using --cgi" msgstr "" "Es muss eine URL zum Wiki mit --url angegeben werden, wenn --cgi verwandt " "wird" -#: ../IkiWiki.pm:512 +#: ../IkiWiki.pm:526 msgid "cannot use multiple rcs plugins" msgstr "Kann nicht mehrere Versionskontrollsystem-Erweiterungen verwenden" -#: ../IkiWiki.pm:541 +#: ../IkiWiki.pm:555 #, perl-format msgid "failed to load external plugin needed for %s plugin: %s" msgstr "Laden der für %s benötigten externen Erweiterung fehlgeschlagen: %s" -#: ../IkiWiki.pm:1165 +#: ../IkiWiki.pm:1187 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "Präprozessorschleife auf %s in Tiefe %i erkannt" -#: ../IkiWiki.pm:1678 +#: ../IkiWiki.pm:1688 msgid "yes" msgstr "ja" diff --git a/po/fr.po b/po/fr.po index b8e84f930..ebc21fd9a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: ikiwiki 2.70 \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-31 16:37-0400\n" +"POT-Creation-Date: 2008-12-11 14:46-0500\n" "PO-Revision-Date: 2008-11-19 21:53+0100\n" "Last-Translator: Philippe Batailler \n" "Language-Team: French \n" @@ -49,7 +49,7 @@ msgstr "Les préférences ont été enregistrées." msgid "You are banned." msgstr "Vous avez été banni." -#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1182 +#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1204 msgid "Error" msgstr "Erreur" @@ -112,16 +112,16 @@ msgstr "Flux introuvable " msgid "(invalid UTF-8 stripped from feed)" msgstr "(chaîne UTF-8 non valable supprimée du flux)" -#: ../IkiWiki/Plugin/aggregate.pm:504 +#: ../IkiWiki/Plugin/aggregate.pm:506 #, perl-format msgid "(feed entities escaped)" msgstr "(échappement des entités de flux)" -#: ../IkiWiki/Plugin/aggregate.pm:510 +#: ../IkiWiki/Plugin/aggregate.pm:514 msgid "feed crashed XML::Feed!" msgstr "Plantage du flux XML::Feed !" -#: ../IkiWiki/Plugin/aggregate.pm:590 +#: ../IkiWiki/Plugin/aggregate.pm:595 #, perl-format msgid "creating new page %s" msgstr "Création de la nouvelle page %s" @@ -130,7 +130,7 @@ msgstr "Création de la nouvelle page %s" msgid "deleting bucket.." msgstr "suppression du compartiment S3 (« bucket »)..." -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:208 msgid "done" msgstr "Terminé" @@ -173,7 +173,7 @@ msgid "automatic index generation" msgstr "génération de l'index automatique" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:261 -#: ../IkiWiki/Plugin/inline.pm:327 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:344 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -247,11 +247,11 @@ msgstr "edittemplate %s enregistré pour %s" msgid "failed to process" msgstr "Échec du traitement" -#: ../IkiWiki/Plugin/format.pm:22 +#: ../IkiWiki/Plugin/format.pm:20 msgid "must specify format and text" msgstr "le format et le texte doivent être indiqués" -#: ../IkiWiki/Plugin/format.pm:25 +#: ../IkiWiki/Plugin/format.pm:23 #, perl-format msgid "unsupported page format %s" msgstr "format de page non reconnu %s" @@ -321,17 +321,17 @@ msgstr "Échec du redimensionnement : %s" msgid "failed to determine size of image %s" msgstr "Échec de la détermination de la taille de l'image : %s" -#: ../IkiWiki/Plugin/inline.pm:93 +#: ../IkiWiki/Plugin/inline.pm:92 msgid "Must specify url to wiki with --url when using --rss or --atom" msgstr "" "Vous devez indiquer l'URL du wiki par --url lors de l'utilisation de --rss " "ou --atom" -#: ../IkiWiki/Plugin/inline.pm:139 +#: ../IkiWiki/Plugin/inline.pm:138 msgid "page editing not allowed" msgstr "Modification de page interdite" -#: ../IkiWiki/Plugin/inline.pm:156 +#: ../IkiWiki/Plugin/inline.pm:155 msgid "missing pages parameter" msgstr "paramètre « pages » manquant" @@ -340,20 +340,20 @@ msgstr "paramètre « pages » manquant" msgid "unknown sort type %s" msgstr "Type de tri %s inconnu" -#: ../IkiWiki/Plugin/inline.pm:285 +#: ../IkiWiki/Plugin/inline.pm:297 msgid "Add a new post titled:" msgstr "Ajouter un nouvel article dont le titre est :" -#: ../IkiWiki/Plugin/inline.pm:301 +#: ../IkiWiki/Plugin/inline.pm:318 #, perl-format msgid "nonexistant template %s" msgstr "Le modèle de page %s n'existe pas" -#: ../IkiWiki/Plugin/inline.pm:335 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:352 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Discussion" -#: ../IkiWiki/Plugin/inline.pm:572 +#: ../IkiWiki/Plugin/inline.pm:577 msgid "RPC::XML::Client not found, not pinging" msgstr "RPC::XML::Client introuvable, pas de réponse au ping" @@ -573,16 +573,16 @@ msgid "need either `percent` or `totalpages` and `donepages` parameters" msgstr "" "L'un des paramètres « percent », « totalpages » ou « donepages » est nécessaire." -#: ../IkiWiki/Plugin/recentchanges.pm:100 +#: ../IkiWiki/Plugin/recentchanges.pm:101 msgid "missing page" msgstr "Page manquante" -#: ../IkiWiki/Plugin/recentchanges.pm:102 +#: ../IkiWiki/Plugin/recentchanges.pm:103 #, perl-format msgid "The page %s does not exist." msgstr "La page %s n'existe pas." -#: ../IkiWiki/Plugin/recentchangesdiff.pm:36 +#: ../IkiWiki/Plugin/recentchangesdiff.pm:37 msgid "(Diff truncated)" msgstr "(fichier de différences tronqué)" @@ -820,12 +820,14 @@ msgstr "" #: ../IkiWiki/Plugin/websetup.pm:433 #, perl-format msgid "

Error: %s exited nonzero (%s)" -msgstr "

Erreur : %s s'est terminé, valeur de sortie nonzero (%s)" +msgstr "" +"

Erreur : %s s'est terminé, valeur de sortie nonzero (%s)" #: ../IkiWiki/Receive.pm:35 #, perl-format msgid "cannot determine id of untrusted committer %s" -msgstr "Impossible de déterminer l'identifiant de %s, (enregistrement non fiable)" +msgstr "" +"Impossible de déterminer l'identifiant de %s, (enregistrement non fiable)" #: ../IkiWiki/Receive.pm:85 #, perl-format @@ -929,19 +931,19 @@ msgstr "Le nom du fichier CGI n'a pas été indiqué" #. translators: The first parameter is a filename, and the second is #. translators: a (probably not translated) error message. -#: ../IkiWiki/Wrapper.pm:79 +#: ../IkiWiki/Wrapper.pm:97 #, perl-format msgid "failed to write %s: %s" msgstr "Échec de l'écriture de %s : %s" #. translators: The parameter is a C filename. -#: ../IkiWiki/Wrapper.pm:135 +#: ../IkiWiki/Wrapper.pm:154 #, perl-format msgid "failed to compile %s" msgstr "Échec de la compilation de %s" #. translators: The parameter is a filename. -#: ../IkiWiki/Wrapper.pm:155 +#: ../IkiWiki/Wrapper.pm:174 #, perl-format msgid "successfully generated %s" msgstr "%s a été créé avec succès" @@ -954,41 +956,42 @@ msgstr "Syntaxe : ikiwiki [options] source destination" msgid " ikiwiki --setup configfile" msgstr " ikiwiki --setup fichier de configuration" -#: ../ikiwiki.in:90 +#: ../ikiwiki.in:91 msgid "usage: --set var=value" msgstr "Syntaxe : -- set var=valeur" -#: ../ikiwiki.in:138 +#: ../ikiwiki.in:139 msgid "generating wrappers.." msgstr "Création des fichiers CGI..." -#: ../ikiwiki.in:195 +#: ../ikiwiki.in:197 msgid "rebuilding wiki.." msgstr "Reconstruction du wiki..." -#: ../ikiwiki.in:198 +#: ../ikiwiki.in:200 msgid "refreshing wiki.." msgstr "Rafraîchissement du wiki..." -#: ../IkiWiki.pm:466 +#: ../IkiWiki.pm:480 msgid "Must specify url to wiki with --url when using --cgi" -msgstr "Vous devez indiquer l'URL du wiki par --url lors de l'utilisation de --cgi" +msgstr "" +"Vous devez indiquer l'URL du wiki par --url lors de l'utilisation de --cgi" -#: ../IkiWiki.pm:512 +#: ../IkiWiki.pm:526 msgid "cannot use multiple rcs plugins" msgstr "impossible d'utiliser plusieurs systèmes de contrôle des versions" -#: ../IkiWiki.pm:541 +#: ../IkiWiki.pm:555 #, perl-format msgid "failed to load external plugin needed for %s plugin: %s" msgstr "Impossible de charger le greffon externe nécessaire au greffon %s : %s" -#: ../IkiWiki.pm:1165 +#: ../IkiWiki.pm:1187 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "une boucle de pré traitement a été détectée sur %s à hauteur de %i" -#: ../IkiWiki.pm:1678 +#: ../IkiWiki.pm:1688 msgid "yes" msgstr "oui" diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot index feb36c742..11c865363 100644 --- a/po/ikiwiki.pot +++ b/po/ikiwiki.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-11 20:48-0500\n" +"POT-Creation-Date: 2008-12-11 14:46-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -48,7 +48,7 @@ msgstr "" msgid "You are banned." msgstr "" -#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1189 +#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1204 msgid "Error" msgstr "" @@ -111,16 +111,16 @@ msgstr "" msgid "(invalid UTF-8 stripped from feed)" msgstr "" -#: ../IkiWiki/Plugin/aggregate.pm:504 +#: ../IkiWiki/Plugin/aggregate.pm:506 #, perl-format msgid "(feed entities escaped)" msgstr "" -#: ../IkiWiki/Plugin/aggregate.pm:510 +#: ../IkiWiki/Plugin/aggregate.pm:514 msgid "feed crashed XML::Feed!" msgstr "" -#: ../IkiWiki/Plugin/aggregate.pm:591 +#: ../IkiWiki/Plugin/aggregate.pm:595 #, perl-format msgid "creating new page %s" msgstr "" @@ -129,7 +129,7 @@ msgstr "" msgid "deleting bucket.." msgstr "" -#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:206 +#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:208 msgid "done" msgstr "" @@ -172,7 +172,7 @@ msgid "automatic index generation" msgstr "" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:261 -#: ../IkiWiki/Plugin/inline.pm:327 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:344 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -320,15 +320,15 @@ msgstr "" msgid "failed to determine size of image %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:93 +#: ../IkiWiki/Plugin/inline.pm:92 msgid "Must specify url to wiki with --url when using --rss or --atom" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:139 +#: ../IkiWiki/Plugin/inline.pm:138 msgid "page editing not allowed" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:156 +#: ../IkiWiki/Plugin/inline.pm:155 msgid "missing pages parameter" msgstr "" @@ -337,20 +337,20 @@ msgstr "" msgid "unknown sort type %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:285 +#: ../IkiWiki/Plugin/inline.pm:297 msgid "Add a new post titled:" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:301 +#: ../IkiWiki/Plugin/inline.pm:318 #, perl-format msgid "nonexistant template %s" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:335 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:352 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "" -#: ../IkiWiki/Plugin/inline.pm:572 +#: ../IkiWiki/Plugin/inline.pm:577 msgid "RPC::XML::Client not found, not pinging" msgstr "" @@ -563,16 +563,16 @@ msgstr "" msgid "need either `percent` or `totalpages` and `donepages` parameters" msgstr "" -#: ../IkiWiki/Plugin/recentchanges.pm:100 +#: ../IkiWiki/Plugin/recentchanges.pm:101 msgid "missing page" msgstr "" -#: ../IkiWiki/Plugin/recentchanges.pm:102 +#: ../IkiWiki/Plugin/recentchanges.pm:103 #, perl-format msgid "The page %s does not exist." msgstr "" -#: ../IkiWiki/Plugin/recentchangesdiff.pm:36 +#: ../IkiWiki/Plugin/recentchangesdiff.pm:37 msgid "(Diff truncated)" msgstr "" @@ -935,41 +935,41 @@ msgstr "" msgid " ikiwiki --setup configfile" msgstr "" -#: ../ikiwiki.in:90 +#: ../ikiwiki.in:91 msgid "usage: --set var=value" msgstr "" -#: ../ikiwiki.in:138 +#: ../ikiwiki.in:139 msgid "generating wrappers.." msgstr "" -#: ../ikiwiki.in:195 +#: ../ikiwiki.in:197 msgid "rebuilding wiki.." msgstr "" -#: ../ikiwiki.in:198 +#: ../ikiwiki.in:200 msgid "refreshing wiki.." msgstr "" -#: ../IkiWiki.pm:473 +#: ../IkiWiki.pm:480 msgid "Must specify url to wiki with --url when using --cgi" msgstr "" -#: ../IkiWiki.pm:519 +#: ../IkiWiki.pm:526 msgid "cannot use multiple rcs plugins" msgstr "" -#: ../IkiWiki.pm:548 +#: ../IkiWiki.pm:555 #, perl-format msgid "failed to load external plugin needed for %s plugin: %s" msgstr "" -#: ../IkiWiki.pm:1172 +#: ../IkiWiki.pm:1187 #, perl-format msgid "preprocessing loop detected on %s at depth %i" msgstr "" -#: ../IkiWiki.pm:1673 +#: ../IkiWiki.pm:1688 msgid "yes" msgstr "" -- cgit v1.2.3 From fdd994fb7365308bde162b72b280512f2db6a339 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 17 Dec 2008 14:15:52 -0500 Subject: more comments doc updates Moved todo items to a todo page, mark the old todo item about comments as done, etc. --- doc/plugins/comments.mdwn | 12 ------------ doc/plugins/comments/discussion.mdwn | 3 +++ doc/todo/comments.mdwn | 8 ++++++++ doc/todo/supporting_comments_via_disussion_pages.mdwn | 3 +++ 4 files changed, 14 insertions(+), 12 deletions(-) create mode 100644 doc/todo/comments.mdwn (limited to 'doc/todo') diff --git a/doc/plugins/comments.mdwn b/doc/plugins/comments.mdwn index fa263ef40..aab75e9b7 100644 --- a/doc/plugins/comments.mdwn +++ b/doc/plugins/comments.mdwn @@ -37,15 +37,3 @@ There are some global options for the setup file: specify a name for themselves, and the \[[!meta author]] and \[[!meta authorurl]] directives will not be overridden by the comments plugin - -Known issues: - -* Needs code review -* The access control via postcomment() is rather strange (see [[discussion]] for more details) -* There is some common code cargo-culted from other plugins (notably inline and editpage) which - should probably be shared -* Joey doesn't think it should necessarily use internal pages (see [[discussion]]) -* Previews always say "unknown IP address" -* Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID -* The default template should have a (?) icon next to unauthenticated users (with the IP address - as title) and an OpenID icon next to OpenIDs diff --git a/doc/plugins/comments/discussion.mdwn b/doc/plugins/comments/discussion.mdwn index 59740ec37..2a87a3d93 100644 --- a/doc/plugins/comments/discussion.mdwn +++ b/doc/plugins/comments/discussion.mdwn @@ -63,6 +63,9 @@ spam problems. So, use `check_canedit` as at least a first-level check? > This is why `anonok_pages => 'postcomment(*)'` and `locked_pages => '!postcomment(*)'` > are necessary to allow anonymous and logged-in editing (respectively). > +>> I changed that to move the flag out of the page name, and into a variable that the `match_postcomment` +>> function checks for. Other ugliness still applies. :-) --[[Joey]] +> > This is ugly - one alternative would be to add `check_permission()` that takes a > page and a verb (create, edit, rename, remove and maybe comment are the ones I > can think of so far), use that, and port the plugins you mentioned to use that diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn new file mode 100644 index 000000000..adc302a25 --- /dev/null +++ b/doc/todo/comments.mdwn @@ -0,0 +1,8 @@ +Known issues with the [[plugins/comments]] plugin: + +* There is some common code cargo-culted from other plugins (notably inline and editpage) which + should probably be shared +* Previews always say "unknown IP address" +* Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID +* The default template should have a (?) icon next to unauthenticated users (with the IP address + as title) and an OpenID icon next to OpenIDs diff --git a/doc/todo/supporting_comments_via_disussion_pages.mdwn b/doc/todo/supporting_comments_via_disussion_pages.mdwn index bc4e331d0..892db18a9 100644 --- a/doc/todo/supporting_comments_via_disussion_pages.mdwn +++ b/doc/todo/supporting_comments_via_disussion_pages.mdwn @@ -215,3 +215,6 @@ do you think so far? Known issues include: --[[smcv]] I've updated smcvpostcomment and publicised it as [[plugins/contrib/comments]]. --[[smcv]] + +> While there is still room for improvement and entirely other approaches, +> I am calling this done since smcv's comments plugin is ready. --[[Joey]] -- cgit v1.2.3 From bb93fccf0690344aa77f9538a508959a6de09847 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 17 Dec 2008 15:22:16 -0500 Subject: Coding style change: Remove explcit vim folding markers. --- IkiWiki.pm | 388 ++++++++++----------- IkiWiki/CGI.pm | 60 ++-- IkiWiki/Plugin/aggregate.pm | 108 +++--- IkiWiki/Plugin/amazon_s3.pm | 32 +- IkiWiki/Plugin/anonok.pm | 12 +- IkiWiki/Plugin/attachment.pm | 32 +- IkiWiki/Plugin/autoindex.pm | 16 +- IkiWiki/Plugin/brokenlinks.pm | 12 +- IkiWiki/Plugin/bzr.pm | 54 +-- IkiWiki/Plugin/calendar.pm | 30 +- IkiWiki/Plugin/camelcase.pm | 14 +- IkiWiki/Plugin/color.pm | 20 +- IkiWiki/Plugin/comments.pm | 38 +- IkiWiki/Plugin/conditional.pm | 28 +- IkiWiki/Plugin/creole.pm | 12 +- IkiWiki/Plugin/cutpaste.pm | 20 +- IkiWiki/Plugin/ddate.pm | 12 +- IkiWiki/Plugin/editdiff.pm | 16 +- IkiWiki/Plugin/editpage.pm | 16 +- IkiWiki/Plugin/edittemplate.pm | 24 +- IkiWiki/Plugin/embed.pm | 20 +- IkiWiki/Plugin/external.pm | 48 +-- IkiWiki/Plugin/favicon.pm | 12 +- IkiWiki/Plugin/filecheck.pm | 30 +- IkiWiki/Plugin/format.pm | 8 +- IkiWiki/Plugin/fortune.pm | 12 +- IkiWiki/Plugin/git.pm | 72 ++-- IkiWiki/Plugin/goodstuff.pm | 8 +- IkiWiki/Plugin/google.pm | 16 +- IkiWiki/Plugin/googlecalendar.pm | 20 +- IkiWiki/Plugin/graphviz.pm | 16 +- IkiWiki/Plugin/haiku.pm | 12 +- IkiWiki/Plugin/hnb.pm | 12 +- IkiWiki/Plugin/html.pm | 12 +- IkiWiki/Plugin/htmlbalance.pm | 12 +- IkiWiki/Plugin/htmlscrubber.pm | 16 +- IkiWiki/Plugin/htmltidy.pm | 12 +- IkiWiki/Plugin/httpauth.pm | 12 +- IkiWiki/Plugin/img.pm | 12 +- IkiWiki/Plugin/inline.pm | 54 +-- IkiWiki/Plugin/link.pm | 24 +- IkiWiki/Plugin/linkmap.pm | 20 +- IkiWiki/Plugin/listdirectives.pm | 20 +- IkiWiki/Plugin/lockedit.pm | 16 +- IkiWiki/Plugin/map.pm | 12 +- IkiWiki/Plugin/mdwn.pm | 12 +- IkiWiki/Plugin/mercurial.pm | 52 +-- IkiWiki/Plugin/meta.pm | 52 +-- IkiWiki/Plugin/mirrorlist.pm | 16 +- IkiWiki/Plugin/monotone.pm | 72 ++-- IkiWiki/Plugin/more.pm | 10 +- IkiWiki/Plugin/norcs.pm | 48 +-- IkiWiki/Plugin/opendiscussion.pm | 12 +- IkiWiki/Plugin/openid.pm | 28 +- IkiWiki/Plugin/orphans.pm | 12 +- IkiWiki/Plugin/otl.pm | 16 +- IkiWiki/Plugin/pagecount.pm | 12 +- IkiWiki/Plugin/pagestats.pm | 12 +- IkiWiki/Plugin/pagetemplate.pm | 16 +- IkiWiki/Plugin/parentlinks.pm | 16 +- IkiWiki/Plugin/passwordauth.pm | 26 +- IkiWiki/Plugin/pingee.pm | 12 +- IkiWiki/Plugin/pinger.pm | 16 +- IkiWiki/Plugin/poll.pm | 16 +- IkiWiki/Plugin/polygen.pm | 12 +- IkiWiki/Plugin/postsparkline.pm | 12 +- IkiWiki/Plugin/prettydate.pm | 16 +- IkiWiki/Plugin/progress.pm | 16 +- IkiWiki/Plugin/rawhtml.pm | 8 +- IkiWiki/Plugin/recentchanges.pm | 30 +- IkiWiki/Plugin/recentchangesdiff.pm | 12 +- IkiWiki/Plugin/relativedate.pm | 20 +- IkiWiki/Plugin/remove.pm | 34 +- IkiWiki/Plugin/rename.pm | 48 +-- IkiWiki/Plugin/search.pm | 40 +-- IkiWiki/Plugin/shortcut.pm | 20 +- IkiWiki/Plugin/sidebar.pm | 16 +- IkiWiki/Plugin/signinedit.pm | 12 +- IkiWiki/Plugin/skeleton.pm.example | 102 +++--- IkiWiki/Plugin/smiley.pm | 16 +- IkiWiki/Plugin/sparkline.pm | 12 +- IkiWiki/Plugin/svn.pm | 54 +-- IkiWiki/Plugin/table.pm | 26 +- IkiWiki/Plugin/tag.pm | 32 +- IkiWiki/Plugin/template.pm | 12 +- IkiWiki/Plugin/testpagespec.pm | 12 +- IkiWiki/Plugin/teximg.pm | 32 +- IkiWiki/Plugin/textile.pm | 12 +- IkiWiki/Plugin/tla.pm | 46 +-- IkiWiki/Plugin/toc.pm | 14 +- IkiWiki/Plugin/toggle.pm | 28 +- IkiWiki/Plugin/txt.pm | 4 +- IkiWiki/Plugin/typography.pm | 16 +- IkiWiki/Plugin/version.pm | 16 +- IkiWiki/Plugin/websetup.pm | 36 +- IkiWiki/Plugin/wikitext.pm | 12 +- IkiWiki/Receive.pm | 16 +- IkiWiki/Render.pm | 34 +- IkiWiki/Setup.pm | 12 +- IkiWiki/Setup/Automator.pm | 12 +- IkiWiki/Setup/Standard.pm | 16 +- IkiWiki/UserInfo.pm | 32 +- IkiWiki/Wrapper.pm | 4 +- debian/changelog | 1 + .../Allow_overriding_of_symlink_restriction.mdwn | 6 +- doc/bugs/Can__39__t_create_root_page.mdwn | 4 +- ...dency_in_eval_while_running_with_-T_switch.mdwn | 4 +- doc/bugs/Monotone_rcs_support.mdwn | 2 +- ..._blog_items_when_filename_contains_a_colon.mdwn | 8 +- doc/bugs/Problem_with_toc.pm_plug-in.mdwn | 4 +- doc/bugs/Problems_with_graphviz.pm_plug-in.mdwn | 14 +- .../RecentChanges_broken_with_empty_svnpath.mdwn | 2 +- ...itles_are_lower-cased_when_creating_a_page.mdwn | 2 +- ...n_and_a_directive_does_not_contain_a_space.mdwn | 4 +- ...celed:_Broken_pipe__34_____40__patch__41__.mdwn | 2 +- doc/bugs/git_stderr_output_causes_problems.mdwn | 2 +- ...plugin_should_pass_through_class_attribute.mdwn | 4 +- doc/bugs/inline_sort-by-title_issues.mdwn | 2 +- doc/bugs/mercurial_fail_to_add.mdwn | 2 +- doc/bugs/methodResponse_in_add__95__plugins.mdwn | 2 +- doc/bugs/multiple_pages_with_same_name.mdwn | 6 +- ...pec_parsing_chokes_on_function__40____41__.mdwn | 2 +- doc/bugs/prune_causing_taint_mode_failures.mdwn | 4 +- doc/bugs/quieten_mercurial.mdwn | 4 +- ..._for_locale_data_in_the_installed_location.mdwn | 2 +- doc/bugs/tbasewiki__95__brokenlinks.t_broken.mdwn | 6 +- doc/plugins/contrib/headinganchors.mdwn | 8 +- doc/plugins/contrib/siterel2pagerel.mdwn | 8 +- doc/plugins/contrib/unixauth.mdwn | 24 +- .../Add_DATE_parameter_for_use_in_templates.mdwn | 14 +- ...for_latest_Text::Markdown_as_found_on_CPAN.mdwn | 2 +- doc/todo/Allow_change_of_wiki_file_types.mdwn | 8 +- doc/todo/Allow_edittemplate_to_set_file_type.mdwn | 8 +- .../Bestdir_along_with_bestlink_in_IkiWiki.pm.mdwn | 8 +- doc/todo/Default_text_for_new_pages.mdwn | 8 +- ..._templates_inserted_by_the_template_plugin.mdwn | 2 +- ...nline_plugin_option_to_show_full_page_path.mdwn | 2 +- .../Move_teximg_latex_preamble_to_config_file.mdwn | 10 +- ...bitrary_date_to_be_used_by_calendar_plugin.mdwn | 12 +- doc/todo/Silence_monotone_warning.mdwn | 2 +- ...side_of_link__40____41___within_a_pagespec.mdwn | 4 +- doc/todo/Wrapper_config_with_multiline_regexp.mdwn | 4 +- .../add_forward_age_sorting_option_to_inline.mdwn | 2 +- .../discussion.mdwn | 20 +- doc/todo/blogpost_plugin.mdwn | 20 +- doc/todo/bzr.mdwn | 28 +- doc/todo/cas_authentication.mdwn | 14 +- doc/todo/color_plugin.mdwn | 20 +- doc/todo/darcs.mdwn | 26 +- doc/todo/datearchives-plugin.mdwn | 8 +- doc/todo/different_search_engine.mdwn | 40 +-- doc/todo/directive_docs.mdwn | 12 +- doc/todo/enable-htaccess-files.mdwn | 2 +- doc/todo/format_escape.mdwn | 16 +- .../fortune:_select_options_via_environment.mdwn | 4 +- doc/todo/index.html_allowed.mdwn | 10 +- doc/todo/inline:_numerical_ordering_by_title.mdwn | 22 +- .../language_definition_for_the_meta_plugin.mdwn | 4 +- doc/todo/meta_rcsid.mdwn | 2 +- doc/todo/missingparents.pm.mdwn | 44 +-- doc/todo/modify_page_filename_in_plugin.mdwn | 6 +- doc/todo/pagespec_relative_to_a_target.mdwn | 16 +- doc/todo/provide_sha1_for_git_diffurl.mdwn | 2 +- doc/todo/require_CAPTCHA_to_edit.mdwn | 22 +- doc/todo/source_link.mdwn | 14 +- doc/todo/structured_page_data.mdwn | 50 +-- .../supporting_comments_via_disussion_pages.mdwn | 12 +- doc/todo/syntax_highlighting.mdwn | 4 +- doc/todo/tidy_git__39__s_ctime_debug_output.mdwn | 2 +- doc/todo/tmplvars_plugin.mdwn | 12 +- doc/todo/tracking_bugs_with_dependencies.mdwn | 58 +-- ...turn_edittemplate_verbosity_off_by_default.mdwn | 6 +- doc/todo/using_meta_titles_for_parentlinks.html | 8 +- ...closures_for_values__41___in_ikiwiki.setup.mdwn | 8 +- ikiwiki.in | 12 +- 175 files changed, 1776 insertions(+), 1775 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki.pm b/IkiWiki.pm index 1c68c2cb3..d93ff7374 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -34,7 +34,7 @@ memoize("abs2rel"); memoize("pagespec_translate"); memoize("file_pruned"); -sub getsetup () { #{{{ +sub getsetup () { wikiname => { type => "string", default => "wiki", @@ -431,9 +431,9 @@ sub getsetup () { #{{{ safe => 0, rebuild => 0, }, -} #}}} +} -sub defaultconfig () { #{{{ +sub defaultconfig () { my %s=getsetup(); my @ret; foreach my $key (keys %s) { @@ -441,9 +441,9 @@ sub defaultconfig () { #{{{ } use Data::Dumper; return @ret; -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { # locale stuff; avoid LC_ALL since it overrides everything if (defined $ENV{LC_ALL}) { $ENV{LANG} = $ENV{LC_ALL}; @@ -490,9 +490,9 @@ sub checkconfig () { #{{{ run_hooks(checkconfig => sub { shift->() }); return 1; -} #}}} +} -sub listplugins () { #{{{ +sub listplugins () { my %ret; foreach my $dir (@INC, $config{libdir}) { @@ -510,9 +510,9 @@ sub listplugins () { #{{{ } return keys %ret; -} #}}} +} -sub loadplugins () { #{{{ +sub loadplugins () { if (defined $config{libdir} && length $config{libdir}) { unshift @INC, possibly_foolish_untaint($config{libdir}); } @@ -539,9 +539,9 @@ sub loadplugins () { #{{{ } return 1; -} #}}} +} -sub loadplugin ($) { #{{{ +sub loadplugin ($) { my $plugin=shift; return if grep { $_ eq $plugin} @{$config{disable_plugins}}; @@ -567,9 +567,9 @@ sub loadplugin ($) { #{{{ } $loaded_plugins{$plugin}=1; return 1; -} #}}} +} -sub error ($;$) { #{{{ +sub error ($;$) { my $message=shift; my $cleaner=shift; log_message('err' => $message) if $config{syslog}; @@ -577,15 +577,15 @@ sub error ($;$) { #{{{ $cleaner->(); } die $message."\n"; -} #}}} +} -sub debug ($) { #{{{ +sub debug ($) { return unless $config{verbose}; return log_message(debug => @_); -} #}}} +} my $log_open=0; -sub log_message ($$) { #{{{ +sub log_message ($$) { my $type=shift; if ($config{syslog}) { @@ -605,44 +605,44 @@ sub log_message ($$) { #{{{ else { return print STDERR "@_\n"; } -} #}}} +} -sub possibly_foolish_untaint ($) { #{{{ +sub possibly_foolish_untaint ($) { my $tainted=shift; my ($untainted)=$tainted=~/(.*)/s; return $untainted; -} #}}} +} -sub basename ($) { #{{{ +sub basename ($) { my $file=shift; $file=~s!.*/+!!; return $file; -} #}}} +} -sub dirname ($) { #{{{ +sub dirname ($) { my $file=shift; $file=~s!/*[^/]+$!!; return $file; -} #}}} +} -sub pagetype ($) { #{{{ +sub pagetype ($) { my $page=shift; if ($page =~ /\.([^.]+)$/) { return $1 if exists $hooks{htmlize}{$1}; } return; -} #}}} +} -sub isinternal ($) { #{{{ +sub isinternal ($) { my $page=shift; return exists $pagesources{$page} && $pagesources{$page} =~ /\._([^.]+)$/; -} #}}} +} -sub pagename ($) { #{{{ +sub pagename ($) { my $file=shift; my $type=pagetype($file); @@ -652,9 +652,9 @@ sub pagename ($) { #{{{ $page=$1; } return $page; -} #}}} +} -sub newpagefile ($$) { #{{{ +sub newpagefile ($$) { my $page=shift; my $type=shift; @@ -664,9 +664,9 @@ sub newpagefile ($$) { #{{{ else { return $page."/index.".$type; } -} #}}} +} -sub targetpage ($$;$) { #{{{ +sub targetpage ($$;$) { my $page=shift; my $ext=shift; my $filename=shift; @@ -680,15 +680,15 @@ sub targetpage ($$;$) { #{{{ else { return $page."/index.".$ext; } -} #}}} +} -sub htmlpage ($) { #{{{ +sub htmlpage ($) { my $page=shift; return targetpage($page, $config{htmlext}); -} #}}} +} -sub srcfile_stat { #{{{ +sub srcfile_stat { my $file=shift; my $nothrow=shift; @@ -698,13 +698,13 @@ sub srcfile_stat { #{{{ } error("internal error: $file cannot be found in $config{srcdir} or underlay") unless $nothrow; return; -} #}}} +} -sub srcfile ($;$) { #{{{ +sub srcfile ($;$) { return (srcfile_stat(@_))[0]; -} #}}} +} -sub add_underlay ($) { #{{{ +sub add_underlay ($) { my $dir=shift; if ($dir !~ /^\//) { @@ -716,9 +716,9 @@ sub add_underlay ($) { #{{{ } return 1; -} #}}} +} -sub readfile ($;$$) { #{{{ +sub readfile ($;$$) { my $file=shift; my $binary=shift; my $wantfd=shift; @@ -738,9 +738,9 @@ sub readfile ($;$$) { #{{{ } close $in || error("failed to read $file: $!"); return $ret; -} #}}} +} -sub prep_writefile ($$) { #{{{ +sub prep_writefile ($$) { my $file=shift; my $destdir=shift; @@ -764,9 +764,9 @@ sub prep_writefile ($$) { #{{{ } return 1; -} #}}} +} -sub writefile ($$$;$$) { #{{{ +sub writefile ($$$;$$) { my $file=shift; # can include subdirs my $destdir=shift; # directory to put file in my $content=shift; @@ -794,10 +794,10 @@ sub writefile ($$$;$$) { #{{{ error("failed renaming $newfile to $destdir/$file: $!", $cleanup); return 1; -} #}}} +} my %cleared; -sub will_render ($$;$) { #{{{ +sub will_render ($$;$) { my $page=shift; my $dest=shift; my $clear=shift; @@ -821,9 +821,9 @@ sub will_render ($$;$) { #{{{ $destsources{$dest}=$page; return 1; -} #}}} +} -sub bestlink ($$) { #{{{ +sub bestlink ($$) { my $page=shift; my $link=shift; @@ -859,15 +859,15 @@ sub bestlink ($$) { #{{{ #print STDERR "warning: page $page, broken link: $link\n"; return ""; -} #}}} +} -sub isinlinableimage ($) { #{{{ +sub isinlinableimage ($) { my $file=shift; return $file =~ /\.(png|gif|jpg|jpeg)$/i; -} #}}} +} -sub pagetitle ($;$) { #{{{ +sub pagetitle ($;$) { my $page=shift; my $unescaped=shift; @@ -879,31 +879,31 @@ sub pagetitle ($;$) { #{{{ } return $page; -} #}}} +} -sub titlepage ($) { #{{{ +sub titlepage ($) { my $title=shift; # support use w/o %config set my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_"; $title=~s/([^$chars]|_)/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; return $title; -} #}}} +} -sub linkpage ($) { #{{{ +sub linkpage ($) { my $link=shift; my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_"; $link=~s/([^$chars])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; return $link; -} #}}} +} -sub cgiurl (@) { #{{{ +sub cgiurl (@) { my %params=@_; return $config{cgiurl}."?". join("&", map $_."=".uri_escape_utf8($params{$_}), keys %params); -} #}}} +} -sub baseurl (;$) { #{{{ +sub baseurl (;$) { my $page=shift; return "$config{url}/" if ! defined $page; @@ -912,9 +912,9 @@ sub baseurl (;$) { #{{{ $page=~s/[^\/]+$//; $page=~s/[^\/]+\//..\//g; return $page; -} #}}} +} -sub abs2rel ($$) { #{{{ +sub abs2rel ($$) { # Work around very innefficient behavior in File::Spec if abs2rel # is passed two relative paths. It's much faster if paths are # absolute! (Debian bug #376658; fixed in debian unstable now) @@ -925,15 +925,15 @@ sub abs2rel ($$) { #{{{ my $ret=File::Spec->abs2rel($path, $base); $ret=~s/^// if defined $ret; return $ret; -} #}}} +} -sub displaytime ($;$) { #{{{ +sub displaytime ($;$) { # Plugins can override this function to mark up the time to # display. return ''.formattime(@_).''; -} #}}} +} -sub formattime ($;$) { #{{{ +sub formattime ($;$) { # Plugins can override this function to format the time. my $time=shift; my $format=shift; @@ -944,9 +944,9 @@ sub formattime ($;$) { #{{{ # strftime doesn't know about encodings, so make sure # its output is properly treated as utf8 return decode_utf8(POSIX::strftime($format, localtime($time))); -} #}}} +} -sub beautify_urlpath ($) { #{{{ +sub beautify_urlpath ($) { my $url=shift; if ($config{usedirs}) { @@ -960,9 +960,9 @@ sub beautify_urlpath ($) { #{{{ } return $url; -} #}}} +} -sub urlto ($$;$) { #{{{ +sub urlto ($$;$) { my $to=shift; my $from=shift; my $absolute=shift; @@ -982,9 +982,9 @@ sub urlto ($$;$) { #{{{ my $link = abs2rel($to, dirname(htmlpage($from))); return beautify_urlpath($link); -} #}}} +} -sub htmllink ($$$;@) { #{{{ +sub htmllink ($$$;@) { my $lpage=shift; # the page doing the linking my $page=shift; # the page that will contain the link (different for inline) my $link=shift; @@ -1047,9 +1047,9 @@ sub htmllink ($$$;@) { #{{{ } return "$linktext"; -} #}}} +} -sub userlink ($) { #{{{ +sub userlink ($) { my $user=shift; my $oiduser=eval { openiduser($user) }; @@ -1064,9 +1064,9 @@ sub userlink ($) { #{{{ length $config{userdir} ? $config{userdir}."/".$user : $user ), noimageinline => 1); } -} #}}} +} -sub htmlize ($$$$) { #{{{ +sub htmlize ($$$$) { my $page=shift; my $destpage=shift; my $type=shift; @@ -1101,9 +1101,9 @@ sub htmlize ($$$$) { #{{{ } return $content; -} #}}} +} -sub linkify ($$$) { #{{{ +sub linkify ($$$) { my $page=shift; my $destpage=shift; my $content=shift; @@ -1117,11 +1117,11 @@ sub linkify ($$$) { #{{{ }); return $content; -} #}}} +} our %preprocessing; our $preprocess_preview=0; -sub preprocess ($$$;$$) { #{{{ +sub preprocess ($$$;$$) { my $page=shift; # the page the data comes from my $destpage=shift; # the page the data will appear in (different for inline) my $content=shift; @@ -1274,9 +1274,9 @@ sub preprocess ($$$;$$) { #{{{ $content =~ s{$regex}{$handle->($1, $2, $3, $4)}eg; return $content; -} #}}} +} -sub filter ($$$) { #{{{ +sub filter ($$$) { my $page=shift; my $destpage=shift; my $content=shift; @@ -1287,15 +1287,15 @@ sub filter ($$$) { #{{{ }); return $content; -} #}}} +} -sub indexlink () { #{{{ +sub indexlink () { return "$config{wikiname}"; -} #}}} +} my $wikilock; -sub lockwiki () { #{{{ +sub lockwiki () { # Take an exclusive lock on the wiki to prevent multiple concurrent # run issues. The lock will be dropped on program exit. if (! -d $config{wikistatedir}) { @@ -1307,17 +1307,17 @@ sub lockwiki () { #{{{ error("failed to get lock"); } return 1; -} #}}} +} -sub unlockwiki () { #{{{ +sub unlockwiki () { POSIX::close($ENV{IKIWIKI_CGILOCK_FD}) if exists $ENV{IKIWIKI_CGILOCK_FD}; return close($wikilock) if $wikilock; return; -} #}}} +} my $commitlock; -sub commit_hook_enabled () { #{{{ +sub commit_hook_enabled () { open($commitlock, '+>', "$config{wikistatedir}/commitlock") || error("cannot write to $config{wikistatedir}/commitlock: $!"); if (! flock($commitlock, 1 | 4)) { # LOCK_SH | LOCK_NB to test @@ -1326,23 +1326,23 @@ sub commit_hook_enabled () { #{{{ } close($commitlock) || error("failed closing commitlock: $!"); return 1; -} #}}} +} -sub disable_commit_hook () { #{{{ +sub disable_commit_hook () { open($commitlock, '>', "$config{wikistatedir}/commitlock") || error("cannot write to $config{wikistatedir}/commitlock: $!"); if (! flock($commitlock, 2)) { # LOCK_EX error("failed to get commit lock"); } return 1; -} #}}} +} -sub enable_commit_hook () { #{{{ +sub enable_commit_hook () { return close($commitlock) if $commitlock; return; -} #}}} +} -sub loadindex () { #{{{ +sub loadindex () { %oldrenderedfiles=%pagectime=(); if (! $config{rebuild}) { %pagesources=%pagemtime=%oldlinks=%links=%depends= @@ -1402,9 +1402,9 @@ sub loadindex () { #{{{ $destsources{$_}=$page foreach @{$renderedfiles{$page}}; } return close($in); -} #}}} +} -sub saveindex () { #{{{ +sub saveindex () { run_hooks(savestate => sub { shift->() }); my %hookids; @@ -1460,18 +1460,18 @@ sub saveindex () { #{{{ error("failed renaming $newfile to $config{wikistatedir}/indexdb", $cleanup); return 1; -} #}}} +} -sub template_file ($) { #{{{ +sub template_file ($) { my $template=shift; foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") { return "$dir/$template" if -e "$dir/$template"; } return; -} #}}} +} -sub template_params (@) { #{{{ +sub template_params (@) { my $filename=template_file(shift); if (! defined $filename) { @@ -1490,14 +1490,14 @@ sub template_params (@) { #{{{ @_ ); return wantarray ? @ret : {@ret}; -} #}}} +} -sub template ($;@) { #{{{ +sub template ($;@) { require HTML::Template; return HTML::Template->new(template_params(@_)); -} #}}} +} -sub misctemplate ($$;@) { #{{{ +sub misctemplate ($$;@) { my $title=shift; my $pagebody=shift; @@ -1514,9 +1514,9 @@ sub misctemplate ($$;@) { #{{{ shift->(page => "", destpage => "", template => $template); }); return $template->output; -}#}}} +} -sub hook (@) { # {{{ +sub hook (@) { my %param=@_; if (! exists $param{type} || ! ref $param{call} || ! exists $param{id}) { @@ -1527,9 +1527,9 @@ sub hook (@) { # {{{ $hooks{$param{type}}{$param{id}}=\%param; return 1; -} # }}} +} -sub run_hooks ($$) { # {{{ +sub run_hooks ($$) { # Calls the given sub for each hook of the given type, # passing it the hook function to call. my $type=shift; @@ -1550,53 +1550,53 @@ sub run_hooks ($$) { # {{{ } return 1; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { $hooks{rcs}{rcs_update}{call}->(@_); -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { $hooks{rcs}{rcs_prepedit}{call}->(@_); -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { $hooks{rcs}{rcs_commit}{call}->(@_); -} #}}} +} -sub rcs_commit_staged ($$$) { #{{{ +sub rcs_commit_staged ($$$) { $hooks{rcs}{rcs_commit_staged}{call}->(@_); -} #}}} +} -sub rcs_add ($) { #{{{ +sub rcs_add ($) { $hooks{rcs}{rcs_add}{call}->(@_); -} #}}} +} -sub rcs_remove ($) { #{{{ +sub rcs_remove ($) { $hooks{rcs}{rcs_remove}{call}->(@_); -} #}}} +} -sub rcs_rename ($$) { #{{{ +sub rcs_rename ($$) { $hooks{rcs}{rcs_rename}{call}->(@_); -} #}}} +} -sub rcs_recentchanges ($) { #{{{ +sub rcs_recentchanges ($) { $hooks{rcs}{rcs_recentchanges}{call}->(@_); -} #}}} +} -sub rcs_diff ($) { #{{{ +sub rcs_diff ($) { $hooks{rcs}{rcs_diff}{call}->(@_); -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { $hooks{rcs}{rcs_getctime}{call}->(@_); -} #}}} +} -sub rcs_receive () { #{{{ +sub rcs_receive () { $hooks{rcs}{rcs_receive}{call}->(); -} #}}} +} -sub globlist_to_pagespec ($) { #{{{ +sub globlist_to_pagespec ($) { my @globlist=split(' ', shift); my (@spec, @skip); @@ -1620,20 +1620,20 @@ sub globlist_to_pagespec ($) { #{{{ } } return $spec; -} #}}} +} -sub is_globlist ($) { #{{{ +sub is_globlist ($) { my $s=shift; return ( $s =~ /[^\s]+\s+([^\s]+)/ && $1 ne "and" && $1 ne "or" ); -} #}}} +} -sub safequote ($) { #{{{ +sub safequote ($) { my $s=shift; $s=~s/[{}]//g; return "q{$s}"; -} #}}} +} -sub add_depends ($$) { #{{{ +sub add_depends ($$) { my $page=shift; my $pagespec=shift; @@ -1647,9 +1647,9 @@ sub add_depends ($$) { #{{{ } return 1; -} # }}} +} -sub file_pruned ($$) { #{{{ +sub file_pruned ($$) { require File::Spec; my $file=File::Spec->canonpath(shift); my $base=File::Spec->canonpath(shift); @@ -1657,9 +1657,9 @@ sub file_pruned ($$) { #{{{ my $regexp='('.join('|', @{$config{wiki_file_prune_regexps}}).')'; return $file =~ m/$regexp/ && $file ne $base; -} #}}} +} -sub gettext { #{{{ +sub gettext { # Only use gettext in the rare cases it's needed. if ((exists $ENV{LANG} && length $ENV{LANG}) || (exists $ENV{LC_ALL} && length $ENV{LC_ALL}) || @@ -1680,15 +1680,15 @@ sub gettext { #{{{ else { return shift; } -} #}}} +} -sub yesno ($) { #{{{ +sub yesno ($) { my $val=shift; return (defined $val && lc($val) eq gettext("yes")); -} #}}} +} -sub inject { #{{{ +sub inject { # Injects a new function into the symbol table to replace an # exported function. my %params=@_; @@ -1711,9 +1711,9 @@ sub inject { #{{{ } use strict; use warnings; -} #}}} +} -sub pagespec_merge ($$) { #{{{ +sub pagespec_merge ($$) { my $a=shift; my $b=shift; @@ -1728,9 +1728,9 @@ sub pagespec_merge ($$) { #{{{ } return "($a) or ($b)"; -} #}}} +} -sub pagespec_translate ($) { #{{{ +sub pagespec_translate ($) { my $spec=shift; # Support for old-style GlobLists. @@ -1784,9 +1784,9 @@ sub pagespec_translate ($) { #{{{ no warnings; return eval 'sub { my $page=shift; '.$code.' }'; -} #}}} +} -sub pagespec_match ($$;@) { #{{{ +sub pagespec_match ($$;@) { my $page=shift; my $spec=shift; my @params=@_; @@ -1799,55 +1799,55 @@ sub pagespec_match ($$;@) { #{{{ my $sub=pagespec_translate($spec); return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"") if $@; return $sub->($page, @params); -} #}}} +} -sub pagespec_valid ($) { #{{{ +sub pagespec_valid ($) { my $spec=shift; my $sub=pagespec_translate($spec); return ! $@; -} #}}} +} -sub glob2re ($) { #{{{ +sub glob2re ($) { my $re=quotemeta(shift); $re=~s/\\\*/.*/g; $re=~s/\\\?/./g; return $re; -} #}}} +} package IkiWiki::FailReason; -use overload ( #{{{ +use overload ( '""' => sub { ${$_[0]} }, '0+' => sub { 0 }, '!' => sub { bless $_[0], 'IkiWiki::SuccessReason'}, fallback => 1, -); #}}} +); -sub new { #{{{ +sub new { my $class = shift; my $value = shift; return bless \$value, $class; -} #}}} +} package IkiWiki::SuccessReason; -use overload ( #{{{ +use overload ( '""' => sub { ${$_[0]} }, '0+' => sub { 1 }, '!' => sub { bless $_[0], 'IkiWiki::FailReason'}, fallback => 1, -); #}}} +); -sub new { #{{{ +sub new { my $class = shift; my $value = shift; return bless \$value, $class; -}; #}}} +}; package IkiWiki::PageSpec; -sub match_glob ($$;@) { #{{{ +sub match_glob ($$;@) { my $page=shift; my $glob=shift; my %params=@_; @@ -1873,13 +1873,13 @@ sub match_glob ($$;@) { #{{{ else { return IkiWiki::FailReason->new("$glob does not match $page"); } -} #}}} +} -sub match_internal ($$;@) { #{{{ +sub match_internal ($$;@) { return match_glob($_[0], $_[1], @_, internal => 1) -} #}}} +} -sub match_link ($$;@) { #{{{ +sub match_link ($$;@) { my $page=shift; my $link=lc(shift); my %params=@_; @@ -1911,13 +1911,13 @@ sub match_link ($$;@) { #{{{ } } return IkiWiki::FailReason->new("$page does not link to $link"); -} #}}} +} -sub match_backlink ($$;@) { #{{{ +sub match_backlink ($$;@) { return match_link($_[1], $_[0], @_); -} #}}} +} -sub match_created_before ($$;@) { #{{{ +sub match_created_before ($$;@) { my $page=shift; my $testpage=shift; @@ -1932,9 +1932,9 @@ sub match_created_before ($$;@) { #{{{ else { return IkiWiki::FailReason->new("$testpage has no ctime"); } -} #}}} +} -sub match_created_after ($$;@) { #{{{ +sub match_created_after ($$;@) { my $page=shift; my $testpage=shift; @@ -1949,36 +1949,36 @@ sub match_created_after ($$;@) { #{{{ else { return IkiWiki::FailReason->new("$testpage has no ctime"); } -} #}}} +} -sub match_creation_day ($$;@) { #{{{ +sub match_creation_day ($$;@) { if ((gmtime($IkiWiki::pagectime{shift()}))[3] == shift) { return IkiWiki::SuccessReason->new('creation_day matched'); } else { return IkiWiki::FailReason->new('creation_day did not match'); } -} #}}} +} -sub match_creation_month ($$;@) { #{{{ +sub match_creation_month ($$;@) { if ((gmtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift) { return IkiWiki::SuccessReason->new('creation_month matched'); } else { return IkiWiki::FailReason->new('creation_month did not match'); } -} #}}} +} -sub match_creation_year ($$;@) { #{{{ +sub match_creation_year ($$;@) { if ((gmtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift) { return IkiWiki::SuccessReason->new('creation_year matched'); } else { return IkiWiki::FailReason->new('creation_year did not match'); } -} #}}} +} -sub match_user ($$;@) { #{{{ +sub match_user ($$;@) { shift; my $user=shift; my %params=@_; @@ -1996,9 +1996,9 @@ sub match_user ($$;@) { #{{{ else { return IkiWiki::FailReason->new("user is $params{user}, not $user"); } -} #}}} +} -sub match_admin ($$;@) { #{{{ +sub match_admin ($$;@) { shift; shift; my %params=@_; @@ -2016,9 +2016,9 @@ sub match_admin ($$;@) { #{{{ else { return IkiWiki::FailReason->new("user is not an admin"); } -} #}}} +} -sub match_ip ($$;@) { #{{{ +sub match_ip ($$;@) { shift; my $ip=shift; my %params=@_; @@ -2033,6 +2033,6 @@ sub match_ip ($$;@) { #{{{ else { return IkiWiki::FailReason->new("IP is $params{ip}, not $ip"); } -} #}}} +} 1 diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index a45e12e31..81cb42d13 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -9,7 +9,7 @@ use IkiWiki::UserInfo; use open qw{:utf8 :std}; use Encode; -sub printheader ($) { #{{{ +sub printheader ($) { my $session=shift; if ($config{sslcookie}) { @@ -19,9 +19,9 @@ sub printheader ($) { #{{{ print $session->header(-charset => 'utf-8', -cookie => $session->cookie(-httponly => 1)); } -} #}}} +} -sub showform ($$$$;@) { #{{{ +sub showform ($$$$;@) { my $form=shift; my $buttons=shift; my $session=shift; @@ -36,9 +36,9 @@ sub showform ($$$$;@) { #{{{ printheader($session); print misctemplate($form->title, $form->render(submit => $buttons), @_); -} #}}} +} -sub redirect ($$) { #{{{ +sub redirect ($$) { my $q=shift; my $url=shift; if (! $config{w3mmode}) { @@ -48,9 +48,9 @@ sub redirect ($$) { #{{{ print "Content-type: text/plain\n"; print "W3m-control: GOTO $url\n\n"; } -} #}}} +} -sub decode_cgi_utf8 ($) { #{{{ +sub decode_cgi_utf8 ($) { # decode_form_utf8 method is needed for 5.10 if ($] < 5.01) { my $cgi = shift; @@ -58,9 +58,9 @@ sub decode_cgi_utf8 ($) { #{{{ $cgi->param($f, map { decode_utf8 $_ } $cgi->param($f)); } } -} #}}} +} -sub decode_form_utf8 ($) { #{{{ +sub decode_form_utf8 ($) { if ($] >= 5.01) { my $form = shift; foreach my $f ($form->field) { @@ -70,11 +70,11 @@ sub decode_form_utf8 ($) { #{{{ ); } } -} #}}} +} # Check if the user is signed in. If not, redirect to the signin form and # save their place to return to later. -sub needsignin ($$) { #{{{ +sub needsignin ($$) { my $q=shift; my $session=shift; @@ -85,9 +85,9 @@ sub needsignin ($$) { #{{{ cgi_savesession($session); exit; } -} #}}} +} -sub cgi_signin ($$) { #{{{ +sub cgi_signin ($$) { my $q=shift; my $session=shift; @@ -127,9 +127,9 @@ sub cgi_signin ($$) { #{{{ } showform($form, $buttons, $session, $q); -} #}}} +} -sub cgi_postsignin ($$) { #{{{ +sub cgi_postsignin ($$) { my $q=shift; my $session=shift; @@ -144,9 +144,9 @@ sub cgi_postsignin ($$) { #{{{ else { error(gettext("login failed, perhaps you need to turn on cookies?")); } -} #}}} +} -sub cgi_prefs ($$) { #{{{ +sub cgi_prefs ($$) { my $q=shift; my $session=shift; @@ -254,9 +254,9 @@ sub cgi_prefs ($$) { #{{{ } showform($form, $buttons, $session, $q); -} #}}} +} -sub check_banned ($$) { #{{{ +sub check_banned ($$) { my $q=shift; my $session=shift; @@ -273,9 +273,9 @@ sub check_banned ($$) { #{{{ exit; } } -} #}}} +} -sub cgi_getsession ($) { #{{{ +sub cgi_getsession ($) { my $q=shift; eval q{use CGI::Session; use HTML::Entities}; @@ -294,13 +294,13 @@ sub cgi_getsession ($) { #{{{ umask($oldmask); return $session; -} #}}} +} # To guard against CSRF, the user's session id (sid) # can be stored on a form. This function will check # (for logged in users) that the sid on the form matches # the session id in the cookie. -sub checksessionexpiry ($$) { # {{{ +sub checksessionexpiry ($$) { my $q=shift; my $session = shift; @@ -310,18 +310,18 @@ sub checksessionexpiry ($$) { # {{{ error(gettext("Your login session has expired.")); } } -} # }}} +} -sub cgi_savesession ($) { #{{{ +sub cgi_savesession ($) { my $session=shift; # Force session flush with safe umask. my $oldmask=umask(077); $session->flush; umask($oldmask); -} #}}} +} -sub cgi (;$$) { #{{{ +sub cgi (;$$) { my $q=shift; my $session=shift; @@ -391,16 +391,16 @@ sub cgi (;$$) { #{{{ else { error("unknown do parameter"); } -} #}}} +} # Does not need to be called directly; all errors will go through here. -sub cgierror ($) { #{{{ +sub cgierror ($) { my $message=shift; print "Content-type: text/html\n\n"; print misctemplate(gettext("Error"), "

".gettext("Error").": $message

"); die $@; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index adaa619ab..29bc6d0ce 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -14,7 +14,7 @@ use open qw{:utf8 :std}; my %feeds; my %guids; -sub import { #{{{ +sub import { hook(type => "getopt", id => "aggregate", call => \&getopt); hook(type => "getsetup", id => "aggregate", call => \&getsetup); hook(type => "checkconfig", id => "aggregate", call => \&checkconfig); @@ -26,9 +26,9 @@ sub import { #{{{ if (exists $config{aggregate_webtrigger} && $config{aggregate_webtrigger}) { hook(type => "cgi", id => "aggregate", call => \&cgi); } -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); @@ -36,9 +36,9 @@ sub getopt () { #{{{ "aggregate" => \$config{aggregate}, "aggregateinternal!" => \$config{aggregateinternal}, ); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -58,16 +58,16 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if ($config{aggregate} && ! ($config{post_commit} && IkiWiki::commit_hook_enabled())) { launchaggregation(); } -} #}}} +} -sub cgi ($) { #{{{ +sub cgi ($) { my $cgi=shift; if (defined $cgi->param('do') && @@ -90,9 +90,9 @@ sub cgi ($) { #{{{ } exit 0; } -} #}}} +} -sub launchaggregation () { #{{{ +sub launchaggregation () { # See if any feeds need aggregation. loadstate(); my @feeds=needsaggregate(); @@ -135,16 +135,16 @@ sub launchaggregation () { #{{{ unlockaggregate(); return 1; -} #}}} +} # Pages with extension _aggregated have plain html markup, pass through. -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; return $params{content}; -} #}}} +} # Used by ikiwiki-transition aggregateinternal. -sub migrate_to_internal { #{{{ +sub migrate_to_internal { if (! lockaggregate()) { error("an aggregation process is currently running"); } @@ -190,9 +190,9 @@ sub migrate_to_internal { #{{{ IkiWiki::unlockwiki; unlockaggregate(); -} #}}} +} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; loadstate(); @@ -206,9 +206,9 @@ sub needsbuild (@) { #{{{ markunseen($feed->{sourcepage}); } } -} # }}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; foreach my $required (qw{name url}) { @@ -265,9 +265,9 @@ sub preprocess (@) { #{{{ ($feed->{newposts} ? "; ".$feed->{newposts}. " ".gettext("new") : ""). ")"; -} # }}} +} -sub delete (@) { #{{{ +sub delete (@) { my @files=@_; # Remove feed data for removed pages. @@ -275,9 +275,9 @@ sub delete (@) { #{{{ my $page=pagename($file); markunseen($page); } -} #}}} +} -sub markunseen ($) { #{{{ +sub markunseen ($) { my $page=shift; foreach my $id (keys %feeds) { @@ -285,11 +285,11 @@ sub markunseen ($) { #{{{ $feeds{$id}->{unseen}=1; } } -} #}}} +} my $state_loaded=0; -sub loadstate () { #{{{ +sub loadstate () { return if $state_loaded; $state_loaded=1; if (-e "$config{wikistatedir}/aggregate") { @@ -323,9 +323,9 @@ sub loadstate () { #{{{ close IN; } -} #}}} +} -sub savestate () { #{{{ +sub savestate () { return unless $state_loaded; garbage_collect(); my $newfile="$config{wikistatedir}/aggregate.new"; @@ -350,9 +350,9 @@ sub savestate () { #{{{ close OUT || error("save $newfile: $!", $cleanup); rename($newfile, "$config{wikistatedir}/aggregate") || error("rename $newfile: $!", $cleanup); -} #}}} +} -sub garbage_collect () { #{{{ +sub garbage_collect () { foreach my $name (keys %feeds) { # remove any feeds that were not seen while building the pages # that used to contain them @@ -375,9 +375,9 @@ sub garbage_collect () { #{{{ delete $guid->{md5}; } } -} #}}} +} -sub mergestate () { #{{{ +sub mergestate () { # Load the current state in from disk, and merge into it # values from the state in memory that might have changed # during aggregation. @@ -407,15 +407,15 @@ sub mergestate () { #{{{ $guids{$guid}=$myguids{$guid}; } } -} #}}} +} -sub clearstate () { #{{{ +sub clearstate () { %feeds=(); %guids=(); $state_loaded=0; -} #}}} +} -sub expire () { #{{{ +sub expire () { foreach my $feed (values %feeds) { next unless $feed->{expireage} || $feed->{expirecount}; my $count=0; @@ -444,14 +444,14 @@ sub expire () { #{{{ } } } -} #}}} +} -sub needsaggregate () { #{{{ +sub needsaggregate () { return values %feeds if $config{rebuild}; return grep { time - $_->{lastupdate} >= $_->{updateinterval} } values %feeds; -} #}}} +} -sub aggregate (@) { #{{{ +sub aggregate (@) { eval q{use XML::Feed}; error($@) if $@; eval q{use URI::Fetch}; @@ -542,9 +542,9 @@ sub aggregate (@) { #{{{ ); } } -} #}}} +} -sub add_page (@) { #{{{ +sub add_page (@) { my %params=@_; my $feed=$params{feed}; @@ -635,21 +635,21 @@ sub add_page (@) { #{{{ # Dummy value for expiry code. $IkiWiki::pagectime{$guid->{page}}=time; } -} #}}} +} -sub wikiescape ($) { #{{{ +sub wikiescape ($) { # escape accidental wikilinks and preprocessor stuff return encode_entities(shift, '\[\]'); -} #}}} +} -sub urlabs ($$) { #{{{ +sub urlabs ($$) { my $url=shift; my $urlbase=shift; URI->new_abs($url, $urlbase)->as_string; -} #}}} +} -sub htmlabs ($$) { #{{{ +sub htmlabs ($$) { # Convert links in html from relative to absolute. # Note that this is a heuristic, which is not specified by the rss # spec and may not be right for all feeds. Also, see Debian @@ -685,15 +685,15 @@ sub htmlabs ($$) { #{{{ $p->eof; return $ret; -} #}}} +} -sub htmlfn ($) { #{{{ +sub htmlfn ($) { return shift().".".($config{aggregateinternal} ? "_aggregated" : $config{htmlext}); -} #}}} +} my $aggregatelock; -sub lockaggregate () { #{{{ +sub lockaggregate () { # Take an exclusive lock to prevent multiple concurrent aggregators. # Returns true if the lock was aquired. if (! -d $config{wikistatedir}) { @@ -706,11 +706,11 @@ sub lockaggregate () { #{{{ return 0; } return 1; -} #}}} +} -sub unlockaggregate () { #{{{ +sub unlockaggregate () { return close($aggregatelock) if $aggregatelock; return; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/amazon_s3.pm b/IkiWiki/Plugin/amazon_s3.pm index 597539c13..93c10b629 100644 --- a/IkiWiki/Plugin/amazon_s3.pm +++ b/IkiWiki/Plugin/amazon_s3.pm @@ -16,13 +16,13 @@ BEGIN { } }; -sub import { #{{{ +sub import { hook(type => "getopt", id => "amazon_s3", call => \&getopt); hook(type => "getsetup", id => "amazon_s3", call => \&getsetup); hook(type => "checkconfig", id => "amazon_s3", call => \&checkconfig); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); @@ -38,9 +38,9 @@ sub getopt () { #{{{ debug(gettext("done")); exit(0); }); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, @@ -88,9 +88,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub checkconfig { #{{{ +sub checkconfig { foreach my $field (qw{amazon_s3_key_id amazon_s3_key_file amazon_s3_bucket}) { if (! exists $config{$field} || ! defined $config{$field}) { @@ -101,11 +101,11 @@ sub checkconfig { #{{{ ! defined $config{amazon_s3_prefix}) { $config{amazon_s3_prefix}="wiki/"; } -} #}}} +} { my $bucket; -sub getbucket { #{{{ +sub getbucket { return $bucket if defined $bucket; open(IN, "<", $config{amazon_s3_key_file}) || error($config{amazon_s3_key_file}.": ".$!); @@ -138,11 +138,11 @@ sub getbucket { #{{{ } return $bucket; -} #}}} +} } # Given a file, return any S3 keys associated with it. -sub file2keys ($) { #{{{ +sub file2keys ($) { my $file=shift; my @keys; @@ -162,14 +162,14 @@ sub file2keys ($) { #{{{ } } return @keys; -} #}}} +} package IkiWiki; use File::MimeInfo; use Encode; # This is a wrapper around the real writefile. -sub writefile ($$$;$$) { #{{{ +sub writefile ($$$;$$) { my $file=shift; my $destdir=shift; my $content=shift; @@ -225,10 +225,10 @@ sub writefile ($$$;$$) { #{{{ } return $ret; -} #}}} +} # This is a wrapper around the real prune. -sub prune ($) { #{{{ +sub prune ($) { my $file=shift; my @keys=IkiWiki::Plugin::amazon_s3::file2keys($file); @@ -247,6 +247,6 @@ sub prune ($) { #{{{ } return $IkiWiki::Plugin::amazon_s3::subs{'IkiWiki::prune'}->($file); -} #}}} +} 1 diff --git a/IkiWiki/Plugin/anonok.pm b/IkiWiki/Plugin/anonok.pm index 2be983693..1cbdfe4e5 100644 --- a/IkiWiki/Plugin/anonok.pm +++ b/IkiWiki/Plugin/anonok.pm @@ -5,12 +5,12 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "anonok", call => \&getsetup); hook(type => "canedit", id => "anonok", call => \&canedit); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -24,9 +24,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, -} #}}} +} -sub canedit ($$$) { #{{{ +sub canedit ($$$) { my $page=shift; my $cgi=shift; my $session=shift; @@ -45,6 +45,6 @@ sub canedit ($$$) { #{{{ else { return ""; } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 44781165c..87da6cd4e 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -5,16 +5,16 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { add_underlay("javascript"); hook(type => "getsetup", id => "attachment", call => \&getsetup); hook(type => "checkconfig", id => "attachment", call => \&checkconfig); hook(type => "formbuilder_setup", id => "attachment", call => \&formbuilder_setup); hook(type => "formbuilder", id => "attachment", call => \&formbuilder); IkiWiki::loadplugin("filecheck"); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -35,9 +35,9 @@ sub getsetup () { #{{{ safe => 0, # executed rebuild => 0, }, -} #}}} +} -sub check_canattach ($$;$) { #{{{ +sub check_canattach ($$;$) { my $session=shift; my $dest=shift; # where it's going to be put, under the srcdir my $file=shift; # the path to the attachment currently @@ -84,13 +84,13 @@ sub check_canattach ($$;$) { #{{{ else { return 1; } -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { $config{cgi_disable_uploads}=0; -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; my $q=$params{cgi}; @@ -153,9 +153,9 @@ sub formbuilder_setup (@) { #{{{ } } } -} #}}} +} -sub formbuilder (@) { #{{{ +sub formbuilder (@) { my %params=@_; my $form=$params{form}; my $q=$params{cgi}; @@ -253,9 +253,9 @@ sub formbuilder (@) { #{{{ # Generate the attachment list only after having added any new # attachments. $form->tmpl_param("attachment_list" => [attachment_list($form->field('page'))]); -} # }}} +} -sub attachment_location ($) { #{{{ +sub attachment_location ($) { my $page=shift; # Put the attachment in a subdir of the page it's attached @@ -264,9 +264,9 @@ sub attachment_location ($) { #{{{ $page.="/" if length $page; return $page; -} #}}} +} -sub attachment_list ($) { #{{{ +sub attachment_list ($) { my $page=shift; my $loc=attachment_location($page); @@ -287,6 +287,6 @@ sub attachment_list ($) { #{{{ # Sort newer attachments to the top of the list, so a newly-added # attachment appears just before the form used to add it. return sort { $b->{mtime_raw} <=> $a->{mtime_raw} || $a->{link} cmp $b->{link} } @ret; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm index d1b3edb1f..bb08091ae 100644 --- a/IkiWiki/Plugin/autoindex.pm +++ b/IkiWiki/Plugin/autoindex.pm @@ -6,20 +6,20 @@ use strict; use IkiWiki 2.00; use Encode; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "autoindex", call => \&getsetup); hook(type => "refresh", id => "autoindex", call => \&refresh); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub genindex ($) { #{{{ +sub genindex ($) { my $page=shift; my $file=newpagefile($page, $config{default_pageext}); my $template=template("autoindex.tmpl"); @@ -28,9 +28,9 @@ sub genindex ($) { #{{{ if ($config{rcs}) { IkiWiki::rcs_add($file); } -} #}}} +} -sub refresh () { #{{{ +sub refresh () { eval q{use File::Find}; error($@) if $@; @@ -107,6 +107,6 @@ sub refresh () { #{{{ IkiWiki::enable_commit_hook(); } } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm index 37752dd3e..1c52099bf 100644 --- a/IkiWiki/Plugin/brokenlinks.pm +++ b/IkiWiki/Plugin/brokenlinks.pm @@ -6,20 +6,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "brokenlinks", call => \&getsetup); hook(type => "preprocess", id => "brokenlinks", call => \&preprocess); -} # }}} +} -sub getsetup { #{{{ +sub getsetup { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $params{pages}="*" unless defined $params{pages}; @@ -61,6 +61,6 @@ sub preprocess (@) { #{{{ } sort @broken) ."\n"; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/bzr.pm b/IkiWiki/Plugin/bzr.pm index 1054f5b3e..16c959069 100644 --- a/IkiWiki/Plugin/bzr.pm +++ b/IkiWiki/Plugin/bzr.pm @@ -7,7 +7,7 @@ use IkiWiki; use Encode; use open qw{:utf8 :std}; -sub import { #{{{ +sub import { hook(type => "checkconfig", id => "bzr", call => \&checkconfig); hook(type => "getsetup", id => "bzr", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@ -20,18 +20,18 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (defined $config{bzr_wrapper} && length $config{bzr_wrapper}) { push @{$config{wrappers}}, { wrapper => $config{bzr_wrapper}, wrappermode => (defined $config{bzr_wrappermode} ? $config{bzr_wrappermode} : "06755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin @@ -65,9 +65,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub bzr_log ($) { #{{{ +sub bzr_log ($) { my $out = shift; my @infos = (); my $key = undef; @@ -99,20 +99,20 @@ sub bzr_log ($) { #{{{ close $out; return @infos; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { my @cmdline = ("bzr", "update", "--quiet", $config{srcdir}); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { return ""; -} #}}} +} -sub bzr_author ($$) { #{{{ +sub bzr_author ($$) { my ($user, $ipaddr) = @_; if (defined $user) { @@ -124,9 +124,9 @@ sub bzr_author ($$) { #{{{ else { return "Anonymous"; } -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { my ($file, $message, $rcstoken, $user, $ipaddr) = @_; $user = bzr_author($user, $ipaddr); @@ -143,7 +143,7 @@ sub rcs_commit ($$$;$$) { #{{{ } return undef; # success -} #}}} +} sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, @@ -164,27 +164,27 @@ sub rcs_commit_staged ($$$) { } return undef; # success -} #}}} +} -sub rcs_add ($) { # {{{ +sub rcs_add ($) { my ($file) = @_; my @cmdline = ("bzr", "add", "--quiet", "$config{srcdir}/$file"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } -} #}}} +} -sub rcs_remove ($) { # {{{ +sub rcs_remove ($) { my ($file) = @_; my @cmdline = ("bzr", "rm", "--force", "--quiet", "$config{srcdir}/$file"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } -} #}}} +} -sub rcs_rename ($$) { # {{{ +sub rcs_rename ($$) { my ($src, $dest) = @_; my $parent = IkiWiki::dirname($dest); @@ -196,9 +196,9 @@ sub rcs_rename ($$) { # {{{ if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } -} #}}} +} -sub rcs_recentchanges ($) { #{{{ +sub rcs_recentchanges ($) { my ($num) = @_; my @cmdline = ("bzr", "log", "-v", "--show-ids", "--limit", $num, @@ -253,9 +253,9 @@ sub rcs_recentchanges ($) { #{{{ } return @ret; -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { my ($file) = @_; # XXX filename passes through the shell here, should try to avoid @@ -274,6 +274,6 @@ sub rcs_getctime ($) { #{{{ my $ctime = str2time($log[0]->{"timestamp"}); return $ctime; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm index 6d536a91b..88303fc44 100644 --- a/IkiWiki/Plugin/calendar.pm +++ b/IkiWiki/Plugin/calendar.pm @@ -29,13 +29,13 @@ my %linkcache; my $time=time; my @now=localtime($time); -sub import { #{{{ +sub import { hook(type => "getsetup", id => "calendar", call => \&getsetup); hook(type => "needsbuild", id => "calendar", call => \&needsbuild); hook(type => "preprocess", id => "calendar", call => \&preprocess); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -48,23 +48,23 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub is_leap_year (@) { #{{{ +sub is_leap_year (@) { my %params=@_; return ($params{year} % 4 == 0 && (($params{year} % 100 != 0) || $params{year} % 400 == 0)); -} #}}} +} -sub month_days { #{{{ +sub month_days { my %params=@_; my $days_in_month = (31,28,31,30,31,30,31,31,30,31,30,31)[$params{month}-1]; if ($params{month} == 2 && is_leap_year(%params)) { $days_in_month++; } return $days_in_month; -} #}}} +} -sub format_month (@) { #{{{ +sub format_month (@) { my %params=@_; my $pagespec = $params{pages}; @@ -215,9 +215,9 @@ EOF add_depends($params{page}, join(" or ", @list)); return $calendar; -} #}}} +} -sub format_year (@) { #{{{ +sub format_year (@) { my %params=@_; my $pagespec = $params{pages}; @@ -318,9 +318,9 @@ EOF EOF return $calendar; -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $params{pages} = "*" unless defined $params{pages}; $params{type} = "month" unless defined $params{type}; @@ -397,7 +397,7 @@ sub preprocess (@) { #{{{ return "\n
$calendar
\n"; } #}} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; foreach my $page (keys %pagestate) { if (exists $pagestate{$page}{calendar}{nextchange}) { @@ -415,6 +415,6 @@ sub needsbuild (@) { #{{{ } } } -} # }}} +} 1 diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm index 7881becd5..6c1fafb7b 100644 --- a/IkiWiki/Plugin/camelcase.pm +++ b/IkiWiki/Plugin/camelcase.pm @@ -22,21 +22,21 @@ my $link_regexp=qr{ ) }x; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "camelcase", call => \&getsetup); hook(type => "linkify", id => "camelcase", call => \&linkify); hook(type => "scan", id => "camelcase", call => \&scan); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }; -} #}}} +} -sub linkify (@) { #{{{ +sub linkify (@) { my %params=@_; my $page=$params{page}; my $destpage=$params{destpage}; @@ -46,9 +46,9 @@ sub linkify (@) { #{{{ }eg; return $params{content}; -} #}}} +} -sub scan (@) { #{{{ +sub scan (@) { my %params=@_; my $page=$params{page}; my $content=$params{content}; diff --git a/IkiWiki/Plugin/color.pm b/IkiWiki/Plugin/color.pm index ac702ff02..53d8389d2 100644 --- a/IkiWiki/Plugin/color.pm +++ b/IkiWiki/Plugin/color.pm @@ -7,12 +7,12 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "preprocess", id => "color", call => \&preprocess); hook(type => "format", id => "color", call => \&format); -} #}}} +} -sub preserve_style ($$$) { #{{{ +sub preserve_style ($$$) { my $foreground = shift; my $background = shift; my $text = shift; @@ -37,18 +37,18 @@ sub preserve_style ($$$) { #{{{ return $preserved; -} #}}} +} -sub replace_preserved_style ($) { #{{{ +sub replace_preserved_style ($) { my $content = shift; $content =~ s!((color: ([a-z]+|\#[0-9a-f]{3,6})?)?((; )?(background-color: ([a-z]+|\#[0-9a-f]{3,6})?)?)?)!!g; $content =~ s!!!g; return $content; -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params = @_; # Preprocess the text to expand any preprocessor directives @@ -57,13 +57,13 @@ sub preprocess (@) { #{{{ IkiWiki::filter($params{page}, $params{destpage}, $params{text})); return preserve_style($params{foreground}, $params{background}, $params{text}); -} #}}} +} -sub format (@) { #{{{ +sub format (@) { my %params = @_; $params{content} = replace_preserved_style($params{content}); return $params{content}; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index b8748a1d6..6184c6031 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -17,7 +17,7 @@ use constant CANCEL => "Cancel"; my $postcomment; -sub import { #{{{ +sub import { hook(type => "checkconfig", id => 'comments', call => \&checkconfig); hook(type => "getsetup", id => 'comments', call => \&getsetup); hook(type => "preprocess", id => '_comment', call => \&preprocess); @@ -26,9 +26,9 @@ sub import { #{{{ hook(type => "pagetemplate", id => "comments", call => \&pagetemplate); hook(type => "cgi", id => "comments", call => \&linkcgi); IkiWiki::loadplugin("inline"); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -88,15 +88,15 @@ sub getsetup () { #{{{ safe => 0, rebuild => 0, }, -} #}}} +} -sub htmlize { # {{{ +sub htmlize { my %params = @_; return $params{content}; -} # }}} +} # FIXME: copied verbatim from meta -sub safeurl ($) { #{{{ +sub safeurl ($) { my $url=shift; if (exists $IkiWiki::Plugin::htmlscrubber::{safe_url_regexp} && defined $IkiWiki::Plugin::htmlscrubber::safe_url_regexp) { @@ -105,9 +105,9 @@ sub safeurl ($) { #{{{ else { return 1; } -} #}}} +} -sub preprocess { # {{{ +sub preprocess { my %params = @_; my $page = $params{page}; @@ -206,16 +206,16 @@ sub preprocess { # {{{ # FIXME: hard-coded HTML (although it's just to set an ID) return "
$content
" if $anchor; return $content; -} # }}} +} -sub checkconfig () { #{{{ +sub checkconfig () { $config{comments_commit} = 1 unless defined $config{comments_commit}; $config{comments_pagename} = 'comment_' unless defined $config{comments_pagename}; -} #}}} +} # This is exactly the same as recentchanges_link :-( -sub linkcgi ($) { #{{{ +sub linkcgi ($) { my $cgi=shift; if (defined $cgi->param('do') && $cgi->param('do') eq "commenter") { @@ -245,7 +245,7 @@ sub linkcgi ($) { #{{{ # FIXME: basically the same logic as recentchanges # returns (author URL, pretty-printed version) -sub linkuser ($) { # {{{ +sub linkuser ($) { my $user = shift; my $oiduser = eval { IkiWiki::openiduser($user) }; @@ -262,10 +262,10 @@ sub linkuser ($) { # {{{ : "$user") ), $user); } -} # }}} +} # Mostly cargo-culted from IkiWiki::plugin::editpage -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $cgi=shift; my $session=shift; @@ -512,9 +512,9 @@ sub sessioncgi ($$) { #{{{ } exit; -} #}}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params = @_; my $page = $params{page}; @@ -583,7 +583,7 @@ sub pagetemplate (@) { #{{{ $template->param(commentauthorurl => $pagestate{$page}{comments}{commentauthorurl}); } -} # }}} +} package IkiWiki::PageSpec; diff --git a/IkiWiki/Plugin/conditional.pm b/IkiWiki/Plugin/conditional.pm index e787424aa..66253e07d 100644 --- a/IkiWiki/Plugin/conditional.pm +++ b/IkiWiki/Plugin/conditional.pm @@ -6,20 +6,20 @@ use strict; use IkiWiki 2.00; use UNIVERSAL; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "conditional", call => \&getsetup); hook(type => "preprocess", id => "if", call => \&preprocess_if); -} # }}} +} -sub getsetup { #{{{ +sub getsetup { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess_if (@) { #{{{ +sub preprocess_if (@) { my %params=@_; foreach my $param (qw{test then}) { @@ -66,11 +66,11 @@ sub preprocess_if (@) { #{{{ } return IkiWiki::preprocess($params{page}, $params{destpage}, IkiWiki::filter($params{page}, $params{destpage}, $ret)); -} # }}} +} package IkiWiki::PageSpec; -sub match_enabled ($$;@) { #{{{ +sub match_enabled ($$;@) { shift; my $plugin=shift; @@ -81,9 +81,9 @@ sub match_enabled ($$;@) { #{{{ else { return IkiWiki::FailReason->new("$plugin is not enabled"); } -} #}}} +} -sub match_sourcepage ($$;@) { #{{{ +sub match_sourcepage ($$;@) { shift; my $glob=shift; my %params=@_; @@ -95,9 +95,9 @@ sub match_sourcepage ($$;@) { #{{{ else { return IkiWiki::FailReason->new("sourcepage does not match $glob"); } -} #}}} +} -sub match_destpage ($$;@) { #{{{ +sub match_destpage ($$;@) { shift; my $glob=shift; my %params=@_; @@ -109,9 +109,9 @@ sub match_destpage ($$;@) { #{{{ else { return IkiWiki::FailReason->new("destpage does not match $glob"); } -} #}}} +} -sub match_included ($$;@) { #{{{ +sub match_included ($$;@) { shift; shift; my %params=@_; @@ -123,6 +123,6 @@ sub match_included ($$;@) { #{{{ else { return IkiWiki::FailReason->new("page $params{sourcepage} is not included"); } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/creole.pm b/IkiWiki/Plugin/creole.pm index 7c729300d..3c46a48df 100644 --- a/IkiWiki/Plugin/creole.pm +++ b/IkiWiki/Plugin/creole.pm @@ -7,20 +7,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "creole", call => \&getsetup); hook(type => "htmlize", id => "creole", call => \&htmlize); -} # }}} +} -sub getsetup { #{{{ +sub getsetup { return plugin => { safe => 1, rebuild => 1, # format plugin }, -} #}}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; my $content = $params{content}; @@ -32,6 +32,6 @@ sub htmlize (@) { #{{{ creole_custombarelinks(); return creole_parse($content); -} # }}} +} 1 diff --git a/IkiWiki/Plugin/cutpaste.pm b/IkiWiki/Plugin/cutpaste.pm index 92667a1ef..e579c1ea2 100644 --- a/IkiWiki/Plugin/cutpaste.pm +++ b/IkiWiki/Plugin/cutpaste.pm @@ -7,22 +7,22 @@ use IkiWiki 2.00; my %savedtext; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "cutpaste", call => \&getsetup); hook(type => "preprocess", id => "cut", call => \&preprocess_cut, scan => 1); hook(type => "preprocess", id => "copy", call => \&preprocess_copy, scan => 1); hook(type => "preprocess", id => "paste", call => \&preprocess_paste); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess_cut (@) { #{{{ +sub preprocess_cut (@) { my %params=@_; foreach my $param (qw{id text}) { @@ -35,9 +35,9 @@ sub preprocess_cut (@) { #{{{ $savedtext{$params{page}}->{$params{id}} = $params{text}; return "" if defined wantarray; -} # }}} +} -sub preprocess_copy (@) { #{{{ +sub preprocess_copy (@) { my %params=@_; foreach my $param (qw{id text}) { @@ -51,9 +51,9 @@ sub preprocess_copy (@) { #{{{ return IkiWiki::preprocess($params{page}, $params{destpage}, IkiWiki::filter($params{page}, $params{destpage}, $params{text})) if defined wantarray; -} # }}} +} -sub preprocess_paste (@) { #{{{ +sub preprocess_paste (@) { my %params=@_; foreach my $param (qw{id}) { @@ -71,6 +71,6 @@ sub preprocess_paste (@) { #{{{ return IkiWiki::preprocess($params{page}, $params{destpage}, IkiWiki::filter($params{page}, $params{destpage}, $savedtext{$params{page}}->{$params{id}})); -} # }}} +} 1; diff --git a/IkiWiki/Plugin/ddate.pm b/IkiWiki/Plugin/ddate.pm index c73317b2f..3470640dc 100644 --- a/IkiWiki/Plugin/ddate.pm +++ b/IkiWiki/Plugin/ddate.pm @@ -5,19 +5,19 @@ package IkiWiki::Plugin::ddate; use IkiWiki 2.00; no warnings; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "ddate", call => \&getsetup); -} # }}} +} -sub getsetup { #{{{ +sub getsetup { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub IkiWiki::formattime ($;$) { #{{{ +sub IkiWiki::formattime ($;$) { my $time=shift; my $format=shift; if (! defined $format) { @@ -36,6 +36,6 @@ sub IkiWiki::formattime ($;$) { #{{{ my $dt = DateTime->from_epoch(epoch => $time); my $dd = DateTime::Calendar::Discordian->from_object(object => $dt); return $dd->strftime($format); -} #}}} +} 5 diff --git a/IkiWiki/Plugin/editdiff.pm b/IkiWiki/Plugin/editdiff.pm index f5d7837fc..068b83b3c 100644 --- a/IkiWiki/Plugin/editdiff.pm +++ b/IkiWiki/Plugin/editdiff.pm @@ -8,21 +8,21 @@ use IkiWiki 2.00; use HTML::Entities; use IPC::Open2; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "editdiff", call => \&getsetup); hook(type => "formbuilder_setup", id => "editdiff", call => \&formbuilder_setup); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub diff ($$) { #{{{ +sub diff ($$) { my $orig=shift; my $content=shift; @@ -50,9 +50,9 @@ sub diff ($$) { #{{{ return "couldn't run diff\n" if $sigpipe; return "
".encode_entities($ret)."
"; -} #}}} +} -sub formbuilder_setup { #{{{ +sub formbuilder_setup { my %params=@_; my $form=$params{form}; @@ -72,6 +72,6 @@ sub formbuilder_setup { #{{{ my $diff = diff(srcfile($pagesources{$page}), $content); $form->tmpl_param("page_preview", $diff); } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm index 242624d77..9210d6ff8 100644 --- a/IkiWiki/Plugin/editpage.pm +++ b/IkiWiki/Plugin/editpage.pm @@ -6,19 +6,19 @@ use strict; use IkiWiki; use open qw{:utf8 :std}; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "editpage", call => \&getsetup); hook(type => "refresh", id => "editpage", call => \&refresh); hook(type => "sessioncgi", id => "editpage", call => \&IkiWiki::cgi_editpage); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} sub refresh () { if (exists $wikistate{editpage} && exists $wikistate{editpage}{previews}) { @@ -54,7 +54,7 @@ sub refresh () { # and other plugins use the functions below. package IkiWiki; -sub check_canedit ($$$;$) { #{{{ +sub check_canedit ($$$;$) { my $page=shift; my $q=shift; my $session=shift; @@ -79,9 +79,9 @@ sub check_canedit ($$$;$) { #{{{ } }); return $canedit; -} #}}} +} -sub cgi_editpage ($$) { #{{{ +sub cgi_editpage ($$) { my $q=shift; my $session=shift; @@ -453,6 +453,6 @@ sub cgi_editpage ($$) { #{{{ } exit; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/edittemplate.pm b/IkiWiki/Plugin/edittemplate.pm index 846b4e7c8..7c0e7c2f8 100644 --- a/IkiWiki/Plugin/edittemplate.pm +++ b/IkiWiki/Plugin/edittemplate.pm @@ -7,7 +7,7 @@ use IkiWiki 2.00; use HTML::Template; use Encode; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "edittemplate", call => \&getsetup); hook(type => "needsbuild", id => "edittemplate", @@ -16,17 +16,17 @@ sub import { #{{{ call => \&preprocess); hook(type => "formbuilder", id => "edittemplate", call => \&formbuilder); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; foreach my $page (keys %pagestate) { @@ -40,9 +40,9 @@ sub needsbuild (@) { #{{{ } } } -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; return "" if $params{page} ne $params{destpage}; @@ -62,9 +62,9 @@ sub preprocess (@) { #{{{ return sprintf(gettext("edittemplate %s registered for %s"), htmllink($params{page}, $params{destpage}, $link), $params{match}); -} # }}} +} -sub formbuilder (@) { #{{{ +sub formbuilder (@) { my %params=@_; my $form=$params{form}; @@ -103,9 +103,9 @@ sub formbuilder (@) { #{{{ } } } -} #}}} +} -sub filltemplate ($$) { #{{{ +sub filltemplate ($$) { my $template_page=shift; my $page=shift; @@ -136,6 +136,6 @@ sub filltemplate ($$) { #{{{ $template->param(name => $page); return $template->output; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/embed.pm b/IkiWiki/Plugin/embed.pm index 2a1637392..664c95763 100644 --- a/IkiWiki/Plugin/embed.pm +++ b/IkiWiki/Plugin/embed.pm @@ -43,35 +43,35 @@ my $safehtml=qr{( my @embedded; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "embed", call => \&getsetup); hook(type => "filter", id => "embed", call => \&filter); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub embed ($) { #{{{ +sub embed ($) { hook(type => "format", id => "embed", call => \&format) unless @embedded; push @embedded, shift; return "
"; -} #}}} +} -sub filter (@) { #{{{ +sub filter (@) { my %params=@_; $params{content} =~ s/$safehtml/embed($1)/eg; return $params{content}; -} # }}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; $params{content} =~ s/
<\/div>/$embedded[$1]/eg; return $params{content}; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm index 4ce9c8bab..2d540143f 100644 --- a/IkiWiki/Plugin/external.pm +++ b/IkiWiki/Plugin/external.pm @@ -14,7 +14,7 @@ use IO::Handle; my %plugins; -sub import { #{{{ +sub import { my $self=shift; my $plugin=shift; return unless defined $plugin; @@ -32,17 +32,17 @@ sub import { #{{{ $RPC::XML::ENCODING="utf-8"; rpc_call($plugins{$plugin}, "import"); -} #}}} +} -sub rpc_write ($$) { #{{{ +sub rpc_write ($$) { my $fh=shift; my $string=shift; $fh->print($string."\n"); $fh->flush; -} #}}} +} -sub rpc_call ($$;@) { #{{{ +sub rpc_call ($$;@) { my $plugin=shift; my $command=shift; @@ -131,12 +131,12 @@ sub rpc_call ($$;@) { #{{{ } return undef; -} #}}} +} package IkiWiki::RPC::XML; use Memoize; -sub getvar ($$$) { #{{{ +sub getvar ($$$) { my $plugin=shift; my $varname="IkiWiki::".shift; my $key=shift; @@ -145,9 +145,9 @@ sub getvar ($$$) { #{{{ my $ret=$varname->{$key}; use strict 'refs'; return $ret; -} #}}} +} -sub setvar ($$$;@) { #{{{ +sub setvar ($$$;@) { my $plugin=shift; my $varname="IkiWiki::".shift; my $key=shift; @@ -157,18 +157,18 @@ sub setvar ($$$;@) { #{{{ my $ret=$varname->{$key}=$value; use strict 'refs'; return $ret; -} #}}} +} -sub getstate ($$$$) { #{{{ +sub getstate ($$$$) { my $plugin=shift; my $page=shift; my $id=shift; my $key=shift; return $IkiWiki::pagestate{$page}{$id}{$key}; -} #}}} +} -sub setstate ($$$$;@) { #{{{ +sub setstate ($$$$;@) { my $plugin=shift; my $page=shift; my $id=shift; @@ -176,22 +176,22 @@ sub setstate ($$$$;@) { #{{{ my $value=shift; return $IkiWiki::pagestate{$page}{$id}{$key}=$value; -} #}}} +} -sub getargv ($) { #{{{ +sub getargv ($) { my $plugin=shift; return \@ARGV; -} #}}} +} -sub setargv ($@) { #{{{ +sub setargv ($@) { my $plugin=shift; my $array=shift; @ARGV=@$array; -} #}}} +} -sub inject ($@) { #{{{ +sub inject ($@) { # Bind a given perl function name to a particular RPC request. my $plugin=shift; my %params=@_; @@ -213,9 +213,9 @@ sub inject ($@) { #{{{ # the injected version. IkiWiki::inject(name => $params{name}, call => $sub); return 1; -} #}}} +} -sub hook ($@) { #{{{ +sub hook ($@) { # the call parameter is a function name to call, since XML RPC # cannot pass a function reference my $plugin=shift; @@ -227,13 +227,13 @@ sub hook ($@) { #{{{ IkiWiki::hook(%params, call => sub { IkiWiki::Plugin::external::rpc_call($plugin, $callback, @_); }); -} #}}} +} -sub pagespec_match ($@) { #{{{ +sub pagespec_match ($@) { # convert pagespec_match's return object into a XML RPC boolean my $plugin=shift; return RPC::XML::boolean->new(0 + IkiWiki::pagespec_march(@_)); -} #}}} +} 1 diff --git a/IkiWiki/Plugin/favicon.pm b/IkiWiki/Plugin/favicon.pm index e9204dea9..68359a4aa 100644 --- a/IkiWiki/Plugin/favicon.pm +++ b/IkiWiki/Plugin/favicon.pm @@ -7,20 +7,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "favicon", call => \&getsetup); hook(type => "pagetemplate", id => "favicon", call => \&pagetemplate); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $template=$params{template}; @@ -28,6 +28,6 @@ sub pagetemplate (@) { #{{{ if ($template->query(name => "favicon")) { $template->param(favicon => "favicon.ico"); } -} # }}} +} 1 diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm index 27f764e3b..5040a185c 100644 --- a/IkiWiki/Plugin/filecheck.pm +++ b/IkiWiki/Plugin/filecheck.pm @@ -37,9 +37,9 @@ my %units=( #{{{ # size in bytes # ikiwiki, if you find you need larger data quantities, either modify # yourself to add them, or travel back in time to 2008 and kill me. # -- Joey -); #}}} +); -sub parsesize ($) { #{{{ +sub parsesize ($) { my $size=shift; no warnings; @@ -51,10 +51,10 @@ sub parsesize ($) { #{{{ } } return $base; -} #}}} +} # This is provided for other plugins that want to convert back the other way. -sub humansize ($) { #{{{ +sub humansize ($) { my $size=shift; foreach my $unit (reverse sort { $units{$a} <=> $units{$b} || $b cmp $a } keys %units) { @@ -63,11 +63,11 @@ sub humansize ($) { #{{{ } } return $size; # near zero, or negative -} #}}} +} package IkiWiki::PageSpec; -sub match_maxsize ($$;@) { #{{{ +sub match_maxsize ($$;@) { my $page=shift; my $maxsize=eval{IkiWiki::Plugin::filecheck::parsesize(shift)}; if ($@) { @@ -86,9 +86,9 @@ sub match_maxsize ($$;@) { #{{{ else { return IkiWiki::SuccessReason->new("file not too large"); } -} #}}} +} -sub match_minsize ($$;@) { #{{{ +sub match_minsize ($$;@) { my $page=shift; my $minsize=eval{IkiWiki::Plugin::filecheck::parsesize(shift)}; if ($@) { @@ -107,9 +107,9 @@ sub match_minsize ($$;@) { #{{{ else { return IkiWiki::SuccessReason->new("file not too small"); } -} #}}} +} -sub match_mimetype ($$;@) { #{{{ +sub match_mimetype ($$;@) { my $page=shift; my $wanted=shift; @@ -140,9 +140,9 @@ sub match_mimetype ($$;@) { #{{{ else { return IkiWiki::SuccessReason->new("file MIME type is $mimetype"); } -} #}}} +} -sub match_virusfree ($$;@) { #{{{ +sub match_virusfree ($$;@) { my $page=shift; my $wanted=shift; @@ -182,9 +182,9 @@ sub match_virusfree ($$;@) { #{{{ else { return IkiWiki::SuccessReason->new("file seems virusfree ($reason)"); } -} #}}} +} -sub match_ispage ($$;@) { #{{{ +sub match_ispage ($$;@) { my $filename=shift; if (defined IkiWiki::pagetype($filename)) { @@ -193,4 +193,4 @@ sub match_ispage ($$;@) { #{{{ else { return IkiWiki::FailReason->new("file is not a wiki page"); } -} #}}} +} diff --git a/IkiWiki/Plugin/format.pm b/IkiWiki/Plugin/format.pm index 1e21a0bdc..b4d3a3c5f 100644 --- a/IkiWiki/Plugin/format.pm +++ b/IkiWiki/Plugin/format.pm @@ -5,11 +5,11 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "preprocess", id => "format", call => \&preprocess); -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my $format=$_[0]; shift; shift; my $text=$_[0]; @@ -25,6 +25,6 @@ sub preprocess (@) { #{{{ return IkiWiki::htmlize($params{page}, $params{destpage}, $format, IkiWiki::preprocess($params{page}, $params{destpage}, $text)); -} #}}} +} 1 diff --git a/IkiWiki/Plugin/fortune.pm b/IkiWiki/Plugin/fortune.pm index 456b63e9f..6a12f28fd 100644 --- a/IkiWiki/Plugin/fortune.pm +++ b/IkiWiki/Plugin/fortune.pm @@ -6,20 +6,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "fortune", call => \&getsetup); hook(type => "preprocess", id => "fortune", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { $ENV{PATH}="$ENV{PATH}:/usr/games:/usr/local/games"; my $f = `fortune 2>/dev/null`; @@ -29,6 +29,6 @@ sub preprocess (@) { #{{{ else { return "
$f
\n"; } -} # }}} +} 1 diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 1a39d87e5..6a7f6c3ae 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -11,7 +11,7 @@ my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums my $dummy_commit_msg = 'dummy commit'; # message to skip in recent changes my $no_chdir=0; -sub import { #{{{ +sub import { hook(type => "checkconfig", id => "git", call => \&checkconfig); hook(type => "getsetup", id => "git", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@ -25,9 +25,9 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); hook(type => "rcs", id => "rcs_receive", call => \&rcs_receive); -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (! defined $config{gitorigin_branch}) { $config{gitorigin_branch}="origin"; } @@ -49,9 +49,9 @@ sub checkconfig () { #{{{ wrappermode => (defined $config{git_wrappermode} ? $config{git_wrappermode} : "06755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin @@ -113,9 +113,9 @@ sub getsetup () { #{{{ safe => 0, # paranoia rebuild => 0, }, -} #}}} +} -sub safe_git (&@) { #{{{ +sub safe_git (&@) { # Start a child process safely without resorting /bin/sh. # Return command output or success state (in scalar context). @@ -152,9 +152,9 @@ sub safe_git (&@) { #{{{ sub run_or_die ($@) { safe_git(\&error, @_) } sub run_or_cry ($@) { safe_git(sub { warn @_ }, @_) } sub run_or_non ($@) { safe_git(undef, @_) } -#}}} -sub merge_past ($$$) { #{{{ + +sub merge_past ($$$) { # Unlike with Subversion, Git cannot make a 'svn merge -rN:M file'. # Git merge commands work with the committed changes, except in the # implicit case of '-m' of git checkout(1). So we should invent a @@ -246,9 +246,9 @@ sub merge_past ($$$) { #{{{ error("Git merge failed!\n$failure\n") if $failure; return $conflict; -} #}}} +} -sub parse_diff_tree ($@) { #{{{ +sub parse_diff_tree ($@) { # Parse the raw diff tree chunk and return the info hash. # See git-diff-tree(1) for the syntax. @@ -358,9 +358,9 @@ sub parse_diff_tree ($@) { #{{{ } return \%ci; -} #}}} +} -sub git_commit_info ($;$) { #{{{ +sub git_commit_info ($;$) { # Return an array of commit info hashes of num commits # starting from the given sha1sum. my ($sha1, $num) = @_; @@ -381,9 +381,9 @@ sub git_commit_info ($;$) { #{{{ warn "Cannot parse commit info for '$sha1' commit" if !@ci; return wantarray ? @ci : $ci[0]; -} #}}} +} -sub git_sha1 (;$) { #{{{ +sub git_sha1 (;$) { # Return head sha1sum (of given file). my $file = shift || q{--}; @@ -394,25 +394,25 @@ sub git_sha1 (;$) { #{{{ ($sha1) = $sha1 =~ m/($sha1_pattern)/; # sha1 is untainted now } else { debug("Empty sha1sum for '$file'.") } return defined $sha1 ? $sha1 : q{}; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { # Update working directory. if (length $config{gitorigin_branch}) { run_or_cry('git', 'pull', $config{gitorigin_branch}); } -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { # Return the commit sha1sum of the file when editing begins. # This will be later used in rcs_commit if a merge is required. my ($file) = @_; return git_sha1($file); -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { # Try to commit the page; returns undef on _success_ and # a version of the page with the rcs's conflict markers on # failure. @@ -431,7 +431,7 @@ sub rcs_commit ($$$;$$) { #{{{ rcs_add($file); return rcs_commit_staged($message, $user, $ipaddr); -} #}}} +} sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, @@ -472,29 +472,29 @@ sub rcs_commit_staged ($$$) { return undef; # success } -sub rcs_add ($) { # {{{ +sub rcs_add ($) { # Add file to archive. my ($file) = @_; run_or_cry('git', 'add', $file); -} #}}} +} -sub rcs_remove ($) { # {{{ +sub rcs_remove ($) { # Remove file from archive. my ($file) = @_; run_or_cry('git', 'rm', '-f', $file); -} #}}} +} -sub rcs_rename ($$) { # {{{ +sub rcs_rename ($$) { my ($src, $dest) = @_; run_or_cry('git', 'mv', '-f', $src, $dest); -} #}}} +} -sub rcs_recentchanges ($) { #{{{ +sub rcs_recentchanges ($) { # List of recent changes. my ($num) = @_; @@ -562,9 +562,9 @@ sub rcs_recentchanges ($) { #{{{ } return @rets; -} #}}} +} -sub rcs_diff ($) { #{{{ +sub rcs_diff ($) { my $rev=shift; my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint my @lines; @@ -579,9 +579,9 @@ sub rcs_diff ($) { #{{{ else { return join("", @lines); } -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { my $file=shift; # Remove srcdir prefix $file =~ s/^\Q$config{srcdir}\E\/?//; @@ -592,9 +592,9 @@ sub rcs_getctime ($) { #{{{ debug("ctime for '$file': ". localtime($ctime)); return $ctime; -} #}}} +} -sub rcs_receive () { #{{{ +sub rcs_receive () { # The wiki may not be the only thing in the git repo. # Determine if it is in a subdirectory by examining the srcdir, # and its parents, looking for the .git directory. @@ -685,6 +685,6 @@ sub rcs_receive () { #{{{ } return reverse @rets; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/goodstuff.pm b/IkiWiki/Plugin/goodstuff.pm index a18e626d4..92bc8200a 100644 --- a/IkiWiki/Plugin/goodstuff.pm +++ b/IkiWiki/Plugin/goodstuff.pm @@ -24,19 +24,19 @@ my @bundle=qw{ toggle }; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "goodstuff", call => \&getsetup); foreach my $plugin (@bundle) { IkiWiki::loadplugin($plugin); } -} # }}} +} -sub getsetup { #{{{ +sub getsetup { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} 1 diff --git a/IkiWiki/Plugin/google.pm b/IkiWiki/Plugin/google.pm index 92b9b29eb..5394c5a6f 100644 --- a/IkiWiki/Plugin/google.pm +++ b/IkiWiki/Plugin/google.pm @@ -8,21 +8,21 @@ use URI; my $host; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "google", call => \&getsetup); hook(type => "checkconfig", id => "google", call => \&checkconfig); hook(type => "pagetemplate", id => "google", call => \&pagetemplate); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (! length $config{url}) { error(sprintf(gettext("Must specify %s when using the google search plugin"), "url")); } @@ -31,10 +31,10 @@ sub checkconfig () { #{{{ error(gettext("Failed to parse url, cannot determine domain name")); } $host=$uri->host; -} #}}} +} my $form; -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $page=$params{page}; my $template=$params{template}; @@ -49,6 +49,6 @@ sub pagetemplate (@) { #{{{ $template->param(searchform => $form); } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/googlecalendar.pm b/IkiWiki/Plugin/googlecalendar.pm index 81a3ad677..9e09d7dbb 100644 --- a/IkiWiki/Plugin/googlecalendar.pm +++ b/IkiWiki/Plugin/googlecalendar.pm @@ -5,24 +5,24 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "googlecalendar", call => \&getsetup); hook(type => "preprocess", id => "googlecalendar", call => \&preprocess); hook(type => "format", id => "googlecalendar", call => \&format); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; # Parse the html, looking for the url to embed for the calendar. @@ -35,21 +35,21 @@ sub preprocess (@) { #{{{ my ($width)=$params{html}=~m#width="(\d+)"#; return "
"; -} # }}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; $params{content}=~s/
<\/div>/gencal($1,$2,$3)/eg; return $params{content}; -} # }}} +} -sub gencal ($$$) { #{{{ +sub gencal ($$$) { my $url=shift; my $height=shift; my $width=shift; return qq{}; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/graphviz.pm b/IkiWiki/Plugin/graphviz.pm index 20b419413..23631da30 100644 --- a/IkiWiki/Plugin/graphviz.pm +++ b/IkiWiki/Plugin/graphviz.pm @@ -8,24 +8,24 @@ use strict; use IkiWiki 2.00; use IPC::Open2; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "graphviz", call => \&getsetup); hook(type => "preprocess", id => "graph", call => \&graph); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} my %graphviz_programs = ( "dot" => 1, "neato" => 1, "fdp" => 1, "twopi" => 1, "circo" => 1 ); -sub render_graph (\%) { #{{{ +sub render_graph (\%) { my %params = %{(shift)}; my $src = "$params{type} g {\n"; @@ -84,9 +84,9 @@ sub render_graph (\%) { #{{{ else { return "\n"; } -} #}}} +} -sub graph (@) { #{{{ +sub graph (@) { my %params=@_; $params{src} = "" unless defined $params{src}; $params{type} = "digraph" unless defined $params{type}; @@ -94,6 +94,6 @@ sub graph (@) { #{{{ error gettext("prog not a valid graphviz program") unless $graphviz_programs{$params{prog}}; return render_graph(%params); -} # }}} +} 1 diff --git a/IkiWiki/Plugin/haiku.pm b/IkiWiki/Plugin/haiku.pm index eb8b786e8..fe68c6eec 100644 --- a/IkiWiki/Plugin/haiku.pm +++ b/IkiWiki/Plugin/haiku.pm @@ -6,20 +6,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "haiku", call => \&getsetup); hook(type => "preprocess", id => "haiku", call => \&preprocess); -} # }}} +} -sub getsetup { #{{{ +sub getsetup { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; my $haiku; @@ -54,6 +54,6 @@ sub preprocess (@) { #{{{ $haiku=~s/\n/
\n/mg; return "\n\n

$haiku

\n\n"; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/hnb.pm b/IkiWiki/Plugin/hnb.pm index 40e4f9452..d5b5ce3b4 100644 --- a/IkiWiki/Plugin/hnb.pm +++ b/IkiWiki/Plugin/hnb.pm @@ -13,20 +13,20 @@ use strict; use IkiWiki 2.00; use File::Temp qw(:mktemp); -sub import { #{{{ +sub import { hook(type => "getsetup", id => "hnb", call => \&getsetup); hook(type => "htmlize", id => "hnb", call => \&htmlize); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, -} #}}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params = @_; # hnb outputs version number etc. every time to STDOUT, so @@ -52,6 +52,6 @@ sub htmlize (@) { #{{{ $ret =~ s/.*//si; return $ret; -} #}}} +} 1; diff --git a/IkiWiki/Plugin/html.pm b/IkiWiki/Plugin/html.pm index b75207578..9b9547cca 100644 --- a/IkiWiki/Plugin/html.pm +++ b/IkiWiki/Plugin/html.pm @@ -6,7 +6,7 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "html", call => \&getsetup); hook(type => "htmlize", id => "html", call => \&htmlize); hook(type => "htmlize", id => "htm", call => \&htmlize); @@ -14,19 +14,19 @@ sub import { #{{{ # ikiwiki defaults to skipping .html files as a security measure; # make it process them so this plugin can take effect $config{wiki_file_prune_regexps} = [ grep { !m/\\\.x\?html\?\$/ } @{$config{wiki_file_prune_regexps}} ]; -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, -} #}}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; return $params{content}; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/htmlbalance.pm b/IkiWiki/Plugin/htmlbalance.pm index dcd92055f..acbe40a5d 100644 --- a/IkiWiki/Plugin/htmlbalance.pm +++ b/IkiWiki/Plugin/htmlbalance.pm @@ -13,20 +13,20 @@ use IkiWiki 2.00; use HTML::TreeBuilder; use HTML::Entities; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "htmlbalance", call => \&getsetup); hook(type => "sanitize", id => "htmlbalance", call => \&sanitize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub sanitize (@) { #{{{ +sub sanitize (@) { my %params=@_; my $ret = ''; @@ -52,6 +52,6 @@ sub sanitize (@) { #{{{ } $tree->delete(); return $ret; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/htmlscrubber.pm b/IkiWiki/Plugin/htmlscrubber.pm index 7398c8478..823b3d806 100644 --- a/IkiWiki/Plugin/htmlscrubber.pm +++ b/IkiWiki/Plugin/htmlscrubber.pm @@ -9,7 +9,7 @@ use IkiWiki 2.00; # Feel free to use it from other plugins. our $safe_url_regexp; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "htmlscrubber", call => \&getsetup); hook(type => "sanitize", id => "htmlscrubber", call => \&sanitize); @@ -33,9 +33,9 @@ sub import { #{{{ # data is a special case. Allow data:image/*, but # disallow data:text/javascript and everything else. $safe_url_regexp=qr/^(?:(?:$uri_schemes):|data:image\/|[^:]+(?:$|\/))/i; -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -49,9 +49,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => undef, }, -} #}}} +} -sub sanitize (@) { #{{{ +sub sanitize (@) { my %params=@_; if (exists $config{htmlscrubber_skip} && @@ -62,10 +62,10 @@ sub sanitize (@) { #{{{ } return scrubber()->scrub($params{content}); -} # }}} +} my $_scrubber; -sub scrubber { #{{{ +sub scrubber { return $_scrubber if defined $_scrubber; eval q{use HTML::Scrubber}; @@ -111,6 +111,6 @@ sub scrubber { #{{{ }], ); return $_scrubber; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/htmltidy.pm b/IkiWiki/Plugin/htmltidy.pm index 9ba5e9592..02438ebef 100644 --- a/IkiWiki/Plugin/htmltidy.pm +++ b/IkiWiki/Plugin/htmltidy.pm @@ -12,20 +12,20 @@ use strict; use IkiWiki 2.00; use IPC::Open2; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "tidy", call => \&getsetup); hook(type => "sanitize", id => "tidy", call => \&sanitize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub sanitize (@) { #{{{ +sub sanitize (@) { my %params=@_; my $pid; @@ -49,6 +49,6 @@ sub sanitize (@) { #{{{ return "" if $sigpipe || ! defined $ret; return $ret; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/httpauth.pm b/IkiWiki/Plugin/httpauth.pm index fc0cffb1e..39edff615 100644 --- a/IkiWiki/Plugin/httpauth.pm +++ b/IkiWiki/Plugin/httpauth.pm @@ -6,26 +6,26 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "httpauth", call => \&getsetup); hook(type => "auth", id => "httpauth", call => \&auth); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub auth ($$) { #{{{ +sub auth ($$) { my $cgi=shift; my $session=shift; if (defined $cgi->remote_user()) { $session->param("name", $cgi->remote_user()); } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/img.pm b/IkiWiki/Plugin/img.pm index 7b89ab673..395890c0e 100644 --- a/IkiWiki/Plugin/img.pm +++ b/IkiWiki/Plugin/img.pm @@ -9,20 +9,20 @@ use IkiWiki 2.00; my %imgdefaults; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "img", call => \&getsetup); hook(type => "preprocess", id => "img", call => \&preprocess, scan => 1); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my ($image) = $_[0] =~ /$config{wiki_file_regexp}/; # untaint my %params=@_; @@ -149,6 +149,6 @@ sub preprocess (@) { #{{{ else { return $imgtag; } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index d6ef6c54c..d37db97ec 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -13,7 +13,7 @@ my %page_numfeeds; my @inline; my $nested=0; -sub import { #{{{ +sub import { hook(type => "getopt", id => "inline", call => \&getopt); hook(type => "getsetup", id => "inline", call => \&getsetup); hook(type => "checkconfig", id => "inline", call => \&checkconfig); @@ -27,9 +27,9 @@ sub import { #{{{ # This ensures each page only pings once and prevents slow # pings interrupting page builds. hook(type => "change", id => "inline", call => \&IkiWiki::pingurl); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); @@ -42,9 +42,9 @@ sub getopt () { #{{{ push @{$config{pingurl}}, $_[1]; }, ); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -85,9 +85,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (($config{rss} || $config{atom}) && ! length $config{url}) { error(gettext("Must specify url to wiki with --url when using --rss or --atom")); } @@ -100,9 +100,9 @@ sub checkconfig () { #{{{ if (! exists $config{pingurl}) { $config{pingurl}=[]; } -} #}}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; # Fill in the inline content generated earlier. This is actually an @@ -111,9 +111,9 @@ sub format (@) { #{{{ delete @inline[$1,] }eg; return $params{content}; -} #}}} +} -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $q=shift; my $session=shift; @@ -148,7 +148,7 @@ package IkiWiki; my %toping; my %feedlinks; -sub preprocess_inline (@) { #{{{ +sub preprocess_inline (@) { my %params=@_; if (! exists $params{pages}) { @@ -416,18 +416,18 @@ sub preprocess_inline (@) { #{{{ return $ret if $raw || $nested; push @inline, $ret; return "
\n\n"; -} #}}} +} -sub pagetemplate_inline (@) { #{{{ +sub pagetemplate_inline (@) { my %params=@_; my $page=$params{page}; my $template=$params{template}; $template->param(feedlinks => $feedlinks{$page}) if exists $feedlinks{$page} && $template->query(name => "feedlinks"); -} #}}} +} -sub get_inline_content ($$) { #{{{ +sub get_inline_content ($$) { my $page=shift; my $destpage=shift; @@ -446,9 +446,9 @@ sub get_inline_content ($$) { #{{{ else { return ""; } -} #}}} +} -sub date_822 ($) { #{{{ +sub date_822 ($) { my $time=shift; my $lc_time=POSIX::setlocale(&POSIX::LC_TIME); @@ -456,9 +456,9 @@ sub date_822 ($) { #{{{ my $ret=POSIX::strftime("%a, %d %b %Y %H:%M:%S %z", localtime($time)); POSIX::setlocale(&POSIX::LC_TIME, $lc_time); return $ret; -} #}}} +} -sub date_3339 ($) { #{{{ +sub date_3339 ($) { my $time=shift; my $lc_time=POSIX::setlocale(&POSIX::LC_TIME); @@ -466,9 +466,9 @@ sub date_3339 ($) { #{{{ my $ret=POSIX::strftime("%Y-%m-%dT%H:%M:%SZ", gmtime($time)); POSIX::setlocale(&POSIX::LC_TIME, $lc_time); return $ret; -} #}}} +} -sub absolute_urls ($$) { #{{{ +sub absolute_urls ($$) { # sucky sub because rss sucks my $content=shift; my $baseurl=shift; @@ -489,9 +489,9 @@ sub absolute_urls ($$) { #{{{ $content=~s/(output; -} #}}} +} -sub pingurl (@) { #{{{ +sub pingurl (@) { return unless @{$config{pingurl}} && %toping; eval q{require RPC::XML::Client}; @@ -624,6 +624,6 @@ sub pingurl (@) { #{{{ } exit 0; # daemon done -} #}}} +} 1 diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm index 0638d4bdd..3799209d0 100644 --- a/IkiWiki/Plugin/link.pm +++ b/IkiWiki/Plugin/link.pm @@ -7,23 +7,23 @@ use IkiWiki 2.00; my $link_regexp; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "link", call => \&getsetup); hook(type => "checkconfig", id => "link", call => \&checkconfig); hook(type => "linkify", id => "link", call => \&linkify); hook(type => "scan", id => "link", call => \&scan); hook(type => "renamepage", id => "link", call => \&renamepage); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if ($config{prefix_directives}) { $link_regexp = qr{ \[\[(?=[^!]) # beginning of link @@ -58,9 +58,9 @@ sub checkconfig () { #{{{ \]\] # end of link }x, } -} #}}} +} -sub linkify (@) { #{{{ +sub linkify (@) { my %params=@_; my $page=$params{page}; my $destpage=$params{destpage}; @@ -78,9 +78,9 @@ sub linkify (@) { #{{{ }eg; return $params{content}; -} #}}} +} -sub scan (@) { #{{{ +sub scan (@) { my %params=@_; my $page=$params{page}; my $content=$params{content}; @@ -88,9 +88,9 @@ sub scan (@) { #{{{ while ($content =~ /(? "getsetup", id => "linkmap", call => \&getsetup); hook(type => "preprocess", id => "linkmap", call => \&preprocess); hook(type => "format", id => "linkmap", call => \&format); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} my $mapnum=0; my %maps; -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $params{pages}="*" unless defined $params{pages}; @@ -39,17 +39,17 @@ sub preprocess (@) { #{{{ $mapnum++; $maps{$mapnum}=\%params; return "
"; -} # }}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; $params{content}=~s/
<\/div>/genmap($1)/eg; return $params{content}; -} # }}} +} -sub genmap ($) { #{{{ +sub genmap ($) { my $mapnum=shift; return "" unless exists $maps{$mapnum}; my %params=%{$maps{$mapnum}}; @@ -106,6 +106,6 @@ sub genmap ($) { #{{{ error gettext("failed to run dot") if $sigpipe; return $ret; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/listdirectives.pm b/IkiWiki/Plugin/listdirectives.pm index 2ab3e4665..be82b0495 100644 --- a/IkiWiki/Plugin/listdirectives.pm +++ b/IkiWiki/Plugin/listdirectives.pm @@ -6,15 +6,15 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { add_underlay("directives"); hook(type => "getsetup", id => "listdirectives", call => \&getsetup); hook(type => "checkconfig", id => "listdirectives", call => \&checkconfig); hook(type => "needsbuild", id => "listdirectives", call => \&needsbuild); hook(type => "preprocess", id => "listdirectives", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -27,22 +27,22 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} my @fulllist; my @shortlist; my $pluginstring; -sub checkconfig () { #{{{ +sub checkconfig () { if (! defined $config{directive_description_dir}) { $config{directive_description_dir} = "ikiwiki/directive"; } else { $config{directive_description_dir} =~ s/\/+$//; } -} #}}} +} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; @fulllist = sort keys %{$IkiWiki::hooks{preprocess}}; @@ -63,9 +63,9 @@ sub needsbuild (@) { #{{{ } } } -} # }}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $pagestate{$params{destpage}}{listdirectives}{shown}=$pluginstring; @@ -92,6 +92,6 @@ sub preprocess (@) { #{{{ $result .= ""; return $result; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm index f6cac6cdd..31a9e70cd 100644 --- a/IkiWiki/Plugin/lockedit.pm +++ b/IkiWiki/Plugin/lockedit.pm @@ -5,14 +5,14 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "lockedit", call => \&getsetup); hook(type => "canedit", id => "lockedit", call => \&canedit); hook(type => "formbuilder_setup", id => "lockedit", call => \&formbuilder_setup); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -26,9 +26,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, -} #}}} +} -sub canedit ($$) { #{{{ +sub canedit ($$) { my $page=shift; my $cgi=shift; my $session=shift; @@ -70,9 +70,9 @@ sub canedit ($$) { #{{{ } return undef; -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; # XXX deprecated, should be removed eventually @@ -109,6 +109,6 @@ sub formbuilder_setup (@) { #{{{ } } } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm index 18c584a30..af14ef5de 100644 --- a/IkiWiki/Plugin/map.pm +++ b/IkiWiki/Plugin/map.pm @@ -11,20 +11,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "map", call => \&getsetup); hook(type => "preprocess", id => "map", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $params{pages}="*" unless defined $params{pages}; @@ -144,6 +144,6 @@ sub preprocess (@) { #{{{ } $map .= "
\n"; return $map; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/mdwn.pm b/IkiWiki/Plugin/mdwn.pm index 6c1d2ef3c..0d5f398a0 100644 --- a/IkiWiki/Plugin/mdwn.pm +++ b/IkiWiki/Plugin/mdwn.pm @@ -6,12 +6,12 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "mdwn", call => \&getsetup); hook(type => "htmlize", id => "mdwn", call => \&htmlize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -24,10 +24,10 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} my $markdown_sub; -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; my $content = $params{content}; @@ -83,6 +83,6 @@ sub htmlize (@) { #{{{ $content=Encode::decode_utf8($content); return $content; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/mercurial.pm b/IkiWiki/Plugin/mercurial.pm index 7aceebcdb..82423286d 100644 --- a/IkiWiki/Plugin/mercurial.pm +++ b/IkiWiki/Plugin/mercurial.pm @@ -7,7 +7,7 @@ use IkiWiki; use Encode; use open qw{:utf8 :std}; -sub import { #{{{ +sub import { hook(type => "checkconfig", id => "mercurial", call => \&checkconfig); hook(type => "getsetup", id => "mercurial", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@ -20,18 +20,18 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (exists $config{mercurial_wrapper} && length $config{mercurial_wrapper}) { push @{$config{wrappers}}, { wrapper => $config{mercurial_wrapper}, wrappermode => (defined $config{mercurial_wrappermode} ? $config{mercurial_wrappermode} : "06755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin @@ -65,9 +65,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub mercurial_log ($) { #{{{ +sub mercurial_log ($) { my $out = shift; my @infos; @@ -111,20 +111,20 @@ sub mercurial_log ($) { #{{{ close $out; return @infos; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { my @cmdline = ("hg", "-q", "-R", "$config{srcdir}", "update"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { return ""; -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { my ($file, $message, $rcstoken, $user, $ipaddr) = @_; if (defined $user) { @@ -149,7 +149,7 @@ sub rcs_commit ($$$;$$) { #{{{ } return undef; # success -} #}}} +} sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, @@ -159,28 +159,28 @@ sub rcs_commit_staged ($$$) { error("rcs_commit_staged not implemented for mercurial"); # TODO } -sub rcs_add ($) { # {{{ +sub rcs_add ($) { my ($file) = @_; my @cmdline = ("hg", "-q", "-R", "$config{srcdir}", "add", "$config{srcdir}/$file"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } -} #}}} +} -sub rcs_remove ($) { # {{{ +sub rcs_remove ($) { my ($file) = @_; error("rcs_remove not implemented for mercurial"); # TODO -} #}}} +} -sub rcs_rename ($$) { # {{{ +sub rcs_rename ($$) { my ($src, $dest) = @_; error("rcs_rename not implemented for mercurial"); # TODO -} #}}} +} -sub rcs_recentchanges ($) { #{{{ +sub rcs_recentchanges ($) { my ($num) = @_; my @cmdline = ("hg", "-R", $config{srcdir}, "log", "-v", "-l", $num, @@ -225,13 +225,13 @@ sub rcs_recentchanges ($) { #{{{ } return @ret; -} #}}} +} -sub rcs_diff ($) { #{{{ +sub rcs_diff ($) { # TODO -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { my ($file) = @_; # XXX filename passes through the shell here, should try to avoid @@ -251,6 +251,6 @@ sub rcs_getctime ($) { #{{{ my $ctime = str2time($log[0]->{"date"}); return $ctime; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index 3991797c0..ea60be507 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -8,22 +8,22 @@ use IkiWiki 2.00; my %metaheaders; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "meta", call => \&getsetup); hook(type => "needsbuild", id => "meta", call => \&needsbuild); hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1); hook(type => "pagetemplate", id => "meta", call => \&pagetemplate); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; foreach my $page (keys %pagestate) { if (exists $pagestate{$page}{meta}) { @@ -38,7 +38,7 @@ sub needsbuild (@) { #{{{ } } -sub scrub ($$) { #{{{ +sub scrub ($$) { if (IkiWiki::Plugin::htmlscrubber->can("sanitize")) { return IkiWiki::Plugin::htmlscrubber::sanitize( content => shift, destpage => shift); @@ -46,9 +46,9 @@ sub scrub ($$) { #{{{ else { return shift; } -} #}}} +} -sub safeurl ($) { #{{{ +sub safeurl ($) { my $url=shift; if (exists $IkiWiki::Plugin::htmlscrubber::{safe_url_regexp} && defined $IkiWiki::Plugin::htmlscrubber::safe_url_regexp) { @@ -57,9 +57,9 @@ sub safeurl ($) { #{{{ else { return 1; } -} #}}} +} -sub htmlize ($$$) { #{{{ +sub htmlize ($$$) { my $page = shift; my $destpage = shift; @@ -68,7 +68,7 @@ sub htmlize ($$$) { #{{{ IkiWiki::preprocess($page, $destpage, shift))); } -sub preprocess (@) { #{{{ +sub preprocess (@) { return "" unless @_; my %params=@_; my $key=shift; @@ -230,9 +230,9 @@ sub preprocess (@) { #{{{ } return ""; -} # }}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $page=$params{page}; my $destpage=$params{destpage}; @@ -260,9 +260,9 @@ sub pagetemplate (@) { #{{{ $template->param($field => htmlize($page, $destpage, $pagestate{$page}{meta}{$field})); } } -} # }}} +} -sub match { #{{{ +sub match { my $field=shift; my $page=shift; @@ -288,28 +288,28 @@ sub match { #{{{ else { return IkiWiki::FailReason->new("$page does not have a $field"); } -} #}}} +} package IkiWiki::PageSpec; -sub match_title ($$;@) { #{{{ +sub match_title ($$;@) { IkiWiki::Plugin::meta::match("title", @_); -} #}}} +} -sub match_author ($$;@) { #{{{ +sub match_author ($$;@) { IkiWiki::Plugin::meta::match("author", @_); -} #}}} +} -sub match_authorurl ($$;@) { #{{{ +sub match_authorurl ($$;@) { IkiWiki::Plugin::meta::match("authorurl", @_); -} #}}} +} -sub match_license ($$;@) { #{{{ +sub match_license ($$;@) { IkiWiki::Plugin::meta::match("license", @_); -} #}}} +} -sub match_copyright ($$;@) { #{{{ +sub match_copyright ($$;@) { IkiWiki::Plugin::meta::match("copyright", @_); -} #}}} +} 1 diff --git a/IkiWiki/Plugin/mirrorlist.pm b/IkiWiki/Plugin/mirrorlist.pm index aab60c435..b726386f6 100644 --- a/IkiWiki/Plugin/mirrorlist.pm +++ b/IkiWiki/Plugin/mirrorlist.pm @@ -5,12 +5,12 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "mirrorlist", call => \&getsetup); hook(type => "pagetemplate", id => "mirrorlist", call => \&pagetemplate); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -23,9 +23,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $template=$params{template}; @@ -34,9 +34,9 @@ sub pagetemplate (@) { #{{{ $value.=mirrorlist($params{page}); $template->param(extrafooter => $value); } -} # }}} +} -sub mirrorlist ($) { #{{{ +sub mirrorlist ($) { my $page=shift; return "

". (keys %{$config{mirrorlist}} > 1 ? gettext("Mirrors") : gettext("Mirror")). @@ -49,6 +49,6 @@ sub mirrorlist ($) { #{{{ } keys %{$config{mirrorlist}} ). "

"; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/monotone.pm b/IkiWiki/Plugin/monotone.pm index 3a8b267a3..38abb9a07 100644 --- a/IkiWiki/Plugin/monotone.pm +++ b/IkiWiki/Plugin/monotone.pm @@ -10,7 +10,7 @@ use Date::Format qw(time2str); my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate sha1sums -sub import { #{{{ +sub import { hook(type => "checkconfig", id => "monotone", call => \&checkconfig); hook(type => "getsetup", id => "monotone", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@ -23,9 +23,9 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (!defined($config{mtnrootdir})) { $config{mtnrootdir} = $config{srcdir}; } @@ -61,9 +61,9 @@ sub checkconfig () { #{{{ wrappermode => (defined $config{mtn_wrappermode} ? $config{mtn_wrappermode} : "06755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin @@ -117,9 +117,9 @@ sub getsetup () { #{{{ safe => 0, # path rebuild => 0, }, -} #}}} +} -sub get_rev () { #{{{ +sub get_rev () { my $sha1 = `mtn --root=$config{mtnrootdir} automate get_base_revision_id`; ($sha1) = $sha1 =~ m/($sha1_pattern)/; # sha1 is untainted now @@ -128,9 +128,9 @@ sub get_rev () { #{{{ } return $sha1; -} #}}} +} -sub get_rev_auto ($) { #{{{ +sub get_rev_auto ($) { my $automator=shift; my @results = $automator->call("get_base_revision_id"); @@ -142,9 +142,9 @@ sub get_rev_auto ($) { #{{{ } return $sha1; -} #}}} +} -sub mtn_merge ($$$$) { #{{{ +sub mtn_merge ($$$$) { my $leftRev=shift; my $rightRev=shift; my $branch=shift; @@ -172,9 +172,9 @@ sub mtn_merge ($$$$) { #{{{ debug("merged $leftRev, $rightRev to make $mergeRev"); return $mergeRev; -} #}}} +} -sub commit_file_to_new_rev ($$$$$$$$) { #{{{ +sub commit_file_to_new_rev ($$$$$$$$) { my $automator=shift; my $wsfilename=shift; my $oldFileID=shift; @@ -219,9 +219,9 @@ sub commit_file_to_new_rev ($$$$$$$$) { #{{{ debug("Added certs for rev: $newRevID"); return $newRevID; -} #}}} +} -sub read_certs ($$) { #{{{ +sub read_certs ($$) { my $automator=shift; my $rev=shift; my @results = $automator->call("certs", $rev); @@ -239,9 +239,9 @@ sub read_certs ($$) { #{{{ } return @ret; -} #}}} +} -sub get_changed_files ($$) { #{{{ +sub get_changed_files ($$) { my $automator=shift; my $rev=shift; @@ -261,9 +261,9 @@ sub get_changed_files ($$) { #{{{ } return @ret; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { chdir $config{srcdir} or error("Cannot chdir to $config{srcdir}: $!"); @@ -278,9 +278,9 @@ sub rcs_update () { #{{{ if (system("mtn", "--root=$config{mtnrootdir}", "update", "--quiet") != 0) { debug("monotone update failed"); } -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { my $file=shift; chdir $config{srcdir} @@ -289,9 +289,9 @@ sub rcs_prepedit ($) { #{{{ # For monotone, return the revision of the file when # editing begins. return get_rev(); -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { # Tries to commit the page; returns undef on _success_ and # a version of the page with the rcs's conflict markers on failure. # The file is relative to the srcdir. @@ -434,7 +434,7 @@ sub rcs_commit ($$$;$$) { #{{{ } return undef # success -} #}}} +} sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, @@ -466,7 +466,7 @@ sub rcs_commit_staged ($$$) { } } -sub rcs_add ($) { #{{{ +sub rcs_add ($) { my $file=shift; chdir $config{srcdir} @@ -476,9 +476,9 @@ sub rcs_add ($) { #{{{ $file) != 0) { error("Monotone add failed"); } -} #}}} +} -sub rcs_remove ($) { # {{{ +sub rcs_remove ($) { my $file = shift; chdir $config{srcdir} @@ -495,9 +495,9 @@ sub rcs_remove ($) { # {{{ $file) != 0) { error("Monotone remove failed"); } -} #}}} +} -sub rcs_rename ($$) { # {{{ +sub rcs_rename ($$) { my ($src, $dest) = @_; chdir $config{srcdir} @@ -507,9 +507,9 @@ sub rcs_rename ($$) { # {{{ $src, $dest) != 0) { error("Monotone rename failed"); } -} #}}} +} -sub rcs_recentchanges ($) { #{{{ +sub rcs_recentchanges ($) { my $num=shift; my @ret; @@ -614,9 +614,9 @@ sub rcs_recentchanges ($) { #{{{ $automator->close(); return @ret; -} #}}} +} -sub rcs_diff ($) { #{{{ +sub rcs_diff ($) { my $rev=shift; my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint @@ -638,9 +638,9 @@ sub rcs_diff ($) { #{{{ else { return join("", @lines); } -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { my $file=shift; chdir $config{srcdir} @@ -690,6 +690,6 @@ sub rcs_getctime ($) { #{{{ $date=str2time($date, 'UTC'); debug("found ctime ".localtime($date)." for $file"); return $date; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/more.pm b/IkiWiki/Plugin/more.pm index 4484441c3..f1216ad3d 100644 --- a/IkiWiki/Plugin/more.pm +++ b/IkiWiki/Plugin/more.pm @@ -7,20 +7,20 @@ use IkiWiki 2.00; my $linktext = gettext("more"); -sub import { #{{{ +sub import { hook(type => "getsetup", id => "more", call => \&getsetup); hook(type => "preprocess", id => "more", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $params{linktext} = $linktext unless defined $params{linktext}; diff --git a/IkiWiki/Plugin/norcs.pm b/IkiWiki/Plugin/norcs.pm index 58c26b633..bfe84c0e1 100644 --- a/IkiWiki/Plugin/norcs.pm +++ b/IkiWiki/Plugin/norcs.pm @@ -6,7 +6,7 @@ use warnings; use strict; use IkiWiki; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "norcs", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); hook(type => "rcs", id => "rcs_prepedit", call => \&rcs_prepedit); @@ -18,51 +18,51 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin rebuild => 0, }, -} #}}} +} -sub rcs_update () { #{{{ -} #}}} +sub rcs_update () { +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { return "" -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { my ($file, $message, $rcstoken, $user, $ipaddr) = @_; return undef # success -} #}}} +} -sub rcs_commit_staged ($$$) { #{{{ +sub rcs_commit_staged ($$$) { my ($message, $user, $ipaddr)=@_; return undef # success -} #}}} +} -sub rcs_add ($) { #{{{ -} #}}} +sub rcs_add ($) { +} -sub rcs_remove ($) { #{{{ -} #}}} +sub rcs_remove ($) { +} -sub rcs_rename ($$) { #{{{ -} #}}} +sub rcs_rename ($$) { +} -sub rcs_recentchanges ($) { #{{{ -} #}}} +sub rcs_recentchanges ($) { +} -sub rcs_diff ($) { #{{{ -} #}}} +sub rcs_diff ($) { +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { error gettext("getctime not implemented"); -} #}}} +} 1 diff --git a/IkiWiki/Plugin/opendiscussion.pm b/IkiWiki/Plugin/opendiscussion.pm index 96a74aee8..95220d7b3 100644 --- a/IkiWiki/Plugin/opendiscussion.pm +++ b/IkiWiki/Plugin/opendiscussion.pm @@ -5,20 +5,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "opendiscussion", call => \&getsetup); hook(type => "canedit", id => "opendiscussion", call => \&canedit); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub canedit ($$) { #{{{ +sub canedit ($$) { my $page=shift; my $cgi=shift; my $session=shift; @@ -26,6 +26,6 @@ sub canedit ($$) { #{{{ my $discussion=gettext("discussion"); return "" if $page=~/(\/|^)\Q$discussion\E$/; return undef; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm index f12cbdaa3..2933c9ed9 100644 --- a/IkiWiki/Plugin/openid.pm +++ b/IkiWiki/Plugin/openid.pm @@ -6,22 +6,22 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getopt", id => "openid", call => \&getopt); hook(type => "getsetup", id => "openid", call => \&getsetup); hook(type => "auth", id => "openid", call => \&auth); hook(type => "formbuilder_setup", id => "openid", call => \&formbuilder_setup, last => 1); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); GetOptions("openidsignup=s" => \$config{openidsignup}); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -34,9 +34,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; @@ -92,7 +92,7 @@ sub formbuilder_setup (@) { #{{{ } } -sub validate ($$$;$) { #{{{ +sub validate ($$$;$) { my $q=shift; my $session=shift; my $openid_url=shift; @@ -121,9 +121,9 @@ sub validate ($$$;$) { #{{{ # eventually bounce them back to auth() IkiWiki::redirect($q, $check_url); exit 0; -} #}}} +} -sub auth ($$) { #{{{ +sub auth ($$) { my $q=shift; my $session=shift; @@ -147,9 +147,9 @@ sub auth ($$) { #{{{ # myopenid.com affiliate support validate($q, $session, $q->param('openid_identifier')); } -} #}}} +} -sub getobj ($$) { #{{{ +sub getobj ($$) { my $q=shift; my $session=shift; @@ -178,13 +178,13 @@ sub getobj ($$) { #{{{ consumer_secret => sub { return shift()+$secret }, required_root => $config{cgiurl}, ); -} #}}} +} package IkiWiki; # This is not used by this plugin, but this seems the best place to put it. # Used elsewhere to pretty-display the name of an openid user. -sub openiduser ($) { #{{{ +sub openiduser ($) { my $user=shift; if ($user =~ m!^https?://! && diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm index 32cbc5dd5..8e9ab0ff4 100644 --- a/IkiWiki/Plugin/orphans.pm +++ b/IkiWiki/Plugin/orphans.pm @@ -6,20 +6,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "orphans", call => \&getsetup); hook(type => "preprocess", id => "orphans", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $params{pages}="*" unless defined $params{pages}; @@ -58,6 +58,6 @@ sub preprocess (@) { #{{{ "" } sort @orphans). "\n"; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/otl.pm b/IkiWiki/Plugin/otl.pm index ef76d6215..280b19db0 100644 --- a/IkiWiki/Plugin/otl.pm +++ b/IkiWiki/Plugin/otl.pm @@ -7,22 +7,22 @@ use strict; use IkiWiki 2.00; use open qw{:utf8 :std}; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "otl", call => \&getsetup); hook(type => "filter", id => "otl", call => \&filter); hook(type => "htmlize", id => "otl", call => \&htmlize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, -} #}}} +} -sub filter (@) { #{{{ +sub filter (@) { my %params=@_; # Munge up check boxes to look a little bit better. This is a hack. @@ -34,9 +34,9 @@ sub filter (@) { #{{{ $params{content}=~s/^(\s*)\[_\]\s/${1}$unchecked /mg; return $params{content}; -} # }}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; # Can't use open2 since otl2html doesn't play nice with buffering. @@ -95,6 +95,6 @@ sub htmlize (@) { #{{{ $ret=~s/.*//s; $ret=~s/ EODIV -} # }}} +} -sub format(@) { #{{{ +sub format(@) { my %params = @_; # If HTMLScrubber has removed the style attribute, then bring it back @@ -74,6 +74,6 @@ sub format(@) { #{{{ $params{content} =~ s!
($percentage_pattern)
!
$1
!g; return $params{content}; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/rawhtml.pm b/IkiWiki/Plugin/rawhtml.pm index 74ca13f3b..73093439d 100644 --- a/IkiWiki/Plugin/rawhtml.pm +++ b/IkiWiki/Plugin/rawhtml.pm @@ -6,17 +6,17 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "rawhtml", call => \&getsetup); $config{wiki_file_prune_regexps} = [ grep { !m/\\\.x\?html\?\$/ } @{$config{wiki_file_prune_regexps}} ]; -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, # changes file types }, -} #}}} +} 1 diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm index 4d7023c1c..12577e9ef 100644 --- a/IkiWiki/Plugin/recentchanges.pm +++ b/IkiWiki/Plugin/recentchanges.pm @@ -7,16 +7,16 @@ use IkiWiki 2.00; use Encode; use HTML::Entities; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "recentchanges", call => \&getsetup); hook(type => "checkconfig", id => "recentchanges", call => \&checkconfig); hook(type => "refresh", id => "recentchanges", call => \&refresh); hook(type => "pagetemplate", id => "recentchanges", call => \&pagetemplate); hook(type => "htmlize", id => "_change", call => \&htmlize); hook(type => "cgi", id => "recentchanges", call => \&cgi); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -36,14 +36,14 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { $config{recentchangespage}='recentchanges' unless defined $config{recentchangespage}; $config{recentchangesnum}=100 unless defined $config{recentchangesnum}; -} #}}} +} -sub refresh ($) { #{{{ +sub refresh ($) { my %seen; # add new changes @@ -57,10 +57,10 @@ sub refresh ($) { #{{{ unlink($config{srcdir}.'/'.$pagesources{$page}); } } -} #}}} +} # Enable the recentchanges link on wiki pages. -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $template=$params{template}; my $page=$params{page}; @@ -71,15 +71,15 @@ sub pagetemplate (@) { #{{{ $template->param(recentchangesurl => urlto($config{recentchangespage}, $page)); $template->param(have_actions => 1); } -} #}}} +} # Pages with extension _change have plain html markup, pass through. -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; return $params{content}; -} #}}} +} -sub cgi ($) { #{{{ +sub cgi ($) { my $cgi=shift; if (defined $cgi->param('do') && $cgi->param('do') eq "recentchanges_link") { # This is a link from a change page to some @@ -112,7 +112,7 @@ sub cgi ($) { #{{{ } } -sub store ($$$) { #{{{ +sub store ($$$) { my $change=shift; my $page="$config{recentchangespage}/change_".titlepage($change->{rev}); @@ -192,6 +192,6 @@ sub store ($$$) { #{{{ utime $change->{when}, $change->{when}, "$config{srcdir}/$file"; return $page; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/recentchangesdiff.pm b/IkiWiki/Plugin/recentchangesdiff.pm index 08cec3f5a..4dea9c26b 100644 --- a/IkiWiki/Plugin/recentchangesdiff.pm +++ b/IkiWiki/Plugin/recentchangesdiff.pm @@ -8,22 +8,22 @@ use HTML::Entities; my $maxlines=200; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "recentchangesdiff", call => \&getsetup); hook(type => "pagetemplate", id => "recentchangesdiff", call => \&pagetemplate); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $template=$params{template}; if ($config{rcs} && exists $params{rev} && length $params{rev} && @@ -46,6 +46,6 @@ sub pagetemplate (@) { #{{{ $template->param(diff => $diff); } } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/relativedate.pm b/IkiWiki/Plugin/relativedate.pm index dc8f7d538..e5fa8e1a5 100644 --- a/IkiWiki/Plugin/relativedate.pm +++ b/IkiWiki/Plugin/relativedate.pm @@ -8,22 +8,22 @@ use IkiWiki 2.00; use POSIX; use Encode; -sub import { #{{{ +sub import { add_underlay("javascript"); hook(type => "getsetup", id => "relativedate", call => \&getsetup); hook(type => "format", id => "relativedate", call => \&format); inject(name => "IkiWiki::displaytime", call => \&mydisplaytime); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; if (! ($params{content}=~s!^()!$1.include_javascript($params{page})!em)) { @@ -31,9 +31,9 @@ sub format (@) { #{{{ $params{content}=include_javascript($params{page}, 1).$params{content}; } return $params{content}; -} # }}} +} -sub include_javascript ($;$) { #{{{ +sub include_javascript ($;$) { my $page=shift; my $absolute=shift; @@ -41,9 +41,9 @@ sub include_javascript ($;$) { #{{{ '" type="text/javascript" charset="utf-8">'."\n". ''; -} #}}} +} -sub mydisplaytime ($;$) { #{{{ +sub mydisplaytime ($;$) { my $time=shift; my $format=shift; @@ -55,6 +55,6 @@ sub mydisplaytime ($;$) { #{{{ return ''. IkiWiki::formattime($time, $format).''; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm index c512b3b97..781501662 100644 --- a/IkiWiki/Plugin/remove.pm +++ b/IkiWiki/Plugin/remove.pm @@ -5,23 +5,23 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "remove", call => \&getsetup); hook(type => "formbuilder_setup", id => "remove", call => \&formbuilder_setup); hook(type => "formbuilder", id => "remove", call => \&formbuilder); hook(type => "sessioncgi", id => "remove", call => \&sessioncgi); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub check_canremove ($$$) { #{{{ +sub check_canremove ($$$) { my $page=shift; my $q=shift; my $session=shift; @@ -54,9 +54,9 @@ sub check_canremove ($$$) { #{{{ error("renaming of attachments is not allowed"); } } -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; my $q=$params{cgi}; @@ -67,9 +67,9 @@ sub formbuilder_setup (@) { #{{{ push @{$params{buttons}}, "Remove" if $form->field("do") eq "edit"; $form->tmpl_param("field-remove" => ''); } -} #}}} +} -sub confirmation_form ($$) { #{{{ +sub confirmation_form ($$) { my $q=shift; my $session=shift; @@ -90,9 +90,9 @@ sub confirmation_form ($$) { #{{{ $f->field(name => "do", type => "hidden", value => "remove", force => 1); return $f, ["Remove", "Cancel"]; -} #}}} +} -sub removal_confirm ($$@) { #{{{ +sub removal_confirm ($$@) { my $q=shift; my $session=shift; my $attachment=shift; @@ -122,9 +122,9 @@ sub removal_confirm ($$@) { #{{{ IkiWiki::showform($f, $buttons, $session, $q); exit 0; -} #}}} +} -sub postremove ($) { #{{{ +sub postremove ($) { my $session=shift; # Load saved form state and return to edit form. @@ -132,9 +132,9 @@ sub postremove ($) { #{{{ $session->clear("postremove"); IkiWiki::cgi_savesession($session); IkiWiki::cgi($postremove, $session); -} #}}} +} -sub formbuilder (@) { #{{{ +sub formbuilder (@) { my %params=@_; my $form=$params{form}; @@ -154,9 +154,9 @@ sub formbuilder (@) { #{{{ removal_confirm($q, $session, 1, @selected); } } -} #}}} +} -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $q=shift; if ($q->param("do") eq 'remove') { diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index e4201cc94..b1bb15767 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -5,23 +5,23 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "rename", call => \&getsetup); hook(type => "formbuilder_setup", id => "rename", call => \&formbuilder_setup); hook(type => "formbuilder", id => "rename", call => \&formbuilder); hook(type => "sessioncgi", id => "rename", call => \&sessioncgi); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub check_canrename ($$$$$$) { #{{{ +sub check_canrename ($$$$$$) { my $src=shift; my $srcfile=shift; my $dest=shift; @@ -87,9 +87,9 @@ sub check_canrename ($$$$$$) { #{{{ IkiWiki::Plugin::attachment::check_canattach($session, $dest, $srcfile); } } -} #}}} +} -sub rename_form ($$$) { #{{{ +sub rename_form ($$$) { my $q=shift; my $session=shift; my $page=shift; @@ -145,9 +145,9 @@ sub rename_form ($$$) { #{{{ $f->field(name => "attachment", type => "hidden"); return $f, ["Rename", "Cancel"]; -} #}}} +} -sub rename_start ($$$$) { #{{{ +sub rename_start ($$$$) { my $q=shift; my $session=shift; my $attachment=shift; @@ -171,9 +171,9 @@ sub rename_start ($$$$) { #{{{ my ($f, $buttons)=rename_form($q, $session, $page); IkiWiki::showform($f, $buttons, $session, $q); exit 0; -} #}}} +} -sub postrename ($;$$$) { #{{{ +sub postrename ($;$$$) { my $session=shift; my $src=shift; my $dest=shift; @@ -204,9 +204,9 @@ sub postrename ($;$$$) { #{{{ } IkiWiki::cgi_editpage($postrename, $session); -} #}}} +} -sub formbuilder (@) { #{{{ +sub formbuilder (@) { my %params=@_; my $form=$params{form}; @@ -229,11 +229,11 @@ sub formbuilder (@) { #{{{ rename_start($q, $session, 1, $selected[0]); } } -} #}}} +} my $renamesummary; -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; my $q=$params{cgi}; @@ -248,9 +248,9 @@ sub formbuilder_setup (@) { #{{{ $form->tmpl_param(message => $renamesummary); } } -} #}}} +} -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $q=shift; if ($q->param("do") eq 'rename') { @@ -418,9 +418,9 @@ sub sessioncgi ($$) { #{{{ exit 0; } -} #}}} +} -sub renamepage_hook ($$$$) { #{{{ +sub renamepage_hook ($$$$) { my ($page, $src, $dest, $content)=@_; IkiWiki::run_hooks(renamepage => sub { @@ -433,9 +433,9 @@ sub renamepage_hook ($$$$) { #{{{ }); return $content; -}# }}} +} -sub do_rename ($$$) { #{{{ +sub do_rename ($$$) { my $rename=shift; my $q=shift; my $session=shift; @@ -460,9 +460,9 @@ sub do_rename ($$$) { #{{{ } } -} # }}} +} -sub fixlinks ($$$) { #{{{ +sub fixlinks ($$$) { my $rename=shift; my $session=shift; @@ -498,6 +498,6 @@ sub fixlinks ($$$) { #{{{ } return @fixedlinks; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/search.pm b/IkiWiki/Plugin/search.pm index e40f4888c..cc2130ad5 100644 --- a/IkiWiki/Plugin/search.pm +++ b/IkiWiki/Plugin/search.pm @@ -6,16 +6,16 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "search", call => \&getsetup); hook(type => "checkconfig", id => "search", call => \&checkconfig); hook(type => "pagetemplate", id => "search", call => \&pagetemplate); hook(type => "postscan", id => "search", call => \&index); hook(type => "delete", id => "search", call => \&delete); hook(type => "cgi", id => "search", call => \&cgi); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -28,9 +28,9 @@ sub getsetup () { #{{{ safe => 0, # external program rebuild => 0, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { foreach my $required (qw(url cgiurl)) { if (! length $config{$required}) { error(sprintf(gettext("Must specify %s when using the search plugin"), $required)); @@ -40,10 +40,10 @@ sub checkconfig () { #{{{ if (! defined $config{omega_cgi}) { $config{omega_cgi}="/usr/lib/cgi-bin/omega/omega"; } -} #}}} +} my $form; -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $page=$params{page}; my $template=$params{template}; @@ -58,11 +58,11 @@ sub pagetemplate (@) { #{{{ $template->param(searchform => $form); } -} #}}} +} my $scrubber; my $stemmer; -sub index (@) { #{{{ +sub index (@) { my %params=@_; setupfiles(); @@ -146,17 +146,17 @@ sub index (@) { #{{{ $doc->add_term($pageterm); $db->replace_document_by_term($pageterm, $doc); -} #}}} +} -sub delete (@) { #{{{ +sub delete (@) { my $db=xapiandb(); foreach my $page (@_) { my $pageterm=pageterm(pagename($page)); $db->delete_document_by_term($pageterm) if defined $pageterm; } -} #}}} +} -sub cgi ($) { #{{{ +sub cgi ($) { my $cgi=shift; if (defined $cgi->param('P')) { @@ -169,9 +169,9 @@ sub cgi ($) { #{{{ noimageinline => 1, linktext => "Help"); exec($config{omega_cgi}) || error("$config{omega_cgi} failed: $!"); } -} #}}} +} -sub pageterm ($) { #{{{ +sub pageterm ($) { my $page=shift; # 240 is the number used by omindex to decide when to hash an @@ -190,10 +190,10 @@ sub pageterm ($) { #{{{ else { return "U:".$page; } -} #}}} +} my $db; -sub xapiandb () { #{{{ +sub xapiandb () { if (! defined $db) { eval q{ use Search::Xapian; @@ -204,11 +204,11 @@ sub xapiandb () { #{{{ Search::Xapian::DB_CREATE_OR_OPEN()); } return $db; -} #}}} +} { my $setup=0; -sub setupfiles () { #{{{ +sub setupfiles () { if (! $setup and (! -e $config{wikistatedir}."/xapian" || $config{rebuild})) { writefile("omega.conf", $config{wikistatedir}."/xapian", "database_dir .\n". @@ -218,7 +218,7 @@ sub setupfiles () { #{{{ readfile(IkiWiki::template_file("searchquery.tmpl")))); $setup=1; } -} #}}} +} } 1 diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm index dec8afdb5..33d158d3e 100644 --- a/IkiWiki/Plugin/shortcut.pm +++ b/IkiWiki/Plugin/shortcut.pm @@ -5,21 +5,21 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "shortcut", call => \&getsetup); hook(type => "checkconfig", id => "shortcut", call => \&checkconfig); hook(type => "preprocess", id => "shortcut", call => \&preprocess_shortcut); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (defined $config{srcdir}) { # Preprocess the shortcuts page to get all the available shortcuts # defined before other pages are rendered. @@ -29,9 +29,9 @@ sub checkconfig () { #{{{ } IkiWiki::preprocess("shortcuts", "shortcuts", readfile($srcfile)); } -} # }}} +} -sub preprocess_shortcut (@) { #{{{ +sub preprocess_shortcut (@) { my %params=@_; if (! defined $params{name} || ! defined $params{url}) { @@ -46,9 +46,9 @@ sub preprocess_shortcut (@) { #{{{ #translators: First parameter is the name of the shortcut, the second #translators: is an URL. return sprintf(gettext("shortcut %s points to %s"), $params{name}, $params{url}); -} # }}} +} -sub shortcut_expand ($$@) { #{{{ +sub shortcut_expand ($$@) { my $url=shift; my $desc=shift; my %params=@_; @@ -85,6 +85,6 @@ sub shortcut_expand ($$@) { #{{{ } return "$desc"; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/sidebar.pm b/IkiWiki/Plugin/sidebar.pm index 9697e1198..746fa93bb 100644 --- a/IkiWiki/Plugin/sidebar.pm +++ b/IkiWiki/Plugin/sidebar.pm @@ -8,20 +8,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "sidebar", call => \&getsetup); hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, }, -} #}}} +} -sub sidebar_content ($) { #{{{ +sub sidebar_content ($) { my $page=shift; my $sidebar_page=bestlink($page, "sidebar") || return; @@ -42,9 +42,9 @@ sub sidebar_content ($) { #{{{ IkiWiki::filter($sidebar_page, $page, $content)))); } -} # }}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $page=$params{page}; @@ -56,6 +56,6 @@ sub pagetemplate (@) { #{{{ $template->param(sidebar => $content); } } -} # }}} +} 1 diff --git a/IkiWiki/Plugin/signinedit.pm b/IkiWiki/Plugin/signinedit.pm index ef7b9b428..321c93ed5 100644 --- a/IkiWiki/Plugin/signinedit.pm +++ b/IkiWiki/Plugin/signinedit.pm @@ -5,21 +5,21 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "signinedit", call => \&getsetup); hook(type => "canedit", id => "signinedit", call => \&canedit, last => 1); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 0, }, -} #}}} +} -sub canedit ($$$) { #{{{ +sub canedit ($$$) { my $page=shift; my $cgi=shift; my $session=shift; @@ -34,6 +34,6 @@ sub canedit ($$$) { #{{{ else { return ""; } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/skeleton.pm.example b/IkiWiki/Plugin/skeleton.pm.example index f844ddb91..96c4a5d6b 100644 --- a/IkiWiki/Plugin/skeleton.pm.example +++ b/IkiWiki/Plugin/skeleton.pm.example @@ -8,7 +8,7 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getopt", id => "skeleton", call => \&getopt); hook(type => "getsetup", id => "skeleton", call => \&getsetup); hook(type => "checkconfig", id => "skeleton", call => \&checkconfig); @@ -34,13 +34,13 @@ sub import { #{{{ hook(type => "formbuilder_setup", id => "skeleton", call => \&formbuilder_setup); hook(type => "formbuilder", id => "skeleton", call => \&formbuilder); hook(type => "savestate", id => "skeleton", call => \&savestate); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { debug("skeleton plugin getopt"); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -53,155 +53,155 @@ sub getsetup () { #{{{ safe => 0, rebuild => 0, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { debug("skeleton plugin checkconfig"); -} #}}} +} -sub refresh () { #{{{ +sub refresh () { debug("skeleton plugin refresh"); -} #}}} +} -sub needsbuild () { #{{{ +sub needsbuild () { debug("skeleton plugin needsbuild"); -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; return "skeleton plugin result"; -} # }}} +} -sub filter (@) { #{{{ +sub filter (@) { my %params=@_; debug("skeleton plugin running as filter"); return $params{content}; -} # }}} +} -sub linkify (@) { #{{{ +sub linkify (@) { my %params=@_; debug("skeleton plugin running as linkify"); return $params{content}; -} # }}} +} sub scan (@) { #{{{a my %params=@_; debug("skeleton plugin running as scan"); -} # }}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; debug("skeleton plugin running as htmlize"); return $params{content}; -} # }}} +} -sub sanitize (@) { #{{{ +sub sanitize (@) { my %params=@_; debug("skeleton plugin running as a sanitizer"); return $params{content}; -} # }}} +} -sub postscan (@) { #{{{ +sub postscan (@) { my %params=@_; debug("skeleton plugin running as postscan"); -} # }}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; debug("skeleton plugin running as a formatter"); return $params{content}; -} # }}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $page=$params{page}; my $template=$params{template}; debug("skeleton plugin running as a pagetemplate hook"); -} # }}} +} -sub templatefile (@) { #{{{ +sub templatefile (@) { my %params=@_; my $page=$params{page}; debug("skeleton plugin running as a templatefile hook"); -} # }}} +} -sub delete (@) { #{{{ +sub delete (@) { my @files=@_; debug("skeleton plugin told that files were deleted: @files"); -} #}}} +} -sub change (@) { #{{{ +sub change (@) { my @files=@_; debug("skeleton plugin told that changed files were rendered: @files"); -} #}}} +} -sub cgi ($) { #{{{ +sub cgi ($) { my $cgi=shift; debug("skeleton plugin running in cgi"); -} #}}} +} -sub auth ($$) { #{{{ +sub auth ($$) { my $cgi=shift; my $session=shift; debug("skeleton plugin running in auth"); -} #}}} +} -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $cgi=shift; my $session=shift; debug("skeleton plugin running in sessioncgi"); -} #}}} +} -sub canedit ($$$) { #{{{ +sub canedit ($$$) { my $page=shift; my $cgi=shift; my $session=shift; debug("skeleton plugin running in canedit"); -} #}}} +} -sub editcontent ($$$) { #{{{ +sub editcontent ($$$) { my %params=@_; debug("skeleton plugin running in editcontent"); return $params{content}; -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; debug("skeleton plugin running in formbuilder_setup"); -} # }}} +} -sub formbuilder (@) { #{{{ +sub formbuilder (@) { my %params=@_; debug("skeleton plugin running in formbuilder"); -} # }}} +} -sub savestate () { #{{{ +sub savestate () { debug("skeleton plugin running in savestate"); -} #}}} +} 1 diff --git a/IkiWiki/Plugin/smiley.pm b/IkiWiki/Plugin/smiley.pm index 2633b1ea1..70b8cef74 100644 --- a/IkiWiki/Plugin/smiley.pm +++ b/IkiWiki/Plugin/smiley.pm @@ -8,13 +8,13 @@ use IkiWiki 2.00; my %smileys; my $smiley_regexp; -sub import { #{{{ +sub import { add_underlay("smiley"); hook(type => "getsetup", id => "smiley", call => \&getsetup); hook(type => "sanitize", id => "smiley", call => \&sanitize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -22,9 +22,9 @@ sub getsetup () { #{{{ # removes the smileys, which would break links rebuild => 1, }, -} #}}} +} -sub build_regexp () { #{{{ +sub build_regexp () { my $list=readfile(srcfile("smileys.mdwn")); while ($list =~ m/^\s*\*\s+\\\\([^\s]+)\s+\[\[([^]]+)\]\]/mg) { my $smiley=$1; @@ -50,9 +50,9 @@ sub build_regexp () { #{{{ $smiley_regexp='('.join('|', map { quotemeta } reverse sort keys %smileys).')'; #debug($smiley_regexp); -} #}}} +} -sub sanitize (@) { #{{{ +sub sanitize (@) { my %params=@_; build_regexp() unless defined $smiley_regexp; @@ -95,6 +95,6 @@ MATCH: while (m{(?:^|(?<=\s|>))(\\?)$smiley_regexp(?:(?=\s|<)|$)}g) { } return $_; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/sparkline.pm b/IkiWiki/Plugin/sparkline.pm index 901c2f683..dca755c63 100644 --- a/IkiWiki/Plugin/sparkline.pm +++ b/IkiWiki/Plugin/sparkline.pm @@ -14,20 +14,20 @@ my %locmap=( left => 'TEXT_LEFT', ); -sub import { #{{{ +sub import { hook(type => "getsetup", id => "sparkline", call => \&getsetup); hook(type => "preprocess", id => "sparkline", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; my $php; @@ -166,6 +166,6 @@ sub preprocess (@) { #{{{ } return 'graph'; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/svn.pm b/IkiWiki/Plugin/svn.pm index d738720be..fe55e7d08 100644 --- a/IkiWiki/Plugin/svn.pm +++ b/IkiWiki/Plugin/svn.pm @@ -6,7 +6,7 @@ use strict; use IkiWiki; use POSIX qw(setlocale LC_CTYPE); -sub import { #{{{ +sub import { hook(type => "checkconfig", id => "svn", call => \&checkconfig); hook(type => "getsetup", id => "svn", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@ -19,9 +19,9 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (! defined $config{svnpath}) { $config{svnpath}="trunk"; } @@ -37,9 +37,9 @@ sub checkconfig () { #{{{ wrappermode => (defined $config{svn_wrappermode} ? $config{svn_wrappermode} : "04755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin @@ -87,7 +87,7 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} # svn needs LC_CTYPE set to a UTF-8 locale, so try to find one. Any will do. sub find_lc_ctype() { @@ -107,27 +107,27 @@ sub find_lc_ctype() { # fallback to the current locale return $current; -} # }}} +} $ENV{LC_CTYPE} = $ENV{LC_CTYPE} || find_lc_ctype(); -sub svn_info ($$) { #{{{ +sub svn_info ($$) { my $field=shift; my $file=shift; my $info=`LANG=C svn info $file`; my ($ret)=$info=~/^$field: (.*)$/m; return $ret; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { if (-d "$config{srcdir}/.svn") { if (system("svn", "update", "--quiet", $config{srcdir}) != 0) { warn("svn update failed\n"); } } -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { # Prepares to edit a file under revision control. Returns a token # that must be passed into rcs_commit when the file is ready # for committing. @@ -140,9 +140,9 @@ sub rcs_prepedit ($) { #{{{ my $rev=svn_info("Revision", "$config{srcdir}/$file"); return defined $rev ? $rev : ""; } -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { # Tries to commit the page; returns undef on _success_ and # a version of the page with the rcs's conflict markers on failure. # The file is relative to the srcdir. @@ -185,7 +185,7 @@ sub rcs_commit ($$$;$$) { #{{{ } } return undef # success -} #}}} +} sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, @@ -209,7 +209,7 @@ sub rcs_commit_staged ($$$) { return undef # success } -sub rcs_add ($) { #{{{ +sub rcs_add ($) { # filename is relative to the root of the srcdir my $file=shift; @@ -224,9 +224,9 @@ sub rcs_add ($) { #{{{ warn("svn add failed\n"); } } -} #}}} +} -sub rcs_remove ($) { #{{{ +sub rcs_remove ($) { # filename is relative to the root of the srcdir my $file=shift; @@ -235,9 +235,9 @@ sub rcs_remove ($) { #{{{ warn("svn rm failed\n"); } } -} #}}} +} -sub rcs_rename ($$) { #{{{ +sub rcs_rename ($$) { # filenames relative to the root of the srcdir my ($src, $dest)=@_; @@ -258,9 +258,9 @@ sub rcs_rename ($$) { #{{{ warn("svn rename failed\n"); } } -} #}}} +} -sub rcs_recentchanges ($) { #{{{ +sub rcs_recentchanges ($) { my $num=shift; my @ret; @@ -341,14 +341,14 @@ sub rcs_recentchanges ($) { #{{{ } return @ret; -} #}}} +} -sub rcs_diff ($) { #{{{ +sub rcs_diff ($) { my $rev=IkiWiki::possibly_foolish_untaint(int(shift)); return `svnlook diff $config{svnrepo} -r$rev --no-diff-deleted`; -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { my $file=shift; my $svn_log_infoline=qr/^r\d+\s+\|\s+[^\s]+\s+\|\s+(\d+-\d+-\d+\s+\d+:\d+:\d+\s+[-+]?\d+).*/; @@ -376,6 +376,6 @@ sub rcs_getctime ($) { #{{{ $date=str2time($date); debug("found ctime ".localtime($date)." for $file"); return $date; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/table.pm b/IkiWiki/Plugin/table.pm index e782fc238..b6f53f607 100644 --- a/IkiWiki/Plugin/table.pm +++ b/IkiWiki/Plugin/table.pm @@ -6,20 +6,20 @@ use strict; use Encode; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "table", call => \&getsetup); hook(type => "preprocess", id => "table", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params =( format => 'auto', header => 'row', @@ -102,16 +102,16 @@ sub preprocess (@) { #{{{ else { return $html; } -} #}}} +} -sub is_dsv_data ($) { #{{{ +sub is_dsv_data ($) { my $text = shift; my ($line) = split(/\n/, $text); return $line =~ m{.+\|}; } -sub split_csv ($$) { #{{{ +sub split_csv ($$) { my @text_lines = split(/\n/, shift); my $delimiter = shift; @@ -137,9 +137,9 @@ sub split_csv ($$) { #{{{ } return @data; -} #}}} +} -sub split_dsv ($$) { #{{{ +sub split_dsv ($$) { my @text_lines = split(/\n/, shift); my $delimiter = shift; $delimiter="|" unless defined $delimiter; @@ -150,9 +150,9 @@ sub split_dsv ($$) { #{{{ } return @data; -} #}}} +} -sub genrow ($@) { #{{{ +sub genrow ($@) { my %params=%{shift()}; my $elt = shift; my @data = @_; @@ -190,6 +190,6 @@ sub genrow ($@) { #{{{ push @ret, "\t\t"; return @ret; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm index d725ef9b3..ecc77cbb1 100644 --- a/IkiWiki/Plugin/tag.pm +++ b/IkiWiki/Plugin/tag.pm @@ -8,22 +8,22 @@ use IkiWiki 2.00; my %tags; -sub import { #{{{ +sub import { hook(type => "getopt", id => "tag", call => \&getopt); hook(type => "getsetup", id => "tag", call => \&getsetup); hook(type => "preprocess", id => "tag", call => \&preprocess_tag, scan => 1); hook(type => "preprocess", id => "taglink", call => \&preprocess_taglink, scan => 1); hook(type => "pagetemplate", id => "tag", call => \&pagetemplate); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); GetOptions("tagbase=s" => \$config{tagbase}); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -36,9 +36,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub tagpage ($) { #{{{ +sub tagpage ($) { my $tag=shift; if ($tag !~ m{^\.?/} && @@ -48,18 +48,18 @@ sub tagpage ($) { #{{{ } return $tag; -} #}}} +} -sub taglink ($$$;@) { #{{{ +sub taglink ($$$;@) { my $page=shift; my $destpage=shift; my $tag=shift; my %opts=@_; return htmllink($page, $destpage, tagpage($tag), %opts); -} #}}} +} -sub preprocess_tag (@) { #{{{ +sub preprocess_tag (@) { if (! @_) { return ""; } @@ -77,9 +77,9 @@ sub preprocess_tag (@) { #{{{ } return ""; -} # }}} +} -sub preprocess_taglink (@) { #{{{ +sub preprocess_taglink (@) { if (! @_) { return ""; } @@ -102,9 +102,9 @@ sub preprocess_taglink (@) { #{{{ grep { $_ ne 'page' && $_ ne 'destpage' && $_ ne 'preview' } keys %params); -} # }}} +} -sub pagetemplate (@) { #{{{ +sub pagetemplate (@) { my %params=@_; my $page=$params{page}; my $destpage=$params{destpage}; @@ -123,6 +123,6 @@ sub pagetemplate (@) { #{{{ sort keys %{$tags{$page}}]); } } -} # }}} +} 1 diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm index c980df48f..1b7eb91bf 100644 --- a/IkiWiki/Plugin/template.pm +++ b/IkiWiki/Plugin/template.pm @@ -8,20 +8,20 @@ use IkiWiki 2.00; use HTML::Template; use Encode; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "template", call => \&getsetup); hook(type => "preprocess", id => "template", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; if (! exists $params{id}) { @@ -71,6 +71,6 @@ sub preprocess (@) { #{{{ return IkiWiki::preprocess($params{page}, $params{destpage}, IkiWiki::filter($params{page}, $params{destpage}, $template->output)); -} # }}} +} 1 diff --git a/IkiWiki/Plugin/testpagespec.pm b/IkiWiki/Plugin/testpagespec.pm index 9f9b50f01..a6e94dbbb 100644 --- a/IkiWiki/Plugin/testpagespec.pm +++ b/IkiWiki/Plugin/testpagespec.pm @@ -5,20 +5,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "testpagespec", call => \&getsetup); hook(type => "preprocess", id => "testpagespec", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; foreach my $param (qw{match pagespec}) { @@ -37,6 +37,6 @@ sub preprocess (@) { #{{{ else { return "no match: $ret"; } -} # }}} +} 1 diff --git a/IkiWiki/Plugin/teximg.pm b/IkiWiki/Plugin/teximg.pm index 661d97b1f..57b23147e 100644 --- a/IkiWiki/Plugin/teximg.pm +++ b/IkiWiki/Plugin/teximg.pm @@ -21,12 +21,12 @@ EOPREFIX my $default_postfix = '\\end{document}'; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "teximg", call => \&getsetup); hook(type => "preprocess", id => "teximg", call => \&preprocess); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -52,9 +52,9 @@ sub getsetup () { #{{{ safe => 0, # Not sure how secure LaTeX is... rebuild => 1, }, -} #}}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params = @_; my $height = $params{height}; @@ -76,9 +76,9 @@ sub preprocess (@) { #{{{ else { error gettext("code includes disallowed latex commands") } -} #}}} +} -sub check_height ($) { #{{{ +sub check_height ($) { # Since latex doesn't support unlimited scaling this function # returns the closest supported size. my $height =shift; @@ -95,9 +95,9 @@ sub check_height ($) { #{{{ } } return $ret; -} #}}} +} -sub create ($$$) { #{{{ +sub create ($$$) { # This function calls the image generating function and returns # the for the generated image. my $code = shift; @@ -127,9 +127,9 @@ sub create ($$$) { #{{{ else { error qq{}.gettext("failed to generate image from code").""; } -} #}}} +} -sub gen_image ($$$$) { #{{{ +sub gen_image ($$$$) { # Actually creates the image. my $code = shift; my $height = shift; @@ -180,18 +180,18 @@ sub gen_image ($$$$) { #{{{ return 0; } -} #}}} +} -sub create_tmp_dir ($) { #{{{ +sub create_tmp_dir ($) { # Create a temp directory, it will be removed when ikiwiki exits. my $base = shift; my $template = $base.".XXXXXXXXXX"; my $tmpdir = tempdir($template, TMPDIR => 1, CLEANUP => 1); return $tmpdir; -} #}}} +} -sub check ($) { #{{{ +sub check ($) { # Check if the code is ok my $code = shift; @@ -219,6 +219,6 @@ sub check ($) { #{{{ } } return 1; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/textile.pm b/IkiWiki/Plugin/textile.pm index bbd282f0c..d1b927b74 100644 --- a/IkiWiki/Plugin/textile.pm +++ b/IkiWiki/Plugin/textile.pm @@ -9,26 +9,26 @@ use strict; use IkiWiki 2.00; use Encode; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "textile", call => \&getsetup); hook(type => "htmlize", id => "txtl", call => \&htmlize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, -} #}}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; my $content = decode_utf8(encode_utf8($params{content})); eval q{use Text::Textile}; return $content if $@; return Text::Textile::textile($content); -} # }}} +} 1 diff --git a/IkiWiki/Plugin/tla.pm b/IkiWiki/Plugin/tla.pm index 0a5c161b2..f4b20a6ec 100644 --- a/IkiWiki/Plugin/tla.pm +++ b/IkiWiki/Plugin/tla.pm @@ -5,7 +5,7 @@ use warnings; use strict; use IkiWiki; -sub import { #{{{ +sub import { hook(type => "checkconfig", id => "tla", call => \&checkconfig); hook(type => "getsetup", id => "tla", call => \&getsetup); hook(type => "rcs", id => "rcs_update", call => \&rcs_update); @@ -18,18 +18,18 @@ sub import { #{{{ hook(type => "rcs", id => "rcs_recentchanges", call => \&rcs_recentchanges); hook(type => "rcs", id => "rcs_diff", call => \&rcs_diff); hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime); -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (defined $config{tla_wrapper} && length $config{tla_wrapper}) { push @{$config{wrappers}}, { wrapper => $config{tla_wrapper}, wrappermode => (defined $config{tla_wrappermode} ? $config{tla_wrappermode} : "06755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # rcs plugin @@ -63,9 +63,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub quiet_system (@) { #{{{ +sub quiet_system (@) { # See Debian bug #385939. open (SAVEOUT, ">&STDOUT"); close STDOUT; @@ -75,17 +75,17 @@ sub quiet_system (@) { #{{{ open (STDOUT, ">&SAVEOUT"); close SAVEOUT; return $ret; -} #}}} +} -sub rcs_update () { #{{{ +sub rcs_update () { if (-d "$config{srcdir}/{arch}") { if (quiet_system("tla", "replay", "-d", $config{srcdir}) != 0) { warn("tla replay failed\n"); } } -} #}}} +} -sub rcs_prepedit ($) { #{{{ +sub rcs_prepedit ($) { my $file=shift; if (-d "$config{srcdir}/{arch}") { @@ -94,9 +94,9 @@ sub rcs_prepedit ($) { #{{{ my $rev=`tla tree-id $config{srcdir}`; return defined $rev ? $rev : ""; } -} #}}} +} -sub rcs_commit ($$$;$$) { #{{{ +sub rcs_commit ($$$;$$) { my $file=shift; my $message=shift; my $rcstoken=shift; @@ -135,7 +135,7 @@ sub rcs_commit ($$$;$$) { #{{{ } } return undef # success -} #}}} +} sub rcs_commit_staged ($$$) { # Commits all staged changes. Changes can be staged using rcs_add, @@ -145,7 +145,7 @@ sub rcs_commit_staged ($$$) { error("rcs_commit_staged not implemented for tla"); # TODO } -sub rcs_add ($) { #{{{ +sub rcs_add ($) { my $file=shift; if (-d "$config{srcdir}/{arch}") { @@ -153,19 +153,19 @@ sub rcs_add ($) { #{{{ warn("tla add failed\n"); } } -} #}}} +} -sub rcs_remove ($) { # {{{ +sub rcs_remove ($) { my $file = shift; error("rcs_remove not implemented for tla"); # TODO -} #}}} +} sub rcs_rename ($$) { # {{{a my ($src, $dest) = @_; error("rcs_rename not implemented for tla"); # TODO -} #}}} +} sub rcs_recentchanges ($) { my $num=shift; @@ -239,7 +239,7 @@ sub rcs_recentchanges ($) { return @ret; } -sub rcs_diff ($) { #{{{ +sub rcs_diff ($) { my $rev=shift; my $logs = `tla logs -d $config{srcdir}`; my @changesets = reverse split(/\n/, $logs); @@ -251,9 +251,9 @@ sub rcs_diff ($) { #{{{ my $revminusone = $changesets[$i+1]; return `tla diff -d $config{srcdir} $revminusone`; -} #}}} +} -sub rcs_getctime ($) { #{{{ +sub rcs_getctime ($) { my $file=shift; eval q{use Date::Parse}; error($@) if $@; @@ -281,6 +281,6 @@ sub rcs_getctime ($) { #{{{ my $date=str2time($sdate, 'UTC'); debug("found ctime ".localtime($date)." for $file"); return $date; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/toc.pm b/IkiWiki/Plugin/toc.pm index dff9d9aa5..460837b1d 100644 --- a/IkiWiki/Plugin/toc.pm +++ b/IkiWiki/Plugin/toc.pm @@ -7,23 +7,23 @@ use strict; use IkiWiki 2.00; use HTML::Parser; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "toc", call => \&getsetup); hook(type => "preprocess", id => "toc", call => \&preprocess); hook(type => "format", id => "toc", call => \&format); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} my %tocpages; -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; if ($params{page} eq $params{destpage}) { @@ -40,9 +40,9 @@ sub preprocess (@) { #{{{ # right. return ""; } -} # }}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; my $content=$params{content}; diff --git a/IkiWiki/Plugin/toggle.pm b/IkiWiki/Plugin/toggle.pm index 657d8d3c2..967b07fcc 100644 --- a/IkiWiki/Plugin/toggle.pm +++ b/IkiWiki/Plugin/toggle.pm @@ -5,7 +5,7 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { add_underlay("javascript"); hook(type => "getsetup", id => "toggle", call => \&getsetup); hook(type => "preprocess", id => "toggle", @@ -13,17 +13,17 @@ sub import { #{{{ hook(type => "preprocess", id => "toggleable", call => \&preprocess_toggleable); hook(type => "format", id => "toggle", call => \&format); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub genid ($$) { #{{{ +sub genid ($$) { my $page=shift; my $id=shift; @@ -35,16 +35,16 @@ sub genid ($$) { #{{{ $id="id$id"; } return $id; -} #}}} +} -sub preprocess_toggle (@) { #{{{ +sub preprocess_toggle (@) { my %params=(id => "default", text => "more", @_); my $id=genid($params{page}, $params{id}); return "$params{text}"; -} # }}} +} -sub preprocess_toggleable (@) { #{{{ +sub preprocess_toggleable (@) { my %params=(id => "default", text => "", open => "no", @_); # Preprocess the text to expand any preprocessor directives @@ -61,9 +61,9 @@ sub preprocess_toggleable (@) { #{{{ my ($indent)=$params{text}=~/( +)$/; $indent="" unless defined $indent; return "
\n\n$params{text}\n$indent
"; -} # }}} +} -sub format (@) { #{{{ +sub format (@) { my %params=@_; if ($params{content}=~s!(
\s*)
!$1!g) { @@ -74,9 +74,9 @@ sub format (@) { #{{{ } } return $params{content}; -} # }}} +} -sub include_javascript ($;$) { #{{{ +sub include_javascript ($;$) { my $page=shift; my $absolute=shift; @@ -84,6 +84,6 @@ sub include_javascript ($;$) { #{{{ '" type="text/javascript" charset="utf-8">'."\n". ''; -} #}}} +} 1 diff --git a/IkiWiki/Plugin/txt.pm b/IkiWiki/Plugin/txt.pm index e157bf07e..d65bb2036 100644 --- a/IkiWiki/Plugin/txt.pm +++ b/IkiWiki/Plugin/txt.pm @@ -24,13 +24,13 @@ sub import { } } -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, -} #}}} +} # We use filter to convert raw text to HTML # (htmlize is called after other plugins insert HTML) diff --git a/IkiWiki/Plugin/typography.pm b/IkiWiki/Plugin/typography.pm index 27089b390..e395b2143 100644 --- a/IkiWiki/Plugin/typography.pm +++ b/IkiWiki/Plugin/typography.pm @@ -6,20 +6,20 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getopt", id => "typography", call => \&getopt); hook(type => "getsetup", id => "typography", call => \&getsetup); IkiWiki::hook(type => "sanitize", id => "typography", call => \&sanitize); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); GetOptions("typographyattributes=s" => \$config{typographyattributes}); -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { eval q{use Text::Typography}; error($@) if $@; @@ -36,9 +36,9 @@ sub getsetup () { #{{{ safe => 1, rebuild => 1, }, -} #}}} +} -sub sanitize (@) { #{{{ +sub sanitize (@) { my %params=@_; eval q{use Text::Typography}; @@ -46,6 +46,6 @@ sub sanitize (@) { #{{{ my $attributes=defined $config{typographyattributes} ? $config{typographyattributes} : '3'; return Text::Typography::typography($params{content}, $attributes); -} # }}} +} 1 diff --git a/IkiWiki/Plugin/version.pm b/IkiWiki/Plugin/version.pm index 18e9613ae..3526dafde 100644 --- a/IkiWiki/Plugin/version.pm +++ b/IkiWiki/Plugin/version.pm @@ -6,21 +6,21 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "version", call => \&getsetup); hook(type => "needsbuild", id => "version", call => \&needsbuild); hook(type => "preprocess", id => "version", call => \&preprocess); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, rebuild => undef, }, -} #}}} +} -sub needsbuild (@) { #{{{ +sub needsbuild (@) { my $needsbuild=shift; foreach my $page (keys %pagestate) { if (exists $pagestate{$page}{version}{shown}) { @@ -36,11 +36,11 @@ sub needsbuild (@) { #{{{ } } } -} # }}} +} -sub preprocess (@) { #{{{ +sub preprocess (@) { my %params=@_; $pagestate{$params{destpage}}{version}{shown}=$IkiWiki::version; -} # }}} +} 1 diff --git a/IkiWiki/Plugin/websetup.pm b/IkiWiki/Plugin/websetup.pm index 827ee3099..66dacfde3 100644 --- a/IkiWiki/Plugin/websetup.pm +++ b/IkiWiki/Plugin/websetup.pm @@ -5,15 +5,15 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "websetup", call => \&getsetup); hook(type => "checkconfig", id => "websetup", call => \&checkconfig); hook(type => "sessioncgi", id => "websetup", call => \&sessioncgi); hook(type => "formbuilder_setup", id => "websetup", call => \&formbuilder_setup); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 1, @@ -33,15 +33,15 @@ sub getsetup () { #{{{ safe => 0, rebuild => 0, }, -} #}}} +} -sub checkconfig () { #{{{ +sub checkconfig () { if (! exists $config{websetup_show_unsafe}) { $config{websetup_show_unsafe}=1; } -} #}}} +} -sub formatexample ($$) { #{{{ +sub formatexample ($$) { my $example=shift; my $value=shift; @@ -54,9 +54,9 @@ sub formatexample ($$) { #{{{ else { return ""; } -} #}}} +} -sub showfields ($$$@) { #{{{ +sub showfields ($$$@) { my $form=shift; my $plugin=shift; my $enabled=shift; @@ -207,16 +207,16 @@ sub showfields ($$$@) { #{{{ } return %enabledfields; -} #}}} +} -sub enable_plugin ($) { #{{{ +sub enable_plugin ($) { my $plugin=shift; $config{disable_plugins}=[grep { $_ ne $plugin } @{$config{disable_plugins}}]; push @{$config{add_plugins}}, $plugin; } -sub disable_plugin ($) { #{{{ +sub disable_plugin ($) { my $plugin=shift; if (grep { $_ eq $plugin } @{$config{add_plugins}}) { @@ -227,7 +227,7 @@ sub disable_plugin ($) { #{{{ } } -sub showform ($$) { #{{{ +sub showform ($$) { my $cgi=shift; my $session=shift; @@ -441,9 +441,9 @@ sub showform ($$) { #{{{ } IkiWiki::showform($form, $buttons, $session, $cgi); -} #}}} +} -sub sessioncgi ($$) { #{{{ +sub sessioncgi ($$) { my $cgi=shift; my $session=shift; @@ -451,9 +451,9 @@ sub sessioncgi ($$) { #{{{ showform($cgi, $session); exit; } -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; @@ -464,6 +464,6 @@ sub formbuilder_setup (@) { #{{{ exit; } } -} #}}} +} 1 diff --git a/IkiWiki/Plugin/wikitext.pm b/IkiWiki/Plugin/wikitext.pm index c47ccb7b1..50571e524 100644 --- a/IkiWiki/Plugin/wikitext.pm +++ b/IkiWiki/Plugin/wikitext.pm @@ -6,27 +6,27 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "getsetup", id => "wiki", call => \&getsetup); hook(type => "htmlize", id => "wiki", call => \&htmlize); -} # }}} +} -sub getsetup () { #{{{ +sub getsetup () { return plugin => { safe => 0, # format plugin rebuild => undef, }, -} #}}} +} -sub htmlize (@) { #{{{ +sub htmlize (@) { my %params=@_; my $content = $params{content}; eval q{use Text::WikiFormat}; return $content if $@; return Text::WikiFormat::format($content, undef, { implicit_links => 0 }); -} # }}} +} 1 diff --git a/IkiWiki/Receive.pm b/IkiWiki/Receive.pm index 72668d26a..37b6f2a62 100644 --- a/IkiWiki/Receive.pm +++ b/IkiWiki/Receive.pm @@ -6,21 +6,21 @@ use warnings; use strict; use IkiWiki; -sub getuser () { #{{{ +sub getuser () { my $user=(getpwuid(exists $ENV{CALLER_UID} ? $ENV{CALLER_UID} : $<))[0]; if (! defined $user) { error("cannot determine username for $<"); } return $user; -} #}}} +} -sub trusted () { #{{{ +sub trusted () { my $user=getuser(); return ! ref $config{untrusted_committers} || ! grep { $_ eq $user } @{$config{untrusted_committers}}; -} #}}} +} -sub gen_wrapper () { #{{{ +sub gen_wrapper () { # Test for commits from untrusted committers in the wrapper, to # avoid loading ikiwiki at all for trusted commits. @@ -43,9 +43,9 @@ EOF } EOF return $ret; -} #}}} +} -sub test () { #{{{ +sub test () { exit 0 if trusted(); IkiWiki::lockwiki(); @@ -130,6 +130,6 @@ sub test () { #{{{ } exit 0; -} #}}} +} 1 diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 389063d46..adae9f0d5 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -10,7 +10,7 @@ use Encode; my %backlinks; my $backlinks_calculated=0; -sub calculate_backlinks () { #{{{ +sub calculate_backlinks () { return if $backlinks_calculated; %backlinks=(); foreach my $page (keys %links) { @@ -22,9 +22,9 @@ sub calculate_backlinks () { #{{{ } } $backlinks_calculated=1; -} #}}} +} -sub backlinks ($) { #{{{ +sub backlinks ($) { my $page=shift; calculate_backlinks(); @@ -45,9 +45,9 @@ sub backlinks ($) { #{{{ push @links, { url => $href, page => pagetitle($p_trimmed) }; } return @links; -} #}}} +} -sub genpage ($$) { #{{{ +sub genpage ($$) { my $page=shift; my $content=shift; @@ -131,9 +131,9 @@ sub genpage ($$) { #{{{ }); return $content; -} #}}} +} -sub scan ($) { #{{{ +sub scan ($) { my $file=shift; my $type=pagetype($file); @@ -165,9 +165,9 @@ sub scan ($) { #{{{ else { will_render($file, $file, 1); } -} #}}} +} -sub fast_file_copy (@) { #{{{ +sub fast_file_copy (@) { my $srcfile=shift; my $destfile=shift; my $srcfd=shift; @@ -191,7 +191,7 @@ sub fast_file_copy (@) { #{{{ } } -sub render ($) { #{{{ +sub render ($) { my $file=shift; my $type=pagetype($file); @@ -233,9 +233,9 @@ sub render ($) { #{{{ fast_file_copy($srcfile, $file, $srcfd, @_); }); } -} #}}} +} -sub prune ($) { #{{{ +sub prune ($) { my $file=shift; unlink($file); @@ -243,9 +243,9 @@ sub prune ($) { #{{{ while (rmdir($dir)) { $dir=dirname($dir); } -} #}}} +} -sub refresh () { #{{{ +sub refresh () { # security check, avoid following symlinks in the srcdir path by default my $test=$config{srcdir}; while (length $test) { @@ -507,9 +507,9 @@ sub refresh () { #{{{ if (%rendered) { run_hooks(change => sub { shift->(keys %rendered) }); } -} #}}} +} -sub commandline_render () { #{{{ +sub commandline_render () { lockwiki(); loadindex(); unlockwiki(); @@ -532,6 +532,6 @@ sub commandline_render () { #{{{ print genpage($page, $content); exit 0; -} #}}} +} 1 diff --git a/IkiWiki/Setup.pm b/IkiWiki/Setup.pm index 77afdd608..6ee112096 100644 --- a/IkiWiki/Setup.pm +++ b/IkiWiki/Setup.pm @@ -10,7 +10,7 @@ use IkiWiki; use open qw{:utf8 :std}; use File::Spec; -sub load ($) { # {{{ +sub load ($) { my $setup=IkiWiki::possibly_foolish_untaint(shift); $config{setupfile}=File::Spec->rel2abs($setup); @@ -27,7 +27,7 @@ sub load ($) { # {{{ eval $code; error("$setup: ".$@) if $@; -} #}}} +} sub merge ($) { # Merge setup into existing config and untaint. @@ -71,9 +71,9 @@ sub merge ($) { wrappermode => (defined $config{cgi_wrappermode} ? $config{cgi_wrappermode} : "06755"), }; } -} #}}} +} -sub getsetup () { #{{{ +sub getsetup () { # Gets all available setup data from all plugins. Returns an # ordered list of [plugin, setup] pairs. my @ret; @@ -105,9 +105,9 @@ sub getsetup () { #{{{ $config{syslog}=$syslog; return @ret; -} #}}} +} -sub dump ($) { #{{{ +sub dump ($) { my $file=IkiWiki::possibly_foolish_untaint(shift); require IkiWiki::Setup::Standard; diff --git a/IkiWiki/Setup/Automator.pm b/IkiWiki/Setup/Automator.pm index 88e9f3d24..9f2380d52 100644 --- a/IkiWiki/Setup/Automator.pm +++ b/IkiWiki/Setup/Automator.pm @@ -10,20 +10,20 @@ use IkiWiki::UserInfo; use Term::ReadLine; use File::Path; -sub ask ($$) { #{{{ +sub ask ($$) { my ($question, $default)=@_; my $r=Term::ReadLine->new("ikiwiki"); $r->readline($question." ", $default); -} #}}} +} -sub prettydir ($) { #{{{ +sub prettydir ($) { my $dir=shift; $dir=~s/^\Q$ENV{HOME}\E\//~\//; return $dir; -} #}}} +} -sub import (@) { #{{{ +sub import (@) { my $this=shift; IkiWiki::Setup::merge({@_}); @@ -142,6 +142,6 @@ sub import (@) { #{{{ print "To modify settings, edit ".prettydir($config{dumpsetup})." and then run:\n"; print " ikiwiki -setup ".prettydir($config{dumpsetup})."\n"; exit 0; -} #}}} +} 1 diff --git a/IkiWiki/Setup/Standard.pm b/IkiWiki/Setup/Standard.pm index e6bff2826..951bcfc56 100644 --- a/IkiWiki/Setup/Standard.pm +++ b/IkiWiki/Setup/Standard.pm @@ -9,11 +9,11 @@ use warnings; use strict; use IkiWiki; -sub import { #{{{ +sub import { IkiWiki::Setup::merge($_[1]); -} #}}} +} -sub dumpline ($$$$) { #{{{ +sub dumpline ($$$$) { my $key=shift; my $value=shift; my $type=shift; @@ -55,9 +55,9 @@ sub dumpline ($$$$) { #{{{ } return "\t$prefix$key => $dumpedvalue,"; -} #}}} +} -sub dumpvalues ($@) { #{{{ +sub dumpvalues ($@) { my $setup=shift; my @ret; while (@_) { @@ -80,9 +80,9 @@ sub dumpvalues ($@) { #{{{ } } return @ret; -} #}}} +} -sub gendump ($) { #{{{ +sub gendump ($) { my $description=shift; my %setup=(%config); my @ret; @@ -112,6 +112,6 @@ sub gendump ($) { #{{{ push @ret, "}"; return @ret; -} #}}} +} 1 diff --git a/IkiWiki/UserInfo.pm b/IkiWiki/UserInfo.pm index dcf99da09..3423dc923 100644 --- a/IkiWiki/UserInfo.pm +++ b/IkiWiki/UserInfo.pm @@ -7,12 +7,12 @@ use strict; use Storable; use IkiWiki; -sub userinfo_retrieve () { #{{{ +sub userinfo_retrieve () { my $userinfo=eval{ Storable::lock_retrieve("$config{wikistatedir}/userdb") }; return $userinfo; -} #}}} +} -sub userinfo_store ($) { #{{{ +sub userinfo_store ($) { my $userinfo=shift; my $newfile="$config{wikistatedir}/userdb.new"; @@ -26,9 +26,9 @@ sub userinfo_store ($) { #{{{ } } return $ret; -} #}}} +} -sub userinfo_get ($$) { #{{{ +sub userinfo_get ($$) { my $user=shift; my $field=shift; @@ -39,9 +39,9 @@ sub userinfo_get ($$) { #{{{ return ""; } return $userinfo->{$user}->{$field}; -} #}}} +} -sub userinfo_set ($$$) { #{{{ +sub userinfo_set ($$$) { my $user=shift; my $field=shift; my $value=shift; @@ -54,9 +54,9 @@ sub userinfo_set ($$$) { #{{{ $userinfo->{$user}->{$field}=$value; return userinfo_store($userinfo); -} #}}} +} -sub userinfo_setall ($$) { #{{{ +sub userinfo_setall ($$) { my $user=shift; my $info=shift; @@ -66,32 +66,32 @@ sub userinfo_setall ($$) { #{{{ } $userinfo->{$user}=$info; return userinfo_store($userinfo); -} #}}} +} -sub is_admin ($) { #{{{ +sub is_admin ($) { my $user_name=shift; return grep { $_ eq $user_name } @{$config{adminuser}}; -} #}}} +} # XXX deprecated, should be removed eventually -sub get_banned_users () { #{{{ +sub get_banned_users () { my @ret; my $userinfo=userinfo_retrieve(); foreach my $user (keys %{$userinfo}) { push @ret, $user if $userinfo->{$user}->{banned}; } return @ret; -} #}}} +} # XXX deprecated, should be removed eventually -sub set_banned_users (@) { #{{{ +sub set_banned_users (@) { my %banned=map { $_ => 1 } @_; my $userinfo=userinfo_retrieve(); foreach my $user (keys %{$userinfo}) { $userinfo->{$user}->{banned} = $banned{$user}; } return userinfo_store($userinfo); -} #}}} +} 1 diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 31e30ad2e..dd9971a34 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -8,7 +8,7 @@ use File::Spec; use Data::Dumper; use IkiWiki; -sub gen_wrapper () { #{{{ +sub gen_wrapper () { $config{srcdir}=File::Spec->rel2abs($config{srcdir}); $config{destdir}=File::Spec->rel2abs($config{destdir}); my $this=File::Spec->rel2abs($0); @@ -173,6 +173,6 @@ EOF #translators: The parameter is a filename. printf(gettext("successfully generated %s"), $wrapper); print "\n"; -} #}}} +} 1 diff --git a/debian/changelog b/debian/changelog index b884dd596..f7085169c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,6 +19,7 @@ ikiwiki (2.71) UNRELEASED; urgency=low * rename: Fix double-escaping of page name in edit box. * monotone: When getting the log, tell monotone how many entries we want, rather than closing the pipe, which it dislikes. (thm) + * Coding style change: Remove explcit vim folding markers. -- Joey Hess Mon, 17 Nov 2008 14:02:10 -0500 diff --git a/doc/bugs/Allow_overriding_of_symlink_restriction.mdwn b/doc/bugs/Allow_overriding_of_symlink_restriction.mdwn index 07badd646..efdd9004e 100644 --- a/doc/bugs/Allow_overriding_of_symlink_restriction.mdwn +++ b/doc/bugs/Allow_overriding_of_symlink_restriction.mdwn @@ -34,9 +34,9 @@ Is there a huge objection to this patch? index 990fcaa..0fb78ba 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm - @@ -260,13 +260,15 @@ sub prune ($) { #{{{ + @@ -260,13 +260,15 @@ sub prune ($) { - sub refresh () { #{{{ + sub refresh () { # security check, avoid following symlinks in the srcdir path - my $test=$config{srcdir}; - while (length $test) { @@ -108,7 +108,7 @@ like this being accepted before I bothered. use IkiWiki; +use File::Spec; - sub gen_wrapper () { #{{{ + sub gen_wrapper () { - $config{srcdir}=abs_path($config{srcdir}); - $config{destdir}=abs_path($config{destdir}); - my $this=abs_path($0); diff --git a/doc/bugs/Can__39__t_create_root_page.mdwn b/doc/bugs/Can__39__t_create_root_page.mdwn index 60cbcd530..91c2eae60 100644 --- a/doc/bugs/Can__39__t_create_root_page.mdwn +++ b/doc/bugs/Can__39__t_create_root_page.mdwn @@ -33,7 +33,7 @@ This type of page name (with leading slash) also gets created by the aggregate p index 99cead6..23d9616 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm - @@ -305,9 +305,11 @@ sub cgi_editpage ($$) { #{{{ + @@ -305,9 +305,11 @@ sub cgi_editpage ($$) { my $page=$form->field('page'); $page=possibly_foolish_untaint($page); if (! defined $page || ! length $page || @@ -46,7 +46,7 @@ This type of page name (with leading slash) also gets created by the aggregate p my $baseurl=$config{url}."/".htmlpage($page); - @@ -425,6 +427,7 @@ sub cgi_editpage ($$) { #{{{ + @@ -425,6 +427,7 @@ sub cgi_editpage ($$) { $from ne $form->field('from') || file_pruned($from, $config{srcdir}) || $from=~/^\// || diff --git a/doc/bugs/Insecure_dependency_in_eval_while_running_with_-T_switch.mdwn b/doc/bugs/Insecure_dependency_in_eval_while_running_with_-T_switch.mdwn index 28b48e2c6..c3beb8219 100644 --- a/doc/bugs/Insecure_dependency_in_eval_while_running_with_-T_switch.mdwn +++ b/doc/bugs/Insecure_dependency_in_eval_while_running_with_-T_switch.mdwn @@ -53,7 +53,7 @@ I didn't apply your following old patch against `Ikiwiki.pm` file: + } + + return eval $newpagespec; - } #}}} + } package IkiWiki::PageSpec; @@ -83,7 +83,7 @@ to break the code I distribute in my backport ;) + my $ret=eval possibly_foolish_untaint(pagespec_translate($spec)); return IkiWiki::FailReason->new("syntax error") if $@; return $ret; - } #}}} + } >> Thanks a lot, Joey! It works :) >> diff --git a/doc/bugs/Monotone_rcs_support.mdwn b/doc/bugs/Monotone_rcs_support.mdwn index 3d1388312..8687e7983 100644 --- a/doc/bugs/Monotone_rcs_support.mdwn +++ b/doc/bugs/Monotone_rcs_support.mdwn @@ -11,7 +11,7 @@ diff --git a/IkiWiki/Rcs/monotone.pm b/IkiWiki/Rcs/monotone.pm index cde6029..34f8f96 100644 --- a/IkiWiki/Rcs/monotone.pm +++ b/IkiWiki/Rcs/monotone.pm -@@ -186,8 +186,9 @@ sub rcs_update () { #{{{ +@@ -186,8 +186,9 @@ sub rcs_update () { check_config(); if (defined($config{mtnsync}) && $config{mtnsync}) { diff --git a/doc/bugs/No_link_for_blog_items_when_filename_contains_a_colon.mdwn b/doc/bugs/No_link_for_blog_items_when_filename_contains_a_colon.mdwn index 019970899..bb3f92f9c 100644 --- a/doc/bugs/No_link_for_blog_items_when_filename_contains_a_colon.mdwn +++ b/doc/bugs/No_link_for_blog_items_when_filename_contains_a_colon.mdwn @@ -38,19 +38,19 @@ At the moment I see two possible solutions: +++ IkiWiki.pm 2008-07-21 20:41:35.000000000 +0200 @@ -477,13 +477,13 @@ - sub titlepage ($) { #{{{ + sub titlepage ($) { my $title=shift; - $title=~s/([^-[:alnum:]:+\/.])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; + $title=~s/([^-[:alnum:]+\/.])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; return $title; - } #}}} + } - sub linkpage ($) { #{{{ + sub linkpage ($) { my $link=shift; - $link=~s/([^-[:alnum:]:+\/._])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; + $link=~s/([^-[:alnum:]+\/._])/$1 eq ' ' ? '_' : "__".ord($1)."__"/eg; return $link; - } #}}} + } What do you think about that? Does the patch have any side-effects I didn't see? diff --git a/doc/bugs/Problem_with_toc.pm_plug-in.mdwn b/doc/bugs/Problem_with_toc.pm_plug-in.mdwn index 8ae347d42..6be5f89b5 100644 --- a/doc/bugs/Problem_with_toc.pm_plug-in.mdwn +++ b/doc/bugs/Problem_with_toc.pm_plug-in.mdwn @@ -9,7 +9,7 @@ Here is a patch for toc.pm for producing non-empty 'a' elements. --- IkiWiki/Plugin/toc.pm.orig Thu Jun 7 11:53:53 2007 +++ IkiWiki/Plugin/toc.pm Thu Jun 7 13:00:00 2007 - @@ -47,7 +47,7 @@ sub format (@) { #{{{ + @@ -47,7 +47,7 @@ sub format (@) { if ($tagname =~ /^h(\d+)$/i) { my $level=$1; my $anchor="index".++$anchors{$level}."h$level"; @@ -18,7 +18,7 @@ Here is a patch for toc.pm for producing non-empty 'a' elements. # Take the first header level seen as the topmost level, # even if there are higher levels seen later on. - @@ -90,6 +90,16 @@ sub format (@) { #{{{ + @@ -90,6 +90,16 @@ sub format (@) { "\n"; $p->handler(text => undef); }, "dtext"); diff --git a/doc/bugs/Problems_with_graphviz.pm_plug-in.mdwn b/doc/bugs/Problems_with_graphviz.pm_plug-in.mdwn index 9a26e505a..c9f698158 100644 --- a/doc/bugs/Problems_with_graphviz.pm_plug-in.mdwn +++ b/doc/bugs/Problems_with_graphviz.pm_plug-in.mdwn @@ -15,7 +15,7 @@ It also generates image URLs relative to the page being rendered, which means th --- IkiWiki/Plugin/graphviz.pm.orig 2007-07-27 11:35:05.000000000 +0200 +++ IkiWiki/Plugin/graphviz.pm 2007-07-27 11:36:02.000000000 +0200 - @@ -69,7 +69,12 @@ sub render_graph (\%) { #{{{ + @@ -69,7 +69,12 @@ sub render_graph (\%) { } } @@ -26,9 +26,9 @@ It also generates image URLs relative to the page being rendered, which means th + else { + return "\n"; + } - } #}}} + } - sub graph (@) { #{{{ + sub graph (@) { >> --[[HenrikBrixAndersen]] @@ -38,7 +38,7 @@ The patch below fixes these two issues. --- graphviz.pm.orig Thu Jun 7 15:45:16 2007 +++ graphviz.pm Fri Jun 8 12:03:38 2007 - @@ -41,7 +41,6 @@ sub render_graph (\%) { #{{{ + @@ -41,7 +41,6 @@ sub render_graph (\%) { $pid=open2(*IN, *OUT, "$params{prog} -Tpng"); # open2 doesn't respect "use open ':utf8'" @@ -46,7 +46,7 @@ The patch below fixes these two issues. binmode (OUT, ':utf8'); print OUT $src; - @@ -70,7 +69,12 @@ sub render_graph (\%) { #{{{ + @@ -70,7 +69,12 @@ sub render_graph (\%) { } } @@ -57,6 +57,6 @@ The patch below fixes these two issues. + else { + return "\n"; + } - } #}}} + } - sub graph (@) { #{{{ + sub graph (@) { diff --git a/doc/bugs/RecentChanges_broken_with_empty_svnpath.mdwn b/doc/bugs/RecentChanges_broken_with_empty_svnpath.mdwn index 836c39a71..c852df5e9 100644 --- a/doc/bugs/RecentChanges_broken_with_empty_svnpath.mdwn +++ b/doc/bugs/RecentChanges_broken_with_empty_svnpath.mdwn @@ -13,7 +13,7 @@ I can not see why this check is needed in the first place, so here's a patch for diff -upr ikiwiki-1.49.orig/IkiWiki/Rcs/svn.pm ikiwiki-1.49/IkiWiki/Rcs/svn.pm --- ikiwiki-1.49.orig/IkiWiki/Rcs/svn.pm Mon Apr 16 15:15:09 2007 +++ ikiwiki-1.49/IkiWiki/Rcs/svn.pm Mon Apr 16 15:15:47 2007 - @@ -176,7 +176,6 @@ sub rcs_recentchanges ($) { #{{{ + @@ -176,7 +176,6 @@ sub rcs_recentchanges ($) { } foreach (keys %{$logentry->{paths}}) { diff --git a/doc/bugs/Titles_are_lower-cased_when_creating_a_page.mdwn b/doc/bugs/Titles_are_lower-cased_when_creating_a_page.mdwn index cc53c0aea..f2c60309b 100644 --- a/doc/bugs/Titles_are_lower-cased_when_creating_a_page.mdwn +++ b/doc/bugs/Titles_are_lower-cased_when_creating_a_page.mdwn @@ -6,7 +6,7 @@ If I click on "Czars in Russia", I'd like Ikiwiki to create "Czars\_in\_Russia.m > --- a/IkiWiki.pm > +++ b/IkiWiki.pm -> @@ -584,7 +584,7 @@ sub htmllink ($$$;@) { #{{{ +> @@ -584,7 +584,7 @@ sub htmllink ($$$;@) { > return " cgiurl( > do => "create", diff --git a/doc/bugs/Warns_about_use_of_uninitialized_value_if_prefix__95__directives_is_on_and_a_directive_does_not_contain_a_space.mdwn b/doc/bugs/Warns_about_use_of_uninitialized_value_if_prefix__95__directives_is_on_and_a_directive_does_not_contain_a_space.mdwn index a30f110a4..efb5c70b8 100644 --- a/doc/bugs/Warns_about_use_of_uninitialized_value_if_prefix__95__directives_is_on_and_a_directive_does_not_contain_a_space.mdwn +++ b/doc/bugs/Warns_about_use_of_uninitialized_value_if_prefix__95__directives_is_on_and_a_directive_does_not_contain_a_space.mdwn @@ -6,7 +6,7 @@ In `IkiWiki::preprocess`, the last capturing group in the regex used to parse di index 241a7c0..d2c35a2 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -1167,7 +1167,8 @@ sub preprocess ($$$;$$) { #{{{ + @@ -1167,7 +1167,8 @@ sub preprocess ($$$;$$) { }sx; } @@ -14,6 +14,6 @@ In `IkiWiki::preprocess`, the last capturing group in the regex used to parse di + # $4 can be undef if the directive was \[[!foo]] + $content =~ s{$regex}{$handle->($1, $2, $3, ($4 or ""))}eg; return $content; - } #}}} + } [[cherry-picked|done]] --[[Joey]] diff --git a/doc/bugs/bugfix_for:___34__mtn:_operation_canceled:_Broken_pipe__34_____40__patch__41__.mdwn b/doc/bugs/bugfix_for:___34__mtn:_operation_canceled:_Broken_pipe__34_____40__patch__41__.mdwn index aa13ec339..b7f38fd29 100644 --- a/doc/bugs/bugfix_for:___34__mtn:_operation_canceled:_Broken_pipe__34_____40__patch__41__.mdwn +++ b/doc/bugs/bugfix_for:___34__mtn:_operation_canceled:_Broken_pipe__34_____40__patch__41__.mdwn @@ -3,7 +3,7 @@ When using monotone as revision control system, a "mtn: operation canceled: Brok diff -up ikiwiki/IkiWiki/Plugin/monotone.pm.orig ikiwiki/IkiWiki/Plugin/monotone.pm --- ikiwiki/IkiWiki/Plugin/monotone.pm.orig 2008-11-12 23:45:24.000000000 +0100 +++ ikiwiki/IkiWiki/Plugin/monotone.pm 2008-12-16 12:41:38.000000000 +0100 - @@ -525,13 +525,12 @@ sub rcs_recentchanges ($) { #{{{ + @@ -525,13 +525,12 @@ sub rcs_recentchanges ($) { my $child = open(MTNLOG, "-|"); if (! $child) { exec("mtn", "log", "--root=$config{mtnrootdir}", "--no-graph", diff --git a/doc/bugs/git_stderr_output_causes_problems.mdwn b/doc/bugs/git_stderr_output_causes_problems.mdwn index 4146a5869..c25ef6927 100644 --- a/doc/bugs/git_stderr_output_causes_problems.mdwn +++ b/doc/bugs/git_stderr_output_causes_problems.mdwn @@ -6,7 +6,7 @@ Ikiwiki's git handling is sending a bunch of output to stderr. The following pa index 425536f..5734bb2 100644 --- a/IkiWiki/Rcs/git.pm +++ b/IkiWiki/Rcs/git.pm - @@ -24,6 +24,7 @@ sub _safe_git (&@) { #{{{ + @@ -24,6 +24,7 @@ sub _safe_git (&@) { if (!$pid) { # In child. # Git commands want to be in wc. diff --git a/doc/bugs/img_plugin_should_pass_through_class_attribute.mdwn b/doc/bugs/img_plugin_should_pass_through_class_attribute.mdwn index 2e67d6357..f72ecade2 100644 --- a/doc/bugs/img_plugin_should_pass_through_class_attribute.mdwn +++ b/doc/bugs/img_plugin_should_pass_through_class_attribute.mdwn @@ -26,7 +26,7 @@ And here's a patch to implement it. Will this survive markdown munging? It seems index 7226231..3eb1ae7 100644 --- a/Plugin/img.pm +++ b/Plugin/img.pm - @@ -93,9 +93,15 @@ sub preprocess (@) { #{{{ + @@ -93,9 +93,15 @@ sub preprocess (@) { $imgurl="$config{url}/$imglink"; } @@ -42,7 +42,7 @@ And here's a patch to implement it. Will this survive markdown munging? It seems + $result .= '/>'; + + return $result; - } #}}} + } 1 -- diff --git a/doc/bugs/inline_sort-by-title_issues.mdwn b/doc/bugs/inline_sort-by-title_issues.mdwn index 884846b32..ff4555067 100644 --- a/doc/bugs/inline_sort-by-title_issues.mdwn +++ b/doc/bugs/inline_sort-by-title_issues.mdwn @@ -23,7 +23,7 @@ And here is a [[patch]] for this. It makes `sort=title` actually sort on the ti index 9c336e7..99f6de3 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm - @@ -185,9 +185,12 @@ sub preprocess_inline (@) { #{{{ + @@ -185,9 +185,12 @@ sub preprocess_inline (@) { } } diff --git a/doc/bugs/mercurial_fail_to_add.mdwn b/doc/bugs/mercurial_fail_to_add.mdwn index dab40d684..3bbf4e5fd 100644 --- a/doc/bugs/mercurial_fail_to_add.mdwn +++ b/doc/bugs/mercurial_fail_to_add.mdwn @@ -6,7 +6,7 @@ Here is a patch that's seems to work, although I'm not quite sure what's wrong w --- mercurial.pm 2007-03-24 16:14:35.000000000 +0100 +++ /home/hbernard/mercurial.pm 2007-04-19 19:05:47.000000000 +0200 @@ -95,7 +95,7 @@ - sub rcs_add ($) { # {{{ + sub rcs_add ($) { my ($file) = @_; - my @cmdline = ("hg", "-q", "-R", "$config{srcdir}", "add", "$file"); diff --git a/doc/bugs/methodResponse_in_add__95__plugins.mdwn b/doc/bugs/methodResponse_in_add__95__plugins.mdwn index 8a88f4eda..c82b532db 100644 --- a/doc/bugs/methodResponse_in_add__95__plugins.mdwn +++ b/doc/bugs/methodResponse_in_add__95__plugins.mdwn @@ -26,7 +26,7 @@ index e476521..d43abd4 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -471,7 +471,11 @@ sub loadplugins () { #{{{ + @@ -471,7 +471,11 @@ sub loadplugins () { unshift @INC, possibly_foolish_untaint($config{libdir}); } diff --git a/doc/bugs/multiple_pages_with_same_name.mdwn b/doc/bugs/multiple_pages_with_same_name.mdwn index 5ddfb1f6b..20c38c062 100644 --- a/doc/bugs/multiple_pages_with_same_name.mdwn +++ b/doc/bugs/multiple_pages_with_same_name.mdwn @@ -28,14 +28,14 @@ Suggestions welcome. index 4e4da11..853f905 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -618,7 +618,7 @@ sub pagename ($) { #{{{ + @@ -618,7 +618,7 @@ sub pagename ($) { my $type=pagetype($file); my $page=$file; - $page=~s/\Q.$type\E*$// if defined $type; + $page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{leavesuffix}; return $page; - } #}}} + } diff --git a/t/pagename.t b/t/pagename.t index 96e6a87..58811b9 100755 @@ -61,7 +61,7 @@ I wonder if this patch will also be useful: index 752d176..3f1b67b 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm - @@ -279,7 +279,11 @@ sub refresh () { #{{{ + @@ -279,7 +279,11 @@ sub refresh () { else { $f=~s/^\Q$config{srcdir}\E\/?//; push @files, $f; diff --git a/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn b/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn index a2eba694c..78fed0e5d 100644 --- a/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn +++ b/doc/bugs/pagespec_parsing_chokes_on_function__40____41__.mdwn @@ -54,7 +54,7 @@ case the user is given to rebuilding the wiki by hand. --Ethan + } return IkiWiki::FailReason->new("syntax error") if $@; return $ret; - } #}}} + } > Thanks, [[done]] --[[Joey]] diff --git a/doc/bugs/prune_causing_taint_mode_failures.mdwn b/doc/bugs/prune_causing_taint_mode_failures.mdwn index 1876d9129..5fc1d8b75 100644 --- a/doc/bugs/prune_causing_taint_mode_failures.mdwn +++ b/doc/bugs/prune_causing_taint_mode_failures.mdwn @@ -11,7 +11,7 @@ I've no idea what's happening (hey, I'm a C programmer), but I've hacked prune()
 use Scalar::Util qw(tainted);
 
-sub prune ($) { #{{{
+sub prune ($) {
         my $file=shift;
 
         unlink($file);
@@ -25,7 +25,7 @@ sub prune ($) { #{{{
                         $dir = $1;
                 }
         }
-} #}}}
+}
 
> Old versions of perl are known to have bugs with taint checking. diff --git a/doc/bugs/quieten_mercurial.mdwn b/doc/bugs/quieten_mercurial.mdwn index 26f833e5f..3fd75ea1b 100644 --- a/doc/bugs/quieten_mercurial.mdwn +++ b/doc/bugs/quieten_mercurial.mdwn @@ -6,7 +6,7 @@ messages which are then taken for CGI output, causing errors and general trouble @@ -55,7 +55,7 @@ } - sub rcs_update () { #{{{ + sub rcs_update () { - my @cmdline = ("hg", "-R", "$config{srcdir}", "update"); + my @cmdline = ("hg", "-q", "-R", "$config{srcdir}", "update"); if (system(@cmdline) != 0) { @@ -22,7 +22,7 @@ messages which are then taken for CGI output, causing errors and general trouble if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; @@ -92,7 +92,7 @@ - sub rcs_add ($) { # {{{ + sub rcs_add ($) { my ($file) = @_; - my @cmdline = ("hg", "-R", "$config{srcdir}", "add", "$file"); diff --git a/doc/bugs/search_for_locale_data_in_the_installed_location.mdwn b/doc/bugs/search_for_locale_data_in_the_installed_location.mdwn index 0a2b1efea..dace2ca19 100644 --- a/doc/bugs/search_for_locale_data_in_the_installed_location.mdwn +++ b/doc/bugs/search_for_locale_data_in_the_installed_location.mdwn @@ -2,7 +2,7 @@ It seems like gettext only searches for locale information in /usr/share/locale, --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -1057,6 +1057,7 @@ sub gettext { #{{{ + @@ -1057,6 +1057,7 @@ sub gettext { $gettext_obj=undef; return shift; } diff --git a/doc/bugs/tbasewiki__95__brokenlinks.t_broken.mdwn b/doc/bugs/tbasewiki__95__brokenlinks.t_broken.mdwn index ac895896a..db3917d21 100644 --- a/doc/bugs/tbasewiki__95__brokenlinks.t_broken.mdwn +++ b/doc/bugs/tbasewiki__95__brokenlinks.t_broken.mdwn @@ -25,12 +25,12 @@ After some digging I found that HTML::Template is being required after the new s filter => sub { my $text_ref = shift; @@ -857,6 +856,7 @@ - } #}}} + } - sub template ($;@) { #{{{ + sub template ($;@) { + require HTML::Template; HTML::Template->new(template_params(@_)); - } #}}} + } **That** gave me: diff --git a/doc/plugins/contrib/headinganchors.mdwn b/doc/plugins/contrib/headinganchors.mdwn index ef2fa122a..c80cc0b49 100644 --- a/doc/plugins/contrib/headinganchors.mdwn +++ b/doc/plugins/contrib/headinganchors.mdwn @@ -12,9 +12,9 @@ rst and any other format that produces html. The code is available here: use strict; use IkiWiki 2.00; - sub import { #{{{ + sub import { hook(type => "sanitize", id => "headinganchors", call => \&headinganchors); - } # }}} + } sub text_to_anchor { my $str = shift; @@ -26,11 +26,11 @@ rst and any other format that produces html. The code is available here: return $str; } - sub headinganchors (@) { #{{{ + sub headinganchors (@) { my %params=@_; my $content=$params{content}; $content=~s{([^>]*)}{''.$2.''}gie; return $content; - } # }}} + } 1 diff --git a/doc/plugins/contrib/siterel2pagerel.mdwn b/doc/plugins/contrib/siterel2pagerel.mdwn index 956b6728f..9b09657bf 100644 --- a/doc/plugins/contrib/siterel2pagerel.mdwn +++ b/doc/plugins/contrib/siterel2pagerel.mdwn @@ -13,11 +13,11 @@ other format that produces html. The code is available here: use strict; use IkiWiki 2.00; - sub import { #{{{ + sub import { hook(type => "sanitize", id => "siterel2pagerel", call => \&siterel2pagerel); - } # }}} + } - sub siterel2pagerel (@) { #{{{ + sub siterel2pagerel (@) { my %params=@_; my $baseurl=IkiWiki::baseurl($params{page}); my $content=$params{content}; @@ -25,6 +25,6 @@ other format that produces html. The code is available here: $content=~s/( "getsetup", id => "unixauth", call => \&getsetup); hook(type => "formbuilder_setup", id => "unixauth", call => \&formbuilder_setup); hook(type => "formbuilder", id => "unixauth", call => \&formbuilder); hook(type => "sessioncgi", id => "unixauth", call => \&sessioncgi); - } # }}} + } - sub getsetup () { #{{{ + sub getsetup () { return unixauth_type => { type => "string", @@ -83,10 +83,10 @@ __Security__: [As with passwordauth](/security/#index14h2), be wary of sending u safe => 0, rebuild => 1, }, - } #}}} + } # Checks if a string matches a user's password, and returns true or false. - sub checkpassword ($$;$) { #{{{ + sub checkpassword ($$;$) { my $user=shift; my $password=shift; my $field=shift || "password"; @@ -131,9 +131,9 @@ __Security__: [As with passwordauth](/security/#index14h2), be wary of sending u } return $ret; - } #}}} + } - sub formbuilder_setup (@) { #{{{ + sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; @@ -204,7 +204,7 @@ __Security__: [As with passwordauth](/security/#index14h2), be wary of sending u } } - sub formbuilder (@) { #{{{ + sub formbuilder (@) { my %params=@_; my $form=$params{form}; @@ -225,12 +225,12 @@ __Security__: [As with passwordauth](/security/#index14h2), be wary of sending u my $user_name=$form->field('name'); } } - } #}}} + } - sub sessioncgi ($$) { #{{{ + sub sessioncgi ($$) { my $q=shift; my $session=shift; - } #}}} + } 1 diff --git a/doc/todo/Add_DATE_parameter_for_use_in_templates.mdwn b/doc/todo/Add_DATE_parameter_for_use_in_templates.mdwn index c908f57c8..8ecdf36d0 100644 --- a/doc/todo/Add_DATE_parameter_for_use_in_templates.mdwn +++ b/doc/todo/Add_DATE_parameter_for_use_in_templates.mdwn @@ -44,7 +44,7 @@ regenerate this one against that). %config %links %renderedfiles %pagesources %destsources); our $VERSION = 2.00; # plugin interface version, next is ikiwiki version our $version="2.1";my $installdir="/usr"; - @@ -70,6 +70,7 @@ sub defaultconfig () { #{{{ + @@ -70,6 +70,7 @@ sub defaultconfig () { plugin => [qw{mdwn inline htmlscrubber passwordauth openid signinedit lockedit conditional}], timeformat => '%c', @@ -52,27 +52,27 @@ regenerate this one against that). locale => undef, sslcookie => 0, httpauth => 0, - @@ -447,6 +448,15 @@ sub displaytime ($) { #{{{ + @@ -447,6 +448,15 @@ sub displaytime ($) { $config{timeformat}, localtime($time))); - } #}}} + } - +sub displaydate ($) { #{{{ + +sub displaydate ($) { + my $time=shift; + + # strftime doesn't know about encodings, so make sure + # its output is properly treated as utf8 + return decode_utf8(POSIX::strftime( + $config{dateformat}, localtime($time))); - +} #}}} + +} + - sub beautify_url ($) { #{{{ + sub beautify_url ($) { my $url=shift; diff --git a/Plugin/inline.pm b/Plugin/inline.pm index 8f6ab51..7bd6147 100644 --- a/Plugin/inline.pm +++ b/Plugin/inline.pm - @@ -148,6 +148,7 @@ sub preprocess_inline (@) { #{{{ + @@ -148,6 +148,7 @@ sub preprocess_inline (@) { $template->param(pageurl => urlto(bestlink($params{page}, $page), $params{destpage})); $template->param(title => pagetitle(basename($page))); $template->param(ctime => displaytime($pagectime{$page})); diff --git a/doc/todo/Add_support_for_latest_Text::Markdown_as_found_on_CPAN.mdwn b/doc/todo/Add_support_for_latest_Text::Markdown_as_found_on_CPAN.mdwn index 222cd8c46..6b9fa0535 100644 --- a/doc/todo/Add_support_for_latest_Text::Markdown_as_found_on_CPAN.mdwn +++ b/doc/todo/Add_support_for_latest_Text::Markdown_as_found_on_CPAN.mdwn @@ -12,7 +12,7 @@ This patch allows IkiWiki to work with either of the two: --- IkiWiki/Plugin/mdwn.pm.orig 2008-03-08 11:33:50.000000000 +0100 +++ IkiWiki/Plugin/mdwn.pm 2008-03-08 13:37:21.000000000 +0100 - @@ -28,14 +28,20 @@ sub htmlize (@) { #{{{ + @@ -28,14 +28,20 @@ sub htmlize (@) { $markdown_sub=\&Markdown::Markdown; } else { diff --git a/doc/todo/Allow_change_of_wiki_file_types.mdwn b/doc/todo/Allow_change_of_wiki_file_types.mdwn index 8a398f2e0..19574b175 100644 --- a/doc/todo/Allow_change_of_wiki_file_types.mdwn +++ b/doc/todo/Allow_change_of_wiki_file_types.mdwn @@ -12,7 +12,7 @@ I was hoping that the [[plugins/rename]] plugin would allow web uses to change t index 527ee88..123b772 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm - @@ -43,7 +43,7 @@ sub check_canrename ($$$$$$$) { #{{{ + @@ -43,7 +43,7 @@ sub check_canrename ($$$$$$$) { # Dest checks can be omitted by passing undef. if (defined $dest) { @@ -21,7 +21,7 @@ I was hoping that the [[plugins/rename]] plugin would allow web uses to change t error(gettext("no change to the file name was specified")); } - @@ -54,7 +54,7 @@ sub check_canrename ($$$$$$$) { #{{{ + @@ -54,7 +54,7 @@ sub check_canrename ($$$$$$$) { } # Must not be a known source file. @@ -30,7 +30,7 @@ I was hoping that the [[plugins/rename]] plugin would allow web uses to change t error(sprintf(gettext("%s already exists"), htmllink("", "", $dest, noimageinline => 1))); } - @@ -97,6 +97,24 @@ sub rename_form ($$$) { #{{{ + @@ -97,6 +97,24 @@ sub rename_form ($$$) { $f->field(name => "do", type => "hidden", value => "rename", force => 1); $f->field(name => "page", type => "hidden", value => $page, force => 1); $f->field(name => "new_name", value => IkiWiki::pagetitle($page), size => 60); @@ -55,7 +55,7 @@ I was hoping that the [[plugins/rename]] plugin would allow web uses to change t $f->field(name => "attachment", type => "hidden"); return $f, ["Rename", "Cancel"]; - @@ -223,12 +241,19 @@ sub sessioncgi ($$) { #{{{ + @@ -223,12 +241,19 @@ sub sessioncgi ($$) { my $dest=IkiWiki::possibly_foolish_untaint(IkiWiki::titlepage($q->param("new_name"))); # The extension of dest is the same as src if it's diff --git a/doc/todo/Allow_edittemplate_to_set_file_type.mdwn b/doc/todo/Allow_edittemplate_to_set_file_type.mdwn index b49968c18..1b99a4e05 100644 --- a/doc/todo/Allow_edittemplate_to_set_file_type.mdwn +++ b/doc/todo/Allow_edittemplate_to_set_file_type.mdwn @@ -14,7 +14,7 @@ edittemplate there. --[[Joey]] index 98308de..c381940 100644 --- a/IkiWiki/Plugin/edittemplate.pm +++ b/IkiWiki/Plugin/edittemplate.pm - @@ -56,8 +56,14 @@ sub preprocess (@) { #{{{ + @@ -56,8 +56,14 @@ sub preprocess (@) { $pagestate{$params{page}}{edittemplate}{$params{match}}=$params{template}; @@ -28,10 +28,10 @@ edittemplate there. --[[Joey]] + + return sprintf(gettext("edittemplate: %s registered for %s"), + $linkHTML, $params{match}); - } # }}} + } - sub formbuilder (@) { #{{{ - @@ -89,6 +95,9 @@ sub formbuilder (@) { #{{{ + sub formbuilder (@) { + @@ -89,6 +95,9 @@ sub formbuilder (@) { if (pagespec_match($p, $pagespec, location => $registering_page)) { $form->field(name => "editcontent", value => filltemplate($pagestate{$registering_page}{edittemplate}{$pagespec}, $page)); diff --git a/doc/todo/Bestdir_along_with_bestlink_in_IkiWiki.pm.mdwn b/doc/todo/Bestdir_along_with_bestlink_in_IkiWiki.pm.mdwn index 73157a326..95c38f794 100644 --- a/doc/todo/Bestdir_along_with_bestlink_in_IkiWiki.pm.mdwn +++ b/doc/todo/Bestdir_along_with_bestlink_in_IkiWiki.pm.mdwn @@ -8,9 +8,9 @@ This patch adds function bestdir() which returns best directory from the directo +++ IkiWiki.pm (working copy) @@ -391,6 +391,35 @@ return ""; - } #}}} + } - +sub bestdir ($$) { #{{{ + +sub bestdir ($$) { + my $page=shift; + my $link=shift; + my $cwd=$page; @@ -37,9 +37,9 @@ This patch adds function bestdir() which returns best directory from the directo + } + + return ""; - +} #}}} + +} + - sub isinlinableimage ($) { #{{{ + sub isinlinableimage ($) { my $file=shift; ---- diff --git a/doc/todo/Default_text_for_new_pages.mdwn b/doc/todo/Default_text_for_new_pages.mdwn index 4a17bbf8b..a904f8287 100644 --- a/doc/todo/Default_text_for_new_pages.mdwn +++ b/doc/todo/Default_text_for_new_pages.mdwn @@ -15,7 +15,7 @@ Inline below is a [[patch]] that implements this: index bb21ed2..10c985c 100644 --- a/IkiWiki/Plugin/editpage.pm +++ b/IkiWiki/Plugin/editpage.pm - @@ -60,7 +60,7 @@ sub cgi_editpage ($$) { #{{{ + @@ -60,7 +60,7 @@ sub cgi_editpage ($$) { decode_cgi_utf8($q); @@ -24,7 +24,7 @@ Inline below is a [[patch]] that implements this: my @buttons=("Save Page", "Preview", "Cancel"); eval q{use CGI::FormBuilder}; error($@) if $@; - @@ -117,9 +117,20 @@ sub cgi_editpage ($$) { #{{{ + @@ -117,9 +117,20 @@ sub cgi_editpage ($$) { } else { $type=$form->param('type'); @@ -45,7 +45,7 @@ Inline below is a [[patch]] that implements this: elsif (defined $from && exists $pagesources{$from}) { # favor the type of linking page $type=pagetype($pagesources{$from}); - @@ -129,7 +140,7 @@ sub cgi_editpage ($$) { #{{{ + @@ -129,7 +140,7 @@ sub cgi_editpage ($$) { if (! $form->submitted) { $form->field(name => "rcsinfo", value => "", force => 1); } @@ -58,7 +58,7 @@ Inline below is a [[patch]] that implements this: index 8efef3f..075d7d8 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm - @@ -271,6 +271,7 @@ sub preprocess_inline (@) { #{{{ + @@ -271,6 +271,7 @@ sub preprocess_inline (@) { $rootpage=$params{page}; } $formtemplate->param(rootpage => $rootpage); diff --git a/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn b/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn index a644e236b..c71250b3a 100644 --- a/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn +++ b/doc/todo/Give_access_to_more_TMPL__95__VAR_variables_in_templates_inserted_by_the_template_plugin.mdwn @@ -94,7 +94,7 @@ most possible of these pages. > index a6e34fc..bb9dd8d 100644 > --- a/IkiWiki/Plugin/template.pm > +++ b/IkiWiki/Plugin/template.pm -> @@ -57,6 +57,8 @@ sub preprocess (@) { #{{{ +> @@ -57,6 +57,8 @@ sub preprocess (@) { > } > } > diff --git a/doc/todo/Inline_plugin_option_to_show_full_page_path.mdwn b/doc/todo/Inline_plugin_option_to_show_full_page_path.mdwn index 9f52a724a..691694009 100644 --- a/doc/todo/Inline_plugin_option_to_show_full_page_path.mdwn +++ b/doc/todo/Inline_plugin_option_to_show_full_page_path.mdwn @@ -19,7 +19,7 @@ Cheers, index 59eabb6..82913ba 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm - @@ -229,6 +229,7 @@ sub preprocess_inline (@) { #{{{ + @@ -229,6 +229,7 @@ sub preprocess_inline (@) { $template->param(content => $content); } $template->param(pageurl => urlto(bestlink($params{page}, $page), $params{destpage})); diff --git a/doc/todo/Move_teximg_latex_preamble_to_config_file.mdwn b/doc/todo/Move_teximg_latex_preamble_to_config_file.mdwn index d94d24ee4..3cedd5ae3 100644 --- a/doc/todo/Move_teximg_latex_preamble_to_config_file.mdwn +++ b/doc/todo/Move_teximg_latex_preamble_to_config_file.mdwn @@ -71,10 +71,10 @@ Happy TeXing. + +my $default_postfix = '\\end{document}'; + - sub import { #{{{ + sub import { hook(type => "getsetup", id => "teximg", call => \&getsetup); hook(type => "preprocess", id => "teximg", call => \&preprocess); - @@ -21,6 +33,26 @@ sub getsetup () { #{{{ + @@ -21,6 +33,26 @@ sub getsetup () { safe => 1, rebuild => undef, }, @@ -98,10 +98,10 @@ Happy TeXing. + safe => 0, # Not sure how secure LaTeX is... + rebuild => 1, + }, - } #}}} + } - sub preprocess (@) { #{{{ - @@ -105,25 +137,35 @@ sub gen_image ($$$$) { #{{{ + sub preprocess (@) { + @@ -105,25 +137,35 @@ sub gen_image ($$$$) { my $digest = shift; my $imagedir = shift; diff --git a/doc/todo/Set_arbitrary_date_to_be_used_by_calendar_plugin.mdwn b/doc/todo/Set_arbitrary_date_to_be_used_by_calendar_plugin.mdwn index a26433919..89167c084 100644 --- a/doc/todo/Set_arbitrary_date_to_be_used_by_calendar_plugin.mdwn +++ b/doc/todo/Set_arbitrary_date_to_be_used_by_calendar_plugin.mdwn @@ -42,13 +42,13 @@ Longer term plans: my %cache; my %linkcache; @@ -32,6 +34,7 @@ - sub import { #{{{ + sub import { hook(type => "needsbuild", id => "version", call => \&needsbuild); hook(type => "preprocess", id => "calendar", call => \&preprocess); + hook(type => "preprocess", id => "event", call => \&preprocess_event); - } #}}} + } - sub is_leap_year (@) { #{{{ + sub is_leap_year (@) { @@ -58,6 +61,7 @@ my $nmonth = $params{nmonth}; my $pyear = $params{pyear}; @@ -137,9 +137,9 @@ Longer term plans: # finish off the week @@ -304,6 +333,18 @@ return $calendar; - } #}}} + } - +sub preprocess_event (@) { #{{{ + +sub preprocess_event (@) { + my %params=@_; + # if now time is given, use now + $params{begin} = localtime($time) unless defined $params{begin}; @@ -151,7 +151,7 @@ Longer term plans: + return ""; +} #}} + - sub preprocess (@) { #{{{ + sub preprocess (@) { my %params=@_; $params{pages} = "*" unless defined $params{pages}; @@ -311,6 +352,8 @@ diff --git a/doc/todo/Silence_monotone_warning.mdwn b/doc/todo/Silence_monotone_warning.mdwn index e3f0224c2..d875900c5 100644 --- a/doc/todo/Silence_monotone_warning.mdwn +++ b/doc/todo/Silence_monotone_warning.mdwn @@ -4,7 +4,7 @@ A quick [[patch]] to silence a [[rcs/monotone]] warning I started seeing: index 4b9be31..9d4e280 100644 --- a/IkiWiki/Plugin/monotone.pm +++ b/IkiWiki/Plugin/monotone.pm - @@ -55,7 +55,7 @@ sub checkconfig () { #{{{ + @@ -55,7 +55,7 @@ sub checkconfig () { error("Monotone version too old, is $version but required 0.38"); } diff --git a/doc/todo/Support_wildcard_inside_of_link__40____41___within_a_pagespec.mdwn b/doc/todo/Support_wildcard_inside_of_link__40____41___within_a_pagespec.mdwn index 2837634d9..8320f72a6 100644 --- a/doc/todo/Support_wildcard_inside_of_link__40____41___within_a_pagespec.mdwn +++ b/doc/todo/Support_wildcard_inside_of_link__40____41___within_a_pagespec.mdwn @@ -20,7 +20,7 @@ That doesn't work in ikiwiki 2.1, but I have it index 38aa46a..cd42e8d 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -1082,10 +1082,15 @@ sub match_link ($$;@) { #{{{ + @@ -1082,10 +1082,15 @@ sub match_link ($$;@) { my $links = $IkiWiki::links{$page} or return undef; return IkiWiki::FailReason->new("$page has no links") unless @$links; my $bestlink = IkiWiki::bestlink($from, $link); @@ -38,7 +38,7 @@ That doesn't work in ikiwiki 2.1, but I have it + } } return IkiWiki::FailReason->new("$page does not link to $link"); - } #}}} + } -- 1.5.1.1.g6aead diff --git a/doc/todo/Wrapper_config_with_multiline_regexp.mdwn b/doc/todo/Wrapper_config_with_multiline_regexp.mdwn index c0311bc92..7b4323de1 100644 --- a/doc/todo/Wrapper_config_with_multiline_regexp.mdwn +++ b/doc/todo/Wrapper_config_with_multiline_regexp.mdwn @@ -13,12 +13,12 @@ Second, the untainting of $configstring should allow newlines. +++ wiki-meta/perl/IkiWiki.pm Mon Jun 11 10:52:07 2007 @@ -205,7 +205,7 @@ - sub possibly_foolish_untaint ($) { #{{{ + sub possibly_foolish_untaint ($) { my $tainted=shift; - my ($untainted)=$tainted=~/(.*)/; + my ($untainted)=$tainted=~/(.*)/s; return $untainted; - } #}}} + } Modified: wiki-meta/perl/IkiWiki/Wrapper.pm diff --git a/doc/todo/add_forward_age_sorting_option_to_inline.mdwn b/doc/todo/add_forward_age_sorting_option_to_inline.mdwn index 684419f90..e91c5a42f 100644 --- a/doc/todo/add_forward_age_sorting_option_to_inline.mdwn +++ b/doc/todo/add_forward_age_sorting_option_to_inline.mdwn @@ -19,7 +19,7 @@ diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index d2e5832..9e52712 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm -@@ -194,6 +194,9 @@ sub preprocess_inline (@) { #{{{ +@@ -194,6 +194,9 @@ sub preprocess_inline (@) { elsif (! exists $params{sort} || $params{sort} eq 'age') { @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list; } diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn index 467ec350e..dc6c0001e 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn @@ -17,13 +17,13 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. my %metaheaders; - sub import { #{{{ + sub import { hook(type => "getsetup", id => "sourcecode", call => \&getsetup); hook(type => "checkconfig", id => "sourcecode", call => \&checkconfig); hook(type => "pagetemplate", id => "sourcecode", call => \&pagetemplate); - } # }}} + } - sub getsetup () { #{{{ + sub getsetup () { return plugin => { safe => 1, @@ -57,9 +57,9 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. safe => 1, rebuild => 1, }, - } #}}} + } - sub checkconfig () { #{{{ + sub checkconfig () { if (! $config{sourcecode_lang}) { error("The sourcecode plugin requires a list of suffixes in the 'sourcecode_lang' config option"); } @@ -97,9 +97,9 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. error("Your installation of source-highlight cannot handle sourcecode language $lang!"); } } - } #}}} + } - sub htmlize (@) { #{{{ + sub htmlize (@) { my %params=@_; my $page = $params{page}; @@ -141,9 +141,9 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. } return '
'."\r\n".join("\r\n",@html)."\r\n
\n"; - } # }}} + } - sub pagetemplate (@) { #{{{ + sub pagetemplate (@) { my %params=@_; my $page=$params{page}; @@ -154,6 +154,6 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. my %seen; $template->param(meta => join("\n", grep { (! $seen{$_}) && ($seen{$_}=1) } @{$metaheaders{$page}})); } - } # }}} + } 1 diff --git a/doc/todo/blogpost_plugin.mdwn b/doc/todo/blogpost_plugin.mdwn index 60b1e2515..bb91ffd02 100644 --- a/doc/todo/blogpost_plugin.mdwn +++ b/doc/todo/blogpost_plugin.mdwn @@ -51,13 +51,13 @@ Index: IkiWiki/Plugin/blogpost.pm +use POSIX; +use IkiWiki 2.00; + -+sub import { #{{{ ++sub import { + hook(type => "checkconfig", id => "blogpost", call => \&checkconfig); + hook(type => "authcgi", id => "blogpost", call => \&authcgi); + hook(type => "canedit", id => "blogpost", call => \&canedit); -+} # }}} ++} + -+sub checkconfig () { #{{{ ++sub checkconfig () { + if (! defined $config{blogformat}){ + $config{blogformat} = 'posts/%Y/%m/%d/$title'; + } @@ -72,9 +72,9 @@ Index: IkiWiki/Plugin/blogpost.pm + if (! defined $config{blogusers}) { + $config{blogusers} = (); # disallow all posting by default + } -+} #}}} ++} + -+sub authcgi ($$) { #{{{ ++sub authcgi ($$) { + my $cgi=shift; + my $session=shift; + @@ -115,16 +115,16 @@ Index: IkiWiki/Plugin/blogpost.pm + $cgi->param("page", $page); + } + -+} #}}} ++} + -+sub blogpage ($) { #{{{ ++sub blogpage ($) { + my $title=shift; + my $page=POSIX::strftime $config{blogformat}, localtime; + $page =~ s/\$title/$title/; + return $page; -+} #}}} ++} + -+sub canedit ($$$) { #{{{ ++sub canedit ($$$) { + my $page=shift; + my $cgi=shift; + my $session=shift; @@ -136,7 +136,7 @@ Index: IkiWiki/Plugin/blogpost.pm + return "" if ($config{blogusers} eq "*" || + grep {$_ eq $user} $config{blogusers}); + return ("not allowed to blog, $user"); -+} #}}} ++} + +1 Index: IkiWiki.pm diff --git a/doc/todo/bzr.mdwn b/doc/todo/bzr.mdwn index 179ea2f24..a50c58d26 100644 --- a/doc/todo/bzr.mdwn +++ b/doc/todo/bzr.mdwn @@ -56,15 +56,15 @@ and rcs_getctime and rcs_notify aren't written at all. --[[bma]] return @ret; } - sub rcs_update () { #{{{ + sub rcs_update () { # Not needed. - } #}}} + } - sub rcs_prepedit ($) { #{{{ + sub rcs_prepedit ($) { return ""; - } #}}} + } - sub rcs_commit ($$$;$$) { #{{{ + sub rcs_commit ($$$;$$) { my ($file, $message, $rcstoken, $user, $ipaddr) = @_; if (defined $user) { @@ -95,18 +95,18 @@ and rcs_getctime and rcs_notify aren't written at all. --[[bma]] system("bzr","whoami",$olduser); return undef; # success - } #}}} + } - sub rcs_add ($) { # {{{ + sub rcs_add ($) { my ($file) = @_; my @cmdline = ("bzr", "add", "--quiet", "$config{srcdir}/$file"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } - } #}}} + } - sub rcs_recentchanges ($) { #{{{ + sub rcs_recentchanges ($) { my ($num) = @_; eval q{use CGI 'escapeHTML'}; @@ -153,15 +153,15 @@ and rcs_getctime and rcs_notify aren't written at all. --[[bma]] } return @ret; - } #}}} + } - sub rcs_notify () { #{{{ + sub rcs_notify () { # TODO - } #}}} + } - sub rcs_getctime ($) { #{{{ + sub rcs_getctime ($) { # TODO - } #}}} + } 1 diff --git a/doc/todo/cas_authentication.mdwn b/doc/todo/cas_authentication.mdwn index c8ffe7005..8bf7042df 100644 --- a/doc/todo/cas_authentication.mdwn +++ b/doc/todo/cas_authentication.mdwn @@ -43,11 +43,11 @@ follows) ? > the use of it: `eval q{use AuthCAS}; error $@ if $@` + - +sub import { #{{{ + +sub import { + hook(type => "getopt", id => "cas", call => \&getopt); + hook(type => "auth", id => "cas", call => \&auth); + hook(type => "formbuilder_setup", id => "cas", call => \&formbuilder_setup); - +} # }}} + +} > Could you please use tabs for indentation of program flow? @@ -61,15 +61,15 @@ follows) ? > Why would you want to make other auth plugins not work? Could a site not > legitimatly chose to use this and another auth method? - +sub getopt () { #{{{ + +sub getopt () { + eval q{use Getopt::Long}; + error($@) if $@; + Getopt::Long::Configure('pass_through'); + GetOptions("cas_url=s" => \$config{cas_url}); + GetOptions("ca_file=s" => \$config{ca_file}); - +} #}}} + +} + - +sub auth ($$) { #{{{ + +sub auth ($$) { + my $q=shift; + my $session=shift; + @@ -98,11 +98,11 @@ follows) ? + error("CAS failure: ".&AuthCAS::get_errors()); + } + } - +} #}}} + +} + +# I use formbuilder_setup and not formbuilder type in order to bypass the +# Logout processing done in IkiWiki::CGI::cgi_prefs() - +sub formbuilder_setup (@) { #{{{ + +sub formbuilder_setup (@) { + my %params=@_; + + my $form=$params{form}; diff --git a/doc/todo/color_plugin.mdwn b/doc/todo/color_plugin.mdwn index 69afe837d..19fba3b35 100644 --- a/doc/todo/color_plugin.mdwn +++ b/doc/todo/color_plugin.mdwn @@ -132,12 +132,12 @@ Of course, I'm open for discussion or exchange of ideas :) --[[Paweł|ptecza]] +use strict; +use IkiWiki 2.00; + - +sub import { #{{{ + +sub import { + hook(type => "preprocess", id => "color", call => \&preprocess); + hook(type => "format", id => "color", call => \&format); - +} #}}} + +} + - +sub preserve_style ($$$) { #{{{ + +sub preserve_style ($$$) { + my $foreground = shift; + my $background = shift; + my $text = shift; @@ -162,18 +162,18 @@ Of course, I'm open for discussion or exchange of ideas :) --[[Paweł|ptecza]] + + return $preserved; + - +} #}}} + +} + - +sub replace_preserved_style ($) { #{{{ + +sub replace_preserved_style ($) { + my $content = shift; + + $content =~ s!((color: ([a-z]+|\#[0-9a-f]{3,6})?)?((; )?(background-color: ([a-z]+|\#[0-9a-f]{3,6})?)?)?)!!g; + $content =~ s!!!g; + + return $content; - +} #}}} + +} + - +sub preprocess (@) { #{{{ + +sub preprocess (@) { + my %params = @_; + + # Preprocess the text to expand any preprocessor directives @@ -182,14 +182,14 @@ Of course, I'm open for discussion or exchange of ideas :) --[[Paweł|ptecza]] + IkiWiki::filter($params{page}, $params{destpage}, $params{text})); + + return preserve_style($params{foreground}, $params{background}, $params{text}); - +} #}}} + +} + - +sub format (@) { #{{{ + +sub format (@) { + my %params = @_; + + $params{content} = replace_preserved_style($params{content}); + return $params{content}; - +} #}}} + +} + +1 --- /dev/null 2008-06-21 02:02:15.000000000 +0200 diff --git a/doc/todo/darcs.mdwn b/doc/todo/darcs.mdwn index e5bf5ee27..882a41379 100644 --- a/doc/todo/darcs.mdwn +++ b/doc/todo/darcs.mdwn @@ -219,14 +219,14 @@ This is my ([bma](bma@bmalee.eu)) darcs.pm - it's messy (my Perl isn't up to muc package IkiWiki; - sub rcs_update () { #{{{ + sub rcs_update () { # Do nothing - there's nowhere to update *from*. - } #}}} + } - sub rcs_prepedit ($) { #{{{ - } #}}} + sub rcs_prepedit ($) { + } - sub rcs_commit ($$$;$$) { #{{{ + sub rcs_commit ($$$;$$) { my ($file, $message, $rcstoken, $user, $ipaddr) = @_; # $user should probably be a name and an email address, by darcs @@ -257,16 +257,16 @@ This is my ([bma](bma@bmalee.eu)) darcs.pm - it's messy (my Perl isn't up to muc return undef; # success - sub rcs_add ($) { # {{{ + sub rcs_add ($) { my ($file) = @_; my @cmdline = ("darcs", "add", "--repodir", "$config{srcdir}", "-a", "-q", "$file"); if (system(@cmdline) != 0) { warn "'@cmdline' failed: $!"; } - } #}}} + } - sub rcs_recentchanges ($) { #{{{ + sub rcs_recentchanges ($) { # TODO: This is horrible code. It doesn't work perfectly, and uses regexes # rather than parsing Darcs' XML output. my $num=shift; @@ -314,15 +314,15 @@ This is my ([bma](bma@bmalee.eu)) darcs.pm - it's messy (my Perl isn't up to muc } } return @ret; - } #}}} + } - sub rcs_notify () { #{{{ + sub rcs_notify () { # TODO - } #}}} + } - sub rcs_getctime ($) { #{{{ + sub rcs_getctime ($) { error gettext("getctime not implemented"); - } #}}} + } 1 diff --git a/doc/todo/datearchives-plugin.mdwn b/doc/todo/datearchives-plugin.mdwn index 5a5560d6c..5f33cde4c 100644 --- a/doc/todo/datearchives-plugin.mdwn +++ b/doc/todo/datearchives-plugin.mdwn @@ -17,11 +17,11 @@ Index: IkiWiki/Plugin/datearchives.pm +use strict; +use IkiWiki; + -+sub import { #{{{ ++sub import { + hook(type => "pagetemplate", id => "datearchives", call => \&pagetemplate, scan => 1); -+} # }}} ++} + -+sub pagetemplate (@) { #{{{ ++sub pagetemplate (@) { + my %args = @_; + my $dt; + eval { @@ -37,7 +37,7 @@ Index: IkiWiki/Plugin/datearchives.pm + $template->param(ctime => htmllink( $args{page}, $args{destpage}, $link, 0, 0, + $template->param('ctime'))); + } -+} # }}} ++} + +1 diff --git a/doc/todo/different_search_engine.mdwn b/doc/todo/different_search_engine.mdwn index 2f309dea5..9d0fc92c9 100644 --- a/doc/todo/different_search_engine.mdwn +++ b/doc/todo/different_search_engine.mdwn @@ -126,7 +126,7 @@ Index: IkiWiki/Plugin/search.pm + $PLUCENE_DIR = $config{wikistatedir}.'/plucene'; +} + - sub import { #{{{ + sub import { - hook(type => "getopt", id => "hyperestraier", - call => \&getopt); - hook(type => "checkconfig", id => "hyperestraier", @@ -142,14 +142,14 @@ Index: IkiWiki/Plugin/search.pm call => \&change); - hook(type => "cgi", id => "hyperestraier", - call => \&cgi); - } # }}} + } --sub getopt () { #{{{ +-sub getopt () { - eval q{use Getopt::Long}; - error($@) if $@; - Getopt::Long::Configure('pass_through'); - GetOptions("estseek=s" => \$config{estseek}); --} #}}} +-} +sub writer { + init(); @@ -165,20 +165,20 @@ Index: IkiWiki/Plugin/search.pm + grep { defined pagetype($_) } @_; +} + - sub checkconfig () { #{{{ + sub checkconfig () { foreach my $required (qw(url cgiurl)) { if (! length $config{$required}) { @@ -36,112 +58,55 @@ } - } #}}} + } -my $form; --sub pagetemplate (@) { #{{{ +-sub pagetemplate (@) { - my %params=@_; - my $page=$params{page}; - my $template=$params{template}; +#my $form; -+#sub pagetemplate (@) { #{{{ ++#sub pagetemplate (@) { +# my %params=@_; +# my $page=$params{page}; +# my $template=$params{template}; @@ -193,7 +193,7 @@ Index: IkiWiki/Plugin/search.pm +# +# $template->param(searchform => $form); +# } -+#} #}}} ++#} - # Add search box to page header. - if ($template->query(name => "searchform")) { @@ -205,9 +205,9 @@ Index: IkiWiki/Plugin/search.pm - - $template->param(searchform => $form); - } --} #}}} +-} - - sub delete (@) { #{{{ + sub delete (@) { - debug(gettext("cleaning hyperestraier search index")); - estcmd("purge -cl"); - estcfg(); @@ -219,9 +219,9 @@ Index: IkiWiki/Plugin/search.pm + $reader->delete_term( Plucene::Index::Term->new({ field => "id", text => $_ })); + } + $reader->close; - } #}}} + } - sub change (@) { #{{{ + sub change (@) { - debug(gettext("updating hyperestraier search index")); - estcmd("gather -cm -bc -cl -sd", - map { @@ -250,9 +250,9 @@ Index: IkiWiki/Plugin/search.pm + $doc->add(Plucene::Document::Field->UnStored('text' => $data)); + $writer->add_document($doc); + } - } #}}} + } - --sub cgi ($) { #{{{ +-sub cgi ($) { - my $cgi=shift; - - if (defined $cgi->param('phrase') || defined $cgi->param("navi")) { @@ -260,10 +260,10 @@ Index: IkiWiki/Plugin/search.pm - chdir("$config{wikistatedir}/hyperestraier") || error("chdir: $!"); - exec("./".IkiWiki::basename($config{cgiurl})) || error("estseek.cgi failed"); - } --} #}}} +-} - -my $configured=0; --sub estcfg () { #{{{ +-sub estcfg () { - return if $configured; - $configured=1; - @@ -301,9 +301,9 @@ Index: IkiWiki/Plugin/search.pm - unlink($cgi); - my $estseek = defined $config{estseek} ? $config{estseek} : '/usr/lib/estraier/estseek.cgi'; - symlink($estseek, $cgi) || error("symlink $estseek $cgi: $!"); --} # }}} +-} - --sub estcmd ($;@) { #{{{ +-sub estcmd ($;@) { - my @params=split(' ', shift); - push @params, "-cl", "$config{wikistatedir}/hyperestraier"; - if (@_) { @@ -323,7 +323,7 @@ Index: IkiWiki/Plugin/search.pm - open(STDOUT, "/dev/null"); # shut it up (closing won't work) - exec("estcmd", @params) || error("can't run estcmd"); - } --} #}}} +-} - -1 +1; diff --git a/doc/todo/directive_docs.mdwn b/doc/todo/directive_docs.mdwn index 1f6307381..2baa61b40 100644 --- a/doc/todo/directive_docs.mdwn +++ b/doc/todo/directive_docs.mdwn @@ -40,15 +40,15 @@ defined them: --[[Joey]] index e476521..afe982a 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -493,6 +493,7 @@ sub loadplugins () { #{{{ + @@ -493,6 +493,7 @@ sub loadplugins () { return 1; - } #}}} + } +my $loading_plugin; - sub loadplugin ($) { #{{{ + sub loadplugin ($) { my $plugin=shift; - @@ -502,14 +503,18 @@ sub loadplugin ($) { #{{{ + @@ -502,14 +503,18 @@ sub loadplugin ($) { "$installdir/lib/ikiwiki") { if (defined $dir && -x "$dir/plugins/$plugin") { require IkiWiki::Plugin::external; @@ -67,7 +67,7 @@ defined them: --[[Joey]] if ($@) { error("Failed to load plugin $mod: $@"); } - @@ -1429,6 +1434,9 @@ sub hook (@) { # {{{ + @@ -1429,6 +1434,9 @@ sub hook (@) { return if $param{no_override} && exists $hooks{$param{type}}{$param{id}}; @@ -76,4 +76,4 @@ defined them: --[[Joey]] + $hooks{$param{type}}{$param{id}}=\%param; return 1; - } # }}} + } diff --git a/doc/todo/enable-htaccess-files.mdwn b/doc/todo/enable-htaccess-files.mdwn index b3c174fba..e3b295123 100644 --- a/doc/todo/enable-htaccess-files.mdwn +++ b/doc/todo/enable-htaccess-files.mdwn @@ -5,7 +5,7 @@ @@ -26,7 +26,7 @@ memoize("file_pruned"); - sub defaultconfig () { #{{{ + sub defaultconfig () { - wiki_file_prune_regexps => [qr/\.\./, qr/^\./, qr/\/\./, + wiki_file_prune_regexps => [qr/\.\./, qr/^\.(?!htaccess)/, qr/\/\.(?!htaccess)/, qr/\.x?html?$/, qr/\.ikiwiki-new$/, diff --git a/doc/todo/format_escape.mdwn b/doc/todo/format_escape.mdwn index 8dfe05581..574883d1b 100644 --- a/doc/todo/format_escape.mdwn +++ b/doc/todo/format_escape.mdwn @@ -141,13 +141,13 @@ Index: IkiWiki/Plugin/rst.pm print html[html.find('')+6:html.find('')].strip(); "; - sub import { #{{{ + sub import { hook(type => "htmlize", id => "rst", call => \&htmlize); + hook(type => "htmlescape", id => "rst", call => \&htmlescape); + hook(type => "htmlescapelink", id => "rst", call => \&htmlescapelink); - } # }}} + } -+sub htmlescapelink ($$;@) { #{{{ ++sub htmlescapelink ($$;@) { + my $url = shift; + my $text = shift; + my %params = @_; @@ -158,15 +158,15 @@ Index: IkiWiki/Plugin/rst.pm + else { + return "`$text <$url>`_"; + } -+} # }}} ++} + -+sub htmlescape ($) { #{{{ ++sub htmlescape ($) { + my $html=shift; + $html=~s/^/ /mg; + return ".. raw:: html\n\n".$html; -+} # }}} ++} + - sub htmlize (@) { #{{{ + sub htmlize (@) { my %params=@_; my $content=$params{content}; Index: doc/plugins/write.mdwn @@ -272,7 +272,7 @@ Index: IkiWiki.pm + return $hooks{htmlescapelink}{$type}{call}->($bestlink, $linktext); + } return "$linktext"; - } #}}} + } @@ -628,6 +640,14 @@ preview => $preprocess_preview, diff --git a/doc/todo/fortune:_select_options_via_environment.mdwn b/doc/todo/fortune:_select_options_via_environment.mdwn index f906312fe..ddacd91b5 100644 --- a/doc/todo/fortune:_select_options_via_environment.mdwn +++ b/doc/todo/fortune:_select_options_via_environment.mdwn @@ -14,9 +14,9 @@ package IkiWiki::Plugin::fortune; use warnings; - @@ -12,7 +18,13 @@ sub import { #{{{ + @@ -12,7 +18,13 @@ sub import { - sub preprocess (@) { #{{{ + sub preprocess (@) { $ENV{PATH}="$ENV{PATH}:/usr/games:/usr/local/games"; - my $f = `fortune 2>/dev/null`; + my $f; diff --git a/doc/todo/index.html_allowed.mdwn b/doc/todo/index.html_allowed.mdwn index f030f9eea..f5e6f8cd7 100644 --- a/doc/todo/index.html_allowed.mdwn +++ b/doc/todo/index.html_allowed.mdwn @@ -91,15 +91,15 @@ page "A/B/index.html" is treated as "A/B". +++ ikidev/IkiWiki.pm 2007-02-25 15:05:22.328852000 -0800 @@ -192,6 +192,12 @@ return $untainted; - } #}}} + } - +sub titlename($;@) { #{{{ + +sub titlename($;@) { + my $page = shift; + $page =~ s!/index$!!; + return pagetitle(basename($page), @_); - +} #}}} + +} + - sub basename ($) { #{{{ + sub basename ($) { my $file=shift; @@ -117,7 +117,7 @@ diff -ru ikiwiki-2.4/IkiWiki.pm ikiwiki/IkiWiki.pm $page=~s/\Q.$type\E*$// if defined $type; + $page=~s/\/index$// if $page =~ /\/index$/; return $page; - } #}}} + } diff --git a/doc/todo/inline:_numerical_ordering_by_title.mdwn b/doc/todo/inline:_numerical_ordering_by_title.mdwn index 95511d998..3f6c8b598 100644 --- a/doc/todo/inline:_numerical_ordering_by_title.mdwn +++ b/doc/todo/inline:_numerical_ordering_by_title.mdwn @@ -155,11 +155,11 @@ Joey, have you forgotten about that request? ;) --[[Paweł|ptecza]] %config %links %pagestate %renderedfiles %pagesources %destsources); our $VERSION = 2.00; # plugin interface version, next is ikiwiki version - @@ -835,6 +835,42 @@ sub titlepage ($) { #{{{ + @@ -835,6 +835,42 @@ sub titlepage ($) { return $title; - } #}}} + } - +sub titlecmp ($$) { #{{{ + +sub titlecmp ($$) { + my $titleA=shift; + my $titleB=shift; + @@ -193,29 +193,29 @@ Joey, have you forgotten about that request? ;) --[[Paweł|ptecza]] + return -1 if (@listB); + + return 0; - +} #}}} + +} + - sub linkpage ($) { #{{{ + sub linkpage ($) { my $link=shift; my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_"; diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm index 37752dd..ccaa399 100644 --- a/IkiWiki/Plugin/brokenlinks.pm +++ b/IkiWiki/Plugin/brokenlinks.pm - @@ -59,7 +59,7 @@ sub preprocess (@) { #{{{ + @@ -59,7 +59,7 @@ sub preprocess (@) { map { "
  • $_
  • " } - sort @broken) + sort titlecmp @broken) ."\n"; - } # }}} + } diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 8efef3f..263e7a6 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm - @@ -192,7 +192,7 @@ sub preprocess_inline (@) { #{{{ + @@ -192,7 +192,7 @@ sub preprocess_inline (@) { } if (exists $params{sort} && $params{sort} eq 'title') { @@ -228,20 +228,20 @@ Joey, have you forgotten about that request? ;) --[[Paweł|ptecza]] index b910758..10a1d87 100644 --- a/IkiWiki/Plugin/orphans.pm +++ b/IkiWiki/Plugin/orphans.pm - @@ -56,7 +56,7 @@ sub preprocess (@) { #{{{ + @@ -56,7 +56,7 @@ sub preprocess (@) { htmllink($params{page}, $params{destpage}, $_, noimageinline => 1). "" - } sort @orphans). + } sort titlecmp @orphans). "\n"; - } # }}} + } diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index ceb7c84..00798e1 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm - @@ -89,7 +89,7 @@ sub genpage ($$) { #{{{ + @@ -89,7 +89,7 @@ sub genpage ($$) { $template->param(have_actions => 1); } diff --git a/doc/todo/language_definition_for_the_meta_plugin.mdwn b/doc/todo/language_definition_for_the_meta_plugin.mdwn index 33098c601..4ac4e2e25 100644 --- a/doc/todo/language_definition_for_the_meta_plugin.mdwn +++ b/doc/todo/language_definition_for_the_meta_plugin.mdwn @@ -54,7 +54,7 @@ This may be useful for sites with a few pages in different languages, but no ful my %authorurl; +my %lang; - sub import { #{{{ + sub import { hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1); @@ -100,6 +101,11 @@ $meta{$page}.=' > Please resolve lang somewhere reusable rather than within meta plugin: It is certainly usable outside diff --git a/doc/todo/meta_rcsid.mdwn b/doc/todo/meta_rcsid.mdwn index 81a2c1328..158edea6e 100644 --- a/doc/todo/meta_rcsid.mdwn +++ b/doc/todo/meta_rcsid.mdwn @@ -26,7 +26,7 @@ of CVS/SVN-style keywords (like '$Id$', etc.) from the source file in the page t my %copyright; +my %rcsid; - sub import { #{{{ + sub import { hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1); @@ -110,6 +111,9 @@ $meta{$page}.="\n"; diff --git a/doc/todo/missingparents.pm.mdwn b/doc/todo/missingparents.pm.mdwn index 0cc7137ba..c5f2ab535 100644 --- a/doc/todo/missingparents.pm.mdwn +++ b/doc/todo/missingparents.pm.mdwn @@ -82,15 +82,15 @@ Index: IkiWiki/Plugin/missingparents.pm +my %ownfiles; +my @pagespecs; + -+sub import { #{{{ ++sub import { + hook(type => "checkconfig", id => "missingparents", call => \&checkconfig); + hook(type => "needsdelete", id => "missingparents", call => \&needsdelete); + hook(type => "needsbuild", id => "missingparents", call => \&needsbuild); + hook(type => "savestate", id => "missingparents", call => \&savestate); + hook(type => "preprocess", id => "missingparents", call => \&preprocess_missingparents); -+} # }}} ++} + -+sub checkconfig () { #{{{ ++sub checkconfig () { + IkiWiki::preprocess("missingparents", "missingparents", + readfile(srcfile("missingparents.mdwn"))); + loadstate(); @@ -99,9 +99,9 @@ Index: IkiWiki/Plugin/missingparents.pm + unlink $config{srcdir}.'/'.$file; + } + } -+} #}}} ++} + -+sub preprocess_missingparents (@) { #{{{ ++sub preprocess_missingparents (@) { + my %params=@_; + + if (! defined $params{pages} || ! defined $params{generate}) { @@ -115,10 +115,10 @@ Index: IkiWiki/Plugin/missingparents.pm + #translators: is text for pages that match that pagespec. + return sprintf(gettext("missingparents in %s will be %s"), + '`'.$params{pages}.'`', '`\\'.$params{generate}.'`'); -+} # }}} ++} + +my $state_loaded=0; -+sub loadstate() { #{{{ ++sub loadstate() { + my $filename = "$config{wikistatedir}/missingparents"; + if (-e $filename) { + open (IN, $filename) || @@ -132,9 +132,9 @@ Index: IkiWiki/Plugin/missingparents.pm + + $state_loaded=1; + } -+} #}}} ++} + -+sub savestate() { #{{{ ++sub savestate() { + my $filename = "$config{wikistatedir}/missingparents.new"; + my $cleanup = sub { unlink ($filename) }; + open (OUT, ">$filename") || error("open $filename: $!", $cleanup); @@ -143,9 +143,9 @@ Index: IkiWiki/Plugin/missingparents.pm + } + rename($filename, "$config{wikistatedir}/missingparents") || + error("rename $filename: $!", $cleanup); -+} #}}} ++} + -+sub needsdelete (@) { #{{{ ++sub needsdelete (@) { + my $files=shift; + + my @mydel; @@ -167,9 +167,9 @@ Index: IkiWiki/Plugin/missingparents.pm + foreach my $page (@mydel){ + push @{$files}, $page; + } -+} #}}} ++} + -+sub check_matches($) { #{{{ ++sub check_matches($) { + my $page = shift; + return if $IkiWiki::pagesources{$page}; + @@ -183,9 +183,9 @@ Index: IkiWiki/Plugin/missingparents.pm + return $output; + } + return ""; -+} #}}} ++} + -+sub needsbuild ($) { #{{{ ++sub needsbuild ($) { + my $files=shift; + my @new; + @@ -209,7 +209,7 @@ Index: IkiWiki/Plugin/missingparents.pm + $ownfiles{$file} = 1; + push @{$files}, $file; + } -+} #}}} ++} + +1 Index: IkiWiki.pm @@ -227,18 +227,18 @@ Index: IkiWiki.pm our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE @@ -330,6 +336,30 @@ error("failed renaming $newfile to $destdir/$file: $!", $cleanup); - } #}}} + } -+sub newpage($$) { #{{{ ++sub newpage($$) { + my $file=shift; + my $page=shift; + + $pagemtime{$page} = $pagectime{$page} = time; + $pagesources{$page} = $file; + $pagecase{lc $page} = $page; -+} #}}} ++} + -+sub delpage($) { #{{{ ++sub delpage($) { + my $page=shift; + $links{$page}=[]; + $renderedfiles{$page}=[]; @@ -251,10 +251,10 @@ Index: IkiWiki.pm + delete $destsources{$_}; + } + } -+} #}}} ++} + my %cleared; - sub will_render ($$;$) { #{{{ + sub will_render ($$;$) { my $page=shift; diff --git a/doc/todo/modify_page_filename_in_plugin.mdwn b/doc/todo/modify_page_filename_in_plugin.mdwn index 7c0a909eb..4099487a1 100644 --- a/doc/todo/modify_page_filename_in_plugin.mdwn +++ b/doc/todo/modify_page_filename_in_plugin.mdwn @@ -10,7 +10,7 @@ My solution is to allow plugins to provide a hook that sets the pagename. --[[/u +++ /usr/share/perl5/IkiWiki.pm 2008-10-07 11:57:26.000000000 -0400 @@ -196,11 +196,32 @@ - sub pagename ($) { #{{{ + sub pagename ($) { my $file=shift; my $type=pagetype($file); @@ -27,7 +27,7 @@ My solution is to allow plugins to provide a hook that sets the pagename. --[[/u $page=~s/\Q.$type\E*$// if defined $type; return $page; + } - } #}}} + } - sub htmlpage ($) { #{{{ + sub htmlpage ($) { diff --git a/doc/todo/pagespec_relative_to_a_target.mdwn b/doc/todo/pagespec_relative_to_a_target.mdwn index f7b248670..4757988e0 100644 --- a/doc/todo/pagespec_relative_to_a_target.mdwn +++ b/doc/todo/pagespec_relative_to_a_target.mdwn @@ -57,7 +57,7 @@ diff -urNX ignorepats ikiwiki/IkiWiki/Plugin/relative.pm ikidev/IkiWiki/Plugin/r + +package IkiWiki::PageSpec; + -+sub match_relative($$;@) { #{{{ ++sub match_relative($$;@) { + my $parent = shift; + my $spec = shift; + my %params = @_; @@ -69,21 +69,21 @@ diff -urNX ignorepats ikiwiki/IkiWiki/Plugin/relative.pm ikidev/IkiWiki/Plugin/r + } + } + return IkiWiki::FailReason->new("$parent can't match $spec against anything"); -+} #}}} ++} + -+sub match_has_child($$;@) { #{{{ ++sub match_has_child($$;@) { + my $page = shift; + my $childname = shift; + my $spec; -+ if ($childname) { #{{{ ++ if ($childname) { + $spec = "$page/$childname or $page/*/$childname"; -+ } #}}} -+ else { #{{{ ++ } ++ else { + $spec = "$page/*"; -+ } #}}} ++ } + + return match_relative($page, $spec, @_); -+} #}}} ++} + +1 diff --git a/doc/todo/provide_sha1_for_git_diffurl.mdwn b/doc/todo/provide_sha1_for_git_diffurl.mdwn index 9c8b340de..01aa512f8 100644 --- a/doc/todo/provide_sha1_for_git_diffurl.mdwn +++ b/doc/todo/provide_sha1_for_git_diffurl.mdwn @@ -10,7 +10,7 @@ diffurls of the following form: index 5bef928..164210d 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm - @@ -518,6 +518,7 @@ sub rcs_recentchanges ($) { #{{{ + @@ -518,6 +518,7 @@ sub rcs_recentchanges ($) { my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : ""; $diffurl =~ s/\[\[file\]\]/$file/go; diff --git a/doc/todo/require_CAPTCHA_to_edit.mdwn b/doc/todo/require_CAPTCHA_to_edit.mdwn index 110b4167f..83ba07eb0 100644 --- a/doc/todo/require_CAPTCHA_to_edit.mdwn +++ b/doc/todo/require_CAPTCHA_to_edit.mdwn @@ -91,15 +91,15 @@ ignored. --- a/IkiWiki/Plugin/openid.pm +++ b/IkiWiki/Plugin/openid.pm -@@ -18,6 +18,7 @@ sub getopt () { #{{{ +@@ -18,6 +18,7 @@ sub getopt () { error($@) if $@; Getopt::Long::Configure('pass_through'); GetOptions("openidsignup=s" => \$config{openidsignup}); + GetOptions("openidneedscaptcha=s" => \$config{openidneedscaptcha}); - } #}}} + } - sub formbuilder_setup (@) { #{{{ -@@ -61,6 +62,7 @@ sub formbuilder_setup (@) { #{{{ + sub formbuilder_setup (@) { +@@ -61,6 +62,7 @@ sub formbuilder_setup (@) { # Skip all other required fields in this case. foreach my $field ($form->field) { next if $field eq "openid_url"; @@ -107,7 +107,7 @@ ignored. $form->field(name => $field, required => 0, validate => '/.*/'); } -@@ -96,6 +98,18 @@ sub validate ($$$;$) { #{{{ +@@ -96,6 +98,18 @@ sub validate ($$$;$) { } } @@ -152,19 +152,19 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ +sub import { hook(type => "formbuilder_setup", id => "recaptcha", call => \&formbuilder_setup); -} # }}} +} -sub getopt () { #{{{ +sub getopt () { eval q{use Getopt::Long}; error($@) if $@; Getopt::Long::Configure('pass_through'); GetOptions("reCaptchaPubKey=s" => \$config{reCaptchaPubKey}); GetOptions("reCaptchaPrivKey=s" => \$config{reCaptchaPrivKey}); -} #}}} +} -sub formbuilder_setup (@) { #{{{ +sub formbuilder_setup (@) { my %params=@_; my $form=$params{form}; @@ -274,7 +274,7 @@ EOTAGS }); } } -} # }}} +} # The following function is borrowed from # Captcha::reCAPTCHA by Andy Armstrong and are under the PERL Artistic License diff --git a/doc/todo/source_link.mdwn b/doc/todo/source_link.mdwn index 5d6cb89e8..b051361a8 100644 --- a/doc/todo/source_link.mdwn +++ b/doc/todo/source_link.mdwn @@ -31,13 +31,13 @@ I just implemented this. There is one [[patch]] to the default page template, a use IkiWiki; use open qw{:utf8 :std}; - sub import { #{{{ + sub import { hook(type => "getsetup", id => "getsource", call => \&getsetup); hook(type => "pagetemplate", id => "getsource", call => \&pagetemplate); hook(type => "sessioncgi", id => "getsource", call => \&cgi_getsource); - } # }}} + } - sub getsetup () { #{{{ + sub getsetup () { return plugin => { safe => 1, @@ -50,9 +50,9 @@ I just implemented this. There is one [[patch]] to the default page template, a safe => 1, rebuild => 0, }, - } #}}} + } - sub pagetemplate (@) { #{{{ + sub pagetemplate (@) { my %params=@_; my $page=$params{page}; @@ -62,9 +62,9 @@ I just implemented this. There is one [[patch]] to the default page template, a $template->param(getsourceurl => IkiWiki::cgiurl(do => "getsource", page => $page)); $template->param(have_actions => 1); } - } # }}} + } - sub cgi_getsource ($$) { #{{{ + sub cgi_getsource ($$) { my $cgi=shift; my $session=shift; diff --git a/doc/todo/structured_page_data.mdwn b/doc/todo/structured_page_data.mdwn index 2a196ed23..22f67cc0a 100644 --- a/doc/todo/structured_page_data.mdwn +++ b/doc/todo/structured_page_data.mdwn @@ -257,21 +257,21 @@ in a large number of other cases. use CGI::FormBuilder; use IkiWiki 2.00; - sub import { #{{{ + sub import { hook(type => "getsetup", id => "form", call => \&getsetup); hook(type => "htmlize", id => "form", call => \&htmlize); hook(type => "sessioncgi", id => "form", call => \&cgi_submit); - } # }}} + } - sub getsetup () { #{{{ + sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, - } #}}} + } - sub makeFormFromYAML ($$$) { #{{{ + sub makeFormFromYAML ($$$) { my $page = shift; my $YAMLString = shift; my $q = shift; @@ -350,9 +350,9 @@ in a large number of other cases. # IkiWiki::decode_form_utf8($form); return $form; - } #}}} + } - sub htmlize (@) { #{{{ + sub htmlize (@) { my %params=@_; my $content = $params{content}; my $page = $params{page}; @@ -360,9 +360,9 @@ in a large number of other cases. my $form = makeFormFromYAML($page, $content, undef); return $form->render(submit => 'Update Form'); - } # }}} + } - sub cgi_submit ($$) { #{{{ + sub cgi_submit ($$) { my $q=shift; my $session=shift; @@ -425,11 +425,11 @@ in a large number of other cases. } exit; - } #}}} + } package IkiWiki::PageSpec; - sub match_form_eq ($$;@) { #{{{ + sub match_form_eq ($$;@) { my $page=shift; my $argSet=shift; my @args=split(/,/, $argSet); @@ -460,7 +460,7 @@ in a large number of other cases. } else { return IkiWiki::FailReason->new("field value does not match"); } - } #}}} + } 1 @@ -476,22 +476,22 @@ in a large number of other cases. my $inTable = 0; - sub import { #{{{ + sub import { hook(type => "getsetup", id => "data", call => \&getsetup); hook(type => "needsbuild", id => "data", call => \&needsbuild); hook(type => "preprocess", id => "data", call => \&preprocess, scan => 1); hook(type => "preprocess", id => "datatable", call => \&preprocess_table, scan => 1); # does this need scan? - } # }}} + } - sub getsetup () { #{{{ + sub getsetup () { return plugin => { safe => 1, rebuild => 1, # format plugin }, - } #}}} + } - sub needsbuild (@) { #{{{ + sub needsbuild (@) { my $needsbuild=shift; foreach my $page (keys %pagestate) { if (exists $pagestate{$page}{data}) { @@ -506,7 +506,7 @@ in a large number of other cases. } } - sub preprocess (@) { #{{{ + sub preprocess (@) { my @argslist = @_; my %params=@argslist; @@ -546,9 +546,9 @@ in a large number of other cases. } return $html; - } # }}} + } - sub preprocess_table (@) { #{{{ + sub preprocess_table (@) { my %params=@_; my @lines; @@ -568,11 +568,11 @@ in a large number of other cases. push @lines, ''; return join("\n", @lines); - } #}}} + } package IkiWiki::PageSpec; - sub match_data_eq ($$;@) { #{{{ + sub match_data_eq ($$;@) { my $page=shift; my $argSet=shift; my @args=split(/,/, $argSet); @@ -592,9 +592,9 @@ in a large number of other cases. } else { return IkiWiki::FailReason->new("value does not match"); } - } #}}} + } - sub match_data_link ($$;@) { #{{{ + sub match_data_link ($$;@) { my $page=shift; my $argSet=shift; my @params=@_; @@ -618,6 +618,6 @@ in a large number of other cases. } return IkiWiki::FailReason->new("No data link on page $page with key $key matches glob $value"); - } #}}} + } 1 diff --git a/doc/todo/supporting_comments_via_disussion_pages.mdwn b/doc/todo/supporting_comments_via_disussion_pages.mdwn index 892db18a9..aae0b3008 100644 --- a/doc/todo/supporting_comments_via_disussion_pages.mdwn +++ b/doc/todo/supporting_comments_via_disussion_pages.mdwn @@ -91,14 +91,14 @@ Each comment is processed to something like this: use strict; use IkiWiki '1.02'; - sub import { #{{{ + sub import { hook(type => "formbuilder_setup", id => "comments", call => \&formbuilder_setup); hook(type => "preprocess", id => "blogcomment", call => \&preprocess); - } # }}} + } - sub formbuilder_setup (@) { #{{{ + sub formbuilder_setup (@) { my %params=@_; my $cgi = $params{cgi}; my $form = $params{form}; @@ -138,9 +138,9 @@ Each comment is processed to something like this: $content.=qq{[[!blogcomment from="""$name""" timestamp="""$timestamp""" subject="""$subject""" text="""$comment"""]]\n\n}; $content=~s/\n/\r\n/g; $form->field(name => "editcontent", value => $content, force => 1); - } # }}} + } - sub preprocess (@) { #{{{ + sub preprocess (@) { my %params=@_; my ($text, $date, $from, $subject, $r); @@ -159,7 +159,7 @@ Each comment is processed to something like this: $r .= "\n" . $text . "
    \n"; return $r; - } # }}} + } 1; diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 2bdeb62be..3de3032b3 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -90,7 +90,7 @@ like this: index 8d728c9..1bd46a9 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -618,6 +618,8 @@ sub pagetype ($) { #{{{ + @@ -618,6 +618,8 @@ sub pagetype ($) { if ($page =~ /\.([^.]+)$/) { return $1 if exists $hooks{htmlize}{$1}; @@ -98,7 +98,7 @@ like this: + return $page; } return; - } #}}} + } ## format directive diff --git a/doc/todo/tidy_git__39__s_ctime_debug_output.mdwn b/doc/todo/tidy_git__39__s_ctime_debug_output.mdwn index aaa040ec7..bfc130d69 100644 --- a/doc/todo/tidy_git__39__s_ctime_debug_output.mdwn +++ b/doc/todo/tidy_git__39__s_ctime_debug_output.mdwn @@ -10,6 +10,6 @@ + debug("ctime for '$file': ". localtime($ctime)); return $ctime; - } #}}} + } [[!tag patch done]] diff --git a/doc/todo/tmplvars_plugin.mdwn b/doc/todo/tmplvars_plugin.mdwn index f7d06a579..644cf23aa 100644 --- a/doc/todo/tmplvars_plugin.mdwn +++ b/doc/todo/tmplvars_plugin.mdwn @@ -11,12 +11,12 @@ A simple plugin to allow per-page customization of a template by passing paramat my %tmplvars; - sub import { #{{{ + sub import { hook(type => "preprocess", id => "tmplvars", call => \&preprocess); hook(type => "pagetemplate", id => "tmplvars", call => \&pagetemplate); - } # }}} + } - sub preprocess (@) { #{{{ + sub preprocess (@) { my %params=@_; if ($params{page} eq $params{destpage}) { @@ -34,9 +34,9 @@ A simple plugin to allow per-page customization of a template by passing paramat } } - } # }}} + } - sub pagetemplate (@) { #{{{ + sub pagetemplate (@) { my %params=@_; my $template = $params{template}; @@ -47,6 +47,6 @@ A simple plugin to allow per-page customization of a template by passing paramat } return undef; - } # }}} + } 1 diff --git a/doc/todo/tracking_bugs_with_dependencies.mdwn b/doc/todo/tracking_bugs_with_dependencies.mdwn index 3af0458bd..2832e37aa 100644 --- a/doc/todo/tracking_bugs_with_dependencies.mdwn +++ b/doc/todo/tracking_bugs_with_dependencies.mdwn @@ -194,9 +194,9 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W index 4e4da11..8b3cdfe 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm - @@ -1550,7 +1550,16 @@ sub globlist_to_pagespec ($) { #{{{ + @@ -1550,7 +1550,16 @@ sub globlist_to_pagespec ($) { - sub is_globlist ($) { #{{{ + sub is_globlist ($) { my $s=shift; - return ( $s =~ /[^\s]+\s+([^\s]+)/ && $1 ne "and" && $1 ne "or" ); + return ! ($s =~ / @@ -209,19 +209,19 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W + ) | + (\s and \s) | (\s or \s) # or we find 'and' or 'or' somewhere + /xs); - } #}}} + } - sub safequote ($) { #{{{ - @@ -1631,7 +1640,7 @@ sub pagespec_merge ($$) { #{{{ + sub safequote ($) { + @@ -1631,7 +1640,7 @@ sub pagespec_merge ($$) { return "($a) or ($b)"; - } #}}} + } - -sub pagespec_translate ($) { #{{{ - +sub pagespec_makeperl ($) { #{{{ + -sub pagespec_translate ($) { + +sub pagespec_makeperl ($) { my $spec=shift; # Support for old-style GlobLists. - @@ -1650,12 +1659,14 @@ sub pagespec_translate ($) { #{{{ + @@ -1650,12 +1659,14 @@ sub pagespec_translate ($) { | \) # ) | @@ -238,7 +238,7 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W my $word=$1; if (lc $word eq 'and') { $code.=' &&'; - @@ -1666,16 +1677,23 @@ sub pagespec_translate ($) { #{{{ + @@ -1666,16 +1677,23 @@ sub pagespec_translate ($) { elsif ($word eq "(" || $word eq ")" || $word eq "!") { $code.=' '.$word; } @@ -265,14 +265,14 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W } } - @@ -1683,8 +1701,18 @@ sub pagespec_translate ($) { #{{{ + @@ -1683,8 +1701,18 @@ sub pagespec_translate ($) { $code=0; } + return 'sub { my $page=shift; my %params = @_; '.$code.' }'; - +} #}}} + +} + - +sub pagespec_translate ($) { #{{{ + +sub pagespec_translate ($) { + my $spec=shift; + + my $code = pagespec_makeperl($spec); @@ -282,19 +282,19 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W no warnings; - return eval 'sub { my $page=shift; '.$code.' }'; + return eval $code; - } #}}} + } - sub pagespec_match ($$;@) { #{{{ - @@ -1699,7 +1727,7 @@ sub pagespec_match ($$;@) { #{{{ + sub pagespec_match ($$;@) { + @@ -1699,7 +1727,7 @@ sub pagespec_match ($$;@) { my $sub=pagespec_translate($spec); return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"") if $@; - return $sub->($page, @params); + return $sub->($page, @params, specFuncs => {}); - } #}}} + } - sub pagespec_valid ($) { #{{{ - @@ -1748,11 +1776,78 @@ sub new { #{{{ + sub pagespec_valid ($) { + @@ -1748,11 +1776,78 @@ sub new { package IkiWiki::PageSpec; @@ -361,7 +361,7 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W + } +} + - sub match_glob ($$;@) { #{{{ + sub match_glob ($$;@) { my $page=shift; my $glob=shift; my %params=@_; @@ -373,9 +373,9 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W my $from=exists $params{location} ? $params{location} : ''; # relative matching - @@ -1782,11 +1877,12 @@ sub match_internal ($$;@) { #{{{ + @@ -1782,11 +1877,12 @@ sub match_internal ($$;@) { - sub match_link ($$;@) { #{{{ + sub match_link ($$;@) { my $page=shift; - my $link=lc(shift); + my $fulllink=shift; @@ -388,7 +388,7 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W # relative matching if ($link =~ m!^\.! && defined $from) { $from=~s#/?[^/]+$##; - @@ -1804,19 +1900,32 @@ sub match_link ($$;@) { #{{{ + @@ -1804,19 +1900,32 @@ sub match_link ($$;@) { } else { return IkiWiki::SuccessReason->new("$page links to page $p matching $link") @@ -397,9 +397,9 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W } } return IkiWiki::FailReason->new("$page does not link to $link"); - } #}}} + } - sub match_backlink ($$;@) { #{{{ + sub match_backlink ($$;@) { - return match_link($_[1], $_[0], @_); + my $page=shift; + my $backlink=shift; @@ -410,9 +410,9 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W + } + + return match_link($backlink, $page, @params); - } #}}} + } - sub match_created_before ($$;@) { #{{{ + sub match_created_before ($$;@) { my $page=shift; my $testpage=shift; + my @params=@_; @@ -423,8 +423,8 @@ account all comments above (which doesn't mean it is above reproach :) ). --[[W if (exists $IkiWiki::pagectime{$testpage}) { if ($IkiWiki::pagectime{$page} < $IkiWiki::pagectime{$testpage}) { - @@ -1834,6 +1943,11 @@ sub match_created_before ($$;@) { #{{{ - sub match_created_after ($$;@) { #{{{ + @@ -1834,6 +1943,11 @@ sub match_created_before ($$;@) { + sub match_created_after ($$;@) { my $page=shift; my $testpage=shift; + my @params=@_; diff --git a/doc/todo/turn_edittemplate_verbosity_off_by_default.mdwn b/doc/todo/turn_edittemplate_verbosity_off_by_default.mdwn index 87e55685c..14bb43782 100644 --- a/doc/todo/turn_edittemplate_verbosity_off_by_default.mdwn +++ b/doc/todo/turn_edittemplate_verbosity_off_by_default.mdwn @@ -8,7 +8,7 @@ I think this (untested) patch might just do the trick: --- a/IkiWiki/Plugin/edittemplate.pm +++ b/IkiWiki/Plugin/edittemplate.pm - @@ -46,8 +46,13 @@ sub preprocess (@) { #{{{ + @@ -46,8 +46,13 @@ sub preprocess (@) { $pagestate{$params{page}}{edittemplate}{$params{match}}=$params{template}; @@ -21,9 +21,9 @@ I think this (untested) patch might just do the trick: + else { + return ''; + } - } # }}} + } - sub formbuilder (@) { #{{{ + sub formbuilder (@) { --[[madduck]] diff --git a/doc/todo/using_meta_titles_for_parentlinks.html b/doc/todo/using_meta_titles_for_parentlinks.html index d04e5a300..6da40a415 100644 --- a/doc/todo/using_meta_titles_for_parentlinks.html +++ b/doc/todo/using_meta_titles_for_parentlinks.html @@ -82,9 +82,9 @@ diff -c /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib /usr/share/perl5/IkiWiki *** 289,294 **** --- 290,319 ---- } - } #}}} + } -+ sub IkiWiki::pagetitle ($;$) { #{{{ ++ sub IkiWiki::pagetitle ($;$) { + my $page=shift; + my $unescaped=shift; + @@ -106,11 +106,11 @@ diff -c /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib /usr/share/perl5/IkiWiki + } + + return $page; -+ } #}}} ++ } + package IkiWiki::PageSpec; - sub match_title ($$;@) { #{{{ + sub match_title ($$;@) { diff --git a/doc/todo/varioki_--_add_template_variables___40__with_closures_for_values__41___in_ikiwiki.setup.mdwn b/doc/todo/varioki_--_add_template_variables___40__with_closures_for_values__41___in_ikiwiki.setup.mdwn index 492a32b36..b28469993 100644 --- a/doc/todo/varioki_--_add_template_variables___40__with_closures_for_values__41___in_ikiwiki.setup.mdwn +++ b/doc/todo/varioki_--_add_template_variables___40__with_closures_for_values__41___in_ikiwiki.setup.mdwn @@ -157,9 +157,9 @@ ManojSrivastava +=cut + + -+sub import { #{{{ ++sub import { + hook(type => "pagetemplate", id => "varioki", call => \&pagetemplate); -+} # }}} ++} + + +=pod @@ -175,7 +175,7 @@ ManojSrivastava + +=cut + -+sub pagetemplate (@) { #{{{ ++sub pagetemplate (@) { + my %params=@_; + my $page=$params{page}; + my $template=$params{template}; @@ -207,7 +207,7 @@ ManojSrivastava + $template->param("$var" =>"$value"); + } + } -+} # }}} ++} + +1; + diff --git a/ikiwiki.in b/ikiwiki.in index 473cbdbfd..32a24af84 100755 --- a/ikiwiki.in +++ b/ikiwiki.in @@ -9,12 +9,12 @@ use strict; use lib '.'; # For use in nonstandard directory, munged by Makefile. use IkiWiki; -sub usage () { #{{{ +sub usage () { die gettext("usage: ikiwiki [options] source dest"), "\n", gettext(" ikiwiki --setup configfile"), "\n"; -} #}}} +} -sub getconfig () { #{{{ +sub getconfig () { if (! exists $ENV{WRAPPED_OPTIONS}) { %config=defaultconfig(); eval q{use Getopt::Long}; @@ -123,9 +123,9 @@ sub getconfig () { #{{{ loadplugins(); checkconfig(); } -} #}}} +} -sub main () { #{{{ +sub main () { getconfig(); if ($config{setup}) { @@ -207,6 +207,6 @@ sub main () { #{{{ saveindex(); debug(gettext("done")); } -} #}}} +} main; -- cgit v1.2.3 From 8614abce09f6e4338c10ea1c2d8950fcebbf5869 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 17 Dec 2008 19:47:54 -0500 Subject: two comments ui suggestions --- doc/todo/comments.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index adc302a25..38c61287c 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -6,3 +6,8 @@ Known issues with the [[plugins/comments]] plugin: * Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs +* Should the comments be visually set off more from the page above? + Rather than just a horizontal rule, I'm thinking put the comments + in a box like is used for inlined pages. +* Instead of just a link to add a comment, it could have a form to enter + the title, similar to the form for adding a new blog post. -- cgit v1.2.3 From 1074d38f0dc55e74979e4013d4a0d9953a89fa50 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 17 Dec 2008 20:40:46 -0500 Subject: deletion --- doc/todo/comments.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 38c61287c..ee158e53c 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -11,3 +11,7 @@ Known issues with the [[plugins/comments]] plugin: in a box like is used for inlined pages. * Instead of just a link to add a comment, it could have a form to enter the title, similar to the form for adding a new blog post. +* If a spammer posts a comment, it is either impossible or hard to clean + up via the web. Would be nice to have some kind of link on the comment + that allows trusted users to remove it (using the remove plugin of + course). -- cgit v1.2.3 From 835801a6ff13b23cf96b2d080805c095f7110315 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 18 Dec 2008 12:32:23 -0500 Subject: note about comments feed --- doc/todo/comments.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index ee158e53c..f5b580da2 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -15,3 +15,10 @@ Known issues with the [[plugins/comments]] plugin: up via the web. Would be nice to have some kind of link on the comment that allows trusted users to remove it (using the remove plugin of course). +* One can use inline to set up a feed of all comments posted to any page. + Using template=comments_display they are displayed right. Only problem + is there is no indication in that template of what page each comment in the + feed is a comment on. So, if a comment is inlined into a different page, + I think it should show a link back to the page commented on. + (BTW, the rss feed in this situation seems ok; there the link element + points back to the parent page. -- cgit v1.2.3 From b2439a3e5193022c7ed52a726dd5906643ca45c7 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 18 Dec 2008 12:53:47 -0500 Subject: pagespec thoughts --- doc/todo/comments.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index f5b580da2..c571b8c56 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -22,3 +22,8 @@ Known issues with the [[plugins/comments]] plugin: I think it should show a link back to the page commented on. (BTW, the rss feed in this situation seems ok; there the link element points back to the parent page. +* It would be useful to have a pagespec that always matches all comments on + pages matching a glob. Something like `comment(blog/*)`. + Perhaps postcomment could also be folded into this? Then the pagespec + would match both existing comments, as well as new comments that are + being posted. -- cgit v1.2.3 From a115ff254dd97a182b8ca21609e8453a514c3d25 Mon Sep 17 00:00:00 2001 From: "smcv@" Date: Thu, 18 Dec 2008 21:08:33 +0000 Subject: Update todo/comments with today's fixes, and thoughts about the remaining items --- doc/todo/comments.mdwn | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index c571b8c56..6a4b40332 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -2,19 +2,47 @@ Known issues with the [[plugins/comments]] plugin: * There is some common code cargo-culted from other plugins (notably inline and editpage) which should probably be shared + + > Actually, there's less of this now than there used to be - a lot of simple + > things that were shared have become unshareable as they became more + > complex. --[[smcv]] + * Previews always say "unknown IP address" + * Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID + + > Done in my comments git branch --[[smcv]] + * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs + + > Done in my comments git branch, at least as a mockup (using the (?), + > {x} and {*} smileys for anonymous, OpenID and login respectively). + > --[[smcv]] + * Should the comments be visually set off more from the page above? Rather than just a horizontal rule, I'm thinking put the comments in a box like is used for inlined pages. + + > I did put them in a box in the CSS... I agree the default template + > could do with visual improvement though. --[[smcv]] + * Instead of just a link to add a comment, it could have a form to enter the title, similar to the form for adding a new blog post. + + > I'm not sure this is so useful? On Livejournal titles are allowed on + > comments, but very rarely used (and indeed usually not very useful); + > it's hard enough to get some people to title their blog posts :-) + > --[[smcv]] + * If a spammer posts a comment, it is either impossible or hard to clean up via the web. Would be nice to have some kind of link on the comment that allows trusted users to remove it (using the remove plugin of course). + + > Won't the remove plugin refuse to remove internal pages? This would be + > a good feature to have, though. --[[smcv]] + * One can use inline to set up a feed of all comments posted to any page. Using template=comments_display they are displayed right. Only problem is there is no indication in that template of what page each comment in the @@ -22,8 +50,30 @@ Known issues with the [[plugins/comments]] plugin: I think it should show a link back to the page commented on. (BTW, the rss feed in this situation seems ok; there the link element points back to the parent page. + * It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. Perhaps postcomment could also be folded into this? Then the pagespec would match both existing comments, as well as new comments that are being posted. + + > Please see [[plugins/comment/discussion]]. If I've convinced you that + > internal pages are the way forward, then sure, we can do that, because + > people who can comment still won't be able to edit others' comments + > (one of my goals is that commenters can't put words into each other's + > mouths :-) ) + > + > On the other hand, if you still want me to switch this plugin to "real" + > pages, or if internal pages might become editable in future, then + > configuring lockedit/anonok so a user X can add comments to blog pages + > would also let X edit/delete comments on blog pages (including those + > written by others) in arbitrary ways, which doesn't seem good. --[[smcv]] + +* One of Joey's commit messages says "Not ideal, it would be nicer to jump to + the actual comment posted, but no anchor is available". In fact there is + an anchor - the `\[[_comment]]` preprocessing wraps the comment in a
    + with id="comment_123" or something. I'll fix this, unless Joey gets there + first. --[[smcv]] + +* Now that inline has some comments-specific functionality anyway, it would + be good to output in Atom and the equivalent in RSS. -- cgit v1.2.3 From 1d82ac40d48d0d07aed8a596a90f060f03fdb0b0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 18 Dec 2008 20:10:42 -0500 Subject: responses --- doc/todo/comments.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 6a4b40332..c81947e74 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -13,6 +13,8 @@ Known issues with the [[plugins/comments]] plugin: > Done in my comments git branch --[[smcv]] + > Not seeing it there, which branch? --[[Joey]] + * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs @@ -69,6 +71,10 @@ Known issues with the [[plugins/comments]] plugin: > would also let X edit/delete comments on blog pages (including those > written by others) in arbitrary ways, which doesn't seem good. --[[smcv]] + > I had a look at implementing comment() and fell afoul of + > some optimisations that assume only internal() will be used to match + > internal pages. So probably this isn't worth doing. --[[Joey]] + * One of Joey's commit messages says "Not ideal, it would be nicer to jump to the actual comment posted, but no anchor is available". In fact there is an anchor - the `\[[_comment]]` preprocessing wraps the comment in a
    -- cgit v1.2.3 From 7521dd6c7571cba4a3b882ecffc02dbcbed2805e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 18 Dec 2008 20:58:16 -0500 Subject: jump to comment after posting Jumping to the just posted comment was the imputus, but I killed a number of birds here. Added a INLINEPAGE template variable, which can be used to add anchors to any inline template. To keep that sufficiently general, it is the full page name, so the comment anchors and links changed form. Got rid of the FIXMEd hardcoded html anchor div. More importantly, the anchor is now to the very top of the comment, not the text below. So you can see the title, and how it attributes you. Avoid changing the permalink of pages that are not really comments, but happen to contain the _comment directive. I think that behavior was a bug, though not a likely one to occur since _comment should only really be used on comment pages. --- IkiWiki/Plugin/comments.pm | 14 ++++---------- IkiWiki/Plugin/inline.pm | 1 + doc/todo/comments.mdwn | 2 ++ templates/comments_display.tmpl | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 2ca2d0a1d..3b8752894 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -193,12 +193,10 @@ sub preprocess { $pagestate{$page}{meta}{title} = $params{subject}; } - my $baseurl = urlto($params{destpage}, undef, 1); - my $anchor = ""; if ($params{page} =~ m/\/(\Q$config{comments_pagename}\E\d+)$/) { - $anchor = $1; + $pagestate{$page}{meta}{permalink} = urlto($params{destpage}, undef, 1). + "#".$params{page}; } - $pagestate{$page}{meta}{permalink} = "${baseurl}#${anchor}"; eval q{use Date::Parse}; if (! $@) { @@ -206,8 +204,6 @@ sub preprocess { $IkiWiki::pagectime{$page} = $time if defined $time; } - # FIXME: hard-coded HTML (although it's just to set an ID) - return "
    $content
    " if $anchor; return $content; } @@ -499,10 +495,8 @@ sub sessioncgi ($$) { # breaks it or something error($conflict) if defined $conflict; - # Bounce back to where we were, but defeat broken caches - # and jump to the comments anchor. - my $anticache = "?updated=$page/$config{comments_pagename}$i#comments"; - IkiWiki::redirect($cgi, urlto($page, undef, 1).$anticache); + # Jump to the new comment on the page. + IkiWiki::redirect($cgi, urlto($page, undef, 1)."#$location"); } else { IkiWiki::showform ($form, \@buttons, $session, $cgi, diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index d37db97ec..8490b455f 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -340,6 +340,7 @@ sub preprocess_inline (@) { $template->param(content => $content); } $template->param(pageurl => urlto(bestlink($params{page}, $page), $params{destpage})); + $template->param(inlinepage => $page); $template->param(title => pagetitle(basename($page))); $template->param(ctime => displaytime($pagectime{$page}, $params{timeformat})); $template->param(mtime => displaytime($pagemtime{$page}, $params{timeformat})); diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index c81947e74..2bcec69ba 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -81,5 +81,7 @@ Known issues with the [[plugins/comments]] plugin: with id="comment_123" or something. I'll fix this, unless Joey gets there first. --[[smcv]] + > done --[[Joey]] + * Now that inline has some comments-specific functionality anyway, it would be good to output in Atom and the equivalent in RSS. diff --git a/templates/comments_display.tmpl b/templates/comments_display.tmpl index bc4b70273..e7e283bbf 100644 --- a/templates/comments_display.tmpl +++ b/templates/comments_display.tmpl @@ -1,4 +1,4 @@ -
    +
    Posted by -- cgit v1.2.3 From ddabb010b2c45556046fd1ba982893395c7a46f6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 19 Dec 2008 14:03:26 -0500 Subject: rename comments_display to comment --- IkiWiki/Plugin/comments.pm | 4 ++-- doc/tips/comments_feed.mdwn | 2 +- doc/todo/comments.mdwn | 2 +- doc/wikitemplates.mdwn | 2 +- templates/comment.tmpl | 36 ++++++++++++++++++++++++++++++++++++ templates/comments_display.tmpl | 36 ------------------------------------ 6 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 templates/comment.tmpl delete mode 100644 templates/comments_display.tmpl (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index fd9f0acb4..705ba340b 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -447,7 +447,7 @@ sub sessioncgi ($$) { content => $preview); }); - my $template = template("comments_display.tmpl"); + my $template = template("comment.tmpl"); $template->param(content => $preview); $template->param(title => $form->field('subject')); $template->param(ctime => displaytime(time)); @@ -538,7 +538,7 @@ sub pagetemplate (@) { if ($shown) { $comments = IkiWiki::preprocess_inline( pages => "internal($page/$config{comments_pagename}*)", - template => 'comments_display', + template => 'comment', show => 0, reverse => 'yes', page => $page, diff --git a/doc/tips/comments_feed.mdwn b/doc/tips/comments_feed.mdwn index 68513901e..6f8137256 100644 --- a/doc/tips/comments_feed.mdwn +++ b/doc/tips/comments_feed.mdwn @@ -3,7 +3,7 @@ blog can have comments added to them. Pages with comments even have special feeds that can be used to subscribe to those comments. But you'd like to add a feed that contains all the comments posted to any page. Here's how: - \[[!inline pages="internal(*/comment_*)" template=comments_display]] + \[[!inline pages="internal(*/comment_*)" template=comment]] The special [[ikiwiki/PageSpec]] matches all comments. The [[template|wikitemplates]] causes the comments to be displayed formatted diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 2bcec69ba..ee2ba7ea0 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -46,7 +46,7 @@ Known issues with the [[plugins/comments]] plugin: > a good feature to have, though. --[[smcv]] * One can use inline to set up a feed of all comments posted to any page. - Using template=comments_display they are displayed right. Only problem + Using template=comment they are displayed right. Only problem is there is no indication in that template of what page each comment in the feed is a comment on. So, if a comment is inlined into a different page, I think it should show a link back to the page commented on. diff --git a/doc/wikitemplates.mdwn b/doc/wikitemplates.mdwn index 6fb4d5f49..63735193b 100644 --- a/doc/wikitemplates.mdwn +++ b/doc/wikitemplates.mdwn @@ -29,7 +29,7 @@ located in /usr/share/ikiwiki/templates by default. form to wiki pages. * `searchquery.tmpl` - This is an omega template, used by the [[plugins/search]] plugin. -* `comments_display.tmpl` - This template is used to display a comment +* `comment.tmpl` - This template is used to display a comment by the [[plugins/comments]] plugin. * `comments_form.tmpl` - This template is the comment post form for the [[plugins/comments]] plugin. diff --git a/templates/comment.tmpl b/templates/comment.tmpl new file mode 100644 index 000000000..e7e283bbf --- /dev/null +++ b/templates/comment.tmpl @@ -0,0 +1,36 @@ +
    + +
    +Posted by + + + + + + + + + + + + + + +unknown IP address + + + +() + + + +() +
    + +
    + +
    + +
    + +
    diff --git a/templates/comments_display.tmpl b/templates/comments_display.tmpl deleted file mode 100644 index e7e283bbf..000000000 --- a/templates/comments_display.tmpl +++ /dev/null @@ -1,36 +0,0 @@ -
    - -
    -Posted by - - - - - - - - - - - - - - -unknown IP address - - - -() - - - -() -
    - -
    - -
    - -
    - -
    -- cgit v1.2.3 From 091c7fd25bcc39069df9dd81941c5329f26b8988 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 19 Dec 2008 14:20:07 -0500 Subject: add link from comment subject to its permalink --- doc/todo/comments.mdwn | 2 ++ templates/comment.tmpl | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index ee2ba7ea0..a429be525 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -53,6 +53,8 @@ Known issues with the [[plugins/comments]] plugin: (BTW, the rss feed in this situation seems ok; there the link element points back to the parent page. + > done --[[Joey]] + * It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. Perhaps postcomment could also be folded into this? Then the pagespec diff --git a/templates/comment.tmpl b/templates/comment.tmpl index 9d223bd7f..19698cd33 100644 --- a/templates/comment.tmpl +++ b/templates/comment.tmpl @@ -27,7 +27,7 @@ unknown IP address ()
    -
    +
    -- cgit v1.2.3 From 4ed092c05b3ba825a13da4460949bbcf990db8e1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 19 Dec 2008 17:07:54 -0500 Subject: typos --- doc/todo/comments.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index a429be525..aa6b130dc 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -61,7 +61,7 @@ Known issues with the [[plugins/comments]] plugin: would match both existing comments, as well as new comments that are being posted. - > Please see [[plugins/comment/discussion]]. If I've convinced you that + > Please see [[plugins/comments/discussion]]. If I've convinced you that > internal pages are the way forward, then sure, we can do that, because > people who can comment still won't be able to edit others' comments > (one of my goals is that commenters can't put words into each other's @@ -86,4 +86,4 @@ Known issues with the [[plugins/comments]] plugin: > done --[[Joey]] * Now that inline has some comments-specific functionality anyway, it would - be good to output in Atom and the equivalent in RSS. + be good to output '' in Atom and the equivalent in RSS. -- cgit v1.2.3 From 0b002b79b7241ea87ce3489b75a34116c32630e6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 19 Dec 2008 17:26:41 -0500 Subject: update --- doc/todo/comments.mdwn | 4 +- po/es.po | 150 +++++++++++++++++++++++-------------------------- 2 files changed, 72 insertions(+), 82 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index aa6b130dc..81c2f2722 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -53,7 +53,9 @@ Known issues with the [[plugins/comments]] plugin: (BTW, the rss feed in this situation seems ok; there the link element points back to the parent page. - > done --[[Joey]] + > done + > Er, no, I added a link but it does not go back to the parent page of a + > comment if the comment is inlined elsewhere. --[[Joey]] * It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. diff --git a/po/es.po b/po/es.po index 02fda1e71..4e54ef276 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-19 08:04+0100\n" +"POT-Creation-Date: 2008-12-11 14:46-0500\n" "PO-Revision-Date: 2008-12-19 08:10+0100\n" "Last-Translator: Víctor Moral \n" "Language-Team: Spanish \n" @@ -24,7 +24,7 @@ msgid "login failed, perhaps you need to turn on cookies?" msgstr "" "registro fallido, ¿ tal vez necesita activar las cookies en el navegador ?" -#: ../IkiWiki/CGI.pm:163 ../IkiWiki/CGI.pm:310 +#: ../IkiWiki/CGI.pm:163 ../IkiWiki/Plugin/editpage.pm:350 msgid "Your login session has expired." msgstr "Su registro en el sistema ha expirado." @@ -48,7 +48,7 @@ msgstr "Las preferencias se han guardado." msgid "You are banned." msgstr "Ha sido expulsado." -#: ../IkiWiki/CGI.pm:401 ../IkiWiki/CGI.pm:402 ../IkiWiki.pm:1204 +#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1204 msgid "Error" msgstr "Error" @@ -66,62 +66,62 @@ msgstr "" msgid "missing %s parameter" msgstr "falta el parámetro %s" -#: ../IkiWiki/Plugin/aggregate.pm:251 +#: ../IkiWiki/Plugin/aggregate.pm:250 msgid "new feed" msgstr "nueva entrada" -#: ../IkiWiki/Plugin/aggregate.pm:265 +#: ../IkiWiki/Plugin/aggregate.pm:264 msgid "posts" msgstr "entradas" -#: ../IkiWiki/Plugin/aggregate.pm:267 +#: ../IkiWiki/Plugin/aggregate.pm:266 msgid "new" msgstr "nuevo" -#: ../IkiWiki/Plugin/aggregate.pm:430 +#: ../IkiWiki/Plugin/aggregate.pm:429 #, perl-format msgid "expiring %s (%s days old)" msgstr "%s caducada (%s días de antigüedad)" -#: ../IkiWiki/Plugin/aggregate.pm:437 +#: ../IkiWiki/Plugin/aggregate.pm:436 #, perl-format msgid "expiring %s" msgstr "%s caducada" -#: ../IkiWiki/Plugin/aggregate.pm:464 +#: ../IkiWiki/Plugin/aggregate.pm:463 #, perl-format msgid "last checked %s" msgstr "última comprobación el %s" -#: ../IkiWiki/Plugin/aggregate.pm:468 +#: ../IkiWiki/Plugin/aggregate.pm:467 #, perl-format msgid "checking feed %s ..." msgstr "comprobando fuente de datos %s ..." -#: ../IkiWiki/Plugin/aggregate.pm:473 +#: ../IkiWiki/Plugin/aggregate.pm:472 #, perl-format msgid "could not find feed at %s" msgstr "no puedo encontrar la fuente de datos en %s" -#: ../IkiWiki/Plugin/aggregate.pm:492 +#: ../IkiWiki/Plugin/aggregate.pm:487 msgid "feed not found" msgstr "fuente de datos no encontrada" -#: ../IkiWiki/Plugin/aggregate.pm:503 +#: ../IkiWiki/Plugin/aggregate.pm:498 #, perl-format msgid "(invalid UTF-8 stripped from feed)" msgstr "(una secuencia UTF-8 inválida ha sido eliminada de la fuente de datos)" -#: ../IkiWiki/Plugin/aggregate.pm:511 +#: ../IkiWiki/Plugin/aggregate.pm:506 #, perl-format msgid "(feed entities escaped)" msgstr "(los caracteres especiales de la fuente de datos están exceptuados)" -#: ../IkiWiki/Plugin/aggregate.pm:519 +#: ../IkiWiki/Plugin/aggregate.pm:514 msgid "feed crashed XML::Feed!" msgstr "¡ la fuente de datos ha provocado un error fatal en XML::Feed !" -#: ../IkiWiki/Plugin/aggregate.pm:600 +#: ../IkiWiki/Plugin/aggregate.pm:595 #, perl-format msgid "creating new page %s" msgstr "creando nueva página %s" @@ -173,7 +173,7 @@ msgid "automatic index generation" msgstr "creación de índice automática" #: ../IkiWiki/Plugin/brokenlinks.pm:33 ../IkiWiki/Plugin/editpage.pm:261 -#: ../IkiWiki/Plugin/inline.pm:354 ../IkiWiki/Plugin/opendiscussion.pm:26 +#: ../IkiWiki/Plugin/inline.pm:344 ../IkiWiki/Plugin/opendiscussion.pm:26 #: ../IkiWiki/Plugin/orphans.pm:37 ../IkiWiki/Render.pm:79 #: ../IkiWiki/Render.pm:149 msgid "discussion" @@ -188,60 +188,6 @@ msgstr "%s desde la página %s" msgid "There are no broken links!" msgstr "¡ No hay enlaces rotos !" -#: ../IkiWiki/Plugin/comments.pm:119 ../IkiWiki/Plugin/format.pm:23 -#, perl-format -msgid "unsupported page format %s" -msgstr "formato de página %s no soportado" - -#: ../IkiWiki/Plugin/comments.pm:124 -msgid "comment must have content" -msgstr "Un comentario debe tener algún contenido" - -#: ../IkiWiki/Plugin/comments.pm:164 -msgid "Anonymous" -msgstr "Anónimo" - -#: ../IkiWiki/Plugin/comments.pm:225 ../IkiWiki/Plugin/recentchanges.pm:101 -msgid "missing page" -msgstr "página no encontrada" - -#: ../IkiWiki/Plugin/comments.pm:227 ../IkiWiki/Plugin/recentchanges.pm:103 -#, perl-format -msgid "The page %s does not exist." -msgstr "No existe la página %s." - -#: ../IkiWiki/Plugin/comments.pm:339 ../IkiWiki/Plugin/editpage.pm:125 -msgid "bad page name" -msgstr "nombre de página erróneo" - -#: ../IkiWiki/Plugin/comments.pm:346 -#, perl-format -msgid "commenting on %s" -msgstr "creando comentarios en la página %s" - -#: ../IkiWiki/Plugin/comments.pm:364 -#, perl-format -msgid "page '%s' doesn't exist, so you can't comment" -msgstr "la página '%s' no existe, así que no se puede comentar sobre ella" - -#: ../IkiWiki/Plugin/comments.pm:371 -#, perl-format -msgid "comments on page '%s' are closed" -msgstr "los comentarios para la página '%s' están cerrados" - -#: ../IkiWiki/Plugin/comments.pm:473 -msgid "Added a comment" -msgstr "Añadir un comentario" - -#: ../IkiWiki/Plugin/comments.pm:477 -#, perl-format -msgid "Added a comment: %s" -msgstr "Comentario añadido: %s" - -#: ../IkiWiki/Plugin/comments.pm:569 -msgid "Comments" -msgstr "Comentarios" - #: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:30 #: ../IkiWiki/Plugin/cutpaste.pm:45 ../IkiWiki/Plugin/cutpaste.pm:61 #: ../IkiWiki/Plugin/testpagespec.pm:26 @@ -263,6 +209,10 @@ msgstr "no se ha copiado ningún texto con el identificador %s en esta pagina" msgid "removing old preview %s" msgstr "eliminando la antigua previsualización %s" +#: ../IkiWiki/Plugin/editpage.pm:125 +msgid "bad page name" +msgstr "nombre de página erróneo" + #: ../IkiWiki/Plugin/editpage.pm:141 #, perl-format msgid "%s is not an editable page" @@ -273,9 +223,9 @@ msgstr "la página %s no es modificable" msgid "creating %s" msgstr "creando página %s" -#: ../IkiWiki/Plugin/editpage.pm:335 ../IkiWiki/Plugin/editpage.pm:354 -#: ../IkiWiki/Plugin/editpage.pm:364 ../IkiWiki/Plugin/editpage.pm:399 -#: ../IkiWiki/Plugin/editpage.pm:444 +#: ../IkiWiki/Plugin/editpage.pm:335 ../IkiWiki/Plugin/editpage.pm:363 +#: ../IkiWiki/Plugin/editpage.pm:373 ../IkiWiki/Plugin/editpage.pm:408 +#: ../IkiWiki/Plugin/editpage.pm:453 #, perl-format msgid "editing %s" msgstr "modificando página %s" @@ -301,6 +251,11 @@ msgstr "fallo en el proceso" msgid "must specify format and text" msgstr "se deben especificar tanto el formato como el texto" +#: ../IkiWiki/Plugin/format.pm:23 +#, perl-format +msgid "unsupported page format %s" +msgstr "formato de página %s no soportado" + #: ../IkiWiki/Plugin/fortune.pm:27 msgid "fortune failed" msgstr "el programa fortune ha fallado" @@ -389,20 +344,20 @@ msgstr "falta el parámetro pages" msgid "unknown sort type %s" msgstr "no conozco este tipo de ordenación %s" -#: ../IkiWiki/Plugin/inline.pm:307 +#: ../IkiWiki/Plugin/inline.pm:297 msgid "Add a new post titled:" msgstr "Añadir una entrada nueva titulada:" -#: ../IkiWiki/Plugin/inline.pm:327 +#: ../IkiWiki/Plugin/inline.pm:318 #, perl-format msgid "nonexistant template %s" msgstr "la plantilla %s no existe " -#: ../IkiWiki/Plugin/inline.pm:362 ../IkiWiki/Render.pm:83 +#: ../IkiWiki/Plugin/inline.pm:352 ../IkiWiki/Render.pm:83 msgid "Discussion" msgstr "Comentarios" -#: ../IkiWiki/Plugin/inline.pm:587 +#: ../IkiWiki/Plugin/inline.pm:577 msgid "RPC::XML::Client not found, not pinging" msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna" @@ -427,15 +382,15 @@ msgstr "" "no he podido cargar el módulo Perl Markdown.pm (%s) ó no he podido ejecutar " "el programa /usr/bin/markdown (%s)" -#: ../IkiWiki/Plugin/meta.pm:151 +#: ../IkiWiki/Plugin/meta.pm:150 msgid "stylesheet not found" msgstr "hoja de estilo no encontrada " -#: ../IkiWiki/Plugin/meta.pm:185 +#: ../IkiWiki/Plugin/meta.pm:184 msgid "redir page not found" msgstr "falta la página a donde redirigir" -#: ../IkiWiki/Plugin/meta.pm:198 +#: ../IkiWiki/Plugin/meta.pm:197 msgid "redir cycle is not allowed" msgstr "ciclo de redirección no permitido" @@ -622,6 +577,15 @@ msgstr "%s es un valor erróneo para un porcentaje" msgid "need either `percent` or `totalpages` and `donepages` parameters" msgstr "son necesarios los parámetros 'donepages' y 'percent' ó 'totalpages'" +#: ../IkiWiki/Plugin/recentchanges.pm:101 +msgid "missing page" +msgstr "página no encontrada" + +#: ../IkiWiki/Plugin/recentchanges.pm:103 +#, perl-format +msgid "The page %s does not exist." +msgstr "No existe la página %s." + #: ../IkiWiki/Plugin/recentchangesdiff.pm:37 msgid "(Diff truncated)" msgstr "(Lista de diferencias truncada)" @@ -1058,6 +1022,30 @@ msgstr "" msgid "What is the domain name of the web server?" msgstr "¿ Cuál es el dominio para el servidor web ?" +#~ msgid "comment must have content" +#~ msgstr "Un comentario debe tener algún contenido" + +#~ msgid "Anonymous" +#~ msgstr "Anónimo" + +#~ msgid "commenting on %s" +#~ msgstr "creando comentarios en la página %s" + +#~ msgid "page '%s' doesn't exist, so you can't comment" +#~ msgstr "la página '%s' no existe, así que no se puede comentar sobre ella" + +#~ msgid "comments on page '%s' are closed" +#~ msgstr "los comentarios para la página '%s' están cerrados" + +#~ msgid "Added a comment" +#~ msgstr "Añadir un comentario" + +#~ msgid "Added a comment: %s" +#~ msgstr "Comentario añadido: %s" + +#~ msgid "Comments" +#~ msgstr "Comentarios" + #~ msgid "processed ok at %s" #~ msgstr "proceso completado con éxito a %s" -- cgit v1.2.3 From 301733ba13f8fdaf53df0a6058f92d305507a97f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 19 Dec 2008 17:33:40 -0500 Subject: fix comment permalink to always point to comment parent page --- IkiWiki/Plugin/comments.pm | 2 +- doc/todo/comments.mdwn | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 50c048fee..c50729a34 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -194,7 +194,7 @@ sub preprocess { } if ($params{page} =~ m/\/(\Q$config{comments_pagename}\E\d+)$/) { - $pagestate{$page}{meta}{permalink} = urlto($params{destpage}, undef, 1). + $pagestate{$page}{meta}{permalink} = urlto(IkiWiki::dirname($params{page}), undef, 1). "#".$params{page}; } diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 81c2f2722..aa6b130dc 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -53,9 +53,7 @@ Known issues with the [[plugins/comments]] plugin: (BTW, the rss feed in this situation seems ok; there the link element points back to the parent page. - > done - > Er, no, I added a link but it does not go back to the parent page of a - > comment if the comment is inlined elsewhere. --[[Joey]] + > done --[[Joey]] * It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. -- cgit v1.2.3 From 4b3d3f519d019f47087a62514799578de7cd7f2b Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Sat, 20 Dec 2008 13:03:44 -0500 Subject: --- doc/todo/comments.mdwn | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index aa6b130dc..50fd89682 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -13,7 +13,10 @@ Known issues with the [[plugins/comments]] plugin: > Done in my comments git branch --[[smcv]] - > Not seeing it there, which branch? --[[Joey]] + > Not seeing it there, which branch? --[[Joey]] + + >> Bah, git push --all is not the default... 'comments' branch now (I've also rebased it). + >> Sorry, I'm on mobile Internet at the moment... --[[smcv]] * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs @@ -22,6 +25,9 @@ Known issues with the [[plugins/comments]] plugin: > {x} and {*} smileys for anonymous, OpenID and login respectively). > --[[smcv]] + >> I've improved this to use independent icons from the wikiicons + >> directory (untested!) --[[smcv]] + * Should the comments be visually set off more from the page above? Rather than just a horizontal rule, I'm thinking put the comments in a box like is used for inlined pages. -- cgit v1.2.3 From 7bf121889b96dd8c9f372d366a6c801830850ad6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 20 Dec 2008 18:18:19 -0500 Subject: note new bug --- doc/todo/comments.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 50fd89682..3a18d63b8 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -28,6 +28,9 @@ Known issues with the [[plugins/comments]] plugin: >> I've improved this to use independent icons from the wikiicons >> directory (untested!) --[[smcv]] + >>> The new code produces links like /wikiisons/openid.png, which + >>> fail if ikiwiki is not at the root of the web server. --[[Joey]] + * Should the comments be visually set off more from the page above? Rather than just a horizontal rule, I'm thinking put the comments in a box like is used for inlined pages. -- cgit v1.2.3 From 6042e607f33966279f1360d42e46dd0bf7e439e8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 20 Dec 2008 18:51:09 -0500 Subject: alternate idea --- doc/todo/comments.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 3a18d63b8..12aef0bb3 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -31,6 +31,13 @@ Known issues with the [[plugins/comments]] plugin: >>> The new code produces links like /wikiisons/openid.png, which >>> fail if ikiwiki is not at the root of the web server. --[[Joey]] + >>> I got to wondering if the icons are needed. On my comments branch + >>> (not master), I've dropped the icons and info can be seen by hovering + >>> over the author's name. Idea being that you probably don't care how + >>> they authenticated unless something is weird, and in that case you + >>> can hover to check. Does that make sense, should I merge it? + >>> --[[Joey]] + * Should the comments be visually set off more from the page above? Rather than just a horizontal rule, I'm thinking put the comments in a box like is used for inlined pages. -- cgit v1.2.3 From c85e7c1bf4ac95bdbe0f9e2b8dfdd038bda455d0 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Sun, 21 Dec 2008 04:31:49 -0500 Subject: fix markdown --- doc/todo/comments.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 12aef0bb3..119b0dafa 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -102,4 +102,4 @@ Known issues with the [[plugins/comments]] plugin: > done --[[Joey]] * Now that inline has some comments-specific functionality anyway, it would - be good to output '' in Atom and the equivalent in RSS. + be good to output `` in Atom and the equivalent in RSS. -- cgit v1.2.3 From ee24feece09422efdec7dce54b5fcbfc5ad2a5f1 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 21 Dec 2008 10:08:53 +0000 Subject: comments: note fixed things and recommend merging origin/comments --- doc/todo/comments.mdwn | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 119b0dafa..cbc982772 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -18,6 +18,8 @@ Known issues with the [[plugins/comments]] plugin: >> Bah, git push --all is not the default... 'comments' branch now (I've also rebased it). >> Sorry, I'm on mobile Internet at the moment... --[[smcv]] + >>> merged by [[Joey]] in commit 0f03af38 --[[smcv]] + * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs @@ -29,14 +31,27 @@ Known issues with the [[plugins/comments]] plugin: >> directory (untested!) --[[smcv]] >>> The new code produces links like /wikiisons/openid.png, which - >>> fail if ikiwiki is not at the root of the web server. --[[Joey]] + >>> fail if ikiwiki is not at the root of the web server. --[[Joey]] + + >>>> Sorry, I should have spotted that (the assumption failed on my demo + >>>> site, but the push to that site was when I was on the way out, so I + >>>> didn't have time to investigate). As a note for other ikiwiki hackers, + >>>> I should have used + >>>> ``. --[[smcv]] >>> I got to wondering if the icons are needed. On my comments branch >>> (not master), I've dropped the icons and info can be seen by hovering >>> over the author's name. Idea being that you probably don't care how >>> they authenticated unless something is weird, and in that case you >>> can hover to check. Does that make sense, should I merge it? - >>> --[[Joey]] + >>> --[[Joey]] + + >>>> Yeah, go ahead. I preferred my layout with the author before the + >>>> comment - perhaps that's Livejournal's influence :-) - but I can always + >>>> edit the templates for my own site. As long as the default is something + >>>> reasonable and both layouts are possible, I don't really mind. + >>>> Minimizing the number of "resource" files in the basewiki also seems + >>>> a good goal. --[[smcv]] * Should the comments be visually set off more from the page above? Rather than just a horizontal rule, I'm thinking put the comments @@ -45,6 +60,8 @@ Known issues with the [[plugins/comments]] plugin: > I did put them in a box in the CSS... I agree the default template > could do with visual improvement though. --[[smcv]] + >> I'll consider this solved by [[Joey]]'s changes. --[[smcv]] + * Instead of just a link to add a comment, it could have a form to enter the title, similar to the form for adding a new blog post. -- cgit v1.2.3 From 2884d20950681fac16390f61da11afe44508f2cd Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 21 Dec 2008 10:11:48 +0000 Subject: todo/comments: reorganise by status --- doc/todo/comments.mdwn | 114 ++++++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 53 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index cbc982772..33d688ab3 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -1,24 +1,29 @@ -Known issues with the [[plugins/comments]] plugin: +# Known issues with the [[plugins/comments]] plugin -* There is some common code cargo-culted from other plugins (notably inline and editpage) which - should probably be shared - - > Actually, there's less of this now than there used to be - a lot of simple - > things that were shared have become unshareable as they became more - > complex. --[[smcv]] +## Unimplemented * Previews always say "unknown IP address" -* Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID +* Instead of just a link to add a comment, it could have a form to enter + the title, similar to the form for adding a new blog post. - > Done in my comments git branch --[[smcv]] + > I'm not sure this is so useful? On Livejournal titles are allowed on + > comments, but very rarely used (and indeed usually not very useful); + > it's hard enough to get some people to title their blog posts :-) + > --[[smcv]] - > Not seeing it there, which branch? --[[Joey]] +* If a spammer posts a comment, it is either impossible or hard to clean + up via the web. Would be nice to have some kind of link on the comment + that allows trusted users to remove it (using the remove plugin of + course). - >> Bah, git push --all is not the default... 'comments' branch now (I've also rebased it). - >> Sorry, I'm on mobile Internet at the moment... --[[smcv]] + > Won't the remove plugin refuse to remove internal pages? This would be + > a good feature to have, though. --[[smcv]] - >>> merged by [[Joey]] in commit 0f03af38 --[[smcv]] +* Now that inline has some comments-specific functionality anyway, it would + be good to output `` in Atom and the equivalent in RSS. + +## Patches pending merge * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs @@ -36,7 +41,7 @@ Known issues with the [[plugins/comments]] plugin: >>>> Sorry, I should have spotted that (the assumption failed on my demo >>>> site, but the push to that site was when I was on the way out, so I >>>> didn't have time to investigate). As a note for other ikiwiki hackers, - >>>> I should have used + >>>> I should have used >>>> ``. --[[smcv]] >>> I got to wondering if the icons are needed. On my comments branch @@ -53,42 +58,16 @@ Known issues with the [[plugins/comments]] plugin: >>>> Minimizing the number of "resource" files in the basewiki also seems >>>> a good goal. --[[smcv]] -* Should the comments be visually set off more from the page above? - Rather than just a horizontal rule, I'm thinking put the comments - in a box like is used for inlined pages. - - > I did put them in a box in the CSS... I agree the default template - > could do with visual improvement though. --[[smcv]] - - >> I'll consider this solved by [[Joey]]'s changes. --[[smcv]] - -* Instead of just a link to add a comment, it could have a form to enter - the title, similar to the form for adding a new blog post. - - > I'm not sure this is so useful? On Livejournal titles are allowed on - > comments, but very rarely used (and indeed usually not very useful); - > it's hard enough to get some people to title their blog posts :-) - > --[[smcv]] - -* If a spammer posts a comment, it is either impossible or hard to clean - up via the web. Would be nice to have some kind of link on the comment - that allows trusted users to remove it (using the remove plugin of - course). - - > Won't the remove plugin refuse to remove internal pages? This would be - > a good feature to have, though. --[[smcv]] +## Won't fix -* One can use inline to set up a feed of all comments posted to any page. - Using template=comment they are displayed right. Only problem - is there is no indication in that template of what page each comment in the - feed is a comment on. So, if a comment is inlined into a different page, - I think it should show a link back to the page commented on. - (BTW, the rss feed in this situation seems ok; there the link element - points back to the parent page. +* There is some common code cargo-culted from other plugins (notably inline and editpage) which + should probably be shared - > done --[[Joey]] + > Actually, there's less of this now than there used to be - a lot of simple + > things that were shared have become unshareable as they became more + > complex. --[[smcv]] -* It would be useful to have a pagespec that always matches all comments on +* It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. Perhaps postcomment could also be folded into this? Then the pagespec would match both existing comments, as well as new comments that are @@ -106,9 +85,41 @@ Known issues with the [[plugins/comments]] plugin: > would also let X edit/delete comments on blog pages (including those > written by others) in arbitrary ways, which doesn't seem good. --[[smcv]] - > I had a look at implementing comment() and fell afoul of + > I had a look at implementing comment() and fell afoul of > some optimisations that assume only internal() will be used to match - > internal pages. So probably this isn't worth doing. --[[Joey]] + > internal pages. So probably this isn't worth doing. --[[Joey]] + +## Done + +* Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID + + > Done in my comments git branch --[[smcv]] + + > Not seeing it there, which branch? --[[Joey]] + + >> Bah, git push --all is not the default... 'comments' branch now (I've also rebased it). + >> Sorry, I'm on mobile Internet at the moment... --[[smcv]] + + >>> merged by [[Joey]] in commit 0f03af38 --[[smcv]] + +* Should the comments be visually set off more from the page above? + Rather than just a horizontal rule, I'm thinking put the comments + in a box like is used for inlined pages. + + > I did put them in a box in the CSS... I agree the default template + > could do with visual improvement though. --[[smcv]] + + >> I'll consider this solved by [[Joey]]'s changes. --[[smcv]] + +* One can use inline to set up a feed of all comments posted to any page. + Using template=comment they are displayed right. Only problem + is there is no indication in that template of what page each comment in the + feed is a comment on. So, if a comment is inlined into a different page, + I think it should show a link back to the page commented on. + (BTW, the rss feed in this situation seems ok; there the link element + points back to the parent page. + + > done --[[Joey]] * One of Joey's commit messages says "Not ideal, it would be nicer to jump to the actual comment posted, but no anchor is available". In fact there is @@ -116,7 +127,4 @@ Known issues with the [[plugins/comments]] plugin: with id="comment_123" or something. I'll fix this, unless Joey gets there first. --[[smcv]] - > done --[[Joey]] - -* Now that inline has some comments-specific functionality anyway, it would - be good to output `` in Atom and the equivalent in RSS. + > done --[[Joey]] -- cgit v1.2.3 From bd80ca37d541f33d04f61a910e49086698e8b34e Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 21 Dec 2008 10:16:58 +0000 Subject: todo/comments: Properly escape inline HTML --- doc/todo/comments.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 33d688ab3..4edc3c3a1 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -123,7 +123,7 @@ * One of Joey's commit messages says "Not ideal, it would be nicer to jump to the actual comment posted, but no anchor is available". In fact there is - an anchor - the `\[[_comment]]` preprocessing wraps the comment in a
    + an anchor - the `\[[_comment]]` preprocessing wraps the comment in a `
    ` with id="comment_123" or something. I'll fix this, unless Joey gets there first. --[[smcv]] -- cgit v1.2.3 From 7bdeee20329e1d1132fbc218c49da75c22f07b03 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 21 Dec 2008 15:39:40 +0000 Subject: Record another couple of pending bugfixes --- doc/todo/comments.mdwn | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 4edc3c3a1..7e35a2619 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -2,8 +2,6 @@ ## Unimplemented -* Previews always say "unknown IP address" - * Instead of just a link to add a comment, it could have a form to enter the title, similar to the form for adding a new blog post. @@ -58,6 +56,17 @@ >>>> Minimizing the number of "resource" files in the basewiki also seems >>>> a good goal. --[[smcv]] +* Previews always say "unknown IP address" + + > Fixed in my comments branch by commits bc66a00b and 95b3bbbf --[[smcv]] + +* The Comments link in the "toolbar" is to `index.html#comments`, not the + desired `./#comments` + + > Fixed in my comments branch by commit 0844bd0b; commits 5b1cf21a + > and c42f174e fix another `beautify_urlpath` bug and add a regression test + > --[[smcv]] + ## Won't fix * There is some common code cargo-culted from other plugins (notably inline and editpage) which -- cgit v1.2.3 From bd376db3a8713c3f28a45a65d0de232a4901164f Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Sun, 21 Dec 2008 11:43:43 -0500 Subject: Mention a patch to improve OpenID display --- doc/todo/Improve_display_of_OpenIDs.mdwn | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 doc/todo/Improve_display_of_OpenIDs.mdwn (limited to 'doc/todo') diff --git a/doc/todo/Improve_display_of_OpenIDs.mdwn b/doc/todo/Improve_display_of_OpenIDs.mdwn new file mode 100644 index 000000000..9c21e8234 --- /dev/null +++ b/doc/todo/Improve_display_of_OpenIDs.mdwn @@ -0,0 +1,5 @@ +Some OpenIDs seen in the IkiWiki git history are displayed poorly in [[RecentChanges]], including mine :-) (`http://smcv.pseudorandom.co.uk/`, shown as `smcv.pseudorandom [co.uk]`) + +My `openid` branch on improves on a couple of cases and adds a regression test. --[[smcv]] + +[[!tag patch]] -- cgit v1.2.3 From ca1437c9e10dc940b94edb364ddfbb2083724182 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sun, 21 Dec 2008 17:18:43 +0000 Subject: Another comments improvement --- doc/todo/comments.mdwn | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 7e35a2619..a2c1deeb3 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -18,9 +18,6 @@ > Won't the remove plugin refuse to remove internal pages? This would be > a good feature to have, though. --[[smcv]] -* Now that inline has some comments-specific functionality anyway, it would - be good to output `` in Atom and the equivalent in RSS. - ## Patches pending merge * The default template should have a (?) icon next to unauthenticated users (with the IP address @@ -67,6 +64,11 @@ > and c42f174e fix another `beautify_urlpath` bug and add a regression test > --[[smcv]] +* Now that inline has some comments-specific functionality anyway, it would + be good to output `` in Atom and the equivalent in RSS. + + > Fixed in my comments branch by d0d598e4, 3feebe31, 9e5f504e --[[smcv]] + ## Won't fix * There is some common code cargo-culted from other plugins (notably inline and editpage) which -- cgit v1.2.3 From 041f8e3774dc129346622df26647e49d7aa85375 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 21 Dec 2008 13:08:26 -0500 Subject: more reorg --- doc/todo/comments.mdwn | 67 ++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 32 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index a2c1deeb3..bab46a0b2 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -20,6 +20,41 @@ ## Patches pending merge +* There is some common code cargo-culted from other plugins (notably inline and editpage) which + should probably be shared + + > Actually, there's less of this now than there used to be - a lot of simple + > things that were shared have become unshareable as they became more + > complex. --[[smcv]] + + > There's still goto. You have a branch for that. --[[Joey]] + +## Won't fix + +* It would be useful to have a pagespec that always matches all comments on + pages matching a glob. Something like `comment(blog/*)`. + Perhaps postcomment could also be folded into this? Then the pagespec + would match both existing comments, as well as new comments that are + being posted. + + > Please see [[plugins/comments/discussion]]. If I've convinced you that + > internal pages are the way forward, then sure, we can do that, because + > people who can comment still won't be able to edit others' comments + > (one of my goals is that commenters can't put words into each other's + > mouths :-) ) + > + > On the other hand, if you still want me to switch this plugin to "real" + > pages, or if internal pages might become editable in future, then + > configuring lockedit/anonok so a user X can add comments to blog pages + > would also let X edit/delete comments on blog pages (including those + > written by others) in arbitrary ways, which doesn't seem good. --[[smcv]] + + > I had a look at implementing comment() and fell afoul of + > some optimisations that assume only internal() will be used to match + > internal pages. So probably this isn't worth doing. --[[Joey]] + +## Done + * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs @@ -69,38 +104,6 @@ > Fixed in my comments branch by d0d598e4, 3feebe31, 9e5f504e --[[smcv]] -## Won't fix - -* There is some common code cargo-culted from other plugins (notably inline and editpage) which - should probably be shared - - > Actually, there's less of this now than there used to be - a lot of simple - > things that were shared have become unshareable as they became more - > complex. --[[smcv]] - -* It would be useful to have a pagespec that always matches all comments on - pages matching a glob. Something like `comment(blog/*)`. - Perhaps postcomment could also be folded into this? Then the pagespec - would match both existing comments, as well as new comments that are - being posted. - - > Please see [[plugins/comments/discussion]]. If I've convinced you that - > internal pages are the way forward, then sure, we can do that, because - > people who can comment still won't be able to edit others' comments - > (one of my goals is that commenters can't put words into each other's - > mouths :-) ) - > - > On the other hand, if you still want me to switch this plugin to "real" - > pages, or if internal pages might become editable in future, then - > configuring lockedit/anonok so a user X can add comments to blog pages - > would also let X edit/delete comments on blog pages (including those - > written by others) in arbitrary ways, which doesn't seem good. --[[smcv]] - - > I had a look at implementing comment() and fell afoul of - > some optimisations that assume only internal() will be used to match - > internal pages. So probably this isn't worth doing. --[[Joey]] - -## Done * Add `COMMENTOPENID`: the authenticated/verified user name, if and only if it was an OpenID -- cgit v1.2.3 From 4b66a8d00a79da1e636b0aba480b42e598134b49 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 21 Dec 2008 13:14:31 -0500 Subject: openid branch merged --- debian/changelog | 1 + doc/todo/Improve_display_of_OpenIDs.mdwn | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index 056fabc7d..579617d33 100644 --- a/debian/changelog +++ b/debian/changelog @@ -25,6 +25,7 @@ ikiwiki (2.71) UNRELEASED; urgency=low Closes: #508622 (Michael Gold) * meta: Process meta date during scan pass so that the date will always affect sorting in inlines. + * Improve display of some openids (smcv) -- Joey Hess Mon, 17 Nov 2008 14:02:10 -0500 diff --git a/doc/todo/Improve_display_of_OpenIDs.mdwn b/doc/todo/Improve_display_of_OpenIDs.mdwn index 9c21e8234..e2ba1d90d 100644 --- a/doc/todo/Improve_display_of_OpenIDs.mdwn +++ b/doc/todo/Improve_display_of_OpenIDs.mdwn @@ -2,4 +2,4 @@ Some OpenIDs seen in the IkiWiki git history are displayed poorly in [[RecentCha My `openid` branch on improves on a couple of cases and adds a regression test. --[[smcv]] -[[!tag patch]] +[[!tag patch done]] -- cgit v1.2.3 From 02da7ec599df4f4fb4dfc2b793147d6ed82cebfc Mon Sep 17 00:00:00 2001 From: "http://puck.openid.org/" Date: Mon, 22 Dec 2008 23:14:15 -0500 Subject: --- ...Allow_disabling_edit_and_preferences_links.mdwn | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 doc/todo/Allow_disabling_edit_and_preferences_links.mdwn (limited to 'doc/todo') diff --git a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn new file mode 100644 index 000000000..10eae35a7 --- /dev/null +++ b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn @@ -0,0 +1,27 @@ +This patch allows disabling the edit and preferences link in the config file. It is backwards compatible (so peoples edit and preferences links won't suddenly vanish). + +To disable edit or prefs respectively, add the following to the config file: + +
    +  'edit' => 0,
    +  'prefs' => 0, 
    +
    + +Patch: +
    +--- /usr/share/perl5/IkiWiki/Render.pm.orig     2008-12-23 16:49:00.000000000 +1300
    ++++ /usr/share/perl5/IkiWiki/Render.pm  2008-12-23 16:55:40.000000000 +1300
    +@@ -80,8 +80,10 @@
    +        my $actions=0;
    + 
    +        if (length $config{cgiurl}) {
    +-               $template->param(editurl => cgiurl(do => "edit", page => $page));
    +-               $template->param(prefsurl => cgiurl(do => "prefs"));
    ++               $template->param(editurl => cgiurl(do => "edit", page => $page))
    ++                       if ! defined $config{edit} || (defined $config{edit} && $config{edit} == 1);
    ++               $template->param(prefsurl => cgiurl(do => "prefs"))
    ++                       if ! defined $config{prefs} || (defined $config{prefs} && $config{prefs} == 1);
    +                $actions++;
    +        }
    +
    +
    -- cgit v1.2.3 From e81c59748e923137e769be675424213061858cad Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 23 Dec 2008 00:13:12 +0100 Subject: httpauth_feature_parity_with_passwordauth: a bit more thinking Signed-off-by: intrigeri --- .../httpauth_feature_parity_with_passwordauth.mdwn | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn b/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn index 8a338ece1..eb71cf840 100644 --- a/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn +++ b/doc/todo/httpauth_feature_parity_with_passwordauth.mdwn @@ -1,5 +1,8 @@ -The only way to have a private ikiwiki, with a shared user database for static pages and CGI authentication, is to use [[plugins/httpauth]]. It would be good for httpauth to be on par with [[plugins/passwordauth]], -i.e. to allow registering users, resetting passwords, and changing passwords; supporting some kind of +The only way to have a private ikiwiki, with a shared user database +for static pages and CGI authentication, is to use +[[plugins/httpauth]]. It would be good for httpauth to be on par with +[[plugins/passwordauth]], i.e. to allow registering users, resetting +passwords, and changing passwords; supporting some kind of `account_creation_password` configuration option would be nice, too. I'll probably propose patches implementing this at some point. @@ -8,4 +11,18 @@ the relevant passwordauth code, instead of rewriting it completely in httpauth. -- [[intrigeri]] +Well, on such a private wiki, one can neither register herself nor +reset his password: the registration page, as any other page, would be +forbidden to non-authenticated users. Admin users should then be +enabled to: + +- register a new user +- reset someone else's password + +In both cases, a brand new random password is sent by e-mail to the +new user. + +An authenticated user should nevertheless be able to change his +own password. -- [[intrigeri]] + [[wishlist]] -- cgit v1.2.3 From 276798fbca4409b91c0cad99b45cb334cbb49129 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 23 Dec 2008 13:27:16 -0500 Subject: response --- doc/todo/Allow_disabling_edit_and_preferences_links.mdwn | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn index 10eae35a7..523a1f4da 100644 --- a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn +++ b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn @@ -25,3 +25,16 @@ Patch: } + +> On irc, you said, "That was to allow the hack to of using wikistatedir to +> allow me to generate two websites, one with inline editting, the other a +> static page for public consumption." +> +> The edit and preferences links can already be disabled by editing +> `page.tmpl`. (Look for PREFSURL and EDITURL). +> +> More to the point though, disabling those links does not disable anyone +> consticting the urls by hand and logging in and editing a page. So you'd +> really want to disable the editpage plugin in the setup file for the +> public, static wiki. Sounds like you might also want to turn off cgi +> entirely for that build. --[[Joey]] -- cgit v1.2.3 From ecf2408bf64de1aee3bb8b79f6e28c14b52cf1c4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 23 Dec 2008 16:25:52 -0500 Subject: fix a few directives using the old syntax I'm turning on prefix_directives for the live wiki now. --- doc/plugins/aggregate/discussion.mdwn | 2 +- doc/tips/inside_dot_ikiwiki.mdwn | 2 +- doc/todo/support_creole_markup.mdwn | 2 +- doc/todo/syntax_highlighting.mdwn | 8 ++++---- doc/users/xma.mdwn | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) (limited to 'doc/todo') diff --git a/doc/plugins/aggregate/discussion.mdwn b/doc/plugins/aggregate/discussion.mdwn index 1db6240d5..1a9844577 100644 --- a/doc/plugins/aggregate/discussion.mdwn +++ b/doc/plugins/aggregate/discussion.mdwn @@ -35,7 +35,7 @@ Two things aren't working as I'd expect: > problem. You can see the feed validator complain about it here: > > -> It's sorta unfortunate that [[cpan XML::Feed]] doesn't just assume the +> It's sorta unfortunate that [[!cpan XML::Feed]] doesn't just assume the > un-esxaped html is part of the description field. Probably other feed > parsers are more lenient. --[[Joey]] diff --git a/doc/tips/inside_dot_ikiwiki.mdwn b/doc/tips/inside_dot_ikiwiki.mdwn index 1f76ce4bd..b81ffae8d 100644 --- a/doc/tips/inside_dot_ikiwiki.mdwn +++ b/doc/tips/inside_dot_ikiwiki.mdwn @@ -66,7 +66,7 @@ to do it rarely, and the data I've wanted has been different each time. ## the session database -`.ikiwiki/sessions.db` is the session database. See the [[cpan CGI::Session]] +`.ikiwiki/sessions.db` is the session database. See the [[!cpan CGI::Session]] documentation for more details. ## lockfiles diff --git a/doc/todo/support_creole_markup.mdwn b/doc/todo/support_creole_markup.mdwn index b0ebf5b9e..5a1e1286d 100644 --- a/doc/todo/support_creole_markup.mdwn +++ b/doc/todo/support_creole_markup.mdwn @@ -12,7 +12,7 @@ And there is a perl module: Text::WikiCreole Syntax file for vim: http://www.peter-hoffmann.com/code/vim/ (Since a typical ikiwiki user usually use external editors. :)) -> Should be pretty easy to add a plugin to do it using [[cpan +> Should be pretty easy to add a plugin to do it using [[!cpan > Text::WikiCreole]]. --[[Joey]] [[done]] diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index 3de3032b3..d9a791c6f 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -7,16 +7,16 @@ pages, as well as doing syntax highlighting as a preprocessor directive ## The big list of possibilities -* [[plugins/contrib/highlightcode]] uses [[cpan Syntax::Highlight::Engine::Kate]], +* [[plugins/contrib/highlightcode]] uses [[!cpan Syntax::Highlight::Engine::Kate]], operates on whole source files only, has a few bugs (see [here](http://u32.net/Highlight_Code_Plugin/), and needs to be updated to support [[bugs/multiple_pages_with_same_name]]. -* [[cpan IkiWiki-Plugin-syntax]] only operates as a directive. +* [[!cpan IkiWiki-Plugin-syntax]] only operates as a directive. Interestingly, it supports multiple highlighting backends, including Kate and Vim. * [[plugins/contrib/syntax]] only operates as a directive ([[not_on_source_code_files|automatic_use_of_syntax_plugin_on_source_code_files]]), - and uses [[cpan Text::VimColor]]. + and uses [[!cpan Text::VimColor]]. * [[plugins/contrib/sourcehighlight]] uses src-highlight, and operates on whole source files only. Needs to be updated to support [[bugs/multiple_pages_with_same_name]]. @@ -43,7 +43,7 @@ pages, as well as doing syntax highlighting as a preprocessor directive inside source files. Doing this probably means post-processing the results of the highlighting engine, to find places where it's highlighted comments, and then running them through the ikiwiki rendering pipeline. - This seems fairly doable with [[cpan Syntax::Highlight::Engine::Kate]], + This seems fairly doable with [[!cpan Syntax::Highlight::Engine::Kate]], at least. * The whole-file plugins tend to have a problem that things that look like wikilinks in the source code get munged into links by ikiwiki, which can diff --git a/doc/users/xma.mdwn b/doc/users/xma.mdwn index 97a8ef869..89f2ff74c 100644 --- a/doc/users/xma.mdwn +++ b/doc/users/xma.mdwn @@ -9,7 +9,7 @@ Anyway, [[ikiwiki]] is really *awesome* ! ## More about me -I am CLI user living in the linux console. More precisely, I live in an [[GNU Emacs]] frame all day long. My main computer is an EeePC 901 running Slackware GNU/Linux 12.1. I do not have X installed (too lazy) but when in X, I am running an instance of [[CLFSWM]]. +I am CLI user living in the linux console. More precisely, I live in an [[GNU_Emacs]] frame all day long. My main computer is an EeePC 901 running Slackware GNU/Linux 12.1. I do not have X installed (too lazy) but when in X, I am running an instance of [[CLFSWM]]. ## Contacting me -- cgit v1.2.3 From 678d467a4080dd549f2b6f276f963eac384e1b4f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 23 Dec 2008 16:34:19 -0500 Subject: finalise version 3.00 of the plugin api --- IkiWiki.pm | 2 +- IkiWiki/Plugin/aggregate.pm | 2 +- IkiWiki/Plugin/amazon_s3.pm | 2 +- IkiWiki/Plugin/anonok.pm | 2 +- IkiWiki/Plugin/attachment.pm | 2 +- IkiWiki/Plugin/autoindex.pm | 2 +- IkiWiki/Plugin/brokenlinks.pm | 2 +- IkiWiki/Plugin/calendar.pm | 2 +- IkiWiki/Plugin/camelcase.pm | 2 +- IkiWiki/Plugin/color.pm | 2 +- IkiWiki/Plugin/comments.pm | 2 +- IkiWiki/Plugin/conditional.pm | 2 +- IkiWiki/Plugin/creole.pm | 2 +- IkiWiki/Plugin/cutpaste.pm | 2 +- IkiWiki/Plugin/ddate.pm | 2 +- IkiWiki/Plugin/editdiff.pm | 2 +- IkiWiki/Plugin/edittemplate.pm | 2 +- IkiWiki/Plugin/embed.pm | 2 +- IkiWiki/Plugin/external.pm | 2 +- IkiWiki/Plugin/favicon.pm | 2 +- IkiWiki/Plugin/filecheck.pm | 2 +- IkiWiki/Plugin/format.pm | 2 +- IkiWiki/Plugin/fortune.pm | 2 +- IkiWiki/Plugin/goodstuff.pm | 2 +- IkiWiki/Plugin/google.pm | 2 +- IkiWiki/Plugin/googlecalendar.pm | 2 +- IkiWiki/Plugin/graphviz.pm | 2 +- IkiWiki/Plugin/haiku.pm | 2 +- IkiWiki/Plugin/hnb.pm | 2 +- IkiWiki/Plugin/html.pm | 2 +- IkiWiki/Plugin/htmlbalance.pm | 2 +- IkiWiki/Plugin/htmlscrubber.pm | 2 +- IkiWiki/Plugin/htmltidy.pm | 2 +- IkiWiki/Plugin/httpauth.pm | 2 +- IkiWiki/Plugin/img.pm | 2 +- IkiWiki/Plugin/inline.pm | 2 +- IkiWiki/Plugin/link.pm | 2 +- IkiWiki/Plugin/linkmap.pm | 2 +- IkiWiki/Plugin/listdirectives.pm | 2 +- IkiWiki/Plugin/lockedit.pm | 2 +- IkiWiki/Plugin/map.pm | 2 +- IkiWiki/Plugin/mdwn.pm | 2 +- IkiWiki/Plugin/meta.pm | 2 +- IkiWiki/Plugin/mirrorlist.pm | 2 +- IkiWiki/Plugin/more.pm | 2 +- IkiWiki/Plugin/opendiscussion.pm | 2 +- IkiWiki/Plugin/openid.pm | 2 +- IkiWiki/Plugin/orphans.pm | 2 +- IkiWiki/Plugin/otl.pm | 2 +- IkiWiki/Plugin/pagecount.pm | 2 +- IkiWiki/Plugin/pagestats.pm | 2 +- IkiWiki/Plugin/pagetemplate.pm | 2 +- IkiWiki/Plugin/parentlinks.pm | 2 +- IkiWiki/Plugin/passwordauth.pm | 2 +- IkiWiki/Plugin/pingee.pm | 2 +- IkiWiki/Plugin/pinger.pm | 2 +- IkiWiki/Plugin/poll.pm | 2 +- IkiWiki/Plugin/polygen.pm | 2 +- IkiWiki/Plugin/postsparkline.pm | 2 +- IkiWiki/Plugin/prettydate.pm | 2 +- IkiWiki/Plugin/progress.pm | 2 +- IkiWiki/Plugin/rawhtml.pm | 2 +- IkiWiki/Plugin/recentchanges.pm | 2 +- IkiWiki/Plugin/recentchangesdiff.pm | 2 +- IkiWiki/Plugin/relativedate.pm | 2 +- IkiWiki/Plugin/remove.pm | 2 +- IkiWiki/Plugin/rename.pm | 2 +- IkiWiki/Plugin/search.pm | 2 +- IkiWiki/Plugin/shortcut.pm | 2 +- IkiWiki/Plugin/sidebar.pm | 2 +- IkiWiki/Plugin/signinedit.pm | 2 +- IkiWiki/Plugin/smiley.pm | 2 +- IkiWiki/Plugin/sparkline.pm | 2 +- IkiWiki/Plugin/table.pm | 2 +- IkiWiki/Plugin/tag.pm | 2 +- IkiWiki/Plugin/template.pm | 2 +- IkiWiki/Plugin/testpagespec.pm | 2 +- IkiWiki/Plugin/teximg.pm | 2 +- IkiWiki/Plugin/textile.pm | 2 +- IkiWiki/Plugin/toc.pm | 2 +- IkiWiki/Plugin/toggle.pm | 2 +- IkiWiki/Plugin/txt.pm | 2 +- IkiWiki/Plugin/typography.pm | 2 +- IkiWiki/Plugin/version.pm | 2 +- IkiWiki/Plugin/websetup.pm | 2 +- IkiWiki/Plugin/wikitext.pm | 2 +- doc/plugins/write.mdwn | 4 ++-- doc/plugins/write/tutorial.mdwn | 2 +- doc/roadmap.mdwn | 12 +++++++----- doc/todo/firm_up_plugin_interface.mdwn | 2 ++ 90 files changed, 98 insertions(+), 94 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki.pm b/IkiWiki.pm index 127c9e5d7..759bfbc65 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -24,7 +24,7 @@ our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match inject %config %links %pagestate %wikistate %renderedfiles %pagesources %destsources); -our $VERSION = 2.00; # plugin interface version, next is ikiwiki version +our $VERSION = 3.00; # plugin interface version, next is ikiwiki version our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm index d06a648f6..c667ee2a9 100644 --- a/IkiWiki/Plugin/aggregate.pm +++ b/IkiWiki/Plugin/aggregate.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::aggregate; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use HTML::Parser; use HTML::Tagset; use HTML::Entities; diff --git a/IkiWiki/Plugin/amazon_s3.pm b/IkiWiki/Plugin/amazon_s3.pm index 93c10b629..10bf358e4 100644 --- a/IkiWiki/Plugin/amazon_s3.pm +++ b/IkiWiki/Plugin/amazon_s3.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::amazon_s3; use warnings; no warnings 'redefine'; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use IkiWiki::Render; use Net::Amazon::S3; diff --git a/IkiWiki/Plugin/anonok.pm b/IkiWiki/Plugin/anonok.pm index 1cbdfe4e5..243b98920 100644 --- a/IkiWiki/Plugin/anonok.pm +++ b/IkiWiki/Plugin/anonok.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::anonok; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "anonok", call => \&getsetup); diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 87da6cd4e..e1b4d4363 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::attachment; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { add_underlay("javascript"); diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm index bb08091ae..555856b11 100644 --- a/IkiWiki/Plugin/autoindex.pm +++ b/IkiWiki/Plugin/autoindex.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::autoindex; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use Encode; sub import { diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm index 1c52099bf..bf0d7560d 100644 --- a/IkiWiki/Plugin/brokenlinks.pm +++ b/IkiWiki/Plugin/brokenlinks.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::brokenlinks; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "brokenlinks", call => \&getsetup); diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm index 88303fc44..d473c8348 100644 --- a/IkiWiki/Plugin/calendar.pm +++ b/IkiWiki/Plugin/calendar.pm @@ -20,7 +20,7 @@ package IkiWiki::Plugin::calendar; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use Time::Local; use POSIX; diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm index 6c1fafb7b..bda980d28 100644 --- a/IkiWiki/Plugin/camelcase.pm +++ b/IkiWiki/Plugin/camelcase.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::camelcase; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; # This regexp is based on the one in Text::WikiFormat. my $link_regexp=qr{ diff --git a/IkiWiki/Plugin/color.pm b/IkiWiki/Plugin/color.pm index 53d8389d2..20505893b 100644 --- a/IkiWiki/Plugin/color.pm +++ b/IkiWiki/Plugin/color.pm @@ -5,7 +5,7 @@ package IkiWiki::Plugin::color; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "preprocess", id => "color", call => \&preprocess); diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 0ae9eefe3..c9c7b2ed4 100644 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -7,7 +7,7 @@ package IkiWiki::Plugin::comments; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use Encode; use POSIX qw(strftime); diff --git a/IkiWiki/Plugin/conditional.pm b/IkiWiki/Plugin/conditional.pm index 66253e07d..4f3577b34 100644 --- a/IkiWiki/Plugin/conditional.pm +++ b/IkiWiki/Plugin/conditional.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::conditional; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use UNIVERSAL; sub import { diff --git a/IkiWiki/Plugin/creole.pm b/IkiWiki/Plugin/creole.pm index 3c46a48df..425e71043 100644 --- a/IkiWiki/Plugin/creole.pm +++ b/IkiWiki/Plugin/creole.pm @@ -5,7 +5,7 @@ package IkiWiki::Plugin::creole; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "creole", call => \&getsetup); diff --git a/IkiWiki/Plugin/cutpaste.pm b/IkiWiki/Plugin/cutpaste.pm index e579c1ea2..417442f34 100644 --- a/IkiWiki/Plugin/cutpaste.pm +++ b/IkiWiki/Plugin/cutpaste.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::cutpaste; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %savedtext; diff --git a/IkiWiki/Plugin/ddate.pm b/IkiWiki/Plugin/ddate.pm index 3470640dc..bb77ce59f 100644 --- a/IkiWiki/Plugin/ddate.pm +++ b/IkiWiki/Plugin/ddate.pm @@ -2,7 +2,7 @@ # Discordian date support fnord ikiwiki. package IkiWiki::Plugin::ddate; -use IkiWiki 2.00; +use IkiWiki 3.00; no warnings; sub import { diff --git a/IkiWiki/Plugin/editdiff.pm b/IkiWiki/Plugin/editdiff.pm index 068b83b3c..7df6a9ffb 100644 --- a/IkiWiki/Plugin/editdiff.pm +++ b/IkiWiki/Plugin/editdiff.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::editdiff; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use HTML::Entities; use IPC::Open2; diff --git a/IkiWiki/Plugin/edittemplate.pm b/IkiWiki/Plugin/edittemplate.pm index 7c0e7c2f8..0bafc95d0 100644 --- a/IkiWiki/Plugin/edittemplate.pm +++ b/IkiWiki/Plugin/edittemplate.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::edittemplate; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use HTML::Template; use Encode; diff --git a/IkiWiki/Plugin/embed.pm b/IkiWiki/Plugin/embed.pm index 664c95763..a7d38358f 100644 --- a/IkiWiki/Plugin/embed.pm +++ b/IkiWiki/Plugin/embed.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::embed; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my $attribr=qr/[^<>"]+/; diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm index 2d540143f..066f15cf1 100644 --- a/IkiWiki/Plugin/external.pm +++ b/IkiWiki/Plugin/external.pm @@ -6,7 +6,7 @@ package IkiWiki::Plugin::external; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use RPC::XML; use RPC::XML::Parser; use IPC::Open2; diff --git a/IkiWiki/Plugin/favicon.pm b/IkiWiki/Plugin/favicon.pm index 68359a4aa..6060914c5 100644 --- a/IkiWiki/Plugin/favicon.pm +++ b/IkiWiki/Plugin/favicon.pm @@ -5,7 +5,7 @@ package IkiWiki::Plugin::favicon; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "favicon", call => \&getsetup); diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm index 5040a185c..8575ee108 100644 --- a/IkiWiki/Plugin/filecheck.pm +++ b/IkiWiki/Plugin/filecheck.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::filecheck; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %units=( #{{{ # size in bytes B => 1, diff --git a/IkiWiki/Plugin/format.pm b/IkiWiki/Plugin/format.pm index b4d3a3c5f..bbe3aa9fe 100644 --- a/IkiWiki/Plugin/format.pm +++ b/IkiWiki/Plugin/format.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::format; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "preprocess", id => "format", call => \&preprocess); diff --git a/IkiWiki/Plugin/fortune.pm b/IkiWiki/Plugin/fortune.pm index 6a12f28fd..17e57dea1 100644 --- a/IkiWiki/Plugin/fortune.pm +++ b/IkiWiki/Plugin/fortune.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::fortune; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "fortune", call => \&getsetup); diff --git a/IkiWiki/Plugin/goodstuff.pm b/IkiWiki/Plugin/goodstuff.pm index 92bc8200a..46f2380cf 100644 --- a/IkiWiki/Plugin/goodstuff.pm +++ b/IkiWiki/Plugin/goodstuff.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::goodstuff; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my @bundle=qw{ brokenlinks diff --git a/IkiWiki/Plugin/google.pm b/IkiWiki/Plugin/google.pm index 5394c5a6f..4bba5775c 100644 --- a/IkiWiki/Plugin/google.pm +++ b/IkiWiki/Plugin/google.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::google; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use URI; my $host; diff --git a/IkiWiki/Plugin/googlecalendar.pm b/IkiWiki/Plugin/googlecalendar.pm index 9e09d7dbb..fad2ad78f 100644 --- a/IkiWiki/Plugin/googlecalendar.pm +++ b/IkiWiki/Plugin/googlecalendar.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::googlecalendar; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "googlecalendar", diff --git a/IkiWiki/Plugin/graphviz.pm b/IkiWiki/Plugin/graphviz.pm index 23631da30..b43e96a73 100644 --- a/IkiWiki/Plugin/graphviz.pm +++ b/IkiWiki/Plugin/graphviz.pm @@ -5,7 +5,7 @@ package IkiWiki::Plugin::graphviz; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use IPC::Open2; sub import { diff --git a/IkiWiki/Plugin/haiku.pm b/IkiWiki/Plugin/haiku.pm index fe68c6eec..5a062a276 100644 --- a/IkiWiki/Plugin/haiku.pm +++ b/IkiWiki/Plugin/haiku.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::haiku; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "haiku", call => \&getsetup); diff --git a/IkiWiki/Plugin/hnb.pm b/IkiWiki/Plugin/hnb.pm index d5b5ce3b4..bd2177a06 100644 --- a/IkiWiki/Plugin/hnb.pm +++ b/IkiWiki/Plugin/hnb.pm @@ -10,7 +10,7 @@ package IkiWiki::Plugin::hnb; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use File::Temp qw(:mktemp); sub import { diff --git a/IkiWiki/Plugin/html.pm b/IkiWiki/Plugin/html.pm index 9b9547cca..a7d5e8ce9 100644 --- a/IkiWiki/Plugin/html.pm +++ b/IkiWiki/Plugin/html.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::html; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "html", call => \&getsetup); diff --git a/IkiWiki/Plugin/htmlbalance.pm b/IkiWiki/Plugin/htmlbalance.pm index acbe40a5d..261e273aa 100644 --- a/IkiWiki/Plugin/htmlbalance.pm +++ b/IkiWiki/Plugin/htmlbalance.pm @@ -9,7 +9,7 @@ package IkiWiki::Plugin::htmlbalance; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use HTML::TreeBuilder; use HTML::Entities; diff --git a/IkiWiki/Plugin/htmlscrubber.pm b/IkiWiki/Plugin/htmlscrubber.pm index 823b3d806..a249cdf7a 100644 --- a/IkiWiki/Plugin/htmlscrubber.pm +++ b/IkiWiki/Plugin/htmlscrubber.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::htmlscrubber; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; # This regexp matches urls that are in a known safe scheme. # Feel free to use it from other plugins. diff --git a/IkiWiki/Plugin/htmltidy.pm b/IkiWiki/Plugin/htmltidy.pm index 02438ebef..6f3379ef4 100644 --- a/IkiWiki/Plugin/htmltidy.pm +++ b/IkiWiki/Plugin/htmltidy.pm @@ -9,7 +9,7 @@ package IkiWiki::Plugin::htmltidy; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use IPC::Open2; sub import { diff --git a/IkiWiki/Plugin/httpauth.pm b/IkiWiki/Plugin/httpauth.pm index 39edff615..1816c9d74 100644 --- a/IkiWiki/Plugin/httpauth.pm +++ b/IkiWiki/Plugin/httpauth.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::httpauth; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "httpauth", call => \&getsetup); diff --git a/IkiWiki/Plugin/img.pm b/IkiWiki/Plugin/img.pm index 395890c0e..5c580c03c 100644 --- a/IkiWiki/Plugin/img.pm +++ b/IkiWiki/Plugin/img.pm @@ -5,7 +5,7 @@ package IkiWiki::Plugin::img; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %imgdefaults; diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 8490b455f..b88efc0ba 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -5,7 +5,7 @@ package IkiWiki::Plugin::inline; use warnings; use strict; use Encode; -use IkiWiki 2.00; +use IkiWiki 3.00; use URI; my %knownfeeds; diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm index 3799209d0..b79273f96 100644 --- a/IkiWiki/Plugin/link.pm +++ b/IkiWiki/Plugin/link.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::link; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my $link_regexp; diff --git a/IkiWiki/Plugin/linkmap.pm b/IkiWiki/Plugin/linkmap.pm index cb9f3ef41..941ed5f36 100644 --- a/IkiWiki/Plugin/linkmap.pm +++ b/IkiWiki/Plugin/linkmap.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::linkmap; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use IPC::Open2; sub import { diff --git a/IkiWiki/Plugin/listdirectives.pm b/IkiWiki/Plugin/listdirectives.pm index be82b0495..d2cebca34 100644 --- a/IkiWiki/Plugin/listdirectives.pm +++ b/IkiWiki/Plugin/listdirectives.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::listdirectives; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { add_underlay("directives"); diff --git a/IkiWiki/Plugin/lockedit.pm b/IkiWiki/Plugin/lockedit.pm index 31a9e70cd..c2c7414c3 100644 --- a/IkiWiki/Plugin/lockedit.pm +++ b/IkiWiki/Plugin/lockedit.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::lockedit; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "lockedit", call => \&getsetup); diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm index af14ef5de..328493116 100644 --- a/IkiWiki/Plugin/map.pm +++ b/IkiWiki/Plugin/map.pm @@ -9,7 +9,7 @@ package IkiWiki::Plugin::map; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "map", call => \&getsetup); diff --git a/IkiWiki/Plugin/mdwn.pm b/IkiWiki/Plugin/mdwn.pm index 0d5f398a0..0e134c822 100644 --- a/IkiWiki/Plugin/mdwn.pm +++ b/IkiWiki/Plugin/mdwn.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::mdwn; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "mdwn", call => \&getsetup); diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index 8c214139f..15bb29b3f 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::meta; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %metaheaders; diff --git a/IkiWiki/Plugin/mirrorlist.pm b/IkiWiki/Plugin/mirrorlist.pm index b726386f6..737dcf767 100644 --- a/IkiWiki/Plugin/mirrorlist.pm +++ b/IkiWiki/Plugin/mirrorlist.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::mirrorlist; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "mirrorlist", call => \&getsetup); diff --git a/IkiWiki/Plugin/more.pm b/IkiWiki/Plugin/more.pm index f1216ad3d..77d5fb077 100644 --- a/IkiWiki/Plugin/more.pm +++ b/IkiWiki/Plugin/more.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::more; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my $linktext = gettext("more"); diff --git a/IkiWiki/Plugin/opendiscussion.pm b/IkiWiki/Plugin/opendiscussion.pm index 95220d7b3..3da01efee 100644 --- a/IkiWiki/Plugin/opendiscussion.pm +++ b/IkiWiki/Plugin/opendiscussion.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::opendiscussion; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "opendiscussion", call => \&getsetup); diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm index 574c42f0e..5424c57e2 100644 --- a/IkiWiki/Plugin/openid.pm +++ b/IkiWiki/Plugin/openid.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::openid; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getopt", id => "openid", call => \&getopt); diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm index 8e9ab0ff4..605e6e43a 100644 --- a/IkiWiki/Plugin/orphans.pm +++ b/IkiWiki/Plugin/orphans.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::orphans; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "orphans", call => \&getsetup); diff --git a/IkiWiki/Plugin/otl.pm b/IkiWiki/Plugin/otl.pm index 280b19db0..c68fcbbe3 100644 --- a/IkiWiki/Plugin/otl.pm +++ b/IkiWiki/Plugin/otl.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::otl; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use open qw{:utf8 :std}; sub import { diff --git a/IkiWiki/Plugin/pagecount.pm b/IkiWiki/Plugin/pagecount.pm index c08ab3931..a143f24d0 100644 --- a/IkiWiki/Plugin/pagecount.pm +++ b/IkiWiki/Plugin/pagecount.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::pagecount; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "pagecount", call => \&getsetup); diff --git a/IkiWiki/Plugin/pagestats.pm b/IkiWiki/Plugin/pagestats.pm index e20d0dac6..dbe69539d 100644 --- a/IkiWiki/Plugin/pagestats.pm +++ b/IkiWiki/Plugin/pagestats.pm @@ -12,7 +12,7 @@ package IkiWiki::Plugin::pagestats; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; # Names of the HTML classes to use for the tag cloud our @classes = ('smallestPC', 'smallPC', 'normalPC', 'bigPC', 'biggestPC' ); diff --git a/IkiWiki/Plugin/pagetemplate.pm b/IkiWiki/Plugin/pagetemplate.pm index 60db8b327..1d8a84ca7 100644 --- a/IkiWiki/Plugin/pagetemplate.pm +++ b/IkiWiki/Plugin/pagetemplate.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::pagetemplate; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %templates; diff --git a/IkiWiki/Plugin/parentlinks.pm b/IkiWiki/Plugin/parentlinks.pm index fb41e1c83..ebf1d449a 100644 --- a/IkiWiki/Plugin/parentlinks.pm +++ b/IkiWiki/Plugin/parentlinks.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::parentlinks; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "parentlinks", id => "parentlinks", call => \&parentlinks); diff --git a/IkiWiki/Plugin/passwordauth.pm b/IkiWiki/Plugin/passwordauth.pm index 7176f0c33..90e2ca564 100644 --- a/IkiWiki/Plugin/passwordauth.pm +++ b/IkiWiki/Plugin/passwordauth.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::passwordauth; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "passwordauth", "call" => \&getsetup); diff --git a/IkiWiki/Plugin/pingee.pm b/IkiWiki/Plugin/pingee.pm index fcbe6b57b..f5386d0ca 100644 --- a/IkiWiki/Plugin/pingee.pm +++ b/IkiWiki/Plugin/pingee.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::pingee; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "pingee", call => \&getsetup); diff --git a/IkiWiki/Plugin/pinger.pm b/IkiWiki/Plugin/pinger.pm index 7b4dce586..4a8088661 100644 --- a/IkiWiki/Plugin/pinger.pm +++ b/IkiWiki/Plugin/pinger.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::pinger; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %pages; my $pinged=0; diff --git a/IkiWiki/Plugin/poll.pm b/IkiWiki/Plugin/poll.pm index 5ac5b818d..bc1e3501e 100644 --- a/IkiWiki/Plugin/poll.pm +++ b/IkiWiki/Plugin/poll.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::poll; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use Encode; sub import { diff --git a/IkiWiki/Plugin/polygen.pm b/IkiWiki/Plugin/polygen.pm index a32003778..bc21d71c7 100644 --- a/IkiWiki/Plugin/polygen.pm +++ b/IkiWiki/Plugin/polygen.pm @@ -7,7 +7,7 @@ package IkiWiki::Plugin::polygen; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use File::Find; sub import { diff --git a/IkiWiki/Plugin/postsparkline.pm b/IkiWiki/Plugin/postsparkline.pm index 1753e4cf9..ba43561fb 100644 --- a/IkiWiki/Plugin/postsparkline.pm +++ b/IkiWiki/Plugin/postsparkline.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::postsparkline; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { IkiWiki::loadplugin('sparkline'); diff --git a/IkiWiki/Plugin/prettydate.pm b/IkiWiki/Plugin/prettydate.pm index 501f17f5d..e155dd39b 100644 --- a/IkiWiki/Plugin/prettydate.pm +++ b/IkiWiki/Plugin/prettydate.pm @@ -1,6 +1,6 @@ #!/usr/bin/perl package IkiWiki::Plugin::prettydate; -use IkiWiki 2.00; +use IkiWiki 3.00; use warnings; no warnings 'redefine'; use strict; diff --git a/IkiWiki/Plugin/progress.pm b/IkiWiki/Plugin/progress.pm index 75da16d16..76d994acc 100644 --- a/IkiWiki/Plugin/progress.pm +++ b/IkiWiki/Plugin/progress.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::progress; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my $percentage_pattern = qr/[0-9]+\%?/; # pattern to validate percentages diff --git a/IkiWiki/Plugin/rawhtml.pm b/IkiWiki/Plugin/rawhtml.pm index 73093439d..ad8a610c1 100644 --- a/IkiWiki/Plugin/rawhtml.pm +++ b/IkiWiki/Plugin/rawhtml.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::rawhtml; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "rawhtml", call => \&getsetup); diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm index 7071596e6..ef108b3f0 100644 --- a/IkiWiki/Plugin/recentchanges.pm +++ b/IkiWiki/Plugin/recentchanges.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::recentchanges; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use Encode; use HTML::Entities; diff --git a/IkiWiki/Plugin/recentchangesdiff.pm b/IkiWiki/Plugin/recentchangesdiff.pm index 4dea9c26b..e3ba9b8d8 100644 --- a/IkiWiki/Plugin/recentchangesdiff.pm +++ b/IkiWiki/Plugin/recentchangesdiff.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::recentchangesdiff; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use HTML::Entities; my $maxlines=200; diff --git a/IkiWiki/Plugin/relativedate.pm b/IkiWiki/Plugin/relativedate.pm index e5fa8e1a5..3e33cd5c3 100644 --- a/IkiWiki/Plugin/relativedate.pm +++ b/IkiWiki/Plugin/relativedate.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::relativedate; use warnings; no warnings 'redefine'; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use POSIX; use Encode; diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm index 781501662..21989aff3 100644 --- a/IkiWiki/Plugin/remove.pm +++ b/IkiWiki/Plugin/remove.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::remove; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "remove", call => \&getsetup); diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm index b1bb15767..54c7faf13 100644 --- a/IkiWiki/Plugin/rename.pm +++ b/IkiWiki/Plugin/rename.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::rename; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "rename", call => \&getsetup); diff --git a/IkiWiki/Plugin/search.pm b/IkiWiki/Plugin/search.pm index cc2130ad5..d79e3170e 100644 --- a/IkiWiki/Plugin/search.pm +++ b/IkiWiki/Plugin/search.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::search; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "search", call => \&getsetup); diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm index 33d158d3e..0e7cbd4d1 100644 --- a/IkiWiki/Plugin/shortcut.pm +++ b/IkiWiki/Plugin/shortcut.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::shortcut; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "shortcut", call => \&getsetup); diff --git a/IkiWiki/Plugin/sidebar.pm b/IkiWiki/Plugin/sidebar.pm index 746fa93bb..41812e1c1 100644 --- a/IkiWiki/Plugin/sidebar.pm +++ b/IkiWiki/Plugin/sidebar.pm @@ -6,7 +6,7 @@ package IkiWiki::Plugin::sidebar; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "sidebar", call => \&getsetup); diff --git a/IkiWiki/Plugin/signinedit.pm b/IkiWiki/Plugin/signinedit.pm index 321c93ed5..032a0034c 100644 --- a/IkiWiki/Plugin/signinedit.pm +++ b/IkiWiki/Plugin/signinedit.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::signinedit; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "signinedit", call => \&getsetup); diff --git a/IkiWiki/Plugin/smiley.pm b/IkiWiki/Plugin/smiley.pm index 70b8cef74..1697a37c1 100644 --- a/IkiWiki/Plugin/smiley.pm +++ b/IkiWiki/Plugin/smiley.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::smiley; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %smileys; my $smiley_regexp; diff --git a/IkiWiki/Plugin/sparkline.pm b/IkiWiki/Plugin/sparkline.pm index dca755c63..1ed65e5b7 100644 --- a/IkiWiki/Plugin/sparkline.pm +++ b/IkiWiki/Plugin/sparkline.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::sparkline; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use IPC::Open2; my $match_num=qr/[-+]?[0-9]+(?:\.[0-9]+)?/; diff --git a/IkiWiki/Plugin/table.pm b/IkiWiki/Plugin/table.pm index b6f53f607..479f3d745 100644 --- a/IkiWiki/Plugin/table.pm +++ b/IkiWiki/Plugin/table.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::table; use warnings; use strict; use Encode; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "table", call => \&getsetup); diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm index ecc77cbb1..d43910910 100644 --- a/IkiWiki/Plugin/tag.pm +++ b/IkiWiki/Plugin/tag.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::tag; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my %tags; diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm index 1b7eb91bf..57bff20ff 100644 --- a/IkiWiki/Plugin/template.pm +++ b/IkiWiki/Plugin/template.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::template; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; use HTML::Template; use Encode; diff --git a/IkiWiki/Plugin/testpagespec.pm b/IkiWiki/Plugin/testpagespec.pm index a6e94dbbb..440fca33b 100644 --- a/IkiWiki/Plugin/testpagespec.pm +++ b/IkiWiki/Plugin/testpagespec.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::testpagespec; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "testpagespec", call => \&getsetup); diff --git a/IkiWiki/Plugin/teximg.pm b/IkiWiki/Plugin/teximg.pm index 57b23147e..dba5372b5 100644 --- a/IkiWiki/Plugin/teximg.pm +++ b/IkiWiki/Plugin/teximg.pm @@ -8,7 +8,7 @@ use strict; use Digest::MD5 qw(md5_hex); use File::Temp qw(tempdir); use HTML::Entities; -use IkiWiki 2.00; +use IkiWiki 3.00; my $default_prefix = < "getopt", id => "typography", call => \&getopt); diff --git a/IkiWiki/Plugin/version.pm b/IkiWiki/Plugin/version.pm index 3526dafde..587cd55fa 100644 --- a/IkiWiki/Plugin/version.pm +++ b/IkiWiki/Plugin/version.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::version; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "version", call => \&getsetup); diff --git a/IkiWiki/Plugin/websetup.pm b/IkiWiki/Plugin/websetup.pm index 66dacfde3..a47c29976 100644 --- a/IkiWiki/Plugin/websetup.pm +++ b/IkiWiki/Plugin/websetup.pm @@ -3,7 +3,7 @@ package IkiWiki::Plugin::websetup; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "websetup", call => \&getsetup); diff --git a/IkiWiki/Plugin/wikitext.pm b/IkiWiki/Plugin/wikitext.pm index 50571e524..accb03bbe 100644 --- a/IkiWiki/Plugin/wikitext.pm +++ b/IkiWiki/Plugin/wikitext.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::wikitext; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "wiki", call => \&getsetup); diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index b6fa96f91..cb7571289 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -19,7 +19,7 @@ that can be fleshed out to make a useful plugin. `IkiWiki::Plugin::pagecount` is another simple example. All perl plugins should `use IkiWiki` to import the ikiwiki plugin interface. It's a good idea to include the version number of the plugin interface that your plugin -expects: `use IkiWiki 2.00`. +expects: `use IkiWiki 3.00`. An external plugin is an executable program. It can be written in any language. Its interface to ikiwiki is via XML RPC, which it reads from @@ -431,7 +431,7 @@ describes the plugin as a whole. For example: To import the ikiwiki plugin interface: - use IkiWiki '2.00'; + use IkiWiki '3.00'; This will import several variables and functions into your plugin's namespace. These variables and functions are the ones most plugins need, diff --git a/doc/plugins/write/tutorial.mdwn b/doc/plugins/write/tutorial.mdwn index e1b34b800..5345f71f2 100644 --- a/doc/plugins/write/tutorial.mdwn +++ b/doc/plugins/write/tutorial.mdwn @@ -27,7 +27,7 @@ important one is the IkiWiki module. use warnings; use strict; - use IkiWiki 2.00; + use IkiWiki 3.00; Ok, boilerplate is out of the way. Now to add the one function that ikiwiki expects to find in any module: `import`. The import function is called when diff --git a/doc/roadmap.mdwn b/doc/roadmap.mdwn index c85c6de5b..b2ff626ed 100644 --- a/doc/roadmap.mdwn +++ b/doc/roadmap.mdwn @@ -36,12 +36,14 @@ really bad bugs will be applied going forward. # 3.0 -Version 3.0 is an opportunity to make significant transitions, and also adds -many new features. +Version 3.0 is an opportunity to make significant transitions. +Read [[tips/upgrade_to_3.0]] for the steps you will need to +follow when upgrading your wiki to this version. -* See [[tips/upgrade_to_3.0]] for the steps you will need to follow - when upgrading to this version. -* Finalise a new version of the plugin API, exporting additional commonly +The highlights of the changes in version 3.0 include: + + +* A new version of the plugin API, exporting additional commonly used functions from IkiWiki.pm. See [[todo/firm_up_plugin_interface]] It will include a vast number of new features, bugfixes, and other diff --git a/doc/todo/firm_up_plugin_interface.mdwn b/doc/todo/firm_up_plugin_interface.mdwn index c2e190884..c7553f7dd 100644 --- a/doc/todo/firm_up_plugin_interface.mdwn +++ b/doc/todo/firm_up_plugin_interface.mdwn @@ -92,3 +92,5 @@ Probably needs to evolve more and be more widely used before being exported. * %IkiWiki::pagecase (aggregate) * %IkiWiki::backlinks (pagestats) + +[[done]] (until 4.0).. -- cgit v1.2.3 From 4d1d4db92797b5aa74c4aff0cc24ab8ade3c1f43 Mon Sep 17 00:00:00 2001 From: "http://puck.openid.org/" Date: Tue, 23 Dec 2008 17:48:05 -0500 Subject: --- doc/todo/Allow_disabling_edit_and_preferences_links.mdwn | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn index 523a1f4da..1188d1ab2 100644 --- a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn +++ b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn @@ -38,3 +38,11 @@ Patch: > really want to disable the editpage plugin in the setup file for the > public, static wiki. Sounds like you might also want to turn off cgi > entirely for that build. --[[Joey]] + +>> I want to retain the same page.tmpl for both sites (different templates +>> will just increase the maintenance hell), so disabling the links in the +>> config for one public site works better in my case. +>> +>> I do have the editpage plugin disabled for the public static wiki, but +>> the link still appears on the site. I want to keep the cgi on, so that +>> the site is still searchable. --[[puck]] -- cgit v1.2.3 From 20731f761f7b378934bf3b86dbec20c167464d5f Mon Sep 17 00:00:00 2001 From: "http://puck.openid.org/" Date: Tue, 23 Dec 2008 18:05:38 -0500 Subject: --- doc/todo/Add_camelcase_exclusions.mdwn | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 doc/todo/Add_camelcase_exclusions.mdwn (limited to 'doc/todo') diff --git a/doc/todo/Add_camelcase_exclusions.mdwn b/doc/todo/Add_camelcase_exclusions.mdwn new file mode 100644 index 000000000..40737c2a0 --- /dev/null +++ b/doc/todo/Add_camelcase_exclusions.mdwn @@ -0,0 +1,21 @@ +Camelcase currently looks for any and call camelcase words and turns them into wiki links. This patch adds a config item called camelcase_ignore which is an array of camelcase words to ignore. + +
    +--- /usr/share/perl5/IkiWiki/Plugin/camelcase.pm.orig   2008-12-24 11:49:14.000000000 +1300
    ++++ /usr/share/perl5/IkiWiki/Plugin/camelcase.pm        2008-12-24 12:02:21.000000000 +1300
    +@@ -33,7 +33,11 @@
    +        my $destpage=$params{destpage};
    + 
    +        $params{content}=~s{$link_regexp}{
    +-               htmllink($page, $destpage, IkiWiki::linkpage($1))
    ++                if (grep {/$1/} @{ $config{'camelcase_ignore'} }) {
    ++                  $1
    ++                } else {
    ++                 htmllink($page, $destpage, IkiWiki::linkpage($1)) 
    ++                }
    +        }eg;
    + 
    +        return $params{content};
    +
    + +--[[puck]] -- cgit v1.2.3 From e3b7d1892949090fd1f11e9a211b556b20558069 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 23 Dec 2008 20:08:01 -0500 Subject: close --- doc/todo/Add_camelcase_exclusions.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Add_camelcase_exclusions.mdwn b/doc/todo/Add_camelcase_exclusions.mdwn index 40737c2a0..6b86132a0 100644 --- a/doc/todo/Add_camelcase_exclusions.mdwn +++ b/doc/todo/Add_camelcase_exclusions.mdwn @@ -19,3 +19,5 @@ Camelcase currently looks for any and call camelcase words and turns them into w --[[puck]] + +[[done]] -- cgit v1.2.3 From 00e55ed171c1da5f6cca22cdb8aaab099dde9c09 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 28 Dec 2008 22:31:22 -0500 Subject: 1st comment spam --- doc/todo/comments.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index bab46a0b2..832441be1 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -18,6 +18,11 @@ > Won't the remove plugin refuse to remove internal pages? This would be > a good feature to have, though. --[[smcv]] + > Here, FWIW, is the first ikiwiki comment spam I've seen: + > + > So that took about 10 days... + > --[[Joey]] + ## Patches pending merge * There is some common code cargo-culted from other plugins (notably inline and editpage) which -- cgit v1.2.3 From dc7c11261dc1f2141fbd8786c2cd55224b769fc2 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Wed, 31 Dec 2008 11:53:15 +0100 Subject: need_global_renamepage_hook: proposed solution implemented in my po branch Signed-off-by: intrigeri --- doc/todo/need_global_renamepage_hook.mdwn | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 8265497ae..f4e18baa2 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -25,7 +25,7 @@ It may seem like a corner case, but I want to be very careful when deleting files automatically in `srcdir`, which is not always under version control. -As an sad workaround, I can still disable any deletion in `srcdir` +As a sad workaround, I can still disable any deletion in `srcdir` when it is not under version control. But I think ikiwiki deserves a global `renamepage` hook that would be run once per rename operation. @@ -51,3 +51,7 @@ would solve my problem. Hmmm? --[[intrigeri]] > It might make sense to rename `renamepage` to `renamelink` to make it > clearer what it does. (I'm not very worried about this breaking things, at > this point.) --[[Joey]] + +>> In my `po` branch, I renamed `renamepage` to `renamelink`, and +>> created a `rename` hook that is passed a reference to `@torename`. +>> --[[intrigeri]] -- cgit v1.2.3 From 38d58467f491ac7e154d83b7fa0a90d1ebb79efc Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Thu, 1 Jan 2009 07:33:36 -0500 Subject: link to related bug --- doc/todo/modify_page_filename_in_plugin.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/modify_page_filename_in_plugin.mdwn b/doc/todo/modify_page_filename_in_plugin.mdwn index 4099487a1..a13c8b62f 100644 --- a/doc/todo/modify_page_filename_in_plugin.mdwn +++ b/doc/todo/modify_page_filename_in_plugin.mdwn @@ -6,6 +6,8 @@ The problem is that I occasionally have xxx.c and xxx.h in the same directory an My solution is to allow plugins to provide a hook that sets the pagename. --[[/users/bstpierre]] +> You might also find the solution to [[bugs/multiple_pages_with_same_name]] helps you. That patch is already applied. -- [[Will]] + --- /usr/share/perl5/IkiWiki.pm.ORIG 2008-10-03 14:12:50.000000000 -0400 +++ /usr/share/perl5/IkiWiki.pm 2008-10-07 11:57:26.000000000 -0400 @@ -196,11 +196,32 @@ -- cgit v1.2.3 From e65bdf090634f8d5ec531b2259f1bfd8fb4bc18a Mon Sep 17 00:00:00 2001 From: "http://puck42.myopenid.com/" Date: Mon, 5 Jan 2009 21:02:43 -0500 Subject: --- doc/todo/allow_disabling_backlinks.mdwn | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 doc/todo/allow_disabling_backlinks.mdwn (limited to 'doc/todo') diff --git a/doc/todo/allow_disabling_backlinks.mdwn b/doc/todo/allow_disabling_backlinks.mdwn new file mode 100644 index 000000000..8f2792082 --- /dev/null +++ b/doc/todo/allow_disabling_backlinks.mdwn @@ -0,0 +1,18 @@ +This patch allows disabling the backlinks in the config file by setting nobacklinks to 0. + +It is backwards compatible, and by default enables backlinks in the generated pages. + + +--- IkiWiki/Render.pm.orig2 2009-01-06 14:54:01.000000000 +1300 ++++ IkiWiki/Render.pm 2009-01-06 14:55:08.000000000 +1300 +@@ -107,7 +107,8 @@ + $template->param(have_actions => 1); + } + +- my @backlinks=sort { $a->{page} cmp $b->{page} } backlinks($page); ++ my @backlinks=sort { $a->{page} cmp $b->{page} } backlinks($page) ++ unless defined $config{nobacklinks} && $config{nobacklinks} == 0; + my ($backlinks, $more_backlinks); + if (@backlinks <= $config{numbacklinks} || ! $config{numbacklinks}) { + $backlinks=\@backlinks; + -- cgit v1.2.3 From e1d94c08f05a57318e3a84bbe37effabfb1b2614 Mon Sep 17 00:00:00 2001 From: "http://puck42.myopenid.com/" Date: Mon, 5 Jan 2009 21:03:42 -0500 Subject: --- doc/todo/allow_disabling_backlinks.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/allow_disabling_backlinks.mdwn b/doc/todo/allow_disabling_backlinks.mdwn index 8f2792082..5dd4876e8 100644 --- a/doc/todo/allow_disabling_backlinks.mdwn +++ b/doc/todo/allow_disabling_backlinks.mdwn @@ -2,7 +2,7 @@ This patch allows disabling the backlinks in the config file by setting nobackli It is backwards compatible, and by default enables backlinks in the generated pages. - +
     --- IkiWiki/Render.pm.orig2	2009-01-06 14:54:01.000000000 +1300
     +++ IkiWiki/Render.pm	2009-01-06 14:55:08.000000000 +1300
     @@ -107,7 +107,8 @@
    @@ -15,4 +15,4 @@ It is backwards compatible, and by default enables backlinks in the generated pa
      	my ($backlinks, $more_backlinks);
      	if (@backlinks <= $config{numbacklinks} || ! $config{numbacklinks}) {
      		$backlinks=\@backlinks;
    -
    +
    -- cgit v1.2.3 From 4bc545cff9bfb6d0dc6c76df253becc4e6cc6721 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 8 Jan 2009 13:21:44 -0500 Subject: new feature --- doc/todo/relative_pagespec_deficiency.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 doc/todo/relative_pagespec_deficiency.mdwn (limited to 'doc/todo') diff --git a/doc/todo/relative_pagespec_deficiency.mdwn b/doc/todo/relative_pagespec_deficiency.mdwn new file mode 100644 index 000000000..9fdfe74b1 --- /dev/null +++ b/doc/todo/relative_pagespec_deficiency.mdwn @@ -0,0 +1,6 @@ +While a relative pagespec like `./posts/*` will work, when used in a page +such as `bdale/blog`, you cannot do +`created_after(./posts/foo)` -- only `glob()` supports relative page +references. + +The other pagespec functions should too, where appropriate. -- cgit v1.2.3 From 81b87d41fb2efb5d5e1b365fcde7d5e2a2f7ce91 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 10 Jan 2009 11:41:41 +0000 Subject: Request review for my comments branch Partially addresses [[todo/comments]] --- doc/todo/comments.mdwn | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 832441be1..e8698f721 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -10,6 +10,8 @@ > it's hard enough to get some people to title their blog posts :-) > --[[smcv]] +## Patches pending merge + * If a spammer posts a comment, it is either impossible or hard to clean up via the web. Would be nice to have some kind of link on the comment that allows trusted users to remove it (using the remove plugin of @@ -23,7 +25,9 @@ > So that took about 10 days... > --[[Joey]] -## Patches pending merge + >> Implemented in my 'comments' branch, please review. It turns out + >> [[plugins/remove]] is happy to remove internal pages, so it was quite + >> easy to do. --[[smcv]] * There is some common code cargo-culted from other plugins (notably inline and editpage) which should probably be shared -- cgit v1.2.3 From af9566a6952905beff7f1ca9db64f01c3faf4ff2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 10 Jan 2009 14:17:27 -0500 Subject: comments: Add support for removing comments via web interface. (smcv) --- debian/changelog | 1 + doc/todo/comments.mdwn | 36 +++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 17 deletions(-) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index 74556906e..61aee299d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,7 @@ ikiwiki (3.02) UNRELEASED; urgency=low * repolist: New plugin to support the rel=vcs-* microformat. * goodstuff: Include repolist by default. (But it does nothing until configured with the repository locations.) + * comments: Add support for removing comments via web interface. (smcv) -- Joey Hess Tue, 06 Jan 2009 15:02:52 -0500 diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index e8698f721..c74ded8f6 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -12,23 +12,6 @@ ## Patches pending merge -* If a spammer posts a comment, it is either impossible or hard to clean - up via the web. Would be nice to have some kind of link on the comment - that allows trusted users to remove it (using the remove plugin of - course). - - > Won't the remove plugin refuse to remove internal pages? This would be - > a good feature to have, though. --[[smcv]] - - > Here, FWIW, is the first ikiwiki comment spam I've seen: - > - > So that took about 10 days... - > --[[Joey]] - - >> Implemented in my 'comments' branch, please review. It turns out - >> [[plugins/remove]] is happy to remove internal pages, so it was quite - >> easy to do. --[[smcv]] - * There is some common code cargo-culted from other plugins (notably inline and editpage) which should probably be shared @@ -151,3 +134,22 @@ first. --[[smcv]] > done --[[Joey]] + +* If a spammer posts a comment, it is either impossible or hard to clean + up via the web. Would be nice to have some kind of link on the comment + that allows trusted users to remove it (using the remove plugin of + course). + + > Won't the remove plugin refuse to remove internal pages? This would be + > a good feature to have, though. --[[smcv]] + + > Here, FWIW, is the first ikiwiki comment spam I've seen: + > + > So that took about 10 days... + > --[[Joey]] + + >> Implemented in my 'comments' branch, please review. It turns out + >> [[plugins/remove]] is happy to remove internal pages, so it was quite + >> easy to do. --[[smcv]] + + >>> done --[[Joey]] -- cgit v1.2.3 From 7a8ea68fc0bba9f75ba81a9547d359f42e31caa4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 10 Jan 2009 14:36:03 -0500 Subject: Consistently allow use of relative paths in all PageSpecs that take a page name parameter. Previously, match_created_before(), match_created_after(), match_sourcepage(), and match_destpage() did not support that, and the docs were not clear. --- IkiWiki.pm | 6 ++++++ IkiWiki/Plugin/conditional.pm | 4 ++++ debian/changelog | 4 ++++ doc/todo/relative_pagespec_deficiency.mdwn | 2 ++ 4 files changed, 16 insertions(+) (limited to 'doc/todo') diff --git a/IkiWiki.pm b/IkiWiki.pm index 892b5b5a8..4601d8590 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1880,6 +1880,9 @@ sub match_backlink ($$;@) { sub match_created_before ($$;@) { my $page=shift; my $testpage=shift; + my %params=@_; + + $testpage=derel($testpage, $params{location}); if (exists $IkiWiki::pagectime{$testpage}) { if ($IkiWiki::pagectime{$page} < $IkiWiki::pagectime{$testpage}) { @@ -1897,6 +1900,9 @@ sub match_created_before ($$;@) { sub match_created_after ($$;@) { my $page=shift; my $testpage=shift; + my %params=@_; + + $testpage=derel($testpage, $params{location}); if (exists $IkiWiki::pagectime{$testpage}) { if ($IkiWiki::pagectime{$page} > $IkiWiki::pagectime{$testpage}) { diff --git a/IkiWiki/Plugin/conditional.pm b/IkiWiki/Plugin/conditional.pm index 4f3577b34..7445dbdad 100644 --- a/IkiWiki/Plugin/conditional.pm +++ b/IkiWiki/Plugin/conditional.pm @@ -87,6 +87,8 @@ sub match_sourcepage ($$;@) { shift; my $glob=shift; my %params=@_; + + $glob=derel($glob, $params{location}); return IkiWiki::FailReason->new("cannot match sourcepage") unless exists $params{sourcepage}; if (match_glob($params{sourcepage}, $glob, @_)) { @@ -102,6 +104,8 @@ sub match_destpage ($$;@) { my $glob=shift; my %params=@_; + $glob=derel($glob, $params{location}); + return IkiWiki::FailReason->new("cannot match destpage") unless exists $params{destpage}; if (match_glob($params{destpage}, $glob, @_)) { return IkiWiki::SuccessReason->new("destpage matches $glob"); diff --git a/debian/changelog b/debian/changelog index 61aee299d..13ef9afed 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,10 @@ ikiwiki (3.02) UNRELEASED; urgency=low * goodstuff: Include repolist by default. (But it does nothing until configured with the repository locations.) * comments: Add support for removing comments via web interface. (smcv) + * Consistently allow use of relative paths in all PageSpecs + that take a page name parameter. Previously, match_created_before(), + match_created_after(), match_sourcepage(), and match_destpage() + did not support that, and the docs were not clear. -- Joey Hess Tue, 06 Jan 2009 15:02:52 -0500 diff --git a/doc/todo/relative_pagespec_deficiency.mdwn b/doc/todo/relative_pagespec_deficiency.mdwn index 9fdfe74b1..4500581c7 100644 --- a/doc/todo/relative_pagespec_deficiency.mdwn +++ b/doc/todo/relative_pagespec_deficiency.mdwn @@ -4,3 +4,5 @@ such as `bdale/blog`, you cannot do references. The other pagespec functions should too, where appropriate. + +[[done]] -- cgit v1.2.3 From e9eb93186daec1fc4c4d09a85ecfa2b06cc8476f Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 14 Jan 2009 13:49:30 +0000 Subject: pingback support todo item --- doc/todo/pingback_support.mdwn | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 doc/todo/pingback_support.mdwn (limited to 'doc/todo') diff --git a/doc/todo/pingback_support.mdwn b/doc/todo/pingback_support.mdwn new file mode 100644 index 000000000..6632cc747 --- /dev/null +++ b/doc/todo/pingback_support.mdwn @@ -0,0 +1,22 @@ +A "pingback" is a system whereby URLs you might reference in a blog post are +contacted by the blog publishing software at publishing time (i.e., once) so +that they might update a list of "pingbacks" to the URL. The originating +URL's blog software might then display a list of pingbacks, or an excerpt of +the text from your blog, perhaps interleaved with comments, etc. + +At a technical level, external URLs are extracted from your blog post by the +blogging software, fetched, inspected for information to determine whether the +remote server is configured to support pingbacks (look for link tags, or HTTP +headers) and the relevant pingback URL sent an XML-RPC packet. + +There are other technologies to achieve the same thing: trackbacks predate +pingbacks but are more vulnerable to spam due to design problems. + +The spec for pingbacks is at . + +I would like to somehow use pingbacks in conjunction with ikiwiki. I suppose +this could be achieved using a commit hook and some external software in which +case I will consider this done with an entry in [[tips]]; otherwise a +[[plugins|plugin]] to implement pingbacks would be great. + +-- [[Jon]] (Wed Jan 14 13:48:47 GMT 2009) -- cgit v1.2.3 From 63fe022602b622eb80bd38d64ee272b543ce0418 Mon Sep 17 00:00:00 2001 From: "http://deliank.myopenid.com/" Date: Wed, 14 Jan 2009 18:31:51 -0500 Subject: --- doc/todo/configurable_timezones.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/configurable_timezones.mdwn b/doc/todo/configurable_timezones.mdwn index 3ed50503a..f8b1dbbab 100644 --- a/doc/todo/configurable_timezones.mdwn +++ b/doc/todo/configurable_timezones.mdwn @@ -3,3 +3,8 @@ It would be nice if the sure could set the timezone of the wiki, and have ikiwik This is nice for shared hosting, and other situation where the user doesn't have control over the server timezone. > [[done]] via the ENV setting in the setup file. --[[Joey]] + + +Example (ikiwiki.setup): + + ENV => { TZ => "Europe/Sofia" } -- cgit v1.2.3 From 7ee92cab4095fb22d77a0b0100a472c6901eb519 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 16 Jan 2009 22:39:11 -0500 Subject: blogspam: New plugin, adding spam filtering for page editing / comment posting using the BlogSpam.net API. --- IkiWiki/Plugin/blogspam.pm | 111 +++++++++++++++++++++++++++++++++++++ debian/changelog | 2 + doc/plugins/blogspam.mdwn | 23 ++++++++ doc/todo/anti-spam_protection.mdwn | 11 ++++ t/syntax.t | 4 +- 5 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 IkiWiki/Plugin/blogspam.pm create mode 100644 doc/plugins/blogspam.mdwn (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/blogspam.pm b/IkiWiki/Plugin/blogspam.pm new file mode 100644 index 000000000..6e68a9856 --- /dev/null +++ b/IkiWiki/Plugin/blogspam.pm @@ -0,0 +1,111 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::blogspam; + +use warnings; +use strict; +use IkiWiki 3.00; +require RPC::XML; +require RPC::XML::Client; + +my $defaulturl='http://test.blogspam.net:8888/'; + +sub import { + hook(type => "getsetup", id => "blogspam", call => \&getsetup); + hook(type => "checkcontent", id => "blogspam", call => \&checkcontent); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 0, + }, + blogspam_pagespec => { + type => 'pagespec', + example => 'postcomment(*)', + description => 'PageSpec of pages to check for spam', + link => 'ikiwiki/PageSpec', + safe => 1, + rebuild => 0, + }, + blogspam_options => { + type => "string", + example => "blacklist=1.2.3.4,blacklist=8.7.6.5,max-links=10", + description => "options to send to blogspam server", + link => "http://blogspam.net/api/testComment.html#options", + safe => 1, + rebuild => 0, + }, + blogspam_server => { + type => "string", + default => $defaulturl, + description => "blogspam server XML-RPC url", + safe => 1, + rebuild => 0, + }, +} + +sub checkcontent (@) { + my %params=@_; + + if (exists $config{blogspam_pagespec}) { + return undef + if ! pagespec_match($params{page}, $config{blogspam_pagespec}, + location => $params{page}); + } + + my $url=$defaulturl; + $url = $params{blogspam_server} if exists $params{blogspam_server}; + my $client = RPC::XML::Client->new($url); + + my @options = split(",", $params{blogspam_options}) + if exists $params{blogspam_options}; + + # Allow short comments and whitespace-only edits, unless the user + # has overridden min-words themselves. + push @options, "min-words=0" + unless grep /^min-words=/i, @options; + # Wiki pages can have a lot of urls, unless the user specifically + # wants to limit them. + push @options, "exclude=lotsaurls" + unless grep /^max-links/i, @options; + # Unless the user specified a size check, disable such checking. + push @options, "exclude=size" + unless grep /^(?:max|min)-size/i, @options; + # This test has absurd false positives on words like "alpha" + # and "buy". + push @options, "exclude=stopwords"; + + # blogspam API does not have a field for author url, so put it in + # the content to be checked. + if (exists $params{url}) { + $params{content}.="\n".$params{url}; + } + + my $res = $client->send_request('testComment', { + ip => $ENV{REMOTE_ADDR}, + comment => $params{content}, + subject => defined $params{subject} ? $params{subject} : "", + name => defined $params{author} ? $params{author} : "", + options => join(",", @options), + site => $config{url}, + version => "ikiwiki ".$IkiWiki::version, + }); + + if (! ref $res || ! defined $res->value) { + debug("failed to get response from blogspam server ($url)"); + return undef; + } + elsif ($res->value =~ /^SPAM:(.*)/) { + return gettext("Sorry, but that looks like spam to blogspam: ").$1; + } + elsif ($res->value ne 'OK') { + debug(gettext("blogspam server failure: ").$res->value); + return undef; + } + else { + return undef; + } +} + +1 diff --git a/debian/changelog b/debian/changelog index b75fe6afc..cb362d6e2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,8 @@ ikiwiki (3.02) UNRELEASED; urgency=low in blogging. * checkcontent: New hook, can be used to implement arbitrary content filters, including spam filters. + * blogspam: New plugin, adding spam filtering for page editing / comment + posting using the BlogSpam.net API. -- Joey Hess Tue, 06 Jan 2009 15:02:52 -0500 diff --git a/doc/plugins/blogspam.mdwn b/doc/plugins/blogspam.mdwn new file mode 100644 index 000000000..307d4646d --- /dev/null +++ b/doc/plugins/blogspam.mdwn @@ -0,0 +1,23 @@ +[[!template id=plugin name=blogspam author="[[Joey]]"]] +[[!tag type/auth]] + +This plugin adds antispam support to ikiwiki, using the +[blogspam.net](http://blogspam.net/) API. Both page edits and +[[comment|comments]] postings can be checked for spam. Currently, +detected spam is not saved for human review, it is just rejected. + +You can control how content is tested via the `blogspam_options` +setting. By default, the options are configured in a way that is +appropriate for wiki content. This includes turning off some of the +more problimatic tests. + +The `blogspam_pagespec` setting is a [[ikiwiki/PageSpec]] that can be +used to configure which pages are checked for spam. The default is to check +all edits. If you only want to check [[comments]] (not wiki page edits), +set it to "postcomment(*)". + +By default, the blogspam.net server is used to do the spam checking. To +change this, the `blogspam_server` option can be set to the url for a +different server implementing the same API. Note that content is sent +unencrypted over the internet to the server, and the server sees +the full text of the content. diff --git a/doc/todo/anti-spam_protection.mdwn b/doc/todo/anti-spam_protection.mdwn index cb45faee5..b0524be5f 100644 --- a/doc/todo/anti-spam_protection.mdwn +++ b/doc/todo/anti-spam_protection.mdwn @@ -17,3 +17,14 @@ Cheers, You might look at the Wikipedia page on "Spam\_in\_blogs" for more ideas. In particular, would it be possible to force a subset of the pages (by regex, but you'd choose the regex to match those pages which are publicly writable) to use rel="nofollow" in all links. > I just wanted to leave a link here to the [[todo/require_CAPTCHA_to_edit]] plugin patch. Unfortunately that plugin currently interacts badly with the openid plugin. -- [[Will]] + + +--- + +Ikiwiki now has a checkcontent hook that plugins can use to see content +that is being entered and check it for spam/whatever. + +There is a blogspam plugin that uses the blogspam.org service +to check for common spam signatures. --[[Joey]] + +[[done]] diff --git a/t/syntax.t b/t/syntax.t index d09d17f7f..9d5cbc373 100755 --- a/t/syntax.t +++ b/t/syntax.t @@ -5,8 +5,8 @@ use Test::More; my @progs="ikiwiki.in"; my @libs="IkiWiki.pm"; -# monotone, external, amazon_s3 skipped since they need perl modules -push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm | grep -v monotone.pm | grep -v external.pm | grep -v amazon_s3.pm`; +# monotone, external, blogspam, amazon_s3 skipped since they need perl modules +push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm | grep -v monotone.pm | grep -v external.pm | grep -v blogspam.pm | grep -v amazon_s3.pm`; push @libs, 'IkiWiki/Plugin/skeleton.pm.example'; plan(tests => (@progs + @libs)); -- cgit v1.2.3 From ebb6d59ba1aa74e5ffe3659499e44558e7d97503 Mon Sep 17 00:00:00 2001 From: cfm Date: Sat, 17 Jan 2009 19:58:07 -0500 Subject: --- doc/todo/tagging_with_a_publication_date.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/tagging_with_a_publication_date.mdwn b/doc/todo/tagging_with_a_publication_date.mdwn index 80240ec5a..eb34b8075 100644 --- a/doc/todo/tagging_with_a_publication_date.mdwn +++ b/doc/todo/tagging_with_a_publication_date.mdwn @@ -38,3 +38,10 @@ on vacation". > > > > I no longer have the original wiki for which I wanted this feature, but I can > > see using it on future ones. -- [[DonMarti]] + +> I'd appreciate this feature for a simpler reason: If I move my +> Subversion repository (for example), ikiwiki changes every post's +> date of publication to the date of the move. It'd be wonderful if +> one could specify a date independently of the file's metadata in the +> repository, just as one can specify a title independently of the +> filename. —[[cfm]] -- cgit v1.2.3 From aecc45bd20d19f6870ffb4b0ebcf33fe8afc5685 Mon Sep 17 00:00:00 2001 From: cfm Date: Sat, 17 Jan 2009 23:46:20 -0500 Subject: I really ought to RTFM before I make todo requests, eh? --- doc/todo/tagging_with_a_publication_date.mdwn | 7 ------- 1 file changed, 7 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/tagging_with_a_publication_date.mdwn b/doc/todo/tagging_with_a_publication_date.mdwn index eb34b8075..80240ec5a 100644 --- a/doc/todo/tagging_with_a_publication_date.mdwn +++ b/doc/todo/tagging_with_a_publication_date.mdwn @@ -38,10 +38,3 @@ on vacation". > > > > I no longer have the original wiki for which I wanted this feature, but I can > > see using it on future ones. -- [[DonMarti]] - -> I'd appreciate this feature for a simpler reason: If I move my -> Subversion repository (for example), ikiwiki changes every post's -> date of publication to the date of the move. It'd be wonderful if -> one could specify a date independently of the file's metadata in the -> repository, just as one can specify a title independently of the -> filename. —[[cfm]] -- cgit v1.2.3 From 1802503af1816106ba15d1101081e72c36eeb8bc Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Sun, 18 Jan 2009 13:36:22 -0500 Subject: overriding visible modification time (to avoid insignificant edits flooding planets) --- doc/todo/overriding_displayed_modification_time.mdwn | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 doc/todo/overriding_displayed_modification_time.mdwn (limited to 'doc/todo') diff --git a/doc/todo/overriding_displayed_modification_time.mdwn b/doc/todo/overriding_displayed_modification_time.mdwn new file mode 100644 index 000000000..b015b3730 --- /dev/null +++ b/doc/todo/overriding_displayed_modification_time.mdwn @@ -0,0 +1,17 @@ +Some aggregators, like Planet, sort by mtime rather than ctime. This +means that posts with modified content come to the top (which seems odd +to me, but is presumably what the aggregator's author or operator +wants), but it also means that posts with insignificant edits (like +adding tags) come to the top too. Atom defines `` to be the date +of the last *significant* change, so it's fine that ikiwiki defaults to +using the mtime, but it would be good to have a way for the author to +say "that edit was insignificant, don't use that mtime". + +See smcv's 'updated' branch for a basic implementation, which only affects +the Atom `` field or the RSS equivalent. + +Other places the updated metadata item could be used (opinions on whether +each should use it or not, please): + +* sorting by mtime in the inline directive +* displaying "last edited" on ordinary pages -- cgit v1.2.3 From fd03fd9e0ad1d51a358d4d2953e68e12e8885afe Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 21 Jan 2009 23:01:37 -0500 Subject: add --- doc/todo/avatar.mdwn | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 doc/todo/avatar.mdwn (limited to 'doc/todo') diff --git a/doc/todo/avatar.mdwn b/doc/todo/avatar.mdwn new file mode 100644 index 000000000..3c2c712bb --- /dev/null +++ b/doc/todo/avatar.mdwn @@ -0,0 +1,43 @@ +[[!tag wishlist]] + +It would be nice if ikiwiki, particularly [[plugins/comments]] +supported user avatar icons. I was considering adding a directive for this, +as designed below. + +However, there is no *good* service for mapping openids to avatars -- +openavatar has many issues, including not supporting delegated openids, and +after trying it, I don't trust it to push users toward. +Perhaps instead ikiwiki could get the email address from the openid +provider, though I think the perl openid modules don't support the openid +2.x feature that allows that. + +At the moment, working on this doesn't feel like a good use of my time. +--[[Joey]] + +---- + +The directive displays a small avatar image for a user. Pass it the +email address, openid, or wiki username of the user. + + \[[!avatar user@example.com]] + \[[!avatar http://joey.kitenet.net/]] + \[[!avatar user]] + +The avatars are provided by various sites. For email addresses, it uses a +[gravatar](http://gravatar.com/). For openid, +[openavatar](http://www.openvatar.com/) is used. For a wiki username, the +user's email address is looked up and the gravatar for that user is +displayed. (Of course, the user has to have filled in their email address +on their Preferences page for that to work.) + +An optional second parameter can be included, containing additional +options to pass in the +[gravatar url](http://en.gravatar.com/site/implement/url). +For example, this asks for a smaller gravatar, and if a user does +not have a gravatar, uses a cute auto-generated "wavatar" avatar. + + \[[!gravatar user@example.com "size=40&default=wavatar"]] + +The `gravitar_options` setting in the setup file can be used to +specify additional options to pass. So for example if you want +to use wavatars everywhere, set it to "default=wavatar". -- cgit v1.2.3 From d2579c0c12df0c6a8c11310ea64ad40bc9da6b8b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 21 Jan 2009 23:12:44 -0500 Subject: one fleeting second thought --- doc/todo/avatar.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/avatar.mdwn b/doc/todo/avatar.mdwn index 3c2c712bb..b8aa2327f 100644 --- a/doc/todo/avatar.mdwn +++ b/doc/todo/avatar.mdwn @@ -14,6 +14,10 @@ provider, though I think the perl openid modules don't support the openid At the moment, working on this doesn't feel like a good use of my time. --[[Joey]] +Hmm.. unless is just always used a single provider (gravatar) and hashed +the openid. Then wavatars could be used to get a unique avatar per openid +at least. --[[Joey]] + ---- The directive displays a small avatar image for a user. Pass it the -- cgit v1.2.3 From 31a6f1735cf98a565a82b7cc720d6b2e8e49ad13 Mon Sep 17 00:00:00 2001 From: Rocco Date: Sun, 25 Jan 2009 03:39:52 -0500 Subject: vote for Template::Toolkit --- doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn b/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn index 3b9f6c0fd..c4e78ca0b 100644 --- a/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn +++ b/doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn @@ -56,3 +56,5 @@ the templates. I'd prefer not having to touch Perl though... Yes, Template::Toolkit is very powerful. But I think it's somehow overkill for a wiki. HTML::Template can keep things simple, though. --[weakish](http://weakish.int.eu.org/blog/) I'd have to agree that Template::Toolkit is overkill and personally I'm not a fan, but it is very popular (there is even a book) and the new version (3) is alleged to be much more nimble than current version. --[[ajt]] + +HTML::Template's HTML-like markup prevents me from editing templates in KompoZer or other WYSIWYG HTML editors. The editor tries to render the template markup rather than display it verbatim, and large parts of the template become invisible. A markup syntax that doesn't confuse editors (such as Template::Toolkit's "[% FOO %]") may promote template customization. The ability to replace the template engine would be within the spirit of ikiwiki's extensibility. --Rocco -- cgit v1.2.3 From dfc50165dd187968fa9fd27856f3dc952ad783e9 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Mon, 26 Jan 2009 22:32:31 +0100 Subject: po and doc/todo/need_global_renamepage_hook: response Signed-off-by: intrigeri --- doc/plugins/contrib/po.mdwn | 46 +++++++++++++++++++++++++++++++ doc/todo/need_global_renamepage_hook.mdwn | 6 ++++ 2 files changed, 52 insertions(+) (limited to 'doc/todo') diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index 490cc2d6c..8b8bccb5a 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -212,27 +212,73 @@ finish it at some point in the first quarter of 2009. --[[intrigeri]] > 3.x API, which I've promised not to do, so needs to be avoided > somehow. (Sorry, I guess I dropped the ball on not getting this > API change in before cutting 3.0..) +> +>> I'm discussing the solutions we now have on +>> [[todo/need_global_renamepage_hook]], as the solution I implemented +>> was initially agreed on there. +>> > * I don't understand the parentlinks code change and need to figure it > out. Can you explain what is going on there? +>> +>> I'm calling `bestlink` there so that po's injected `bestlink` is +>> run. This way, the parent links of a page link to the parent page +>> version in the proper language, depending on the +>> `po_link_to=current` and `po_link_to=negotiated` settings. +>> Moreover, when using my meta branch enhancements plus meta title to +>> make pages titles translatable, this small patch is needed to get +>> the translated titles into parentlinks. +>> > * canrename's mix of positional and named parameters is way too > ugly to get into an ikiwiki API. Use named parameters > entirely. Also probably should just use named parameters > for canremove. > * `skeleton.pm.example`'s canrename needs fixing to use either > the current or my suggested parameters. +>> +>> I'll do both. +>> > * I don't like the exporting of `%backlinks` and `$backlinks_calculated` > (the latter is exported but not used). +>> +>> The commit message for 85f865b5d98e0122934d11e3f3eb6703e4f4c620 +>> contains the rationale for this change. I guess I don't understand +>> the subtleties of `our` use, and perldoc does not help me a lot. +>> IIRC, I actually did not use `our` to "export" these variables, but +>> rather to have them shared between `Render.pm` uses. +>> > * What is this `IkiWiki::nicepagetitle` and why are you > injecting it into that namespace when only your module uses it? > Actually, I can't even find a caller of it in your module. +>> +>> I guess you should have a look to my `meta` branch and to +>> [[bugs/pagetitle_function_does_not_respect_meta_titles]] in order +>> to understand this :) +>> > * I'm very fearful of the `add_depends` in `postscan`. > Does this make every page depend on every page that links > to it? Won't this absurdly bloat the dependency pagespecs > and slow everything down? And since nicepagetitle is given > as the reason for doing it, and nicepagetitle isn't used, > why do it? +>> +>> As explained in the 85f865b5d98e0122934d11e3f3eb6703e4f4c620 log: +>> this feature hits performance a bit. Its cost was quite small in my +>> real-world use-cases (a few percents bigger refresh time), but +>> could be bigger in worst cases. When using the po plugin with my +>> meta branch changes (i.e. the `nicepagetitle` thing), and having +>> enabled the option to display translation status in links, this +>> maintains the translation status up-to-date in backlinks. Same when +>> using meta title to make the pages titles translatable. It does +>> help having a nice and consistent translated wiki, but as it hurts +>> performance, I'm proposing to turn it into an option. +>> > * The po4a Suggests should be versioned to the first version > that can be used safely, and that version documented in > `plugins/po.mdwn`. +>> +>> Sure. I was waiting for the necessary version to be actually +>> released, but we can guess it will be 0.35. +>> +>> --[[intrigeri]] > > --[[Joey]] diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index f4e18baa2..aa543a64c 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -55,3 +55,9 @@ would solve my problem. Hmmm? --[[intrigeri]] >> In my `po` branch, I renamed `renamepage` to `renamelink`, and >> created a `rename` hook that is passed a reference to `@torename`. >> --[[intrigeri]] + +>>> As Joey highlights it on [[plugins/contrib/po]], it's too late to +>>> merge such a change, as the 3.x plugin API is released and should +>>> not be broken. I'm thus proposing to keep the existing +>>> `renamepage` as it is, and call `rename` the global hook I need. +>>> --[[intrigeri]] -- cgit v1.2.3 From 67ba074ba8809a2f849ee51770e3d4695311647c Mon Sep 17 00:00:00 2001 From: intrigeri Date: Mon, 26 Jan 2009 23:47:34 +0100 Subject: need_global_renamepage_hook: s/suggest/will Signed-off-by: intrigeri --- doc/todo/need_global_renamepage_hook.mdwn | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index aa543a64c..c5b2b1096 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -58,6 +58,5 @@ would solve my problem. Hmmm? --[[intrigeri]] >>> As Joey highlights it on [[plugins/contrib/po]], it's too late to >>> merge such a change, as the 3.x plugin API is released and should ->>> not be broken. I'm thus proposing to keep the existing ->>> `renamepage` as it is, and call `rename` the global hook I need. ->>> --[[intrigeri]] +>>> not be broken. I will thus keep the existing `renamepage` as it +>>> is, and call `rename` the global hook I need. --[[intrigeri]] -- cgit v1.2.3 From 183f03aa968882c9d0e8e70b33e8a482aa16726a Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 27 Jan 2009 00:02:15 +0100 Subject: the rename hooks names waltz seems over Another set of hooks would not endure such heavy renaming, but the rename* hooks actually do ;) Signed-off-by: intrigeri --- doc/plugins/contrib/po.mdwn | 4 +--- doc/todo/need_global_renamepage_hook.mdwn | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index 70f5aa5a2..1751a6f7f 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -215,9 +215,7 @@ finish it at some point in the first quarter of 2009. --[[intrigeri]] > somehow. (Sorry, I guess I dropped the ball on not getting this > API change in before cutting 3.0..) >> ->> I'm discussing the solutions we now have on ->> [[todo/need_global_renamepage_hook]], as the solution I implemented ->> was initially agreed on there. +>> Fixed, see [[todo/need_global_renamepage_hook]]. >> > * I don't understand the parentlinks code change and need to figure it > out. Can you explain what is going on there? diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index c5b2b1096..7af2bdc56 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -60,3 +60,5 @@ would solve my problem. Hmmm? --[[intrigeri]] >>> merge such a change, as the 3.x plugin API is released and should >>> not be broken. I will thus keep the existing `renamepage` as it >>> is, and call `rename` the global hook I need. --[[intrigeri]] + +>>>> Done in my `po` branch. --[[intrigeri]] -- cgit v1.2.3 From 16ff246d4112fd208189a05f7b64a6d0dbe53132 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 26 Jan 2009 19:41:35 -0500 Subject: rename hook issues --- doc/todo/need_global_renamepage_hook.mdwn | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 7af2bdc56..62e91eee4 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -62,3 +62,21 @@ would solve my problem. Hmmm? --[[intrigeri]] >>> is, and call `rename` the global hook I need. --[[intrigeri]] >>>> Done in my `po` branch. --[[intrigeri]] + +I think I see a problem in the rename hook. The hook is called +before the plugin adds any subpages to the set of pages to rename. +So, if the user choses to rename subpages, po will not notice +they are moving, and will not move their po files. + +Perhaps the hooks should be moved to come after subpages are added. +This would, though, mean that if the hook somehow decides to add +entirely other pages to the list, their subpages would not be +automatically added. + +I also have some qualms about the design of the hook. In particular, +passing the mutable array reference probably makes it impossible +to use from external plugins. Instead it could return any additional +rename hashes it wants to add. Or, if the ability to modify existing +hashes is desired, it could return the full set of hashes. + +--[[Joey]] -- cgit v1.2.3 From 9b4040992d69829b914d141551422722b84fca0e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 26 Jan 2009 20:11:33 -0500 Subject: meta: New "updated" metadata specifies a fake modification time for a page, to be output into RSS and Atom feeds. (smcv) --- debian/changelog | 2 ++ doc/todo/overriding_displayed_modification_time.mdwn | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index 6c1710fe1..7f72a672a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,8 @@ ikiwiki (3.03) UNRELEASED; urgency=low (in .ikiwiki/comments_pending) for moderator review. * comments: Add a moderation web interface. * git: Fix malformed utf8 recieved from git. + * meta: New "updated" metadata specifies a fake modification time for a + page, to be output into RSS and Atom feeds. (smcv) -- Joey Hess Sun, 18 Jan 2009 14:50:57 -0500 diff --git a/doc/todo/overriding_displayed_modification_time.mdwn b/doc/todo/overriding_displayed_modification_time.mdwn index b015b3730..160d31519 100644 --- a/doc/todo/overriding_displayed_modification_time.mdwn +++ b/doc/todo/overriding_displayed_modification_time.mdwn @@ -1,12 +1,19 @@ Some aggregators, like Planet, sort by mtime rather than ctime. This means that posts with modified content come to the top (which seems odd to me, but is presumably what the aggregator's author or operator -wants), but it also means that posts with insignificant edits (like +wants), + +> Hah! That's so charitable I hope you can deduct it from your taxes. ;-) +> --[[Joey]] + +but it also means that posts with insignificant edits (like adding tags) come to the top too. Atom defines `` to be the date of the last *significant* change, so it's fine that ikiwiki defaults to using the mtime, but it would be good to have a way for the author to say "that edit was insignificant, don't use that mtime". +> Yes, this is a real limitiation of ikiwiki's atom support. --[[Joey]] + See smcv's 'updated' branch for a basic implementation, which only affects the Atom `` field or the RSS equivalent. @@ -15,3 +22,6 @@ each should use it or not, please): * sorting by mtime in the inline directive * displaying "last edited" on ordinary pages + +> Tending toward no for both, but willing to be convinced otherwise.. +> [[merged|done]] --[[Joey]] -- cgit v1.2.3 From c8ce3ed4404d37d7c2361f30466c7961f4e1418b Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 27 Jan 2009 17:22:38 +0100 Subject: rename hook: fixed half, added proposal for the other half Signed-off-by: intrigeri --- doc/todo/need_global_renamepage_hook.mdwn | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 62e91eee4..906bf1220 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -80,3 +80,18 @@ rename hashes it wants to add. Or, if the ability to modify existing hashes is desired, it could return the full set of hashes. --[[Joey]] + +> I fixed the last part, i.e. a rename hook function now returns the +> full set of hashes. As I also converted it to take named parameters, +> such a function still is passed a reference to the original array, +> though, because one can't build a hash containing an array of hashes +> as a value, without passing this array as a reference. +> +> I'm not entirely sure about your first concern. Calling the hook +> before or after the subpages addition both have their own problems. +> +> What about running the hook before *and* after the subpages +> addition, with an additional `when` named parameter, so that +> a given hook function can choose to act only before or after, or both? +> +> --[[intrigeri]] -- cgit v1.2.3 From 94c932ee3d13924e3d916e859c2c9efa8e07ae31 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 27 Jan 2009 13:14:53 -0500 Subject: thought --- debian/changelog | 6 ++---- doc/todo/need_global_renamepage_hook.mdwn | 8 ++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index 6a64a0c49..785681ff4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,9 @@ ikiwiki (3.03) UNRELEASED; urgency=low - * Avoid feeding decoded unicode to Term::ReadLine. - Closes: 512169 + * Avoid feeding decoded unicode to Term::ReadLine. Closes: 512169 * blogspam: Log spam info on failure in debug mode. * Remove nonstandard css. Closes: #512378 - * blogspam: Fix use of blogspam_options and blogspam_server - config settings. + * blogspam: Fix use of blogspam_options and blogspam_server config settings. * comments: If comment content checks fail, store the comment (in .ikiwiki/comments_pending) for moderator review. * comments: Add a moderation web interface, which admins can diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 906bf1220..9c987aac4 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -87,6 +87,8 @@ hashes is desired, it could return the full set of hashes. > though, because one can't build a hash containing an array of hashes > as a value, without passing this array as a reference. > +>> Sure. +> > I'm not entirely sure about your first concern. Calling the hook > before or after the subpages addition both have their own problems. > @@ -95,3 +97,9 @@ hashes is desired, it could return the full set of hashes. > a given hook function can choose to act only before or after, or both? > > --[[intrigeri]] +>> +>> Have you thought about making the hook be run once *per* file that is +>> selected to be renamed? This would even handle the case where two +>> plugins use the hook; plugin A would see when plugin B adds a new file +>> to be renamed. And the subpage renaming stuff could probably be moved +>> into the rename hook too. --[[Joey]] -- cgit v1.2.3 From deea2f42aabf7e2e2bf8f2c9ec552caebd52f03d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 28 Jan 2009 16:51:19 -0500 Subject: close this, we have comments now --- doc/todo/discussion_page_as_blog.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/discussion_page_as_blog.mdwn b/doc/todo/discussion_page_as_blog.mdwn index c7a3d6ac9..990b7ddb3 100644 --- a/doc/todo/discussion_page_as_blog.mdwn +++ b/doc/todo/discussion_page_as_blog.mdwn @@ -30,4 +30,4 @@ I don't think that the nesting is very clear, I found it confusing.. Would each page be its own individual blog? Or its own blog post? To me it seems like an entire wiki can be viewed as a blog, with threaded or unthreaded comments underneath. -[[!tag soc]] +[[!tag soc done]] -- cgit v1.2.3 From 0d58f263214183b4667987da48077d5e8e8a41c1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 30 Jan 2009 14:07:03 -0500 Subject: merge dups --- ...itle_function_does_not_respect_meta_titles.mdwn | 123 ++++++++++++++++++++- doc/todo/using_meta_titles_for_parentlinks.html | 122 -------------------- 2 files changed, 121 insertions(+), 124 deletions(-) delete mode 100644 doc/todo/using_meta_titles_for_parentlinks.html (limited to 'doc/todo') diff --git a/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn b/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn index cccd53d05..11735f770 100644 --- a/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn +++ b/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn @@ -2,8 +2,127 @@ The `IkiWiki::pagetitle` function does not respect title changes via `meta.title --[[madduck]] -> Agreed. [[todo/using_meta_titles_for_parentlinks]] contains a beginning of -> solution. A few quick notes about it: +---- + +It is possible to set a Page-Title in the meta-plugin, but that one isn't +reused in parentlinks. This [[patch]] may fix it. + +
      +
    • I give pagetitle the full path to a page. +
    • I redefine the 'pagetitle'-sub to deal with it. +
    • to maintain compatibility for IkiWikis without the meta-plugin, i added a 'basename' to the Original-pagetitle. +
    + +
    +diff -c /usr/share/perl5/IkiWiki/Render.pm.distrib /usr/share/perl5/IkiWiki/Render.pm
    +*** /usr/share/perl5/IkiWiki/Render.pm.distrib  Wed Aug  6 07:34:55 2008
    +--- /usr/share/perl5/IkiWiki/Render.pm  Tue Aug 26 23:29:32 2008
    +***************
    +*** 102,108 ****
    +        $template->param(
    +                title => $page eq 'index' 
    +                        ? $config{wikiname} 
    +!                       : pagetitle(basename($page)),
    +                wikiname => $config{wikiname},
    +                content => $content,
    +                backlinks => $backlinks,
    +--- 102,108 ----
    +        $template->param(
    +                title => $page eq 'index' 
    +                        ? $config{wikiname} 
    +!                       : pagetitle($page),
    +                wikiname => $config{wikiname},
    +                content => $content,
    +                backlinks => $backlinks,
    +
    +diff -c /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm.distrib /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm
    +*** /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm.distrib      Wed Aug  6 07:34:55 2008
    +--- /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm      Tue Aug 26 23:19:43 2008
    +***************
    +*** 44,50 ****
    +                        "height_$height" => 1,
    +                };
    +                $path.="/".$dir;
    +!               $title=IkiWiki::pagetitle($dir);
    +                $i++;
    +        }
    +        return @ret;
    +--- 44,50 ----
    +                        "height_$height" => 1,
    +                };
    +                $path.="/".$dir;
    +!               $title=IkiWiki::pagetitle($path);
    +                $i++;
    +        }
    +        return @ret;
    +
    +diff -c /usr/share/perl5/IkiWiki.pm.distrib /usr/share/perl5/IkiWiki.pm
    +*** /usr/share/perl5/IkiWiki.pm.distrib Wed Aug  6 07:48:34 2008
    +--- /usr/share/perl5/IkiWiki.pm Tue Aug 26 23:47:30 2008
    +***************
    +*** 792,797 ****
    +--- 792,799 ----
    +        my $page=shift;
    +        my $unescaped=shift;
    +  
    ++       $page=basename($page);
    ++ 
    +        if ($unescaped) {
    +                $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : chr($2)/eg;
    +    	}
    +
    +diff -c /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib /usr/share/perl5/IkiWiki/Plugin/meta.pm
    +*** /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib     Wed Aug  6 07:34:55 2008
    +--- /usr/share/perl5/IkiWiki/Plugin/meta.pm     Tue Aug 26 23:30:58 2008
    +***************
    +*** 3,8 ****
    +--- 3,9 ----
    +  package IkiWiki::Plugin::meta;
    +  
    +  use warnings;
    ++ no warnings 'redefine';
    +  use strict;
    +  use IkiWiki 2.00;
    +  
    +***************
    +*** 289,294 ****
    +--- 290,319 ----
    +        }
    +  }
    +  
    ++ sub IkiWiki::pagetitle ($;$) {
    ++       my $page=shift;
    ++       my $unescaped=shift;
    ++ 
    ++       if ($page =~ m#/#) {
    ++               $page =~ s#^/##;
    ++               $page =~ s#/index$##;
    ++               if ($pagestate{"$page/index"}{meta}{title}) {
    ++                       $page = $pagestate{"$page/index"}{meta}{title};
    ++               } else {
    ++                       $page = IkiWiki::basename($page);
    ++               }
    ++       }
    ++ 
    ++       if ($unescaped) {
    ++               $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : chr($2)/eg;
    ++       }
    ++       else {
    ++               $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : "&#$2;"/eg;
    ++       }
    ++ 
    ++       return $page;
    ++ }
    ++ 
    +  package IkiWiki::PageSpec;
    +  
    +  sub match_title ($$;@) {
    +
    +
    + +-- + +> A few quick notes about it: > - Using inline would avoid the redefinition + code duplication. > - A few plugins would need to be upgraded. diff --git a/doc/todo/using_meta_titles_for_parentlinks.html b/doc/todo/using_meta_titles_for_parentlinks.html deleted file mode 100644 index 6da40a415..000000000 --- a/doc/todo/using_meta_titles_for_parentlinks.html +++ /dev/null @@ -1,122 +0,0 @@ -It is possible to set a Page-Title in the meta-plugin, but that one isn't -reused in parentlinks. This [[patch]] may fix it. - -
      -
    • I give pagetitle the full path to a page. -
    • I redefine the 'pagetitle'-sub to deal with it. -
    • to maintain compatibility for IkiWikis without the meta-plugin, i added a 'basename' to the Original-pagetitle. -
    - -
    -diff -c /usr/share/perl5/IkiWiki/Render.pm.distrib /usr/share/perl5/IkiWiki/Render.pm
    -*** /usr/share/perl5/IkiWiki/Render.pm.distrib  Wed Aug  6 07:34:55 2008
    ---- /usr/share/perl5/IkiWiki/Render.pm  Tue Aug 26 23:29:32 2008
    -***************
    -*** 102,108 ****
    -        $template->param(
    -                title => $page eq 'index' 
    -                        ? $config{wikiname} 
    -!                       : pagetitle(basename($page)),
    -                wikiname => $config{wikiname},
    -                content => $content,
    -                backlinks => $backlinks,
    ---- 102,108 ----
    -        $template->param(
    -                title => $page eq 'index' 
    -                        ? $config{wikiname} 
    -!                       : pagetitle($page),
    -                wikiname => $config{wikiname},
    -                content => $content,
    -                backlinks => $backlinks,
    -
    -diff -c /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm.distrib /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm
    -*** /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm.distrib      Wed Aug  6 07:34:55 2008
    ---- /usr/share/perl5/IkiWiki/Plugin/parentlinks.pm      Tue Aug 26 23:19:43 2008
    -***************
    -*** 44,50 ****
    -                        "height_$height" => 1,
    -                };
    -                $path.="/".$dir;
    -!               $title=IkiWiki::pagetitle($dir);
    -                $i++;
    -        }
    -        return @ret;
    ---- 44,50 ----
    -                        "height_$height" => 1,
    -                };
    -                $path.="/".$dir;
    -!               $title=IkiWiki::pagetitle($path);
    -                $i++;
    -        }
    -        return @ret;
    -
    -diff -c /usr/share/perl5/IkiWiki.pm.distrib /usr/share/perl5/IkiWiki.pm
    -*** /usr/share/perl5/IkiWiki.pm.distrib Wed Aug  6 07:48:34 2008
    ---- /usr/share/perl5/IkiWiki.pm Tue Aug 26 23:47:30 2008
    -***************
    -*** 792,797 ****
    ---- 792,799 ----
    -        my $page=shift;
    -        my $unescaped=shift;
    -  
    -+       $page=basename($page);
    -+ 
    -        if ($unescaped) {
    -                $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : chr($2)/eg;
    -    	}
    -
    -diff -c /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib /usr/share/perl5/IkiWiki/Plugin/meta.pm
    -*** /usr/share/perl5/IkiWiki/Plugin/meta.pm.distrib     Wed Aug  6 07:34:55 2008
    ---- /usr/share/perl5/IkiWiki/Plugin/meta.pm     Tue Aug 26 23:30:58 2008
    -***************
    -*** 3,8 ****
    ---- 3,9 ----
    -  package IkiWiki::Plugin::meta;
    -  
    -  use warnings;
    -+ no warnings 'redefine';
    -  use strict;
    -  use IkiWiki 2.00;
    -  
    -***************
    -*** 289,294 ****
    ---- 290,319 ----
    -        }
    -  }
    -  
    -+ sub IkiWiki::pagetitle ($;$) {
    -+       my $page=shift;
    -+       my $unescaped=shift;
    -+ 
    -+       if ($page =~ m#/#) {
    -+               $page =~ s#^/##;
    -+               $page =~ s#/index$##;
    -+               if ($pagestate{"$page/index"}{meta}{title}) {
    -+                       $page = $pagestate{"$page/index"}{meta}{title};
    -+               } else {
    -+                       $page = IkiWiki::basename($page);
    -+               }
    -+       }
    -+ 
    -+       if ($unescaped) {
    -+               $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : chr($2)/eg;
    -+       }
    -+       else {
    -+               $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : "&#$2;"/eg;
    -+       }
    -+ 
    -+       return $page;
    -+ }
    -+ 
    -  package IkiWiki::PageSpec;
    -  
    -  sub match_title ($$;@) {
    -
    -
    -
    - -

    -This is actually a duplicate for -[[bugs/pagetitle_function_does_not_respect_meta_titles]], where I'm -following up a bit. --[[intrigeri]] -

    \ No newline at end of file -- cgit v1.2.3 From ef3f93b6f668381abb8cebe7ca116e5bf8997069 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 31 Jan 2009 18:37:48 +0000 Subject: Request review of my 'goto' branch --- doc/todo/apache_404_ErrorDocument_handler.mdwn | 2 +- doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/apache_404_ErrorDocument_handler.mdwn b/doc/todo/apache_404_ErrorDocument_handler.mdwn index b200ff3b2..e3dd7c345 100644 --- a/doc/todo/apache_404_ErrorDocument_handler.mdwn +++ b/doc/todo/apache_404_ErrorDocument_handler.mdwn @@ -15,4 +15,4 @@ successful requests. Due to [a well-known MSIE misfeature](http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807), error output needs to be at least 512 bytes long, so some padding might also be required. -I'm happy to write such a script if there is interest. --[[smcv]] +Implemented in the 'goto' branch in my git repository. --[[smcv]] diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn index 1828f0a7b..1276c8e6a 100644 --- a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -6,4 +6,5 @@ the same for users. For now I've just cloned the functionality into the comments plugin, but perhaps this functionality could be renamed to `do=goto` or something, and moved to `IkiWiki/CGI.pm`? -If there's general approval I'm happy to write a patch. --[[smcv]] +> Now implemented as the 'goto' branch in my git repository, along with +> [[apache_404_ErrorDocument_handler]]. --[[smcv]] -- cgit v1.2.3 From f4dd02f00ae5255641b49d60e971f6f298f6a98f Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 31 Jan 2009 18:57:12 +0000 Subject: Clarify behaviour of 404 handler and link an example --- doc/todo/apache_404_ErrorDocument_handler.mdwn | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/apache_404_ErrorDocument_handler.mdwn b/doc/todo/apache_404_ErrorDocument_handler.mdwn index e3dd7c345..b580294ca 100644 --- a/doc/todo/apache_404_ErrorDocument_handler.mdwn +++ b/doc/todo/apache_404_ErrorDocument_handler.mdwn @@ -8,6 +8,9 @@ I think it'd probably have to be a separate CGI script because the environment w (having said that, it might make sense for `recentchanges_link` to return 404 rather than 200 anyway if the page doesn't exist). +> This turns out to be untrue, as long as the wrapper lets a couple of extra +> environment variables through. --[[smcv]] + This would give IkiWiki the behaviour of many other wikis, where visiting a page that does not yet exist prompts you to create it, without having to invoke the CGI for successful requests. @@ -15,4 +18,6 @@ successful requests. Due to [a well-known MSIE misfeature](http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807), error output needs to be at least 512 bytes long, so some padding might also be required. -Implemented in the 'goto' branch in my git repository. --[[smcv]] +Implemented in the 'goto' branch in my git repository. You can see this +feature in action [on my blog](http://smcv.pseudorandom.co.uk/no/such/page/). +--[[smcv]] -- cgit v1.2.3 From 2524903dc60d678cca7496a58cecd5cd97a72ad2 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 31 Jan 2009 14:55:14 -0500 Subject: comments --- doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn index 1276c8e6a..2c308d086 100644 --- a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -8,3 +8,13 @@ something, and moved to `IkiWiki/CGI.pm`? > Now implemented as the 'goto' branch in my git repository, along with > [[apache_404_ErrorDocument_handler]]. --[[smcv]] + +>> Looks good, the only things I wonder are: +>> * Should it be a separate plugin? In particular `cgi_page_from_404()` is +>> pretty big, and only works if apache is configured so seems somewhat +>> pluginaable. +>> * I wish there were some way to generalize the workaround for the stupid +>> MSIE behavior. Actually, I wish we could ignore the MSIE stupidity, +>> as I tend to do, but perhaps it's too stupid in this case for that to +>> fly.. +>> --[[Joey]] -- cgit v1.2.3 From 7cdbe0da864f6c322c6b25238609b3ba62a61ad8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 31 Jan 2009 15:05:06 -0500 Subject: one other thought --- doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn index 2c308d086..f48702bfa 100644 --- a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -17,4 +17,8 @@ something, and moved to `IkiWiki/CGI.pm`? >> MSIE behavior. Actually, I wish we could ignore the MSIE stupidity, >> as I tend to do, but perhaps it's too stupid in this case for that to >> fly.. +>> * Is there any reason to require do=goto before checking for +>> `REDIRECT_STATUS`? Seems that if that code were moved +>> out of the enclosing if block, the apache 404 handler could +>> be set direct to the cgi, which seems simpler to remember. >> --[[Joey]] -- cgit v1.2.3 From 0fe92602496210294e71c28ba459f06277a8c2ac Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 31 Jan 2009 23:08:48 +0000 Subject: Respond with updated goto branch --- doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn index f48702bfa..4bf3fb449 100644 --- a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -13,6 +13,12 @@ something, and moved to `IkiWiki/CGI.pm`? >> * Should it be a separate plugin? In particular `cgi_page_from_404()` is >> pretty big, and only works if apache is configured so seems somewhat >> pluginaable. + +>>> I've split out `goto` and `apache404` plugins in the branch. I think +>>> you're right that apache404 should be a plugin. If you think goto is small +>>> and general enough to not be a plugin, just don't merge my most recent +>>> patch! --[[smcv]] + >> * I wish there were some way to generalize the workaround for the stupid >> MSIE behavior. Actually, I wish we could ignore the MSIE stupidity, >> as I tend to do, but perhaps it's too stupid in this case for that to @@ -22,3 +28,6 @@ something, and moved to `IkiWiki/CGI.pm`? >> out of the enclosing if block, the apache 404 handler could >> be set direct to the cgi, which seems simpler to remember. >> --[[Joey]] + +>>> No, good point - the `REDIRECT_STATUS` check is sufficiently unambiguous +>>> already. Fixed. --[[smcv]] -- cgit v1.2.3 From e5c8bc6222712fe9f465d4ac36350fd4ea729787 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 31 Jan 2009 19:10:48 -0500 Subject: doc updates for goto branch merge --- debian/changelog | 10 ++++++++++ debian/copyright | 4 ++++ doc/tips/dot_cgi.mdwn | 8 ++++++++ doc/todo/apache_404_ErrorDocument_handler.mdwn | 2 ++ doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn | 2 ++ 5 files changed, 26 insertions(+) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index 82a23212b..f3927f121 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +ikiwiki (3.04) UNRELEASED; urgency=low + + * apache404: New plugin which lets you use the IkiWiki CGI script as + an Apache 404 handler, to give the behaviour of various other wiki + engines where visiting a nonexistent page provides you with a link + to create it. (smcv) + * Factor out redundant code into goto plugin. (smcv) + + -- Joey Hess Sat, 31 Jan 2009 19:04:45 -0500 + ikiwiki (3.03) unstable; urgency=low * Avoid feeding decoded unicode to Term::ReadLine. Closes: 512169 diff --git a/debian/copyright b/debian/copyright index 71fb47013..bdfbaa573 100644 --- a/debian/copyright +++ b/debian/copyright @@ -118,6 +118,10 @@ Copyright: © 2008 Simon McVittie License: GPL-2+ +Files: apache404.pm +Copyright: © 2009 Simon McVittie +License: GPL-2+ + Files: doc/logo/* Copyright: © 2006 Recai Oktaş License: GPL-2+ diff --git a/doc/tips/dot_cgi.mdwn b/doc/tips/dot_cgi.mdwn index fbc3d8bbc..ffcbf95d4 100644 --- a/doc/tips/dot_cgi.mdwn +++ b/doc/tips/dot_cgi.mdwn @@ -26,6 +26,14 @@ configuration changes should work anywhere. Or, if you've put it in a `~/public_html`, edit `/etc/apache2/mods-available/userdir.conf`. +You may also want to enable the [[plugins/apache404]] +plugin. To make apache use it, the apache config file +will need a further modification to make it use ikiwiki's CGI +as the apache 404 handler. Something like this, with +the path adjusted to where you've put the CGI: + + ErrorDocument 404 /cgi-bin/ikiwiki.cgi + ## lighttpd Here is how to enable cgi on [lighttpd](http://www.lighttpd.net/) and diff --git a/doc/todo/apache_404_ErrorDocument_handler.mdwn b/doc/todo/apache_404_ErrorDocument_handler.mdwn index b580294ca..4ae1d1a79 100644 --- a/doc/todo/apache_404_ErrorDocument_handler.mdwn +++ b/doc/todo/apache_404_ErrorDocument_handler.mdwn @@ -21,3 +21,5 @@ error output needs to be at least 512 bytes long, so some padding might also be Implemented in the 'goto' branch in my git repository. You can see this feature in action [on my blog](http://smcv.pseudorandom.co.uk/no/such/page/). --[[smcv]] + +[[done]] diff --git a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn index 4bf3fb449..26c5202d0 100644 --- a/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn +++ b/doc/todo/generic___39__do__61__goto__39___for_CGI.mdwn @@ -31,3 +31,5 @@ something, and moved to `IkiWiki/CGI.pm`? >>> No, good point - the `REDIRECT_STATUS` check is sufficiently unambiguous >>> already. Fixed. --[[smcv]] + +[[done]] -- cgit v1.2.3 From 4531e540746749391f1004f601eb78b42b826fd7 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 3 Feb 2009 10:37:24 -0500 Subject: implementing pingback using checkcontent hook and the comments plugin --- doc/todo/pingback_support.mdwn | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/pingback_support.mdwn b/doc/todo/pingback_support.mdwn index 6632cc747..3a7b5a931 100644 --- a/doc/todo/pingback_support.mdwn +++ b/doc/todo/pingback_support.mdwn @@ -20,3 +20,17 @@ case I will consider this done with an entry in [[tips]]; otherwise a [[plugins|plugin]] to implement pingbacks would be great. -- [[Jon]] (Wed Jan 14 13:48:47 GMT 2009) + +> I think it's now possible to implement trackback and pingback receiving +> support in ikiwiki. One easy way to do it would be to hook it into the +> existing [[plugins/comments]] plugin -- each pingback/trackback that +> ikiwiki recieves would result in the creation if a new comment, which +> would be subject to the usual comment filtering (ie, blogspam) and +> moderation and would then show up amoung the other, regular comments on +> the page. +> +> As for sending trackbacks and pingbacks, this could fairly easily be +> implemented using a `editcontent` hook. Since this hook is called +> whenever a page is posted or edited, and gets the changed content, it can +> simply scan it for urls (may have to htmlize first?), and send pings to +> all urls found. --[[Joey]] -- cgit v1.2.3 From 9690356080e995d7f9d3b3370c0030f87f9e8650 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 3 Feb 2009 10:43:27 -0500 Subject: note --- doc/todo/pingback_support.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/pingback_support.mdwn b/doc/todo/pingback_support.mdwn index 3a7b5a931..b10366bda 100644 --- a/doc/todo/pingback_support.mdwn +++ b/doc/todo/pingback_support.mdwn @@ -28,6 +28,9 @@ case I will consider this done with an entry in [[tips]]; otherwise a > would be subject to the usual comment filtering (ie, blogspam) and > moderation and would then show up amoung the other, regular comments on > the page. +> +> (One wrinkle: would need to guard against duplicate pings. Maybe by +> checking existing comments for any that have the same url?) > > As for sending trackbacks and pingbacks, this could fairly easily be > implemented using a `editcontent` hook. Since this hook is called -- cgit v1.2.3 From bc3fb1ceabf7f2139ce42e782e3f9d96e33dce0f Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Tue, 3 Feb 2009 13:33:59 -0500 Subject: Update the to-do list for comments, and explain why we can't have a form for the whole comment --- doc/todo/comments.mdwn | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index c74ded8f6..8da640f26 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -10,19 +10,13 @@ > it's hard enough to get some people to title their blog posts :-) > --[[smcv]] -## Patches pending merge - -* There is some common code cargo-culted from other plugins (notably inline and editpage) which - should probably be shared - - > Actually, there's less of this now than there used to be - a lot of simple - > things that were shared have become unshareable as they became more - > complex. --[[smcv]] - - > There's still goto. You have a branch for that. --[[Joey]] - ## Won't fix +* Because IkiWiki generates static HTML, we can't have a form inlined in + page.tmpl where the user fills in an entire comment and can submit it in + a single button-press, without being vulnerable to cross-site request forgery. + So I'll put this in as wontfix. --[[smcv]] + * It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. Perhaps postcomment could also be folded into this? Then the pagespec @@ -47,6 +41,17 @@ ## Done +* There is some common code cargo-culted from other plugins (notably inline and editpage) which + should probably be shared + + > Actually, there's less of this now than there used to be - a lot of simple + > things that were shared have become unshareable as they became more + > complex. --[[smcv]] + + > There's still goto. You have a branch for that. --[[Joey]] + + >> Now merged --[[smcv]] + * The default template should have a (?) icon next to unauthenticated users (with the IP address as title) and an OpenID icon next to OpenIDs @@ -91,6 +96,7 @@ > and c42f174e fix another `beautify_urlpath` bug and add a regression test > --[[smcv]] + * Now that inline has some comments-specific functionality anyway, it would be good to output `` in Atom and the equivalent in RSS. -- cgit v1.2.3 From 1b3dbe0b91d7646096229fb531a3527df3b3587a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 3 Feb 2009 13:51:10 -0500 Subject: not so fast --- doc/todo/comments.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/comments.mdwn b/doc/todo/comments.mdwn index 8da640f26..7a113bee3 100644 --- a/doc/todo/comments.mdwn +++ b/doc/todo/comments.mdwn @@ -17,6 +17,15 @@ a single button-press, without being vulnerable to cross-site request forgery. So I'll put this in as wontfix. --[[smcv]] + > Surely there's a way around that? + > A web 2.0 way comes to mind: The user clicks on a link + > to open the comment post form. While the nasty web 2.0 javascript :) + > is manipulating the page to add the form to it, it looks at the cookie + > and uses that to insert a sid field. + > + > Or, it could have a mandatory preview page and do the CSRF check then. + > --[[Joey]] + * It would be useful to have a pagespec that always matches all comments on pages matching a glob. Something like `comment(blog/*)`. Perhaps postcomment could also be folded into this? Then the pagespec -- cgit v1.2.3 From 9640681c27c4f4353f56d544bcdd8f9ac7abb98a Mon Sep 17 00:00:00 2001 From: bremner Date: Thu, 5 Feb 2009 08:03:19 -0500 Subject: add "bug report" for sourcecode plugin --- .../discussion.mdwn | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn index dc6c0001e..59c1a245b 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn @@ -4,6 +4,19 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. -- [[Will]] +---- +I was trying to replace sourcehighlight with sourcecode. I had to modify the +htmlize call slightly so that it would work in a format directive. +([modified version](http://pivot.cs.unb.ca/git/?p=ikiplugins.git;a=blob_plain;f=IkiWiki/Plugin/sourcecode.pm;hb=21fc57091edb9)) +I hit a wall the following example (the last commit in the above repo). + + \[[!meta title="Solutions to assignment 1"]] + + - [[!format cc """ + test + """]] + + ---- #!/usr/bin/perl -- cgit v1.2.3 From 3dd796e6377d20cd3ecd63ee486aa4933fa1baee Mon Sep 17 00:00:00 2001 From: Svend Sorensen Date: Thu, 5 Feb 2009 13:03:32 -0800 Subject: Add wishlist --- doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn (limited to 'doc/todo') diff --git a/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn b/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn new file mode 100644 index 000000000..164d12f12 --- /dev/null +++ b/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn @@ -0,0 +1,5 @@ +Links to the changed page on RecentChanges only show up if the cgi wrapper is +enabled. It would be nice if links were also generated on wikis that do not use +the cgi. [[svend]] + +[[!tag wishlist]] -- cgit v1.2.3 From c8ca79a403bbab14fe19b01b8a2526f187a9abc6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 5 Feb 2009 16:10:30 -0500 Subject: response --- ...ecentChanges_page_links_without_cgi_wrapper.mdwn | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn b/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn index 164d12f12..b37109032 100644 --- a/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn +++ b/doc/todo/RecentChanges_page_links_without_cgi_wrapper.mdwn @@ -2,4 +2,25 @@ Links to the changed page on RecentChanges only show up if the cgi wrapper is enabled. It would be nice if links were also generated on wikis that do not use the cgi. [[svend]] +> It would be, but doing so would make updating the recentchanges page for +> each commit a lot slower, or would result in there often being broken +> links there. +> +> The broken links would happen if a page is removed. +> +> The speed issue is that currently each individual change in the +> recentchanges page is built just once, when the change is made, and the +> html for it is reused thereafter. To avoid broken links, it would need to +> regenerate each change's html on each commit. That's 100x the overhead. +> (Perhaps it's possible to be smarter about which need generation tho.) +> +> The best way to approach this that I can see ATM is to use the +> [[plugins/404]] plugin to handle the broken links and then recentchanges +> could avoid explicitly using the CGI. But this doesn't meet your use case +> of having no CGI. +> +> If you're willing to live with broken links to removed pages, I suppose +> that could be made an option.. +> --[[Joey]] + [[!tag wishlist]] -- cgit v1.2.3 From 9ad4065633a7ecab8c9b62edb0d0e3f5cd3813e0 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sat, 7 Feb 2009 05:56:18 -0500 Subject: Ask for more detail with issue --- .../discussion.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn index 59c1a245b..a998afa77 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn @@ -8,6 +8,9 @@ Updated to use fix noted in [[bugs/multiple_pages_with_same_name]]. I was trying to replace sourcehighlight with sourcecode. I had to modify the htmlize call slightly so that it would work in a format directive. ([modified version](http://pivot.cs.unb.ca/git/?p=ikiplugins.git;a=blob_plain;f=IkiWiki/Plugin/sourcecode.pm;hb=21fc57091edb9)) + +> I haven't tested them, but those changes look sensible to me. -- [[Will]] + I hit a wall the following example (the last commit in the above repo). \[[!meta title="Solutions to assignment 1"]] @@ -17,6 +20,9 @@ I hit a wall the following example (the last commit in the above repo). """]] +> I haven't actually tested this to see what the problem is. How does this fail? +> Does source-highlight barf on the non-c++ content? Is there a wiki URL that shows the failure? -- [[Will]] + ---- #!/usr/bin/perl -- cgit v1.2.3 From 3aab99fae5f7681154a35a3e75d8e225424e2d8b Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Sat, 7 Feb 2009 14:19:28 -0500 Subject: --post-commit won't delete pages and --refresh seems no deadlock --- doc/todo/mercurial.mdwn | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index f0dbf9806..c0af10719 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -29,6 +29,25 @@ This should update the working directory and run ikiwiki every time a change is > It can deadlock if the post-commit hook runs with --refresh in the > former case. --[[Joey]] +The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. + +I add the following to .hg/hgrc: + + [hooks] + changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh + post-commit = ikiwiki --setup path.to.setup.file --refresh + +I tried the follwing commands in $SRC: + + touch deadlocktest.mdwn + hg add + hg ci + +No deadlock happens. (Also I push to the $SRC from another machine, again, no deadlock.) + +Of course these tests are too simple. The problem is I have no idea when the deadlock will happen. If someone is kind enough to point out, I will run more test. + + *** I have a few notes on mercurial usage after trying it out for a while: -- cgit v1.2.3 From 2cc6a07f5492912f35d103bcc57753f21ee09ecf Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Sat, 7 Feb 2009 14:22:01 -0500 Subject: (tiny) markdown syntax --- doc/todo/mercurial.mdwn | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index c0af10719..26888131e 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -33,15 +33,15 @@ The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki I add the following to .hg/hgrc: - [hooks] - changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh - post-commit = ikiwiki --setup path.to.setup.file --refresh + [hooks] + changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh + post-commit = ikiwiki --setup path.to.setup.file --refresh I tried the follwing commands in $SRC: - touch deadlocktest.mdwn - hg add - hg ci + touch deadlocktest.mdwn + hg add + hg ci No deadlock happens. (Also I push to the $SRC from another machine, again, no deadlock.) -- cgit v1.2.3 From dc0409b4a717da9926e618341cbd96ab1c4cb763 Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Sat, 7 Feb 2009 14:49:06 -0500 Subject: I guess changegroup is better than incoming --- doc/todo/mercurial.mdwn | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 26888131e..9635b6880 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -31,7 +31,7 @@ This should update the working directory and run ikiwiki every time a change is The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. -I add the following to .hg/hgrc: +I add the following to .hg/hgrc:(I use changegroup since I don't think we need refresh per changeset, please point out if I am wrong.) [hooks] changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh @@ -43,7 +43,9 @@ I tried the follwing commands in $SRC: hg add hg ci -No deadlock happens. (Also I push to the $SRC from another machine, again, no deadlock.) +No deadlock happens. (Also I push to the $SRC from another machine, again, no deadlock. If there is conflicts between $SRC and my own repo, hg pull will abort. You have to pull, merge and push again.) + + Of course these tests are too simple. The problem is I have no idea when the deadlock will happen. If someone is kind enough to point out, I will run more test. -- cgit v1.2.3 From 6605764c523787141272fe83c3d46a65aea7649d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 9 Feb 2009 14:58:10 -0500 Subject: Fix unusual --setup --post-commit command line option combo. --- debian/changelog | 1 + doc/todo/mercurial.mdwn | 25 +++++++++++++++++++++++++ ikiwiki.in | 6 ++++-- 3 files changed, 30 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index c9878c719..d2b701db7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,7 @@ ikiwiki (3.04) UNRELEASED; urgency=low * Work around XML::Atom strangeness that results in double-encoded posts. (smcv) * Updated German translation (Kai Wasserbäch). Closes: #514251 + * Fix unusual --setup --post-commit command line option combo. -- Joey Hess Sat, 31 Jan 2009 19:04:45 -0500 diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 9635b6880..e45629102 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -31,6 +31,13 @@ This should update the working directory and run ikiwiki every time a change is The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. +> You should really be using a setup file that has `mercurial_wrapper` +> set, and running the wrapper generated by that from your hook. +> That will work. I think that the `--setup --post-commit` on the command +> line is currently broken and does the same expensive rebuild process as --setup +> alone (which doesn't delete files from $DEST either). Will fix that. +> --[[Joey]] + I add the following to .hg/hgrc:(I use changegroup since I don't think we need refresh per changeset, please point out if I am wrong.) [hooks] @@ -49,6 +56,24 @@ No deadlock happens. (Also I push to the $SRC from another machine, again, no d Of course these tests are too simple. The problem is I have no idea when the deadlock will happen. If someone is kind enough to point out, I will run more test. +> For the deadlock to occur, a edit has to be made via the web. +> +> Ikiwiki, +> running as a CGI, takes a lock on the wiki, and commits the edit, +> continuing to run in the background, with the lock still held. +> When the edit is committed, the hg hook runs, running `ikwiki --refresh`. +> Nearly the first thing that process does it try to lock the wiki.. +> which is already locked. This lock is taken in a blocking manner, +> thus the deadlock -- the cgi is waiting for the commit to finish before +> dropping the lock, and the commit is blocked waiting for the lock to be +> released. +> +> --post-commit avoids this problem by checking if the cgi is running +> and avoiding doing anything in that case. (While still handing the +> refresh if the commit was not made by the CGI.) +> So in that case, the commit finishes w/o ikiwiki doing anything, +> and the ikiwiki CGI handles the wiki refresh. +> --[[Joey]] *** diff --git a/ikiwiki.in b/ikiwiki.in index 32a24af84..c79a2bfef 100755 --- a/ikiwiki.in +++ b/ikiwiki.in @@ -135,7 +135,8 @@ sub main () { if (@{$config{wrappers}} && ! $config{render} && ! $config{dumpsetup} && - (! $config{refresh} || $config{genwrappers})) { + ((! $config{refresh} && ! $config{post_commit}) + || $config{genwrappers})) { debug(gettext("generating wrappers..")); require IkiWiki::Wrapper; my %origconfig=(%config); @@ -157,7 +158,8 @@ sub main () { } # setup implies a wiki rebuild by default - if (! $config{refresh} && ! $config{render}) { + if (! $config{refresh} && ! $config{render} && + ! $config{post_commit}) { $config{rebuild}=1; } } -- cgit v1.2.3 From ff5d52b0d2dc025cedadb3b9d06f46e8954d7a38 Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Tue, 10 Feb 2009 04:38:14 -0500 Subject: del wrong hook & ikiwiki --post-commit --a-lot-of-switches --- doc/todo/mercurial.mdwn | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index e45629102..2f844db03 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -29,7 +29,7 @@ This should update the working directory and run ikiwiki every time a change is > It can deadlock if the post-commit hook runs with --refresh in the > former case. --[[Joey]] -The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. +The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. --[[weakish]] > You should really be using a setup file that has `mercurial_wrapper` > set, and running the wrapper generated by that from your hook. @@ -38,23 +38,23 @@ The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki > alone (which doesn't delete files from $DEST either). Will fix that. > --[[Joey]] +>> Mercurial doesn't support put hooks in .hg/hooks/* (like git). In Mercurial, the only way to run +>> your own hooks is specifying them in the hgrc file. (Or write a new extension.) +>> I guess use a very long command will work. +>> (e.g. ikiwiki --post-commit --a-lot-of-switches --set var=value $SRC $DEST) +>> (Fortunately ikiwiki supports --set var=value so without --setup works.) +>> +>> Alternative is always editing via cgi or pushing. Never work on the $SRC/repo directly. +>> --[[weakish]] + I add the following to .hg/hgrc:(I use changegroup since I don't think we need refresh per changeset, please point out if I am wrong.) [hooks] changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh - post-commit = ikiwiki --setup path.to.setup.file --refresh - -I tried the follwing commands in $SRC: - - touch deadlocktest.mdwn - hg add - hg ci -No deadlock happens. (Also I push to the $SRC from another machine, again, no deadlock. If there is conflicts between $SRC and my own repo, hg pull will abort. You have to pull, merge and push again.) +

    post-commit = ikiwiki --setup path.to.setup.file --refreshThis will cause deadlock! See bleow!

    - - -Of course these tests are too simple. The problem is I have no idea when the deadlock will happen. If someone is kind enough to point out, I will run more test. +I have no idea when the deadlock will happen. --[[weakish]] > For the deadlock to occur, a edit has to be made via the web. > @@ -75,6 +75,7 @@ Of course these tests are too simple. The problem is I have no idea when the de > and the ikiwiki CGI handles the wiki refresh. > --[[Joey]] + *** I have a few notes on mercurial usage after trying it out for a while: -- cgit v1.2.3 From 4004959dc21939cd6acbf21d317a201190bc15ed Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Tue, 10 Feb 2009 04:40:37 -0500 Subject: add a email. --- doc/todo/weakish.mdwn | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/todo/weakish.mdwn (limited to 'doc/todo') diff --git a/doc/todo/weakish.mdwn b/doc/todo/weakish.mdwn new file mode 100644 index 000000000..ccd5665ad --- /dev/null +++ b/doc/todo/weakish.mdwn @@ -0,0 +1 @@ +email: weakish@gmail.com -- cgit v1.2.3 From b96bab0449d6f326a7e847fba3488100ad84bead Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Tue, 10 Feb 2009 04:42:02 -0500 Subject: rename todo/weakish.mdwn to users/weakish.mdwn --- doc/todo/weakish.mdwn | 1 - doc/users/weakish.mdwn | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 doc/todo/weakish.mdwn create mode 100644 doc/users/weakish.mdwn (limited to 'doc/todo') diff --git a/doc/todo/weakish.mdwn b/doc/todo/weakish.mdwn deleted file mode 100644 index ccd5665ad..000000000 --- a/doc/todo/weakish.mdwn +++ /dev/null @@ -1 +0,0 @@ -email: weakish@gmail.com diff --git a/doc/users/weakish.mdwn b/doc/users/weakish.mdwn new file mode 100644 index 000000000..ccd5665ad --- /dev/null +++ b/doc/users/weakish.mdwn @@ -0,0 +1 @@ +email: weakish@gmail.com -- cgit v1.2.3 From 12a72e758382c8efb9cdd6c66e06d9de094a4b29 Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Tue, 10 Feb 2009 04:42:03 -0500 Subject: update for rename of todo/weakish.mdwn to users/weakish.mdwn --- doc/todo/mercurial.mdwn | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 2f844db03..89f5337ab 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -29,7 +29,7 @@ This should update the working directory and run ikiwiki every time a change is > It can deadlock if the post-commit hook runs with --refresh in the > former case. --[[Joey]] -The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. --[[weakish]] +The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki --setup setupfile --post-commit will not delete them in $DEST. --[[users/weakish]] > You should really be using a setup file that has `mercurial_wrapper` > set, and running the wrapper generated by that from your hook. @@ -45,7 +45,7 @@ The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki >> (Fortunately ikiwiki supports --set var=value so without --setup works.) >> >> Alternative is always editing via cgi or pushing. Never work on the $SRC/repo directly. ->> --[[weakish]] +>> --[[users/weakish]] I add the following to .hg/hgrc:(I use changegroup since I don't think we need refresh per changeset, please point out if I am wrong.) @@ -54,7 +54,7 @@ I add the following to .hg/hgrc:(I use changegroup since I don't think we need r

    post-commit = ikiwiki --setup path.to.setup.file --refreshThis will cause deadlock! See bleow!

    -I have no idea when the deadlock will happen. --[[weakish]] +I have no idea when the deadlock will happen. --[[users/weakish]] > For the deadlock to occur, a edit has to be made via the web. > -- cgit v1.2.3 From 1998b3c2d666461985131e6d24212035daee88eb Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Wed, 11 Feb 2009 05:14:06 -0500 Subject: redirect automatically after rename --- doc/todo/redirect_automatically_after_rename.mdwn | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 doc/todo/redirect_automatically_after_rename.mdwn (limited to 'doc/todo') diff --git a/doc/todo/redirect_automatically_after_rename.mdwn b/doc/todo/redirect_automatically_after_rename.mdwn new file mode 100644 index 000000000..6a6d4f05f --- /dev/null +++ b/doc/todo/redirect_automatically_after_rename.mdwn @@ -0,0 +1,10 @@ +In some wikis, (e.g. Mediawiki) after [[renaming|rename]] +a page, the old page still exist but only redirect to the +new page. This is convenient since external sites may +have links pointing to the old url. + +If [[meta]] plugin is enabled, users can manually edit the +page, and put in '\[[!meta redir=newpage]]', but this is +not very convenient. + + -- cgit v1.2.3 From 011a45229a52bd63426a0d2d056bfec874a81a2a Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Wed, 11 Feb 2009 05:15:33 -0500 Subject: fix broken links --- doc/todo/redirect_automatically_after_rename.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/redirect_automatically_after_rename.mdwn b/doc/todo/redirect_automatically_after_rename.mdwn index 6a6d4f05f..1cbb824d2 100644 --- a/doc/todo/redirect_automatically_after_rename.mdwn +++ b/doc/todo/redirect_automatically_after_rename.mdwn @@ -1,9 +1,9 @@ -In some wikis, (e.g. Mediawiki) after [[renaming|rename]] +In some wikis, (e.g. Mediawiki) after [[renaming|plugins/rename]] a page, the old page still exist but only redirect to the new page. This is convenient since external sites may have links pointing to the old url. -If [[meta]] plugin is enabled, users can manually edit the +If [[plugins/meta]] plugin is enabled, users can manually edit the page, and put in '\[[!meta redir=newpage]]', but this is not very convenient. -- cgit v1.2.3 From c0405e0f20e49c382b656bf9c83c4dd1aa0fc187 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 12 Feb 2009 13:18:54 -0500 Subject: response --- doc/todo/mercurial.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 89f5337ab..414aaa807 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -36,6 +36,7 @@ The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki > That will work. I think that the `--setup --post-commit` on the command > line is currently broken and does the same expensive rebuild process as --setup > alone (which doesn't delete files from $DEST either). Will fix that. +> (fixed) > --[[Joey]] >> Mercurial doesn't support put hooks in .hg/hooks/* (like git). In Mercurial, the only way to run @@ -47,6 +48,10 @@ The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki >> Alternative is always editing via cgi or pushing. Never work on the $SRC/repo directly. >> --[[users/weakish]] +>>> I don't see anything preventing you from using a setup file with +>>> `mercurual_wrapper => ".hg/ikiwiki-hook",` and then modifying the hgrc +>>> to run that wrapper. --[[Joey]] + I add the following to .hg/hgrc:(I use changegroup since I don't think we need refresh per changeset, please point out if I am wrong.) [hooks] -- cgit v1.2.3 From 442f3ab0aba88b61abecf23c6f9539ea494e9537 Mon Sep 17 00:00:00 2001 From: bremner Date: Thu, 12 Feb 2009 20:51:38 -0500 Subject: strange output from sourcecode plugin --- .../discussion.mdwn | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn index a998afa77..8953a055e 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn @@ -22,6 +22,18 @@ I hit a wall the following example (the last commit in the above repo). > I haven't actually tested this to see what the problem is. How does this fail? > Does source-highlight barf on the non-c++ content? Is there a wiki URL that shows the failure? -- [[Will]] +>> Here is the content div from the output page +>> [[DavidBremner]] + +
    +

      +
    • +
    + 2beb4fd7289998159f61976143f66bb6

    + +

    + +
    ---- -- cgit v1.2.3 From 257cbbcb7e151053641bde409253a1ea792e9569 Mon Sep 17 00:00:00 2001 From: "http://weakish.int.eu.org/" Date: Fri, 13 Feb 2009 05:05:09 -0500 Subject: The wrapper works nicely! --- doc/todo/mercurial.mdwn | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 414aaa807..2f148498e 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -49,15 +49,19 @@ The problem with --post-commit is that if you delete some pages in $SRC, ikiwiki >> --[[users/weakish]] >>> I don't see anything preventing you from using a setup file with ->>> `mercurual_wrapper => ".hg/ikiwiki-hook",` and then modifying the hgrc +>>> `mercurial_wrapper => ".hg/ikiwiki-hook",` and then modifying the hgrc >>> to run that wrapper. --[[Joey]] +>> Thanks for pointing out this. I have some stupid misunderstanding on the +>> usage of mercurial_wrapper before. The wrapper works nicely! --[[weakish]] + I add the following to .hg/hgrc:(I use changegroup since I don't think we need refresh per changeset, please point out if I am wrong.) [hooks] changegroup = hg update >&2 && ikiwiki --setup path.to.setup.file --refresh + post-commit = path.to.the.mercurial.wrapper -

    post-commit = ikiwiki --setup path.to.setup.file --refreshThis will cause deadlock! See bleow!

    +----- I have no idea when the deadlock will happen. --[[users/weakish]] -- cgit v1.2.3 From 7599de6e436fd141a8027ad65d5a2b0b03ea6f98 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Fri, 13 Feb 2009 06:16:18 -0500 Subject: Add a new bug to track simple patch --- doc/todo/Allow_filenames_that_are_all_type.mdwn | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 doc/todo/Allow_filenames_that_are_all_type.mdwn (limited to 'doc/todo') diff --git a/doc/todo/Allow_filenames_that_are_all_type.mdwn b/doc/todo/Allow_filenames_that_are_all_type.mdwn new file mode 100644 index 000000000..55e29b645 --- /dev/null +++ b/doc/todo/Allow_filenames_that_are_all_type.mdwn @@ -0,0 +1,20 @@ +This is a [[patch]] to allow filenames that are just the type. The best example of this is wanting to +pass a `Makefile` through one of the [[todo/syntax_highlighting/]] plugins. With this patch, +if the plugin can process files of type `.Makefile` then it will also process `Makefile`. + +I put this patch on the [[todo/syntax_highlighting/]] page a while ago, but it seemed to get +lost because it didn't have its own bug to track it. Now it does :). -- [[Will]] + + diff --git a/IkiWiki.pm b/IkiWiki.pm + index 8d728c9..1bd46a9 100644 + --- a/IkiWiki.pm + +++ b/IkiWiki.pm + @@ -618,6 +618,8 @@ sub pagetype ($) { + + if ($page =~ /\.([^.]+)$/) { + return $1 if exists $hooks{htmlize}{$1}; + + } elsif ($hooks{htmlize}{$page}{keepextension}) { + + return $page; + } + return; + } -- cgit v1.2.3 From 8b4f45e1e09b85cc4eb987ed96f9b3707cd49f15 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Fri, 13 Feb 2009 06:49:22 -0500 Subject: Update patch and reply to bug report. --- .../discussion.mdwn | 246 +++++++++++---------- 1 file changed, 135 insertions(+), 111 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn index 8953a055e..8bc75420d 100644 --- a/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn +++ b/doc/todo/automatic_use_of_syntax_plugin_on_source_code_files/discussion.mdwn @@ -35,10 +35,32 @@ I hit a wall the following example (the last commit in the above repo).
    +>>> That is quite strange. I tested your version of the plugin. I had to revert one your changes to get it to +>>> work: the linenumber argument should not have a space at the end of it. Once I made that change, +>>> everything worked as expected. The output I get for your example is below: + +
    +
      +
    • +
    + +
    00001: test
    + +

    + +
    + +>>> I don't know what is going wrong for you... source-highlight, Markdown or something else. +>>> I do find it interesting the way the sourcecode `div` and the list get interleaved. That +>>> just looks like a Markdown thing though. +>>> In any case, I've updated the patch below to include most of your changes. -- [[Will]] + ---- #!/usr/bin/perl # markup source files + # Originally by Will Uther + # With modifications by David Bremner package IkiWiki::Plugin::sourcecode; use warnings; @@ -49,142 +71,144 @@ I hit a wall the following example (the last commit in the above repo). my %metaheaders; sub import { - hook(type => "getsetup", id => "sourcecode", call => \&getsetup); - hook(type => "checkconfig", id => "sourcecode", call => \&checkconfig); - hook(type => "pagetemplate", id => "sourcecode", call => \&pagetemplate); + hook(type => "getsetup", id => "sourcecode", call => \&getsetup); + hook(type => "checkconfig", id => "sourcecode", call => \&checkconfig); + hook(type => "pagetemplate", id => "sourcecode", call => \&pagetemplate); } sub getsetup () { - return - plugin => { - safe => 1, - rebuild => 1, # format plugin - }, - sourcecode_command => { - type => "string", - example => "/usr/bin/source-highlight", - description => "The command to execute to run source-highlight", - safe => 0, - rebuild => 1, - }, - sourcecode_lang => { - type => "string", - example => "c,cpp,h,java", - description => "Comma separated list of suffixes to recognise as source code", - safe => 1, - rebuild => 1, - }, - sourcecode_linenumbers => { - type => "boolean", - example => 1, - description => "Should we add line numbers to the source code", - safe => 1, - rebuild => 1, - }, - sourcecode_css => { - type => "string", - example => "sourcecode_style", - description => "page to use as css file for source", - safe => 1, - rebuild => 1, - }, + return + plugin => { + safe => 1, + rebuild => 1, # format plugin + }, + sourcecode_command => { + type => "string", + example => "/usr/bin/source-highlight", + description => "The command to execute to run source-highlight", + safe => 0, + rebuild => 1, + }, + sourcecode_lang => { + type => "string", + example => "c,cpp,h,java", + description => "Comma separated list of suffixes to recognise as source code", + safe => 1, + rebuild => 1, + }, + sourcecode_linenumbers => { + type => "boolean", + example => 1, + description => "Should we add line numbers to the source code", + safe => 1, + rebuild => 1, + }, + sourcecode_css => { + type => "string", + example => "sourcecode_style", + description => "page to use as css file for source", + safe => 1, + rebuild => 1, + }, } sub checkconfig () { - if (! $config{sourcecode_lang}) { - error("The sourcecode plugin requires a list of suffixes in the 'sourcecode_lang' config option"); - } - - if (! $config{sourcecode_command}) { - $config{sourcecode_command} = "source-highlight"; - } - - if (! length `which $config{sourcecode_command} 2>/dev/null`) { - error("The sourcecode plugin is unable to find the $config{sourcecode_command} command"); - } - - if (! $config{sourcecode_css}) { - $config{sourcecode_css} = "sourcecode_style"; - } - - if (! defined $config{sourcecode_linenumbers}) { - $config{sourcecode_linenumbers} = 1; - } - - my %langs = (); - - open(LANGS, "$config{sourcecode_command} --lang-list|"); - while () { - if ($_ =~ /(\w+) = .+\.lang/) { - $langs{$1} = 1; - } - } - close(LANGS); - - foreach my $lang (split(/[, ]+/, $config{sourcecode_lang})) { - if ($langs{$lang}) { - hook(type => "htmlize", id => $lang, call => \&htmlize, keepextension => 1); - } else { - error("Your installation of source-highlight cannot handle sourcecode language $lang!"); - } - } + if (! $config{sourcecode_lang}) { + error("The sourcecode plugin requires a list of suffixes in the 'sourcecode_lang' config option"); + } + + if (! $config{sourcecode_command}) { + $config{sourcecode_command} = "source-highlight"; + } + + if (! length `which $config{sourcecode_command} 2>/dev/null`) { + error("The sourcecode plugin is unable to find the $config{sourcecode_command} command"); + } + + if (! $config{sourcecode_css}) { + $config{sourcecode_css} = "sourcecode_style"; + } + + if (! defined $config{sourcecode_linenumbers}) { + $config{sourcecode_linenumbers} = 1; + } + + my %langs = (); + + open(LANGS, "$config{sourcecode_command} --lang-list|"); + while () { + if ($_ =~ /(\w+) = .+\.lang/) { + $langs{$1} = 1; + } + } + close(LANGS); + + foreach my $lang (split(/[, ]+/, $config{sourcecode_lang})) { + if ($langs{$lang}) { + hook(type => "htmlize", id => $lang, no_override=>1, + call => sub { htmlize(lang=>$lang, @_) }, + keepextension => 1); + } else { + error("Your installation of source-highlight cannot handle sourcecode language $lang!"); + } + } } sub htmlize (@) { - my %params=@_; + my %params=@_; + + my $page = $params{page}; - my $page = $params{page}; + eval q{use FileHandle}; + error($@) if $@; + eval q{use IPC::Open2}; + error($@) if $@; - eval q{use FileHandle}; - error($@) if $@; - eval q{use IPC::Open2}; - error($@) if $@; + local(*SPS_IN, *SPS_OUT); # Create local handles - local(*SPS_IN, *SPS_OUT); # Create local handles + my @args; - my @args; + if ($config{sourcecode_linenumbers}) { + push @args, '--line-number'; + } - if ($config{sourcecode_linenumbers}) { - push @args, '--line-number= '; - } + my $pid = open2(*SPS_IN, *SPS_OUT, $config{sourcecode_command}, + '-s', $params{lang}, + '-c', $config{sourcecode_css}, '--no-doc', + '-f', 'xhtml', + @args); - my $pid = open2(*SPS_IN, *SPS_OUT, $config{sourcecode_command}, - '-s', IkiWiki::pagetype($pagesources{$page}), - '-c', $config{sourcecode_css}, '--no-doc', - '-f', 'xhtml', - @args); + error("Unable to open $config{sourcecode_command}") unless $pid; - error("Unable to open $config{sourcecode_command}") unless $pid; + print SPS_OUT $params{content}; + close SPS_OUT; - print SPS_OUT $params{content}; - close SPS_OUT; + my @html = ; + close SPS_IN; - my @html = ; - close SPS_IN; - - waitpid $pid, 0; + waitpid $pid, 0; - my $stylesheet=bestlink($page, $config{sourcecode_css}.".css"); - if (length $stylesheet) { - push @{$metaheaders{$page}}, ''; - } + my $stylesheet=bestlink($page, $config{sourcecode_css}.".css"); + if (length $stylesheet) { + push @{$metaheaders{$page}}, ''; + } - return '
    '."\r\n".join("\r\n",@html)."\r\n
    \n"; + return '
    '."\r\n".join("",@html)."\r\n
    \r\n"; } sub pagetemplate (@) { - my %params=@_; + my %params=@_; - my $page=$params{page}; - my $template=$params{template}; + my $page=$params{page}; + my $template=$params{template}; - if (exists $metaheaders{$page} && $template->query(name => "meta")) { - # avoid duplicate meta lines - my %seen; - $template->param(meta => join("\n", grep { (! $seen{$_}) && ($seen{$_}=1) } @{$metaheaders{$page}})); - } + if (exists $metaheaders{$page} && $template->query(name => "meta")) { + # avoid duplicate meta lines + my %seen; + $template->param(meta => join("\n", grep { (! $seen{$_}) && ($seen{$_}=1) } @{$metaheaders{$page}})); + } } 1 -- cgit v1.2.3 From e159545ba720ab0ed37f5e71c7fd04e9befcbfc0 Mon Sep 17 00:00:00 2001 From: bremner Date: Sat, 14 Feb 2009 08:36:28 -0500 Subject: Throw another source highlighting option into the ring --- doc/todo/syntax_highlighting.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index d9a791c6f..ca701e0d0 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -26,6 +26,11 @@ pages, as well as doing syntax highlighting as a preprocessor directive * [[users/jasonblevins]]'s code plugin uses src-highlight, and supports both while file and directive use. +* [hlsimple](http://pivot.cs.unb.ca/git/?p=ikiplugins.git;a=blob_plain;f=IkiWiki/Plugin/hlsimple.pm;hb=795f888a2c1b17f6d90a8f01f74b09395f0738d5) is a wrapper for the the perl module Syntax::Highlight::Engine::Simple. This is pure perl, pretty simple, uses css. It ought to be pretty fast (according to the author, and just because it is not external). +On the other hand, there are not many predefined languages yet. Defining language syntaxes is about as much +work as source-highlight, but in perl. I plan to package the base module for debian. Perhaps after the author +releases the 5 or 6 language definitions he has running on his web site, it might be suitable for inclusion in ikiwiki. [[DavidBremner]] + ## General problems * Using non-perl syntax highlighting backends is slow. I'd prefer either -- cgit v1.2.3 From 02b1929445c20ddc838c3b9a2a61db912beef676 Mon Sep 17 00:00:00 2001 From: bremner Date: Sat, 14 Feb 2009 08:39:01 -0500 Subject: link to HEAD instead of today's sha1 of hlsimple.pm --- doc/todo/syntax_highlighting.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/syntax_highlighting.mdwn b/doc/todo/syntax_highlighting.mdwn index ca701e0d0..b5d083ba5 100644 --- a/doc/todo/syntax_highlighting.mdwn +++ b/doc/todo/syntax_highlighting.mdwn @@ -26,7 +26,7 @@ pages, as well as doing syntax highlighting as a preprocessor directive * [[users/jasonblevins]]'s code plugin uses src-highlight, and supports both while file and directive use. -* [hlsimple](http://pivot.cs.unb.ca/git/?p=ikiplugins.git;a=blob_plain;f=IkiWiki/Plugin/hlsimple.pm;hb=795f888a2c1b17f6d90a8f01f74b09395f0738d5) is a wrapper for the the perl module Syntax::Highlight::Engine::Simple. This is pure perl, pretty simple, uses css. It ought to be pretty fast (according to the author, and just because it is not external). +* [hlsimple](http://pivot.cs.unb.ca/git/?p=ikiplugins.git;a=blob_plain;f=IkiWiki/Plugin/hlsimple.pm;hb=HEAD) is a wrapper for the the perl module Syntax::Highlight::Engine::Simple. This is pure perl, pretty simple, uses css. It ought to be pretty fast (according to the author, and just because it is not external). On the other hand, there are not many predefined languages yet. Defining language syntaxes is about as much work as source-highlight, but in perl. I plan to package the base module for debian. Perhaps after the author releases the 5 or 6 language definitions he has running on his web site, it might be suitable for inclusion in ikiwiki. [[DavidBremner]] -- cgit v1.2.3 From 87210fc19e79c766976dabcd5ce6824d7fc2a5ef Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Mon, 16 Feb 2009 11:31:46 +0000 Subject: fix link to h1title plugin --- doc/todo/Option_to_make_title_an_h1__63__.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/Option_to_make_title_an_h1__63__.mdwn b/doc/todo/Option_to_make_title_an_h1__63__.mdwn index 8676bec48..f4023d6dd 100644 --- a/doc/todo/Option_to_make_title_an_h1__63__.mdwn +++ b/doc/todo/Option_to_make_title_an_h1__63__.mdwn @@ -11,4 +11,4 @@ Currently, the page title (either the name of the page or the title specified wi > latter, making `#` (only when on the first line) set the page title, removing it from > the page body. --[[JasonBlevins]], October 22, 2008 - [h1title]: http://code.jblevins.org/ikiwiki/plugins/h1title.pm + [h1title]: http://code.jblevins.org/ikiwiki/plugins.git/plain/h1title.pm -- cgit v1.2.3 From 1611abd99a35a4ffcc6a0e779845733578406b2a Mon Sep 17 00:00:00 2001 From: rafael2k Date: Mon, 16 Feb 2009 08:46:57 -0500 Subject: --- doc/todo/latex.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/latex.mdwn b/doc/todo/latex.mdwn index eb53538b4..604c5e87f 100644 --- a/doc/todo/latex.mdwn +++ b/doc/todo/latex.mdwn @@ -31,6 +31,9 @@ Conversely, how about adding a plugin to support exporting to LaTeX? a latex plugin. Examples [here](http://ng.l4x.org/latex/). Currently without image support for hevea. And the latex2html output has the wrong charset and no command line switch to change that. Dreamland. +As this link is not working, I setted a mirror here: http://satangoss.sarava.org/ikiwiki/latex.pm. + + ---- Okay, now is the time for a mid term report i think. -- cgit v1.2.3 From 64000366bde6dbd3a329e4665b0712ceac0993ac Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Tue, 17 Feb 2009 15:44:48 +0000 Subject: patch to add tag() pagespec --- doc/todo/tag_pagespec_function.mdwn | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 doc/todo/tag_pagespec_function.mdwn (limited to 'doc/todo') diff --git a/doc/todo/tag_pagespec_function.mdwn b/doc/todo/tag_pagespec_function.mdwn new file mode 100644 index 000000000..0a51c7220 --- /dev/null +++ b/doc/todo/tag_pagespec_function.mdwn @@ -0,0 +1,27 @@ +Implementing tags in terms of links is clever, but it would be nice if it was +opaque in both directions: tagging and matching tags. Writing pagespecs to +find out which pages are tagged with a given name means that the pagespec is +tied to whatever the tagbase is. + +This patch adds a pagespec function 'tag' which lets you write pagespecs to +match tagged pages independent of whatever the tagbase is set to. + + -- [[users/Jon]] 2009/02/17 + +[[!tag patch]] + + --- a/plugins/IkiWiki/Plugin/tag.pm 2009-02-16 11:30:11.000000000 +0000 + +++ b/plugins/IkiWiki/Plugin/tag.pm 2009-02-17 15:40:03.000000000 +0000 + @@ -125,4 +125,12 @@ + } + } + + +package IkiWiki::PageSpec; + + + +sub match_tag ($$;@) { + + my $page = shift; + + my $glob = shift; + + return match_link($page, IkiWiki::Plugin::tag::tagpage($glob)); + +} + + + 1 -- cgit v1.2.3 From bb8b8787ef9477c027b9e5d8b7b5e1addfd1ca32 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 17 Feb 2009 13:25:06 -0500 Subject: comments --- IkiWiki/Plugin/template.pm | 3 ++- debian/changelog | 4 ++++ doc/bugs/cannot_reliably_use_meta_in_template.mdwn | 2 ++ doc/bugs/tags__44___backlinks_and_3.x.mdwn | 2 ++ doc/todo/tag_pagespec_function.mdwn | 7 +++++++ 5 files changed, 17 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm index 57bff20ff..b872f0962 100644 --- a/IkiWiki/Plugin/template.pm +++ b/IkiWiki/Plugin/template.pm @@ -10,7 +10,8 @@ use Encode; sub import { hook(type => "getsetup", id => "template", call => \&getsetup); - hook(type => "preprocess", id => "template", call => \&preprocess); + hook(type => "preprocess", id => "template", call => \&preprocess, + scan => 1); } sub getsetup () { diff --git a/debian/changelog b/debian/changelog index 62374d2dc..c28d36c84 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,10 @@ ikiwiki (3.05) UNRELEASED; urgency=low * debhelper v7.2; rules file minimisation. + * template: Load templates in scan mode. + This is potentially expensive, but is necessary so that meta and tag + directives, and other links on templates affect the page using the + template reliably. -- Joey Hess Sun, 15 Feb 2009 20:11:57 -0500 diff --git a/doc/bugs/cannot_reliably_use_meta_in_template.mdwn b/doc/bugs/cannot_reliably_use_meta_in_template.mdwn index 48288a2b3..de6c227f6 100644 --- a/doc/bugs/cannot_reliably_use_meta_in_template.mdwn +++ b/doc/bugs/cannot_reliably_use_meta_in_template.mdwn @@ -14,3 +14,5 @@ scan pass, every page containing a template will cause the template to be loaded and filled out. This can be some serious additional overhead. --[[Joey]] + +[[done]] diff --git a/doc/bugs/tags__44___backlinks_and_3.x.mdwn b/doc/bugs/tags__44___backlinks_and_3.x.mdwn index ea0eecc80..4fe9a4723 100644 --- a/doc/bugs/tags__44___backlinks_and_3.x.mdwn +++ b/doc/bugs/tags__44___backlinks_and_3.x.mdwn @@ -30,3 +30,5 @@ time, so went ahead and migrated live, spamming planet debian in the process > [[cannot_reliably_use_meta_in_template]]. AFAIK, this has never worked > reliably, although the linked page has a simple, though potentially > expensive fix. --[[Joey]] + +> fix made, [[done]] --[[Joey]] diff --git a/doc/todo/tag_pagespec_function.mdwn b/doc/todo/tag_pagespec_function.mdwn index 0a51c7220..060368179 100644 --- a/doc/todo/tag_pagespec_function.mdwn +++ b/doc/todo/tag_pagespec_function.mdwn @@ -8,6 +8,13 @@ match tagged pages independent of whatever the tagbase is set to. -- [[users/Jon]] 2009/02/17 +> So, this looks good, appreciate the patch. +> +> The only problem I see is it could be confusing if `tag(foo)` matched +> a page that just linked to the tag via a wikilink, w/o actually tagging it. +> +> One other thing, perhaps it should be called `tagged()`? --[[Joey]] + [[!tag patch]] --- a/plugins/IkiWiki/Plugin/tag.pm 2009-02-16 11:30:11.000000000 +0000 -- cgit v1.2.3 From a4497591f958f3d2fb28ef597c7870bfc4db72e3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 17 Feb 2009 13:29:08 -0500 Subject: Revert "comments" (stupid commit) This reverts commit bb8b8787ef9477c027b9e5d8b7b5e1addfd1ca32. --- IkiWiki/Plugin/template.pm | 3 +-- debian/changelog | 4 ---- doc/bugs/cannot_reliably_use_meta_in_template.mdwn | 2 -- doc/bugs/tags__44___backlinks_and_3.x.mdwn | 2 -- doc/todo/tag_pagespec_function.mdwn | 7 ------- 5 files changed, 1 insertion(+), 17 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm index b872f0962..57bff20ff 100644 --- a/IkiWiki/Plugin/template.pm +++ b/IkiWiki/Plugin/template.pm @@ -10,8 +10,7 @@ use Encode; sub import { hook(type => "getsetup", id => "template", call => \&getsetup); - hook(type => "preprocess", id => "template", call => \&preprocess, - scan => 1); + hook(type => "preprocess", id => "template", call => \&preprocess); } sub getsetup () { diff --git a/debian/changelog b/debian/changelog index c28d36c84..62374d2dc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,6 @@ ikiwiki (3.05) UNRELEASED; urgency=low * debhelper v7.2; rules file minimisation. - * template: Load templates in scan mode. - This is potentially expensive, but is necessary so that meta and tag - directives, and other links on templates affect the page using the - template reliably. -- Joey Hess Sun, 15 Feb 2009 20:11:57 -0500 diff --git a/doc/bugs/cannot_reliably_use_meta_in_template.mdwn b/doc/bugs/cannot_reliably_use_meta_in_template.mdwn index de6c227f6..48288a2b3 100644 --- a/doc/bugs/cannot_reliably_use_meta_in_template.mdwn +++ b/doc/bugs/cannot_reliably_use_meta_in_template.mdwn @@ -14,5 +14,3 @@ scan pass, every page containing a template will cause the template to be loaded and filled out. This can be some serious additional overhead. --[[Joey]] - -[[done]] diff --git a/doc/bugs/tags__44___backlinks_and_3.x.mdwn b/doc/bugs/tags__44___backlinks_and_3.x.mdwn index 4fe9a4723..ea0eecc80 100644 --- a/doc/bugs/tags__44___backlinks_and_3.x.mdwn +++ b/doc/bugs/tags__44___backlinks_and_3.x.mdwn @@ -30,5 +30,3 @@ time, so went ahead and migrated live, spamming planet debian in the process > [[cannot_reliably_use_meta_in_template]]. AFAIK, this has never worked > reliably, although the linked page has a simple, though potentially > expensive fix. --[[Joey]] - -> fix made, [[done]] --[[Joey]] diff --git a/doc/todo/tag_pagespec_function.mdwn b/doc/todo/tag_pagespec_function.mdwn index 060368179..0a51c7220 100644 --- a/doc/todo/tag_pagespec_function.mdwn +++ b/doc/todo/tag_pagespec_function.mdwn @@ -8,13 +8,6 @@ match tagged pages independent of whatever the tagbase is set to. -- [[users/Jon]] 2009/02/17 -> So, this looks good, appreciate the patch. -> -> The only problem I see is it could be confusing if `tag(foo)` matched -> a page that just linked to the tag via a wikilink, w/o actually tagging it. -> -> One other thing, perhaps it should be called `tagged()`? --[[Joey]] - [[!tag patch]] --- a/plugins/IkiWiki/Plugin/tag.pm 2009-02-16 11:30:11.000000000 +0000 -- cgit v1.2.3 From 84b48681c630c1c2dab21ad6c260be3a5b5fff0e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 17 Feb 2009 13:29:37 -0500 Subject: re-add actual comments --- doc/todo/tag_pagespec_function.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/tag_pagespec_function.mdwn b/doc/todo/tag_pagespec_function.mdwn index 0a51c7220..060368179 100644 --- a/doc/todo/tag_pagespec_function.mdwn +++ b/doc/todo/tag_pagespec_function.mdwn @@ -8,6 +8,13 @@ match tagged pages independent of whatever the tagbase is set to. -- [[users/Jon]] 2009/02/17 +> So, this looks good, appreciate the patch. +> +> The only problem I see is it could be confusing if `tag(foo)` matched +> a page that just linked to the tag via a wikilink, w/o actually tagging it. +> +> One other thing, perhaps it should be called `tagged()`? --[[Joey]] + [[!tag patch]] --- a/plugins/IkiWiki/Plugin/tag.pm 2009-02-16 11:30:11.000000000 +0000 -- cgit v1.2.3 From 2d220da53c6ebcaf962045fdf5db947074cc0e7c Mon Sep 17 00:00:00 2001 From: "http://arpitjain11.myopenid.com/" Date: Tue, 17 Feb 2009 18:47:47 -0500 Subject: --- doc/todo/Gallery.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/Gallery.mdwn b/doc/todo/Gallery.mdwn index fbf1802fd..89676c457 100644 --- a/doc/todo/Gallery.mdwn +++ b/doc/todo/Gallery.mdwn @@ -1,6 +1,6 @@ New Version of gallery is available now. Few more features have been added like support for multiple pages, sorting and resizing of images etc. -SVN repository of plugin is located at http://ned.snow-crash.org:8080/svn/ikiwiki-gallery +Gallery repo is now available at --[[arpitjain]] -- cgit v1.2.3 From d522dfadd1ff0041c62a46460e1524eb0db89cb6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 17 Feb 2009 22:37:20 -0500 Subject: is this patch complete? --- doc/todo/Allow_filenames_that_are_all_type.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Allow_filenames_that_are_all_type.mdwn b/doc/todo/Allow_filenames_that_are_all_type.mdwn index 55e29b645..b8b136aeb 100644 --- a/doc/todo/Allow_filenames_that_are_all_type.mdwn +++ b/doc/todo/Allow_filenames_that_are_all_type.mdwn @@ -5,6 +5,10 @@ if the plugin can process files of type `.Makefile` then it will also process `M I put this patch on the [[todo/syntax_highlighting/]] page a while ago, but it seemed to get lost because it didn't have its own bug to track it. Now it does :). -- [[Will]] +> This changes `pagename()`, but what about `pagetype()`? +> Many things in ikiwiki check if `pagetype($file)` returns +> true to see if it's a page, etc. --[[Joey]] + diff --git a/IkiWiki.pm b/IkiWiki.pm index 8d728c9..1bd46a9 100644 --- a/IkiWiki.pm -- cgit v1.2.3 From c1b051600036291f20bc179d7149410379832e37 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Thu, 19 Feb 2009 06:45:40 -0500 Subject: Yes, the patch is complete. --- doc/todo/Allow_filenames_that_are_all_type.mdwn | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Allow_filenames_that_are_all_type.mdwn b/doc/todo/Allow_filenames_that_are_all_type.mdwn index b8b136aeb..e165da7dc 100644 --- a/doc/todo/Allow_filenames_that_are_all_type.mdwn +++ b/doc/todo/Allow_filenames_that_are_all_type.mdwn @@ -9,6 +9,19 @@ lost because it didn't have its own bug to track it. Now it does :). -- [[Will > Many things in ikiwiki check if `pagetype($file)` returns > true to see if it's a page, etc. --[[Joey]] +>> I think this patch is complete. It does not change `pagename()`, it +>> changes `pagetype()` (the diff is fairly old - line numbers may have +>> changed). +>> +>> Before this patch, `pagetype()` required a `.` in the page name. With +>> this patch it doesn't, as long as the extension is being kept. This allows +>> the filename to be all extension. `pagename()` relies on `pagetype()` +>> to detect the type. `pagename()` also removes the extension on some +>> pages, but this patch only affects pages where the extension isn't +>> removed. +>> +>> So, yeah, I think this patch is complete. :) -- [[Will]] + diff --git a/IkiWiki.pm b/IkiWiki.pm index 8d728c9..1bd46a9 100644 --- a/IkiWiki.pm -- cgit v1.2.3 From 66dc253437e7ce2e3e8984513b3ecf96603d6670 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 19 Feb 2009 18:38:45 -0500 Subject: Add noextension parameter to htmlize hooks to support, eg, Makefile. --- IkiWiki.pm | 23 ++++++++++++++--------- debian/changelog | 1 + doc/plugins/write.mdwn | 7 ++++++- doc/todo/Allow_filenames_that_are_all_type.mdwn | 4 ++++ t/pagename.t | 23 ++++++++++++++++++----- t/pagetype.t | 15 --------------- 6 files changed, 43 insertions(+), 30 deletions(-) delete mode 100755 t/pagetype.t (limited to 'doc/todo') diff --git a/IkiWiki.pm b/IkiWiki.pm index ce1ceb351..f580d1f0d 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -627,27 +627,32 @@ sub dirname ($) { return $file; } -sub pagetype ($) { +sub isinternal ($) { my $page=shift; + return exists $pagesources{$page} && + $pagesources{$page} =~ /\._([^.]+)$/; +} + +sub pagetype ($) { + my $file=shift; - if ($page =~ /\.([^.]+)$/) { + if ($file =~ /\.([^.]+)$/) { return $1 if exists $hooks{htmlize}{$1}; } + elsif ($hooks{htmlize}{basename($file)}{noextension}) { + return basename($file); + } return; } -sub isinternal ($) { - my $page=shift; - return exists $pagesources{$page} && - $pagesources{$page} =~ /\._([^.]+)$/; -} - sub pagename ($) { my $file=shift; my $type=pagetype($file); my $page=$file; - $page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{keepextension}; + $page=~s/\Q.$type\E*$// + if defined $type && !$hooks{htmlize}{$type}{keepextension} + && !$hooks{htmlize}{$type}{noextension}; if ($config{indexpages} && $page=~/(.*)\/index$/) { $page=$1; } diff --git a/debian/changelog b/debian/changelog index b644ac99c..810c59f4e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ ikiwiki (3.05) UNRELEASED; urgency=low directives, and other links on templates affect the page using the template reliably. * goto: Fix redirect to comments. + * Add noextension parameter to htmlize hooks to support, eg, Makefile. -- Joey Hess Sun, 15 Feb 2009 20:11:57 -0500 diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 2e907938f..696bc6bc3 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -189,9 +189,14 @@ The function is passed named parameters: "page" and "content" and should return the htmlized content. If `hook` is passed an optional "keepextension" parameter, set to a true -value, then this extension will not be stripped from the source filename when +value, then the extension will not be stripped from the source filename when generating the page. +If `hook` is passed an optional "noextension" parameter, set to a true +value, then the id parameter specifies not a filename extension, but +a whole filename that can be htmlized. This is useful for files +like `Makefile` that have no extension. + ### pagetemplate hook(type => "pagetemplate", id => "foo", call => \&pagetemplate); diff --git a/doc/todo/Allow_filenames_that_are_all_type.mdwn b/doc/todo/Allow_filenames_that_are_all_type.mdwn index e165da7dc..bebbcafa8 100644 --- a/doc/todo/Allow_filenames_that_are_all_type.mdwn +++ b/doc/todo/Allow_filenames_that_are_all_type.mdwn @@ -22,6 +22,10 @@ lost because it didn't have its own bug to track it. Now it does :). -- [[Will >> >> So, yeah, I think this patch is complete. :) -- [[Will]] +>>> Thanks, [[applied|done]], but I added a noextension parameter, +>>> since having keepextension allow files with no extension didn't make +>>> sense. Also, made it work for pages in subdirs.. --[[Joey]] + diff --git a/IkiWiki.pm b/IkiWiki.pm index 8d728c9..1bd46a9 100644 --- a/IkiWiki.pm diff --git a/t/pagename.t b/t/pagename.t index 488e341fa..540d10f4c 100755 --- a/t/pagename.t +++ b/t/pagename.t @@ -1,22 +1,35 @@ #!/usr/bin/perl use warnings; use strict; -use Test::More tests => 8; +use Test::More tests => 19; BEGIN { use_ok("IkiWiki"); } -# Used internally. +# define mdwn as an extension $IkiWiki::hooks{htmlize}{mdwn}={}; -$IkiWiki::hooks{htmlize}{txt}={keepextension => 1}; - +is(pagetype("foo.mdwn"), "mdwn"); is(pagename("foo.mdwn"), "foo"); +is(pagetype("foo/bar.mdwn"), "mdwn"); is(pagename("foo/bar.mdwn"), "foo/bar"); -# bare files get the full filename as page name +# bare files get the full filename as page name, undef type +is(pagetype("foo.png"), undef); is(pagename("foo.png"), "foo.png"); +is(pagetype("foo/bar.png"), undef); is(pagename("foo/bar.png"), "foo/bar.png"); +is(pagetype("foo"), undef); is(pagename("foo"), "foo"); # keepextension preserves the extension in the page name +$IkiWiki::hooks{htmlize}{txt}={keepextension => 1}; is(pagename("foo.txt"), "foo.txt"); +is(pagetype("foo.txt"), "txt"); is(pagename("foo/bar.txt"), "foo/bar.txt"); +is(pagetype("foo/bar.txt"), "txt"); + +# noextension makes extensionless files be treated as first-class pages +$IkiWiki::hooks{htmlize}{Makefile}={noextension =>1}; +is(pagetype("Makefile"), "Makefile"); +is(pagename("Makefile"), "Makefile"); +is(pagetype("foo/Makefile"), "Makefile"); +is(pagename("foo/Makefile"), "foo/Makefile"); diff --git a/t/pagetype.t b/t/pagetype.t deleted file mode 100755 index bb06a1568..000000000 --- a/t/pagetype.t +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/perl -use warnings; -use strict; -use Test::More tests => 6; - -BEGIN { use_ok("IkiWiki"); } - -# Used internally. -$IkiWiki::hooks{htmlize}{mdwn}={}; - -is(pagetype("foo.mdwn"), "mdwn"); -is(pagetype("foo/bar.mdwn"), "mdwn"); -is(pagetype("foo.png"), undef); -is(pagetype("foo/bar.png"), undef); -is(pagetype("foo"), undef); -- cgit v1.2.3 From f813b10fef13682c95ada9c9a9ccf05ff602c172 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 19 Feb 2009 18:54:25 -0500 Subject: rename tag() to tagged(); add docs --- IkiWiki/Plugin/tag.pm | 2 +- debian/changelog | 1 + doc/ikiwiki/pagespec.mdwn | 3 ++- doc/plugins/tag.mdwn | 3 +++ doc/todo/tag_pagespec_function.mdwn | 2 +- 5 files changed, 8 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm index 48c197748..8fe9c6828 100644 --- a/IkiWiki/Plugin/tag.pm +++ b/IkiWiki/Plugin/tag.pm @@ -127,7 +127,7 @@ sub pagetemplate (@) { package IkiWiki::PageSpec; -sub match_tag ($$;@) { +sub match_tagged ($$;@) { my $page = shift; my $glob = shift; return match_link($page, IkiWiki::Plugin::tag::tagpage($glob)); diff --git a/debian/changelog b/debian/changelog index 810c59f4e..80b3c5d8e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,7 @@ ikiwiki (3.05) UNRELEASED; urgency=low template reliably. * goto: Fix redirect to comments. * Add noextension parameter to htmlize hooks to support, eg, Makefile. + * Add tagged() PageSpec. -- Joey Hess Sun, 15 Feb 2009 20:11:57 -0500 diff --git a/doc/ikiwiki/pagespec.mdwn b/doc/ikiwiki/pagespec.mdwn index 86abe5745..b476bde1f 100644 --- a/doc/ikiwiki/pagespec.mdwn +++ b/doc/ikiwiki/pagespec.mdwn @@ -25,6 +25,7 @@ match all pages except for Discussion pages and the SandBox: Some more elaborate limits can be added to what matches using these functions: * "`link(page)`" - match only pages that link to a given page (or glob) +* "`tagged(tag)`" - match pages that are tagged or link to the given tag (or glob) * "`backlink(page)`" - match only pages that a given page links to * "`creation_month(month)`" - match only pages created on the given month * "`creation_day(mday)`" - or day of the month @@ -65,7 +66,7 @@ More complex expressions can also be created, by using parentheses for grouping. For example, to match pages in a blog that are tagged with either of two tags, use: - blog/* and (link(tag/foo) or link(tag/bar)) + blog/* and (tagged(foo) or tagged(bar)) Note that page names in PageSpecs are matched against the absolute filenames of the pages in the wiki, so a pagespec "foo" used on page diff --git a/doc/plugins/tag.mdwn b/doc/plugins/tag.mdwn index 17bb086a1..8ff70a069 100644 --- a/doc/plugins/tag.mdwn +++ b/doc/plugins/tag.mdwn @@ -5,6 +5,9 @@ This plugin provides the [[ikiwiki/directive/tag]] and [[ikiwiki/directive/taglink]] [[directives|ikiwiki/directive]]. These directives allow tagging pages. +It also provides the `tagged()` [[ikiwiki/PageSpec]], which can be used to +match pages that are tagged with a specific tag. + [[!if test="enabled(tag)" then=""" This wiki has the tag plugin enabled, so you'll see a note below that this page is tagged with the "tags" tag. diff --git a/doc/todo/tag_pagespec_function.mdwn b/doc/todo/tag_pagespec_function.mdwn index 060368179..681a1f661 100644 --- a/doc/todo/tag_pagespec_function.mdwn +++ b/doc/todo/tag_pagespec_function.mdwn @@ -15,7 +15,7 @@ match tagged pages independent of whatever the tagbase is set to. > > One other thing, perhaps it should be called `tagged()`? --[[Joey]] -[[!tag patch]] +[[!tag patch done]] --- a/plugins/IkiWiki/Plugin/tag.pm 2009-02-16 11:30:11.000000000 +0000 +++ b/plugins/IkiWiki/Plugin/tag.pm 2009-02-17 15:40:03.000000000 +0000 -- cgit v1.2.3 From 65c6bc687ee76cdb1cf5810fbaa51a1d5b91beb9 Mon Sep 17 00:00:00 2001 From: "http://taozhyn.myopenid.com/" Date: Fri, 20 Feb 2009 04:58:52 -0500 Subject: Adding patch, moved from plugins/tag/discussion --- ...o-create_tag_pages_according_to_a_template.mdwn | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn b/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn index bfb4a863b..ab9263556 100644 --- a/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn +++ b/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn @@ -7,3 +7,102 @@ Also see: and "preprocess", id => "tag", call => \&preprocess_tag, scan => 1); + hook(type => "preprocess", id => "taglink", call => \&preprocess_taglink, scan => 1); + hook(type => "pagetemplate", id => "tag", call => \&pagetemplate); + + hook(type => "change", id => "tag", call => \&change); + } + + sub getopt () { + @@ -36,6 +37,36 @@ + safe => 1, + rebuild => 1, + }, + + tag_autocreate => { + + type => "boolean", + + example => 0, + + description => "Auto-create the new tag pages, uses autotagpage.tmpl ", + + safe => 1, + + rebulid => 1, + + }, + +} + + + +my $autocreated_page = 0; + + + +sub gen_tag_page($) { + + my $tag=shift; + + + + my $tag_file=$tag.'.'.$config{default_pageext}; + + return if (-f $config{srcdir}.$tag_file); + + + + my $template=template("autotagpage.tmpl"); + + $template->param(tag => $tag); + + writefile($tag_file, $config{srcdir}, $template->output); + + $autocreated_page = 1; + + + + if ($config{rcs}) { + + IkiWiki::disable_commit_hook(); + + IkiWiki::rcs_add($tag_file); + + IkiWiki::rcs_commit_staged( + + gettext("Automatic tag page generation"), + + undef, undef); + + IkiWiki::enable_commit_hook(); + + } + } + + sub tagpage ($) { + @@ -47,6 +78,10 @@ + $tag=~y#/#/#s; # squash dups + } + + + if (defined $config{tag_autocreate} && $config{tag_autocreate} ) { + + gen_tag_page($tag); + + } + + + return $tag; + } + + @@ -125,4 +160,18 @@ + } + } + + +sub change(@) { + + return unless($autocreated_page); + + $autocreated_page = 0; + + + + # This refresh/saveindex is to complie the autocreated tag pages + + IkiWiki::refresh(); + + IkiWiki::saveindex(); + + + + # This refresh/saveindex is to fix the Tags link + + # With out this additional refresh/saveindex the tag link displays ?tag + + IkiWiki::refresh(); + + IkiWiki::saveindex(); + +} + + + + +This uses a template called `autotagpage.tmpl`, here is my template file: + + \[[!inline pages="link()" archive="yes"]] + + +A quirk I have not figured out is during the `sub change`, see my comments in the code. +I am not sure if that is the best way to handle it. + +[[!tag patch]] +-- Jeremy Schultz -- cgit v1.2.3 From 1e9629b8f63e182a32459ae0d901a61f007ea769 Mon Sep 17 00:00:00 2001 From: "http://smcv.pseudorandom.co.uk/" Date: Fri, 20 Feb 2009 10:25:47 -0500 Subject: Link my version --- doc/todo/Gallery.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Gallery.mdwn b/doc/todo/Gallery.mdwn index 89676c457..bc1d5bea4 100644 --- a/doc/todo/Gallery.mdwn +++ b/doc/todo/Gallery.mdwn @@ -73,3 +73,9 @@ Additional details are available [here](http://myweb.unomaha.edu/~ajain/ikiwikig > the gallery and put it in a "gallery" branch of my git repository. > > --[[Joey]] + +---- + +See also [[/users/smcv/gallery]] for another implementation of the same sort of +thing. Unfortunately, none of the implementation ideas +I have there seem quite right either... --[[smcv]] -- cgit v1.2.3 From c2df40c01ba78e0c0631df0a5042980eb1688488 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 26 Feb 2009 14:16:13 -0500 Subject: mercurial and tla are missing implementations of several things --- doc/todo/mercurial.mdwn | 4 ++++ doc/todo/tla.mdwn | 3 +++ 2 files changed, 7 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mercurial.mdwn b/doc/todo/mercurial.mdwn index 2f148498e..e71c8106a 100644 --- a/doc/todo/mercurial.mdwn +++ b/doc/todo/mercurial.mdwn @@ -14,6 +14,10 @@ It seems that with the current mercurial commit code, it will always blindly overwrite the current file with the web edited version, losing any other changes. +* `rcs_commit_staged`, `rcs_rename`, `rcs_remove`, and `rcs_diff` are not + implemented for mercurial, and so attachments, remove and rename plugins + and recentchangesdiff cannot be used with it. (These should be fairly + easy to add..) Posthook: in `$srcdir/.hg/hgrc`, I have the following diff --git a/doc/todo/tla.mdwn b/doc/todo/tla.mdwn index 6ef8453f1..b6b082cfe 100644 --- a/doc/todo/tla.mdwn +++ b/doc/todo/tla.mdwn @@ -1,4 +1,7 @@ * Need to get post commit hook code working. * Need some example urls for web based diffs. +* `rcs_commit_staged`, `rcs_rename`, `rcs_remove`, are not + implemented for tla, and so attachments, remove and rename plugins + cannot be used with it. (These should be fairly easy to add..) [[!tag rcs/tla]] -- cgit v1.2.3 From 2695d224906d972dd21e063f666ff4007ef1b62e Mon Sep 17 00:00:00 2001 From: "http://zwol.livejournal.com/" Date: Fri, 27 Feb 2009 18:56:25 -0500 Subject: --- doc/todo/Allow_disabling_edit_and_preferences_links.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn index 1188d1ab2..4c2823cf2 100644 --- a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn +++ b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn @@ -46,3 +46,7 @@ Patch: >> I do have the editpage plugin disabled for the public static wiki, but >> the link still appears on the site. I want to keep the cgi on, so that >> the site is still searchable. --[[puck]] + +>>> For me, disabling the editpage plugin does make the "Edit" link +>>> disappear (this is with 3.03) but as far as I can tell, "Preferences" +>>> is not controlled by any plugin. --[Zack](http://zwol.livejournal.com/) -- cgit v1.2.3 From 0bd54afd98e57bfcca4360a0751a362e39d3e02a Mon Sep 17 00:00:00 2001 From: "http://zwol.livejournal.com/" Date: Fri, 27 Feb 2009 18:57:48 -0500 Subject: --- doc/todo/Allow_disabling_edit_and_preferences_links.mdwn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn index 4c2823cf2..a356c69df 100644 --- a/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn +++ b/doc/todo/Allow_disabling_edit_and_preferences_links.mdwn @@ -49,4 +49,6 @@ Patch: >>> For me, disabling the editpage plugin does make the "Edit" link >>> disappear (this is with 3.03) but as far as I can tell, "Preferences" ->>> is not controlled by any plugin. --[Zack](http://zwol.livejournal.com/) +>>> is not controlled by any plugin. It would be nice if it were; I am +>>> trying to achieve a configuration where the only action supported +>>> via CGI is blog-style comments. --[Zack](http://zwol.livejournal.com/) -- cgit v1.2.3 From 2fde5b4a6a7df1c1e0fa5231f2cc60bef5a74c08 Mon Sep 17 00:00:00 2001 From: "http://liw.fi/" Date: Wed, 4 Mar 2009 10:19:09 -0500 Subject: --- doc/todo/mdwn_preview.mdwn | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 doc/todo/mdwn_preview.mdwn (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn new file mode 100644 index 000000000..733d62c08 --- /dev/null +++ b/doc/todo/mdwn_preview.mdwn @@ -0,0 +1,7 @@ +The [StackOverflow](http://stackoverflow.com/) site uses markdown for markup. +It has a fancy javascript thing for showing a real-time preview of what the user +is editing. It would be nice if ikiwiki could support this, too. The thing they +use on StackOverflow is supposed to be free software, so it should be easy to +add to ikiwiki. + +[[!tag wishlist]] -- cgit v1.2.3 From 6a19dacbd7ea36a609717bf71f389e183729b7af Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 4 Mar 2009 13:53:34 -0500 Subject: that's wikiwyg close as dup todo --- doc/todo/mdwn_preview.mdwn | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 733d62c08..a447299bc 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -4,4 +4,7 @@ is editing. It would be nice if ikiwiki could support this, too. The thing they use on StackOverflow is supposed to be free software, so it should be easy to add to ikiwiki. -[[!tag wishlist]] +> See [[wikiwyg]]. Note that I do not have a copy of the code for that, or +> it'd be in ikiwiki already. --[[Joey]] + +[[!tag wishlist done]] -- cgit v1.2.3 From b7495e752af87a15978ec4ae5427bfea62c6f43a Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Wed, 4 Mar 2009 17:30:11 -0500 Subject: Notes that the wikiwyg plugin link is broken, and more. --- doc/todo/mdwn_preview.mdwn | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index a447299bc..68558a571 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -7,4 +7,13 @@ add to ikiwiki. > See [[wikiwyg]]. Note that I do not have a copy of the code for that, or > it'd be in ikiwiki already. --[[Joey]] +>> I just had a brief look at the [[wikiwyg]] page and the link to the plugin was +>> broken. The StackOverflow site uses the [WMD](http://wmd-editor.com/) editor, +>> which seems to be related to the [ShowDown](http://attacklab.net/showdown/) +>> javascript port of Markdown. Interestingly, [WMD source](http://wmd.googlecode.com/) +>> is now available under an MIT license, though it is supposedly undergoing heavy +>> refactoring. It looks like there was previous discussion ( [[todo/Add_showdown_GUI_input__47__edit]] ) +>> about a showdown plugin. Maybe a WMD plugin would be worthwhile. I might +>> look into it if I have time on the weekend. -- [[Will]] + [[!tag wishlist done]] -- cgit v1.2.3 From cc194fe527261b6a36a79df59c626bd3d7891b84 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Fri, 6 Mar 2009 03:40:50 -0500 Subject: Add patch for WMD plugin. This new plugin adds live preview and text controls to ikiwiki edit pages. --- doc/todo/mdwn_preview.mdwn | 83 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 68558a571..4c361052b 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -16,4 +16,85 @@ add to ikiwiki. >> about a showdown plugin. Maybe a WMD plugin would be worthwhile. I might >> look into it if I have time on the weekend. -- [[Will]] -[[!tag wishlist done]] +[[!tag wishlist]] + +>>> Below is a simple plugin/[[patch]] to make use of the WMD editor. Turns out it isn't hard at all to +>>> get a basic version going (that don't handle directives at all). I've +>>> removed the done tag so this is visible as a patch. -- [[Will]] + +------ + +### Instructions: + + +Download the [WMD source](http://wmd-editor.com/downloads/wmd-1.0.1.zip). In that zip file you'll +find a few example html files, a readme and `wmd` directory. Move the `wmd` directory into the +ikiwiki `underlays` directory. You should now have an `underlays/wmd/wmd.js` file as well as +some other javascript files and an images directory in the same place. + +Note that the WMD plugin does **not** handle directives. For this reason the normal `preview` button +remains. Some CSS to clean up the display of the live WMD preview would be good. + +Install the following patch and plugin file. Then enable the 'wmd' plugin. + + + diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl + index 4b54db2..b1cf015 100644 + --- a/templates/editpage.tmpl + +++ b/templates/editpage.tmpl + @@ -37,6 +37,7 @@ Optional comment about this change:
    +
    + + + + + + +
    + +----- + + #!/usr/bin/perl + package IkiWiki::Plugin::wmd; + + use warnings; + use strict; + use IkiWiki 3.00; + use POSIX; + use Encode; + + sub import { + add_underlay("wmd"); + hook(type => "getsetup", id => "wmd", call => \&getsetup); + hook(type => "formbuilder_setup", id => "wmd", call => \&formbuilder_setup); + } + + sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, + } + + sub formbuilder_setup (@) { + my %params=@_; + my $form=$params{form}; + + return if ! defined $form->field("do"); + + return unless (($form->field("do") eq "edit") || + ($form->field("do") eq "create")); + + $form->tmpl_param("wmd_preview", "
    \n".include_javascript(undef, 1)); + } + + sub include_javascript ($;$) { + my $page=shift; + my $absolute=shift; + + return ''."\n"; + } + + 1 + -- cgit v1.2.3 From 8333b4bbc3bd907a4fbd5ed1da79625afc9e71aa Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Fri, 6 Mar 2009 03:47:08 -0500 Subject: Note another issue with the basic plugin. --- doc/todo/mdwn_preview.mdwn | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 4c361052b..a99f03eed 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -19,7 +19,8 @@ add to ikiwiki. [[!tag wishlist]] >>> Below is a simple plugin/[[patch]] to make use of the WMD editor. Turns out it isn't hard at all to ->>> get a basic version going (that don't handle directives at all). I've +>>> get a basic version going (which doesn't handle directives at all, nor does it swtich itself off when you're +>>> editing something other than Markdown source). I've >>> removed the done tag so this is visible as a patch. -- [[Will]] ------ -- cgit v1.2.3 From e6e7e641974d66976cfc13eb0a90785e8fca3b8a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 14:38:48 -0500 Subject: comments --- doc/todo/mdwn_preview.mdwn | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index a99f03eed..2155f0f87 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -23,6 +23,14 @@ add to ikiwiki. >>> editing something other than Markdown source). I've >>> removed the done tag so this is visible as a patch. -- [[Will]] +>>> Hmm, it would be good if it turned off for !mdwn. Although this could +>>> be difficult for a new page, since there is a dropdown selector to +>>> choose the markup language then. But it should be doable for editing an +>>> existing page. +>>> +>>> Can I get a license statement (ie, GPL-2+) ffrom you for the plugin? +>>> --[[Joey]] + ------ ### Instructions: @@ -33,9 +41,16 @@ find a few example html files, a readme and `wmd` directory. Move the `wmd` dir ikiwiki `underlays` directory. You should now have an `underlays/wmd/wmd.js` file as well as some other javascript files and an images directory in the same place. +> So, I wonder if I should add a copy of the WMD source to ikiwiki, or rely +> on the user or distribution providing it. It does not seem to be packaged +> for Debian yet. --[[Joey]] + Note that the WMD plugin does **not** handle directives. For this reason the normal `preview` button remains. Some CSS to clean up the display of the live WMD preview would be good. +> Can you elucidate the CSS comment -- or will it be obvious what you mean +> when I try it? --[[Joey]] + Install the following patch and plugin file. Then enable the 'wmd' plugin. -- cgit v1.2.3 From 904b6b3e94a4a0d319d81d7d734aa90d3014fe29 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 14:40:49 -0500 Subject: point at wmd plugin --- doc/todo/wikiwyg.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/wikiwyg.mdwn b/doc/todo/wikiwyg.mdwn index e3d1b3927..839986c7b 100644 --- a/doc/todo/wikiwyg.mdwn +++ b/doc/todo/wikiwyg.mdwn @@ -57,3 +57,8 @@ The plugin can be downloaded from * Personalized settings [Wikiwyg]: http://www.wikiwyg.net/ + +> As noted in [[discussion]], the url above doesn't work, and I stupidly +> lost my copy of this before merging it. I hope that this plugin will turn +> back up. In the meantime, there is a wmd plugin that accomplishes the +> same basic task of WSYWIG markdown editing. --[[Joey]] -- cgit v1.2.3 From 424b4602c060b95870c707cfc2320d2c4faf5579 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 14:42:16 -0500 Subject: note that a wmd plugin has appeared --- doc/todo/Add_showdown_GUI_input__47__edit.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/Add_showdown_GUI_input__47__edit.mdwn b/doc/todo/Add_showdown_GUI_input__47__edit.mdwn index e864f5351..7e7947fbc 100644 --- a/doc/todo/Add_showdown_GUI_input__47__edit.mdwn +++ b/doc/todo/Add_showdown_GUI_input__47__edit.mdwn @@ -27,3 +27,5 @@ A demo is at >>> be necessary to insert some sort of placeholder, perhaps by outputting >>> the text in monospace form w/ a lighter font to denote that it won't >>> directly be shown in the page... -- [[harningt]] + +>>>>> We have a wmd plugin now. --[[Joey]] -- cgit v1.2.3 From 08e4472fc469c630ebef93e16a66a5a69d9cb33a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 17:48:17 -0500 Subject: question --- doc/todo/mdwn_preview.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 2155f0f87..16d7409a0 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -49,7 +49,7 @@ Note that the WMD plugin does **not** handle directives. For this reason the no remains. Some CSS to clean up the display of the live WMD preview would be good. > Can you elucidate the CSS comment -- or will it be obvious what you mean -> when I try it? --[[Joey]] +> when I try it? Is it what's needed for the live preview? --[[Joey]] Install the following patch and plugin file. Then enable the 'wmd' plugin. -- cgit v1.2.3 From 329f0991ef71635c6390126ca1d99a187254de18 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 18:45:55 -0500 Subject: wmd copyright? --- doc/todo/mdwn_preview.mdwn | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 16d7409a0..df1eac2d8 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -43,7 +43,8 @@ some other javascript files and an images directory in the same place. > So, I wonder if I should add a copy of the WMD source to ikiwiki, or rely > on the user or distribution providing it. It does not seem to be packaged -> for Debian yet. --[[Joey]] +> for Debian yet. Hmm, I also can't find any copyright or license info in +> the zip file. --[[Joey]] Note that the WMD plugin does **not** handle directives. For this reason the normal `preview` button remains. Some CSS to clean up the display of the live WMD preview would be good. -- cgit v1.2.3 From 43ebfc342cd5b0059dcf9543802eebfa990dd9af Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 19:23:46 -0500 Subject: remove patch, and more comments --- doc/todo/mdwn_preview.mdwn | 83 +++++----------------------------------------- 1 file changed, 9 insertions(+), 74 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index df1eac2d8..73028be19 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -18,7 +18,11 @@ add to ikiwiki. [[!tag wishlist]] ->>> Below is a simple plugin/[[patch]] to make use of the WMD editor. Turns out it isn't hard at all to +>>> Below is a simple plugin/[[patch]] to make use of the WMD editor. + +>>>> Now added to ikiwiki, thanks! --[[Joey]] + +>>> Turns out it isn't hard at all to >>> get a basic version going (which doesn't handle directives at all, nor does it swtich itself off when you're >>> editing something other than Markdown source). I've >>> removed the done tag so this is visible as a patch. -- [[Will]] @@ -31,16 +35,6 @@ add to ikiwiki. >>> Can I get a license statement (ie, GPL-2+) ffrom you for the plugin? >>> --[[Joey]] ------- - -### Instructions: - - -Download the [WMD source](http://wmd-editor.com/downloads/wmd-1.0.1.zip). In that zip file you'll -find a few example html files, a readme and `wmd` directory. Move the `wmd` directory into the -ikiwiki `underlays` directory. You should now have an `underlays/wmd/wmd.js` file as well as -some other javascript files and an images directory in the same place. - > So, I wonder if I should add a copy of the WMD source to ikiwiki, or rely > on the user or distribution providing it. It does not seem to be packaged > for Debian yet. Hmm, I also can't find any copyright or license info in @@ -52,66 +46,7 @@ remains. Some CSS to clean up the display of the live WMD preview would be good > Can you elucidate the CSS comment -- or will it be obvious what you mean > when I try it? Is it what's needed for the live preview? --[[Joey]] -Install the following patch and plugin file. Then enable the 'wmd' plugin. - - - diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl - index 4b54db2..b1cf015 100644 - --- a/templates/editpage.tmpl - +++ b/templates/editpage.tmpl - @@ -37,6 +37,7 @@ Optional comment about this change:
    -
    - - - + - - -
    - ------ - - #!/usr/bin/perl - package IkiWiki::Plugin::wmd; - - use warnings; - use strict; - use IkiWiki 3.00; - use POSIX; - use Encode; - - sub import { - add_underlay("wmd"); - hook(type => "getsetup", id => "wmd", call => \&getsetup); - hook(type => "formbuilder_setup", id => "wmd", call => \&formbuilder_setup); - } - - sub getsetup () { - return - plugin => { - safe => 1, - rebuild => 1, - }, - } - - sub formbuilder_setup (@) { - my %params=@_; - my $form=$params{form}; - - return if ! defined $form->field("do"); - - return unless (($form->field("do") eq "edit") || - ($form->field("do") eq "create")); - - $form->tmpl_param("wmd_preview", "
    \n".include_javascript(undef, 1)); - } - - sub include_javascript ($;$) { - my $page=shift; - my $absolute=shift; - - return ''."\n"; - } - - 1 - +> Hmm, now that I've tried it, I notice that it does live preview by +> default, below the edit window. Which is nice, but then if I hit the +> preview button, I get two previews.. which is confusing. (Also, minor, +> but: the live preview is missing the >Page Preview:" header.) --[[Joey]] -- cgit v1.2.3 From 45129917b2ac6ea54ef630608c293803076a63fa Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 19:26:46 -0500 Subject: another thought --- doc/todo/mdwn_preview.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 73028be19..f71c944bb 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -50,3 +50,9 @@ remains. Some CSS to clean up the display of the live WMD preview would be good > default, below the edit window. Which is nice, but then if I hit the > preview button, I get two previews.. which is confusing. (Also, minor, > but: the live preview is missing the >Page Preview:" header.) --[[Joey]] + +> I wonder how annoying it would be to add some kind of simplistic wikilink +> support to wmd's preview? And/or a wikilink button? While not supporting +> directies is fine, not supporting wikilinks in a wiki seems a bit +> lacking. It may also entice novide users to not use wikilinks and instead +> use the hyperlinks that wmd does support. --[[Joey]] -- cgit v1.2.3 From 1dba400c2ce92af646bcf4b0ae1085857d912cc8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 7 Mar 2009 19:30:01 -0500 Subject: bug --- doc/todo/mdwn_preview.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index f71c944bb..3414603ad 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -56,3 +56,9 @@ remains. Some CSS to clean up the display of the live WMD preview would be good > directies is fine, not supporting wikilinks in a wiki seems a bit > lacking. It may also entice novide users to not use wikilinks and instead > use the hyperlinks that wmd does support. --[[Joey]] + +> Bug: When I preview, all the text in the edit field seems to be +> converted from mdwn to html. I think that wmd is converting the mdwn +> into html when the form is posted, so it would also save like that. +> I assume that is designed for websites that do not use markdown +> internally. Doesn't it have a setting to leave it as markdown? --[[Joey]] -- cgit v1.2.3 From ff0ae86945f8a68d5bc51fa9f9cc89754cd209b5 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sun, 8 Mar 2009 10:39:07 -0400 Subject: License grant for my code. And note that I'll look at a more advanced version when I get time. --- doc/todo/mdwn_preview.mdwn | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 16d7409a0..6ab8d604b 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -23,13 +23,26 @@ add to ikiwiki. >>> editing something other than Markdown source). I've >>> removed the done tag so this is visible as a patch. -- [[Will]] ->>> Hmm, it would be good if it turned off for !mdwn. Although this could ->>> be difficult for a new page, since there is a dropdown selector to ->>> choose the markup language then. But it should be doable for editing an ->>> existing page. ->>> ->>> Can I get a license statement (ie, GPL-2+) ffrom you for the plugin? ->>> --[[Joey]] +>>>> Hmm, it would be good if it turned off for !mdwn. Although this could +>>>> be difficult for a new page, since there is a dropdown selector to +>>>> choose the markup language then. But it should be doable for editing an +>>>> existing page. + +>>>>> I agree. I'm working on this for for both new pages and existing pages. +>>>>> It shouldn't be hard once I get WMD going through the javascript API. +>>>>> At the moment that is inexplicably failing, and I haven't had time to have a good look at why. +>>>>> I may not get a chance to look at this again for a few weeks. + +>>>> Can I get a license statement (ie, GPL-2+) ffrom you for the plugin? +>>>> --[[Joey]] + +>>>>> Certainly. You're free to use the code I posted below under the GPL-2+ license. You'll note +>>>>> however that I haven't said anything about the WMD code itself. The WMD web page says: + +>>>>>> "I'm refactoring the code, and will be releasing WMD under the MIT license soon. For now you can download the most recent release (wmd-1.0.1.zip) and use it freely." + +>>>>> It might be best to contact to for an explicit license on that if you want to include it. +>>>>> -- [[Will]] ------ @@ -45,12 +58,23 @@ some other javascript files and an images directory in the same place. > on the user or distribution providing it. It does not seem to be packaged > for Debian yet. --[[Joey]] +>> This is a good question. My thought is that it will probably not be packaged any time soon, +>> so you're better off adding it to IkiWiki. I'd contact the author of WMD and ask them. They +>> may have more insight. -- [[Will]] + Note that the WMD plugin does **not** handle directives. For this reason the normal `preview` button remains. Some CSS to clean up the display of the live WMD preview would be good. > Can you elucidate the CSS comment -- or will it be obvious what you mean > when I try it? Is it what's needed for the live preview? --[[Joey]] +>> In the version of the plugin below, a new `div` is added just below the form. WMD +>> populates this div with the HTML it generates from the Markdown source. This is not very +>> pretty at the moment - it appears in the same place as the preview used to, but with no +>> header or anything. Any standard IkiWiki preview will appear below the WMD live preview. +>> I recommend having a look at +>> for what a little CSS could achieve. -- [[Will]] + Install the following patch and plugin file. Then enable the 'wmd' plugin. -- cgit v1.2.3 From f4ae4c0b091d51842db2a97f09d1d1d64cf1f2ce Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sun, 8 Mar 2009 15:50:48 +0100 Subject: implemented Joey's solution --- doc/todo/need_global_renamepage_hook.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 9c987aac4..6c79fa321 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -103,3 +103,5 @@ hashes is desired, it could return the full set of hashes. >> plugins use the hook; plugin A would see when plugin B adds a new file >> to be renamed. And the subpage renaming stuff could probably be moved >> into the rename hook too. --[[Joey]] +>>> +>>> I've implemented this nice solution in my po branch. --[[intrigeri]] -- cgit v1.2.3 From 5e60e13a2070cce4f7feae59164a6cb3460d46b7 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sun, 8 Mar 2009 11:05:47 -0400 Subject: details --- doc/todo/need_global_renamepage_hook.mdwn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 6c79fa321..69655f2e9 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -104,4 +104,6 @@ hashes is desired, it could return the full set of hashes. >> to be renamed. And the subpage renaming stuff could probably be moved >> into the rename hook too. --[[Joey]] >>> ->>> I've implemented this nice solution in my po branch. --[[intrigeri]] +>>> I've implemented this nice solution in my po branch, please review. +>>> I'm slowly coming back to do the last bits needed to get my po and +>>> meta branch merged. --[[intrigeri]] -- cgit v1.2.3 From 1bf100cfdebee69fc53d2cdf77d626b9fe8be987 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 8 Mar 2009 13:11:26 -0400 Subject: configure wmd to leave text in markdown --- IkiWiki/Plugin/wmd.pm | 13 ++++++++++--- doc/todo/mdwn_preview.mdwn | 3 ++- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'doc/todo') diff --git a/IkiWiki/Plugin/wmd.pm b/IkiWiki/Plugin/wmd.pm index bdbcecc06..9ddd237ab 100644 --- a/IkiWiki/Plugin/wmd.pm +++ b/IkiWiki/Plugin/wmd.pm @@ -37,9 +37,16 @@ sub formbuilder_setup (@) { sub include_javascript ($;$) { my $page=shift; my $absolute=shift; - - return ''."\n"; + + my $wmdjs=urlto("wmd/wmd.js", $page, $absolute); + return <<"EOF" + + +EOF } 1 diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 2fa460336..3008eb529 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -85,4 +85,5 @@ remains. Some CSS to clean up the display of the live WMD preview would be good > converted from mdwn to html. I think that wmd is converting the mdwn > into html when the form is posted, so it would also save like that. > I assume that is designed for websites that do not use markdown -> internally. Doesn't it have a setting to leave it as markdown? --[[Joey]] +> internally. Doesn't it have a setting to leave it as markdown? +>> Found setting, fixed. --[[Joey]] -- cgit v1.2.3 From 200d0fca370e113ecd31c38a31ba51c5532c94b6 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Sun, 8 Mar 2009 19:40:47 -0400 Subject: Dump untested updates so that others can have a look (I wont have time for a few weeks). --- doc/todo/mdwn_preview.mdwn | 215 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index 3008eb529..bbb105041 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -87,3 +87,218 @@ remains. Some CSS to clean up the display of the live WMD preview would be good > I assume that is designed for websites that do not use markdown > internally. Doesn't it have a setting to leave it as markdown? >> Found setting, fixed. --[[Joey]] + +>>> As I noted above, I've been working on the non-markdown page issue. +>>> Below is my a new javascript file that I'm using, and below that a patch +>>> to enable it. This patch makes the normal usage prettier - you get +>>> a side panel with the live preview in it. It also adds a new config +>>> option, `wmd_use101api`, which turns on code that tries to use the +>>> wmd api. At the moment this code doesn't seem to work - moreover the +>>> code that uses the new API dies early, so any code after that point is +>>> completely untested. I will not +>>> get a chance to look at this again soon though, so I thought I'd post +>>> my progress so far. -- [[Will]] + + +Place the following file in `underlays/wmd/wmd-ikiwiki.js`. + +---- + + // This is some code to interface the WMD interface 1.0.1 with IkiWiki + // The WMD interface is planned to change, so this file will likely need + // updating in future. + + if (useWMDinterface) { + wmd_options = { autostart: false, output: "Markdown" }; + var instance = null; + + hook("onload", initwmd); + } else { + var typeSelector = document.getElementById("type"); + + var currentType = getType(typeSelector); + + if (currentType == "mdwn") { + wmd_options = { output: "Markdown" }; + document.getElementById("wmd-preview-container").style.hidden = false; + } else { + wmd_options = { autostart: false }; + document.getElementById("wmd-preview-container").style.hidden = true; + } + } + + function initwmd() { + if (!Attacklab || !Attacklab.wmd) { + alert("WMD hasn't finished loading!"); + return; + } + + var typeSelector = document.getElementById("type"); + + var currentType = getType(typeSelector); + + if (currentType == "mdwn") { + enableWMD(); + } + + typeSelector.onchange=function() { + var docType=getType(this); + + if (docType=="mdwn") { + enableWMD(); + } else { + disableWMD(); + } + } + } + + function getType(typeSelector) + { + if (typeSelector.nodeName.toLowerCase() == 'input') { + return typeSelector.getAttribute('value'); + } else if (typeSelector.nodeName.toLowerCase() == 'selector') { + return typeSelector.options[typeSelector.selectedIndex]; + } + return ""; + } + + function enableWMD() + { + var editContent = document.getElementById("editcontent"); + var previewDiv = document.getElementById("wmd-preview"); + var previewDivContainer = document.getElementById("wmd-preview-container"); + + previewDivContainer.style.hidden = false; + // editContent.style.width = previewDivContainer.style.width; + + /***** build the preview manager *****/ + var panes = {input:editContent, preview:previewDiv, output:null}; + var previewManager = new Attacklab.wmd.previewManager(panes); + + /***** build the editor and tell it to refresh the preview after commands *****/ + var editor = new Attacklab.wmd.editor(editContent,previewManager.refresh); + + // save everything so we can destroy it all later + instance = {ta:textarea, div:previewDiv, ed:editor, pm:previewManager}; + } + + function disableWMD() + { + document.getElementById("wmd-preview-container").style.hidden = true; + + if (instance != null) { + instance.pm.destroy(); + instance.ed.destroy(); + //inst.ta.style.width='100%' + } + instance = null; + } + + +---- + + diff --git a/IkiWiki/Plugin/wmd.pm b/IkiWiki/Plugin/wmd.pm + index 9ddd237..743a0b8 100644 + --- a/IkiWiki/Plugin/wmd.pm + +++ b/IkiWiki/Plugin/wmd.pm + @@ -17,6 +17,13 @@ sub getsetup () { + return + plugin => { + safe => 1, + + rebuild => 1, + + }, + + wmd_use101api => { + + type => "boolean", + + description => "Use the advanced, but unstable, WMD api for markdown preview.", + + safe => 0, + + rebuild => 0, + }, + } + + @@ -24,29 +31,25 @@ sub formbuilder_setup (@) { + my %params=@_; + my $form=$params{form}; + + - return if ! defined $form->field("do"); + + return unless defined $form->field("do"); + + return unless $form->field("do") eq "edit" || + - $form->field("do") eq "create" || + - $form->field("do") eq "comment"; + - + - $form->tmpl_param("wmd_preview", "
    \n". + - include_javascript(undef, 1)); + -} + - + -sub include_javascript ($;$) { + - my $page=shift; + - my $absolute=shift; + - + - my $wmdjs=urlto("wmd/wmd.js", $page, $absolute); + - return <<"EOF" + - + - + -EOF + + $form->field("do") eq "create" || + + $form->field("do") eq "comment"; + + + + my $useAPI = $config{wmd_use101api}?'true':'false'; + + my $ikiwikijs = urlto("ikiwiki.js", undef, 1); + + my $wmdIkiwikijs = urlto("wmd-ikiwiki.js", undef, 1); + + my $wmdjs = urlto("wmd.js", undef, 1); + + + + my $previewScripts = <<"EOS"; + + + + + + + + + +EOS + + + + $form->tmpl_param("wmd_preview", $previewScripts); + } + + 1 + diff --git a/doc/style.css b/doc/style.css + index a6e6734..36c2b13 + --- a/doc/style.css + +++ b/doc/style.css + @@ -76,9 +76,16 @@ div.tags { + float: right; + } + + +/* + #editcontent { + width: 100%; + } + +*/ + + + +#wmd-preview-container { + + width: 49%; + + float: right; + +} + + img { + border-style: none; + diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl + index b1cf015..1d2f080 100644 + --- a/templates/editpage.tmpl + +++ b/templates/editpage.tmpl + @@ -15,6 +15,14 @@ Page type: + + +
    + + + +
    + +
    + +Live preview: + +
    + +
    + +
    + +
    +
    + + Optional comment about this change:
    -- cgit v1.2.3 From a948f6d275668236a2c005f14fcf713f9933d9d7 Mon Sep 17 00:00:00 2001 From: "http://www.cse.unsw.edu.au/~willu/" Date: Mon, 9 Mar 2009 08:39:42 -0400 Subject: Update the javascript - this now turns things on and off based on the type. It still has some display issues. --- doc/todo/mdwn_preview.mdwn | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn index bbb105041..c20314c28 100644 --- a/doc/todo/mdwn_preview.mdwn +++ b/doc/todo/mdwn_preview.mdwn @@ -120,10 +120,10 @@ Place the following file in `underlays/wmd/wmd-ikiwiki.js`. if (currentType == "mdwn") { wmd_options = { output: "Markdown" }; - document.getElementById("wmd-preview-container").style.hidden = false; + document.getElementById("wmd-preview-container").style.display = 'none'; } else { wmd_options = { autostart: false }; - document.getElementById("wmd-preview-container").style.hidden = true; + document.getElementById("wmd-preview-container").style.display = 'block'; } } @@ -138,7 +138,7 @@ Place the following file in `underlays/wmd/wmd-ikiwiki.js`. var currentType = getType(typeSelector); if (currentType == "mdwn") { - enableWMD(); + window.setTimeout(enableWMD,10); } typeSelector.onchange=function() { @@ -156,8 +156,9 @@ Place the following file in `underlays/wmd/wmd-ikiwiki.js`. { if (typeSelector.nodeName.toLowerCase() == 'input') { return typeSelector.getAttribute('value'); - } else if (typeSelector.nodeName.toLowerCase() == 'selector') { - return typeSelector.options[typeSelector.selectedIndex]; + } else if (typeSelector.nodeName.toLowerCase() == 'select') { + return typeSelector.value; + // return typeSelector.options[typeSelector.selectedIndex].innerText; } return ""; } @@ -168,7 +169,7 @@ Place the following file in `underlays/wmd/wmd-ikiwiki.js`. var previewDiv = document.getElementById("wmd-preview"); var previewDivContainer = document.getElementById("wmd-preview-container"); - previewDivContainer.style.hidden = false; + previewDivContainer.style.display = 'block'; // editContent.style.width = previewDivContainer.style.width; /***** build the preview manager *****/ @@ -179,17 +180,17 @@ Place the following file in `underlays/wmd/wmd-ikiwiki.js`. var editor = new Attacklab.wmd.editor(editContent,previewManager.refresh); // save everything so we can destroy it all later - instance = {ta:textarea, div:previewDiv, ed:editor, pm:previewManager}; + instance = {ta:editContent, div:previewDiv, ed:editor, pm:previewManager}; } function disableWMD() { - document.getElementById("wmd-preview-container").style.hidden = true; + document.getElementById("wmd-preview-container").style.display = 'none'; if (instance != null) { instance.pm.destroy(); instance.ed.destroy(); - //inst.ta.style.width='100%' + // inst.ta.style.width='100%' } instance = null; } -- cgit v1.2.3 From 35460e3153286381a6019e5afd46b2880a95cb88 Mon Sep 17 00:00:00 2001 From: chrysn Date: Tue, 17 Mar 2009 21:22:26 +0100 Subject: new wishlist item, patch included --- doc/todo/natural_sorting.mdwn | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 doc/todo/natural_sorting.mdwn (limited to 'doc/todo') diff --git a/doc/todo/natural_sorting.mdwn b/doc/todo/natural_sorting.mdwn new file mode 100644 index 000000000..84f35c5da --- /dev/null +++ b/doc/todo/natural_sorting.mdwn @@ -0,0 +1,16 @@ +[[!tag wishlist]] +[[!tag patch]] + +the inline plugin's sorting is plain lexical, thich may not be appropriate for +page titles if they have numeric components. the +[Sort::Naturally](http://search.cpan.org/dist/Sort-Naturally/) perl module +provides an algorithm for that. + +there is a +[patch](http://github.com/github076986099/ikiwiki/commit/25617577746dc1e4ab5ab69aa70d633daddcc01b) +attached that makes the [[plugins/inline]] plugin use Sort::Naturally if sort +is set to "title_natural". + +the current patch uses `require Sort::Naturally`, so +[libsort-naturally-perl](http://packages.debian.org/libsort-naturally-perl) +does not become a dependency; it might be worth suggesting, though. -- cgit v1.2.3 From 888e67bf4e44b66dcecde07395a50135e19b911d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 19 Mar 2009 14:03:38 -0400 Subject: github error and comment --- doc/todo/natural_sorting.mdwn | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/natural_sorting.mdwn b/doc/todo/natural_sorting.mdwn index 84f35c5da..2215d533e 100644 --- a/doc/todo/natural_sorting.mdwn +++ b/doc/todo/natural_sorting.mdwn @@ -14,3 +14,9 @@ is set to "title_natural". the current patch uses `require Sort::Naturally`, so [libsort-naturally-perl](http://packages.debian.org/libsort-naturally-perl) does not become a dependency; it might be worth suggesting, though. + +> Great, but all I get from the github link is a server error page, so I +> have not figured out how to merge the patch. --[[Joey]] +> +> See also: [[inline:_numerical_ordering_by_title]] (I probably prefer your +> approach..) --[[Joey]] -- cgit v1.2.3 From 86956b3392f7e768fa8f527a0b3a4b7d1a080aef Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 19 Mar 2009 15:36:31 -0400 Subject: title_natural patch merged --- debian/changelog | 7 +++++++ doc/todo/inline:_numerical_ordering_by_title.mdwn | 2 ++ doc/todo/natural_sorting.mdwn | 5 ++--- 3 files changed, 11 insertions(+), 3 deletions(-) (limited to 'doc/todo') diff --git a/debian/changelog b/debian/changelog index a8f47bfc7..8266afa09 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +ikiwiki (3.09) UNRELEASED; urgency=low + + * inline: Add title_natural sort order, using Sort::Naturally + (chrysn) + + -- Joey Hess Thu, 19 Mar 2009 15:32:49 -0400 + ikiwiki (3.08) unstable; urgency=low * git: Fix utf-8 encoding of author names. diff --git a/doc/todo/inline:_numerical_ordering_by_title.mdwn b/doc/todo/inline:_numerical_ordering_by_title.mdwn index 3f6c8b598..3d7424b3f 100644 --- a/doc/todo/inline:_numerical_ordering_by_title.mdwn +++ b/doc/todo/inline:_numerical_ordering_by_title.mdwn @@ -1,6 +1,8 @@ Could you please add numerical ordering by title to [[inline|plugins/inline]] plugin? Now I can do only alphabetical order by title, but sometime it's not enough. +> Implemented, see [[natural_sorting]] [[!tag done]] --[[Joey]] + BTW, it seems that ordering by title is rather ordering by filename of page. For me "title" means title of page I can set using `title` parameter of [[meta|plugins/meta]] plugin :) diff --git a/doc/todo/natural_sorting.mdwn b/doc/todo/natural_sorting.mdwn index 2215d533e..faa523043 100644 --- a/doc/todo/natural_sorting.mdwn +++ b/doc/todo/natural_sorting.mdwn @@ -15,8 +15,7 @@ the current patch uses `require Sort::Naturally`, so [libsort-naturally-perl](http://packages.debian.org/libsort-naturally-perl) does not become a dependency; it might be worth suggesting, though. -> Great, but all I get from the github link is a server error page, so I -> have not figured out how to merge the patch. --[[Joey]] -> > See also: [[inline:_numerical_ordering_by_title]] (I probably prefer your > approach..) --[[Joey]] + +> [[applied|done]] -- cgit v1.2.3 From 1d9b58b0d4efe4ad4f752eeda7e52b263edaec87 Mon Sep 17 00:00:00 2001 From: chrysn Date: Fri, 20 Mar 2009 05:30:28 -0400 Subject: (replace github link with ikwiki gitweb link so that github branch can go away) --- doc/todo/natural_sorting.mdwn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc/todo') diff --git a/doc/todo/natural_sorting.mdwn b/doc/todo/natural_sorting.mdwn index faa523043..5df17e95b 100644 --- a/doc/todo/natural_sorting.mdwn +++ b/doc/todo/natural_sorting.mdwn @@ -7,7 +7,7 @@ page titles if they have numeric components. the provides an algorithm for that. there is a -[patch](http://github.com/github076986099/ikiwiki/commit/25617577746dc1e4ab5ab69aa70d633daddcc01b) +[patch](http://git.ikiwiki.info/?p=ikiwiki;a=commit;h=55b83cb7bd1cd7c60bb45dc22c3745dd80a63fed) attached that makes the [[plugins/inline]] plugin use Sort::Naturally if sort is set to "title_natural". -- cgit v1.2.3 From 82281d1aef347080ff235ad18e92613012093f49 Mon Sep 17 00:00:00 2001 From: chrysn Date: Tue, 24 Mar 2009 08:21:22 +0100 Subject: wishlist, patch: inline autotitles --- doc/todo/inline_autotitles.mdwn | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 doc/todo/inline_autotitles.mdwn (limited to 'doc/todo') diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_autotitles.mdwn new file mode 100644 index 000000000..9846687e9 --- /dev/null +++ b/doc/todo/inline_autotitles.mdwn @@ -0,0 +1,45 @@ +[[!tag wishlist]] +[[!tag patch]] + +for inlines of pages which follow a certain scheme, it might not be required to +set the title for each individual post, but to automatically set the title. +this can either be based on timestamp formatting, or use the already existing +munging mechanism, which appends numbers to page titles in case that page +already exists. + +two [patches][1] set inline up for that, adding an additional `autotitle` +parameter. if that is given, the regular input of the inline postform will be +replaced with a hidden input of that text. in addition, the empty title is +permitted (both for autotitle and regular titles, as they go in the same GET +parameter, `title`). as the empty page title is illegal, munging is used, +resulting in ascending numeric page titles to be created. + +the second patch is actually a one-liner, filtering the title through sprintf. + +### potential user interaction issues + +this has two side effects which have to be considered: first, the empty page +title is accepted also in normal postforms (previously, this resulted in a "bad +page name" error); second, entering a percent sign in that field might result +in unexpexted sprintf substitution (sprintf might not even substitute for +common uses of percent as in "reach 10% market share", but might in others as +in "the 10%-rule"). + +both can be circumvented by using another GET parameter for autotexts, for +which i could provide a patch. (as of writing this, i think i'll do that.) + +### potential security issues + +* the autotitle's value is directly output through the template (but that's + done in other places as well, so i assume it's safe) +* i don't know if anything bad can happen if unfiltered content is passed to + POSIX::strftime. + +### further extension + +having a pre-filled input field instead of an unchangable hidden input might be +cool (eg for creating an entry with yesterday's date), but would be a bit of a +problem with static pages. javascript could help with the date part, but name +munging would be yet another thing. + +[1]: http://... -- cgit v1.2.3 From ce81e2e286ed5435eb114de21be73cd02da8a666 Mon Sep 17 00:00:00 2001 From: chrysn Date: Tue, 24 Mar 2009 08:25:35 +0100 Subject: (urls for inline autotitle) --- doc/todo/inline_autotitles.mdwn | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_autotitles.mdwn index 9846687e9..afc726c48 100644 --- a/doc/todo/inline_autotitles.mdwn +++ b/doc/todo/inline_autotitles.mdwn @@ -7,7 +7,7 @@ this can either be based on timestamp formatting, or use the already existing munging mechanism, which appends numbers to page titles in case that page already exists. -two [patches][1] set inline up for that, adding an additional `autotitle` +two patches ([1], [2]) set inline up for that, adding an additional `autotitle` parameter. if that is given, the regular input of the inline postform will be replaced with a hidden input of that text. in addition, the empty title is permitted (both for autotitle and regular titles, as they go in the same GET @@ -42,4 +42,5 @@ cool (eg for creating an entry with yesterday's date), but would be a bit of a problem with static pages. javascript could help with the date part, but name munging would be yet another thing. -[1]: http://... +[1]: http://github.com/github076986099/ikiwiki/commit/b568eb257a3ef5ff49a84ac00a3a7465b643c1e1 +[2]: http://github.com/github076986099/ikiwiki/commit/34bc82f232be141edf036d35e8ef5aa289415072 -- cgit v1.2.3 From 16735bd194095306e4a8f6e2b8d771068e19e497 Mon Sep 17 00:00:00 2001 From: chrysn Date: Tue, 24 Mar 2009 09:20:18 +0100 Subject: (corrected bug in inline autotitle description) --- doc/todo/inline_autotitles.mdwn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_autotitles.mdwn index afc726c48..4c45ebf00 100644 --- a/doc/todo/inline_autotitles.mdwn +++ b/doc/todo/inline_autotitles.mdwn @@ -14,14 +14,14 @@ permitted (both for autotitle and regular titles, as they go in the same GET parameter, `title`). as the empty page title is illegal, munging is used, resulting in ascending numeric page titles to be created. -the second patch is actually a one-liner, filtering the title through sprintf. +the second patch is actually a one-liner, filtering the title through strftime. ### potential user interaction issues this has two side effects which have to be considered: first, the empty page title is accepted also in normal postforms (previously, this resulted in a "bad page name" error); second, entering a percent sign in that field might result -in unexpexted sprintf substitution (sprintf might not even substitute for +in unexpexted strftime substitution (strftime might not even substitute for common uses of percent as in "reach 10% market share", but might in others as in "the 10%-rule"). -- cgit v1.2.3 From fcf72069cb9c70a353f9fb8eca7d2a36fc883748 Mon Sep 17 00:00:00 2001 From: chrysn Date: Tue, 24 Mar 2009 10:55:27 +0100 Subject: inline autotitles: additional patch --- doc/todo/inline_autotitles.mdwn | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'doc/todo') diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_autotitles.mdwn index 4c45ebf00..9d3c986ed 100644 --- a/doc/todo/inline_autotitles.mdwn +++ b/doc/todo/inline_autotitles.mdwn @@ -25,8 +25,8 @@ in unexpexted strftime substitution (strftime might not even substitute for common uses of percent as in "reach 10% market share", but might in others as in "the 10%-rule"). -both can be circumvented by using another GET parameter for autotexts, for -which i could provide a patch. (as of writing this, i think i'll do that.) +both can be circumvented by using another GET parameter for autotexts, as +implemented in [3]. ### potential security issues @@ -44,3 +44,4 @@ munging would be yet another thing. [1]: http://github.com/github076986099/ikiwiki/commit/b568eb257a3ef5ff49a84ac00a3a7465b643c1e1 [2]: http://github.com/github076986099/ikiwiki/commit/34bc82f232be141edf036d35e8ef5aa289415072 +[3]: http://github.com/github076986099/ikiwiki/commit/40dc10a4ec7809e401b4497c2abccfba30f7a2af -- cgit v1.2.3 From ca862d5127192392cd4614ff60504ec5bb28d512 Mon Sep 17 00:00:00 2001 From: chrysn Date: Tue, 24 Mar 2009 18:23:44 -0400 Subject: inline autotitles: open issue --- doc/todo/inline_autotitles.mdwn | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_autotitles.mdwn index 9d3c986ed..8bf71deae 100644 --- a/doc/todo/inline_autotitles.mdwn +++ b/doc/todo/inline_autotitles.mdwn @@ -27,6 +27,10 @@ in "the 10%-rule"). both can be circumvented by using another GET parameter for autotexts, as implemented in [3]. +> this patch still does not work perfectly; especially, it should make a +> distinction between "autotitle is set but equal ''" (in which case it +> should create a page named `1.mdwn`, and "autotitle is not set, and title is +> equal ''" (in which case it should display the old error message) --[[chrysn]] ### potential security issues -- cgit v1.2.3 From 2852cf14a2b2b6610ea1d4c64f3bb9741b494ae1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 27 Mar 2009 15:51:13 -0400 Subject: review --- doc/plugins/contrib/po.mdwn | 11 +++++++++++ doc/todo/need_global_renamepage_hook.mdwn | 4 ++++ 2 files changed, 15 insertions(+) (limited to 'doc/todo') diff --git a/doc/plugins/contrib/po.mdwn b/doc/plugins/contrib/po.mdwn index c39008466..a5e3375ce 100644 --- a/doc/plugins/contrib/po.mdwn +++ b/doc/plugins/contrib/po.mdwn @@ -328,3 +328,14 @@ but the po thing is supposed to work without these ugly `our`. Seems like it was the last unaddressed item from Joey's review, so I'm daring a timid "please pull"... or rather, please review again :) --[[intrigeri]] + +> Ok, I've reviewed and merged into my own po branch. It's looking very +> mergeable. I would still like to go over the `po.pm` code in detail and +> review it, but it's very complex, and I'm happy with all the changes +> outside `po.pm`. +> +> * Is it worth trying to fix compatability with `indexpages`? +> * Would it make sense to go ahead and modify `page.tmpl` to use +> OTHERLANGUAGES and PERCENTTRANSLATED, instead of documenting how to modify it? +> +> --[[Joey]] diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index 69655f2e9..b065c82f3 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -107,3 +107,7 @@ hashes is desired, it could return the full set of hashes. >>> I've implemented this nice solution in my po branch, please review. >>> I'm slowly coming back to do the last bits needed to get my po and >>> meta branch merged. --[[intrigeri]] + +>>>> It looks good. I made some small changes to it in my own po branch. +>>>> Nothing significant really. If this were not tied up in the po branch, +>>>> I've have merged it to master already. --[[Joey]] -- cgit v1.2.3 From e55d7cf572370b015fab9541dbe920bb8e64089a Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sat, 28 Mar 2009 11:13:22 +0100 Subject: answering Joey --- doc/todo/need_global_renamepage_hook.mdwn | 2 ++ 1 file changed, 2 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/need_global_renamepage_hook.mdwn b/doc/todo/need_global_renamepage_hook.mdwn index b065c82f3..b123340af 100644 --- a/doc/todo/need_global_renamepage_hook.mdwn +++ b/doc/todo/need_global_renamepage_hook.mdwn @@ -111,3 +111,5 @@ hashes is desired, it could return the full set of hashes. >>>> It looks good. I made some small changes to it in my own po branch. >>>> Nothing significant really. If this were not tied up in the po branch, >>>> I've have merged it to master already. --[[Joey]] + +>>>> Thanks, this is great :) --[[intrigeri]] -- cgit v1.2.3 From 82c3f6d7f4c8dd00589ba3c039856d6620ec2456 Mon Sep 17 00:00:00 2001 From: chrysn Date: Sun, 29 Mar 2009 20:33:00 +0200 Subject: clarification on autotitle (todo title seems unclear in retrospect) --- doc/todo/inline_autotitles.mdwn | 51 ------------------------------- doc/todo/inline_postform_autotitles.mdwn | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 51 deletions(-) delete mode 100644 doc/todo/inline_autotitles.mdwn create mode 100644 doc/todo/inline_postform_autotitles.mdwn (limited to 'doc/todo') diff --git a/doc/todo/inline_autotitles.mdwn b/doc/todo/inline_autotitles.mdwn deleted file mode 100644 index 8bf71deae..000000000 --- a/doc/todo/inline_autotitles.mdwn +++ /dev/null @@ -1,51 +0,0 @@ -[[!tag wishlist]] -[[!tag patch]] - -for inlines of pages which follow a certain scheme, it might not be required to -set the title for each individual post, but to automatically set the title. -this can either be based on timestamp formatting, or use the already existing -munging mechanism, which appends numbers to page titles in case that page -already exists. - -two patches ([1], [2]) set inline up for that, adding an additional `autotitle` -parameter. if that is given, the regular input of the inline postform will be -replaced with a hidden input of that text. in addition, the empty title is -permitted (both for autotitle and regular titles, as they go in the same GET -parameter, `title`). as the empty page title is illegal, munging is used, -resulting in ascending numeric page titles to be created. - -the second patch is actually a one-liner, filtering the title through strftime. - -### potential user interaction issues - -this has two side effects which have to be considered: first, the empty page -title is accepted also in normal postforms (previously, this resulted in a "bad -page name" error); second, entering a percent sign in that field might result -in unexpexted strftime substitution (strftime might not even substitute for -common uses of percent as in "reach 10% market share", but might in others as -in "the 10%-rule"). - -both can be circumvented by using another GET parameter for autotexts, as -implemented in [3]. -> this patch still does not work perfectly; especially, it should make a -> distinction between "autotitle is set but equal ''" (in which case it -> should create a page named `1.mdwn`, and "autotitle is not set, and title is -> equal ''" (in which case it should display the old error message) --[[chrysn]] - -### potential security issues - -* the autotitle's value is directly output through the template (but that's - done in other places as well, so i assume it's safe) -* i don't know if anything bad can happen if unfiltered content is passed to - POSIX::strftime. - -### further extension - -having a pre-filled input field instead of an unchangable hidden input might be -cool (eg for creating an entry with yesterday's date), but would be a bit of a -problem with static pages. javascript could help with the date part, but name -munging would be yet another thing. - -[1]: http://github.com/github076986099/ikiwiki/commit/b568eb257a3ef5ff49a84ac00a3a7465b643c1e1 -[2]: http://github.com/github076986099/ikiwiki/commit/34bc82f232be141edf036d35e8ef5aa289415072 -[3]: http://github.com/github076986099/ikiwiki/commit/40dc10a4ec7809e401b4497c2abccfba30f7a2af diff --git a/doc/todo/inline_postform_autotitles.mdwn b/doc/todo/inline_postform_autotitles.mdwn new file mode 100644 index 000000000..5005208be --- /dev/null +++ b/doc/todo/inline_postform_autotitles.mdwn @@ -0,0 +1,52 @@ +[[!tag wishlist]] +[[!tag patch]] + +for postforms in inlines of pages which follow a certain scheme, it might not +be required to set the title for each individual post, but to automatically set +the title and show no input box prompting for it. +this can either be based on timestamp formatting, or use the already existing +munging mechanism, which appends numbers to page titles in case that page +already exists. + +two patches ([1], [2]) set inline up for that, adding an additional `autotitle` +parameter. if that is given, the regular input of the inline postform will be +replaced with a hidden input of that text. in addition, the empty title is +permitted (both for autotitle and regular titles, as they go in the same GET +parameter, `title`). as the empty page title is illegal, munging is used, +resulting in ascending numeric page titles to be created. + +the second patch is actually a one-liner, filtering the title through strftime. + +### potential user interaction issues + +this has two side effects which have to be considered: first, the empty page +title is accepted also in normal postforms (previously, this resulted in a "bad +page name" error); second, entering a percent sign in that field might result +in unexpexted strftime substitution (strftime might not even substitute for +common uses of percent as in "reach 10% market share", but might in others as +in "the 10%-rule"). + +both can be circumvented by using another GET parameter for autotexts, as +implemented in [3]. +> this patch still does not work perfectly; especially, it should make a +> distinction between "autotitle is set but equal ''" (in which case it +> should create a page named `1.mdwn`, and "autotitle is not set, and title is +> equal ''" (in which case it should display the old error message) --[[chrysn]] + +### potential security issues + +* the autotitle's value is directly output through the template (but that's + done in other places as well, so i assume it's safe) +* i don't know if anything bad can happen if unfiltered content is passed to + POSIX::strftime. + +### further extension + +having a pre-filled input field instead of an unchangable hidden input might be +cool (eg for creating an entry with yesterday's date), but would be a bit of a +problem with static pages. javascript could help with the date part, but name +munging would be yet another thing. + +[1]: http://github.com/github076986099/ikiwiki/commit/b568eb257a3ef5ff49a84ac00a3a7465b643c1e1 +[2]: http://github.com/github076986099/ikiwiki/commit/34bc82f232be141edf036d35e8ef5aa289415072 +[3]: http://github.com/github076986099/ikiwiki/commit/40dc10a4ec7809e401b4497c2abccfba30f7a2af -- cgit v1.2.3 From 3496eac54b05afd2c45c225e788a928bf4289704 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 12:33:33 +0100 Subject: move managing todo lists to 'todo' section --- doc/forum/managing_todo_lists.mdwn | 44 ------------------------------ doc/todo/managing_todo_lists.mdwn | 55 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 44 deletions(-) delete mode 100644 doc/forum/managing_todo_lists.mdwn create mode 100644 doc/todo/managing_todo_lists.mdwn (limited to 'doc/todo') diff --git a/doc/forum/managing_todo_lists.mdwn b/doc/forum/managing_todo_lists.mdwn deleted file mode 100644 index 0a69af805..000000000 --- a/doc/forum/managing_todo_lists.mdwn +++ /dev/null @@ -1,44 +0,0 @@ -I keep some TODO lists on ikiwiki pages. I'm half-tempted to write a plugin -to make ticking items off and adding items easier via the web interface. I'm -aware though that this is not really what ikiwiki is designed for. Would -anyone else find this useful? -- [[users/jon]] - ----- - -My subsequent thoughts about how to approach this are two-fold. - -Firstly, a filetype for todo lists, probably OPML, but I haven't looked to see -if there is something more suitable. A plugin that converts this source into a -traditional page output, i.e. a DOM tree of ul or ol and li elements. - -Secondly, some magic javascript to make editing the list via the web page -more interactive: add items, strike items out, reorder items etc., without -round-tripping to the cgi for each operation. - -Finally, a mechanism whereby the changes made to the page live can be -committed back to the repository: - - * ...perhaps the input → output conversion is reversible, and the HTML DOM - representing the list can be transformed back into the source and submitted - to the cgi like a regular edit: issues include the result of other - postprocessing: templates, wikilinks, etc. - * perhaps an embedded copy of the source is included in the output and the - javascript operates on that in tandem with the static copy - * perhaps the "output" is generated live by the JS at view time (with maybe - a plugin-generated rendered output for non JS environments) - -I envisage a button called "commit changes" appearing once some changes are -made that submits the changes to the CGI, perhaps via a back channel. I'm not -sure how to handle embeds or challenges from the CGI such as a login challenge -(maybe the back channel would not be necessary in the first cut). - -> You might look at the [[plugins/hnb]] plugin. HNB supports checklists. -> There's not a fancy web interface, but the hnb command-line program can -> be used to edit them. --[[Joey]] - ->> thanks - I'll give it a look. I spent a few hours writing some javascript to manipulate a ul/li DOM tree in an outliner-fashion the other day. I might be able to join the puzzle pieces together sometime. [[Jon]] - -a solution for this could be similar to a solution for [[todo/structured page data]], as todo lists are definitely a form of structured data. (in both cases, the page's current content is rendered into a html form, whose result is then saved as the page's new contents) --[[chrysn]] - -> Thanks for the link: yup, there's definitely some common ground there. -> -- [[Jon]] diff --git a/doc/todo/managing_todo_lists.mdwn b/doc/todo/managing_todo_lists.mdwn new file mode 100644 index 000000000..846f2a4af --- /dev/null +++ b/doc/todo/managing_todo_lists.mdwn @@ -0,0 +1,55 @@ +I keep some TODO lists on ikiwiki pages. I'm half-tempted to write a plugin +to make ticking items off and adding items easier via the web interface. I'm +aware though that this is not really what ikiwiki is designed for. Would +anyone else find this useful? -- [[users/jon]] + +---- + +My subsequent thoughts about how to approach this are two-fold. + +Firstly, a filetype for todo lists, probably OPML, but I haven't looked to see +if there is something more suitable. A plugin that converts this source into a +traditional page output, i.e. a DOM tree of ul or ol and li elements. + +Secondly, some magic javascript to make editing the list via the web page +more interactive: add items, strike items out, reorder items etc., without +round-tripping to the cgi for each operation. + +Finally, a mechanism whereby the changes made to the page live can be +committed back to the repository: + + * ...perhaps the input → output conversion is reversible, and the HTML DOM + representing the list can be transformed back into the source and submitted + to the cgi like a regular edit: issues include the result of other + postprocessing: templates, wikilinks, etc. + * perhaps an embedded copy of the source is included in the output and the + javascript operates on that in tandem with the static copy + * perhaps the "output" is generated live by the JS at view time (with maybe + a plugin-generated rendered output for non JS environments) + +I envisage a button called "commit changes" appearing once some changes are +made that submits the changes to the CGI, perhaps via a back channel. I'm not +sure how to handle embeds or challenges from the CGI such as a login challenge +(maybe the back channel would not be necessary in the first cut). + +> You might look at the [[plugins/hnb]] plugin. HNB supports checklists. +> There's not a fancy web interface, but the hnb command-line program can +> be used to edit them. --[[Joey]] + +>> thanks - I'll give it a look. I spent a few hours writing some javascript to manipulate a ul/li DOM tree in an outliner-fashion the other day. I might be able to join the puzzle pieces together sometime. [[Jon]] + +a solution for this could be similar to a solution for [[todo/structured page data]], as todo lists are definitely a form of structured data. (in both cases, the page's current content is rendered into a html form, whose result is then saved as the page's new contents) --[[chrysn]] + +> Thanks for the link: yup, there's definitely some common ground there. +> -- [[Jon]] + +---- + +I had a little spare time in a conference recently so I hacked on this. I +managed to get something working with anonok, a "markup format" that was +essentially just UL and LI elements and some javascript. I'll try and get an +example up of that soon (and publish the code). There's still quite a lot of +work necessary, but it's more than an idle thought at least! + +I've moved this page under the [[todo]] heirarchy as I'm actually working on +this now. -- [[Jon]] -- cgit v1.2.3 From 9a7e8096c09efdb7d36656ad6e4aae4dec49a39b Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 13:30:20 +0100 Subject: Revert "move managing todo lists to 'todo' section" This reverts commit 3496eac54b05afd2c45c225e788a928bf4289704. Rather than move the existing forum topic (and confuse anyone who expected to find it there) I will create a new TODO item, structured more traditionally. --- doc/forum/managing_todo_lists.mdwn | 44 ++++++++++++++++++++++++++++++ doc/todo/managing_todo_lists.mdwn | 55 -------------------------------------- 2 files changed, 44 insertions(+), 55 deletions(-) create mode 100644 doc/forum/managing_todo_lists.mdwn delete mode 100644 doc/todo/managing_todo_lists.mdwn (limited to 'doc/todo') diff --git a/doc/forum/managing_todo_lists.mdwn b/doc/forum/managing_todo_lists.mdwn new file mode 100644 index 000000000..0a69af805 --- /dev/null +++ b/doc/forum/managing_todo_lists.mdwn @@ -0,0 +1,44 @@ +I keep some TODO lists on ikiwiki pages. I'm half-tempted to write a plugin +to make ticking items off and adding items easier via the web interface. I'm +aware though that this is not really what ikiwiki is designed for. Would +anyone else find this useful? -- [[users/jon]] + +---- + +My subsequent thoughts about how to approach this are two-fold. + +Firstly, a filetype for todo lists, probably OPML, but I haven't looked to see +if there is something more suitable. A plugin that converts this source into a +traditional page output, i.e. a DOM tree of ul or ol and li elements. + +Secondly, some magic javascript to make editing the list via the web page +more interactive: add items, strike items out, reorder items etc., without +round-tripping to the cgi for each operation. + +Finally, a mechanism whereby the changes made to the page live can be +committed back to the repository: + + * ...perhaps the input → output conversion is reversible, and the HTML DOM + representing the list can be transformed back into the source and submitted + to the cgi like a regular edit: issues include the result of other + postprocessing: templates, wikilinks, etc. + * perhaps an embedded copy of the source is included in the output and the + javascript operates on that in tandem with the static copy + * perhaps the "output" is generated live by the JS at view time (with maybe + a plugin-generated rendered output for non JS environments) + +I envisage a button called "commit changes" appearing once some changes are +made that submits the changes to the CGI, perhaps via a back channel. I'm not +sure how to handle embeds or challenges from the CGI such as a login challenge +(maybe the back channel would not be necessary in the first cut). + +> You might look at the [[plugins/hnb]] plugin. HNB supports checklists. +> There's not a fancy web interface, but the hnb command-line program can +> be used to edit them. --[[Joey]] + +>> thanks - I'll give it a look. I spent a few hours writing some javascript to manipulate a ul/li DOM tree in an outliner-fashion the other day. I might be able to join the puzzle pieces together sometime. [[Jon]] + +a solution for this could be similar to a solution for [[todo/structured page data]], as todo lists are definitely a form of structured data. (in both cases, the page's current content is rendered into a html form, whose result is then saved as the page's new contents) --[[chrysn]] + +> Thanks for the link: yup, there's definitely some common ground there. +> -- [[Jon]] diff --git a/doc/todo/managing_todo_lists.mdwn b/doc/todo/managing_todo_lists.mdwn deleted file mode 100644 index 846f2a4af..000000000 --- a/doc/todo/managing_todo_lists.mdwn +++ /dev/null @@ -1,55 +0,0 @@ -I keep some TODO lists on ikiwiki pages. I'm half-tempted to write a plugin -to make ticking items off and adding items easier via the web interface. I'm -aware though that this is not really what ikiwiki is designed for. Would -anyone else find this useful? -- [[users/jon]] - ----- - -My subsequent thoughts about how to approach this are two-fold. - -Firstly, a filetype for todo lists, probably OPML, but I haven't looked to see -if there is something more suitable. A plugin that converts this source into a -traditional page output, i.e. a DOM tree of ul or ol and li elements. - -Secondly, some magic javascript to make editing the list via the web page -more interactive: add items, strike items out, reorder items etc., without -round-tripping to the cgi for each operation. - -Finally, a mechanism whereby the changes made to the page live can be -committed back to the repository: - - * ...perhaps the input → output conversion is reversible, and the HTML DOM - representing the list can be transformed back into the source and submitted - to the cgi like a regular edit: issues include the result of other - postprocessing: templates, wikilinks, etc. - * perhaps an embedded copy of the source is included in the output and the - javascript operates on that in tandem with the static copy - * perhaps the "output" is generated live by the JS at view time (with maybe - a plugin-generated rendered output for non JS environments) - -I envisage a button called "commit changes" appearing once some changes are -made that submits the changes to the CGI, perhaps via a back channel. I'm not -sure how to handle embeds or challenges from the CGI such as a login challenge -(maybe the back channel would not be necessary in the first cut). - -> You might look at the [[plugins/hnb]] plugin. HNB supports checklists. -> There's not a fancy web interface, but the hnb command-line program can -> be used to edit them. --[[Joey]] - ->> thanks - I'll give it a look. I spent a few hours writing some javascript to manipulate a ul/li DOM tree in an outliner-fashion the other day. I might be able to join the puzzle pieces together sometime. [[Jon]] - -a solution for this could be similar to a solution for [[todo/structured page data]], as todo lists are definitely a form of structured data. (in both cases, the page's current content is rendered into a html form, whose result is then saved as the page's new contents) --[[chrysn]] - -> Thanks for the link: yup, there's definitely some common ground there. -> -- [[Jon]] - ----- - -I had a little spare time in a conference recently so I hacked on this. I -managed to get something working with anonok, a "markup format" that was -essentially just UL and LI elements and some javascript. I'll try and get an -example up of that soon (and publish the code). There's still quite a lot of -work necessary, but it's more than an idle thought at least! - -I've moved this page under the [[todo]] heirarchy as I'm actually working on -this now. -- [[Jon]] -- cgit v1.2.3 From f7037f4870c4a34becf32f4bd953d7d6ddcf556b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 13:47:41 -0400 Subject: happy Make Big Confusing Proposal Day --- doc/todo/rewrite_ikiwiki_in_haskell.mdwn | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 doc/todo/rewrite_ikiwiki_in_haskell.mdwn (limited to 'doc/todo') diff --git a/doc/todo/rewrite_ikiwiki_in_haskell.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell.mdwn new file mode 100644 index 000000000..204c48cd7 --- /dev/null +++ b/doc/todo/rewrite_ikiwiki_in_haskell.mdwn @@ -0,0 +1,68 @@ +[[!tag wishlist blue-sky]] + +In the long term, I have been considering rewriting ikiwiki in haskell. +It's appealing for a lot of reasons, including: + +* No need to depend on a C compiler and have wrappers. Instead, ikiwiki + binaries could be built on demand to do the things wrappers are used for + now (cgi, post-commit, etc). +* Potentially much faster. One problem with the now very modular ikiwiki is + that it has to load up dozens of perl modules each time it runs, which + means both opening lots of files and evaluating them. A haskell version + could run from one pre-compiled file. Other speed efficienies are also + likely with haskell. For example, pandoc is apparently an order of + magnitude faster than perl markdown implementations. +* Many plugins could be written in pure functional code, with no side + effects. Not all of them, of course. +* It should be much easier to get ikiwiki to support parallel compilation + on multi-core systems using haskell. +* A rewrite would be an opportunity to utterly break compatability and + redo things based on experience. Since the haskell libraries used for + markdown, templates, etc, are unlikely to be very compatable with the perl + versions, and since perl plugins obviously wouldn't work, and perl setup + files wouldn't be practical to keep, a lot of things would unavoidably + change, and at that point changinge everything else I can think of + probably wouldn't hurt (much). + + - Re templates, it would be nice to have a template library that + doesn't use html-ish templating tags, since those are hard for users to + edit in html editors currently. + - This would be a chance to make WikiLinks with link texts read + "the right way round" (ie, vaguely wiki creole compatably). + - The data structures would probably be quite different. + - I might want to drop a lot of the command-line flags, either + requiring a setup file be used for those things, or leaving the + general-purpose `--set var=value` flag. + - Sometimes the current behavior of `--setup` seems confusing; it might + only cause a setup file to be read, and not force rebuild mode. + - Hard to say how the very high level plugin interface design would change, + but at the least some of the names of hooks could stand a rename, and + their parameter passing cleaned up. + +We know that a big, break-the-world rewrite like this can be a very +bad thing for a project to attempt. It would be possible to support +external plugins written in haskell today, without any rewrite; and a few +of the benefits could be obtained by, eg, making the mdwn plugin be a +haskell program that uses pandoc. I doubt that wouod be a good first step +to converting ikiwiki to haskell, because such a program would have very +different data structures and intercommuniucation than a pure haskell +version. + +Some other things to be scared about: + +* By picking perl, I made a lot of people annoyed (and probably turned + several people away from using ikiwiki). But over time there turned out + to be a lot of folks who knew perl already (even if rustily), and made + some *very* useful contributions. I doubt there's as large a pool of haskell + programmers, and it's probably harder for a python user to learn haskell + than perl if they want to contribute to ikiwiki. +* It might be harder for users of hosting services to install a haskell based + ikiwiki than the perl version. Such systems probably don't have ghc and + a bunch of haskell libraries. OTOH, it might be possible to build a + static binary at home and upload it, thus avoiding a messy installation + procedure entirely. +* I can barely code in haskell yet. I'm probably about 100x faster at + programming in perl. I need to get some more practical experience before + I´m fast and seasoned enough in haskell to attempt such a project. + (And so far, progress at learning has been slow and I have not managed + to write anything serious in haskell.) --[[Joey]] -- cgit v1.2.3 From 9b234fa7a58d0662368714e777eb7b6e818eeaa6 Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 23:04:18 +0100 Subject: ncevy sbbyf? --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn (limited to 'doc/todo') diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn new file mode 100644 index 000000000..badd28a6d --- /dev/null +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -0,0 +1,3 @@ +Ok, I have to admit, I have no idea if this is an April fool's joke or not. +Congratulations for demonstrating that April fools jokes can still be subtle +(whether intentionally or not!) -- [[Jon]] -- cgit v1.2.3 From e81e06641641f60629f24da93f1e2d64b3288f2a Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Wed, 1 Apr 2009 23:13:28 +0100 Subject: erlang/couchdb --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn index badd28a6d..a12a5fe27 100644 --- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -1,3 +1,6 @@ Ok, I have to admit, I have no idea if this is an April fool's joke or not. Congratulations for demonstrating that April fools jokes can still be subtle (whether intentionally or not!) -- [[Jon]] + +> Having said all that, have you looked at erlang? Have you heard of couchdb? +> I'd strongly recommend looking at that. -- [[Jon]] -- cgit v1.2.3 From 0c67efb90e5965de5149902a402c74a58aaa7525 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 1 Apr 2009 19:16:53 -0400 Subject: response --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 3 +++ 1 file changed, 3 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn index a12a5fe27..5f33d0ae7 100644 --- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -4,3 +4,6 @@ Congratulations for demonstrating that April fools jokes can still be subtle > Having said all that, have you looked at erlang? Have you heard of couchdb? > I'd strongly recommend looking at that. -- [[Jon]] + +>> I've glanced at couchdb, but don't see how it would tie in with ikiwiki. +>> --[[Joey]] -- cgit v1.2.3 From 524827c3cf85e5aceb87a7a84fac196d07550e9f Mon Sep 17 00:00:00 2001 From: Jon Dowland Date: Thu, 2 Apr 2009 09:31:50 +0100 Subject: response --- doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'doc/todo') diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn index 5f33d0ae7..1edebe4e8 100644 --- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn +++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn @@ -7,3 +7,8 @@ Congratulations for demonstrating that April fools jokes can still be subtle >> I've glanced at couchdb, but don't see how it would tie in with ikiwiki. >> --[[Joey]] + + +>>> It doesn't really. I recently (re-)read about couchdb and thought that +>>> what it was trying to do had some comparisons with the thinking going on +>>> in [[todo/structured_page_data]]. -- [[Jon]] -- cgit v1.2.3