]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
Merge branch 'restrict-comment-formats' of git://rtime.felk.cvut.cz/sojka/ikiwiki
authorJoey Hess <joey@kitenet.net>
Sun, 23 Jun 2013 18:04:42 +0000 (14:04 -0400)
committerJoey Hess <joey@kitenet.net>
Sun, 23 Jun 2013 18:04:42 +0000 (14:04 -0400)
294 files changed:
.gitignore
IkiWiki.pm
IkiWiki/Plugin/aggregate.pm
IkiWiki/Plugin/blogspam.pm
IkiWiki/Plugin/bzr.pm
IkiWiki/Plugin/comments.pm
IkiWiki/Plugin/cvs.pm
IkiWiki/Plugin/edittemplate.pm
IkiWiki/Plugin/filecheck.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/highlight.pm
IkiWiki/Plugin/htmlscrubber.pm
IkiWiki/Plugin/map.pm
IkiWiki/Plugin/meta.pm
IkiWiki/Plugin/notifyemail.pm
IkiWiki/Plugin/opendiscussion.pm
IkiWiki/Plugin/openid.pm
IkiWiki/Plugin/osm.pm
IkiWiki/Plugin/poll.pm
IkiWiki/Plugin/recentchanges.pm
IkiWiki/Plugin/recentchangesdiff.pm
IkiWiki/Plugin/theme.pm
IkiWiki/Plugin/trail.pm
IkiWiki/Plugin/underlay.pm
IkiWiki/Setup.pm
IkiWiki/Wrapper.pm
Makefile.PL
debian/changelog
debian/copyright
doc/branches.mdwn
doc/bugs/CGI_wrapper_doesn__39__t_store_PERL5LIB_environment_variable.mdwn
doc/bugs/CamelCase_and_Recent_Changes_create_spurious_Links.mdwn [new file with mode: 0644]
doc/bugs/Existing_Discussion_pages_appear_as_non-existing.mdwn
doc/bugs/Linkmap_doesn__39__t_support_multiple_linkmaps_on_a_single_page.mdwn [new file with mode: 0644]
doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn [new file with mode: 0644]
doc/bugs/Remove_redirect_pages_from_inline_pages.mdwn [new file with mode: 0644]
doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn [new file with mode: 0644]
doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn [new file with mode: 0644]
doc/bugs/blogspam_marks_me_as_spam_on_ipv6.mdwn [new file with mode: 0644]
doc/bugs/capitalized_attachment_names.mdwn [new file with mode: 0644]
doc/bugs/encoding_issue_in_blogspam_plugin.mdwn [new file with mode: 0644]
doc/bugs/feedpages_does_not_prevent_tags_from_being_aggregated.mdwn [new file with mode: 0644]
doc/bugs/feeds_get_removed_in_strange_conditions.mdwn [new file with mode: 0644]
doc/bugs/ipv6_address_in_comments.mdwn
doc/bugs/map_generates_malformed_HTML.mdwn [new file with mode: 0644]
doc/bugs/opendiscussion_should_respect_the_discussion_option.mdwn
doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn [new file with mode: 0644]
doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn [new file with mode: 0644]
doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn [new file with mode: 0644]
doc/bugs/osm_linkto__40____41___usage_breaks_map_rendering.mdwn
doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn
doc/bugs/possibly_po_related_error.mdwn [new file with mode: 0644]
doc/bugs/recentchanges_sets_has__95__diffurl__61__1_when_diffurl_is_empty.mdwn [new file with mode: 0644]
doc/bugs/removal_of_transient_pages.mdwn
doc/bugs/search_plugin_finds_no_results_with_xapian_1.2.7.mdwn
doc/bugs/sidebar_not_updated_in_unedited_subpages.mdwn [new file with mode: 0644]
doc/bugs/template_creation_error.mdwn [new file with mode: 0644]
doc/bugs/toc_displays_headings_from_sidebar.mdwn [new file with mode: 0644]
doc/bugs/trail_excess_dependencies.mdwn [new file with mode: 0644]
doc/bugs/undefined_value_as_a_HASH_reference.mdwn [new file with mode: 0644]
doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
doc/bugs/yaml:xs_codependency_not_listed.mdwn [new file with mode: 0644]
doc/contact.mdwn
doc/examples/softwaresite/bugs/hghg.mdwn [new file with mode: 0644]
doc/forum/Background_picture_and_css.mdwn [new file with mode: 0644]
doc/forum/CGI_script_and_HTTPS.mdwn [new file with mode: 0644]
doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment [new file with mode: 0644]
doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn
doc/forum/Can_ikiwiki_be_configured_as_multi_user_blog__63__.mdwn [new file with mode: 0644]
doc/forum/Email_notifications_for_comment_moderation.mdwn [new file with mode: 0644]
doc/forum/Email_notifications_for_comment_moderation/comment_1_668bf6a21310dcc8b882bc60a130ba06._comment [new file with mode: 0644]
doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name.mdwn [new file with mode: 0644]
doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_1_66c321b9eb618d20872cee7d6ca9e44c._comment [new file with mode: 0644]
doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_2_80296d67c7f1dd75b56b85c14f5efa3b._comment [new file with mode: 0644]
doc/forum/Forward_slashes_being_escaped_as_252F/comment_1_7702cf6d354ab600d6643b075b9f09da._comment [new file with mode: 0644]
doc/forum/How_can_I_prevent_spam__63__.mdwn [new file with mode: 0644]
doc/forum/How_can_I_prevent_spam__63__/comment_1_fd26fb7f1569e8c44ba8262794f938db._comment [new file with mode: 0644]
doc/forum/How_can_I_prevent_spam__63__/comment_2_d098124f005976ee815d25c883bc9106._comment [new file with mode: 0644]
doc/forum/How_can_I_prevent_spam__63__/comment_3_deb434d01aaefa18d2791e48d6c824ae._comment [new file with mode: 0644]
doc/forum/How_do_I_enable_OpenID__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment [new file with mode: 0644]
doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment [new file with mode: 0644]
doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment [new file with mode: 0644]
doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_set_up_a_page_as_internal__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_set_up_git_repository_hook___63__.mdwn [new file with mode: 0644]
doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn [new file with mode: 0644]
doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn [new file with mode: 0644]
doc/forum/Multiple_urls.mdwn [new file with mode: 0644]
doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_6_1dccdfebad31446200213a2cae25f0e2._comment [new file with mode: 0644]
doc/forum/Problem_with_local_git_commit.mdwn [new file with mode: 0644]
doc/forum/Refresh_or_recreate_style.css__63__.mdwn [new file with mode: 0644]
doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment [new file with mode: 0644]
doc/forum/Setting_http__95__proxy.mdwn [new file with mode: 0644]
doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment [new file with mode: 0644]
doc/forum/Slow_ikiwiki_after_first_run.mdwn [new file with mode: 0644]
doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment [new file with mode: 0644]
doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment [new file with mode: 0644]
doc/forum/Translating_ikiwiki_interface.mdwn [new file with mode: 0644]
doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn [new file with mode: 0644]
doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment [new file with mode: 0644]
doc/forum/Xapian_search:_empty_postlist_table/comment_4_40479ac2cfbca609f5f423e539a20ee0._comment [new file with mode: 0644]
doc/forum/Xapian_search:_empty_postlist_table/comment_5_397443138da276e11c2e9b9fa7b51406._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_4_d5d0174e09a94359c23fd9c006a22bbc._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment [new file with mode: 0644]
doc/forum/google_openid_broken__63__.mdwn
doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn [new file with mode: 0644]
doc/forum/ikiwiki_and_big_files/comment_1_df8a9f4249af435cc335f77768a3278d._comment [new file with mode: 0644]
doc/forum/ikiwiki_and_big_files/comment_2_2d996f1124aedc10f345139c3d8b11df._comment [new file with mode: 0644]
doc/forum/ikiwiki_and_big_files/comment_3_dfbd38e2b457ea3c4f70266dbf8fbeab._comment [new file with mode: 0644]
doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment [new file with mode: 0644]
doc/forum/po_plugin_doesn__39__t_create_po_files___40__only_pot__41__..mdwn [new file with mode: 0644]
doc/forum/possible_utf-8_problem__63__.mdwn [new file with mode: 0644]
doc/forum/web_service_API__44___fastcgi_support.mdwn
doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__.mdwn [new file with mode: 0644]
doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment [new file with mode: 0644]
doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment [new file with mode: 0644]
doc/git.mdwn
doc/ikiwiki-update-wikilist.mdwn
doc/ikiwiki/directive/edittemplate.mdwn
doc/ikiwiki/directive/meta/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/poll.mdwn
doc/ikiwiki/directive/table.mdwn
doc/ikiwiki/directive/tag/discussion.mdwn [new file with mode: 0644]
doc/ikiwikiusers.mdwn
doc/logo.mdwn
doc/news/cia.mdwn [deleted file]
doc/news/openid.mdwn
doc/news/version_3.20120115.mdwn [deleted file]
doc/news/version_3.20120202.mdwn [deleted file]
doc/news/version_3.20120203.mdwn [deleted file]
doc/news/version_3.20120419.mdwn [deleted file]
doc/news/version_3.20120516.mdwn [deleted file]
doc/news/version_3.20121017.mdwn [new file with mode: 0644]
doc/news/version_3.20121212.mdwn [new file with mode: 0644]
doc/news/version_3.20130212.mdwn [new file with mode: 0644]
doc/news/version_3.20130504.mdwn [new file with mode: 0644]
doc/news/version_3.20130518.mdwn [new file with mode: 0644]
doc/plugins/camelcase.mdwn
doc/plugins/comments/discussion.mdwn
doc/plugins/contrib/asymptote.mdwn [new file with mode: 0644]
doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn [new file with mode: 0644]
doc/plugins/contrib/dynamiccookies.mdwn [new file with mode: 0644]
doc/plugins/contrib/getfield/discussion.mdwn
doc/plugins/contrib/livefyre.mdwn [new file with mode: 0644]
doc/plugins/contrib/mathjax.mdwn [new file with mode: 0644]
doc/plugins/contrib/mediawiki/discussion.mdwn
doc/plugins/contrib/proxies.mdwn [new file with mode: 0644]
doc/plugins/contrib/report/discussion.mdwn
doc/plugins/contrib/wc.mdwn [new file with mode: 0644]
doc/plugins/google.mdwn
doc/plugins/headinganchors/discussion.mdwn
doc/plugins/httpauth.mdwn
doc/plugins/notifyemail/discussion.mdwn [new file with mode: 0644]
doc/plugins/po.mdwn
doc/plugins/recentchangesdiff.mdwn
doc/plugins/search.mdwn
doc/plugins/sidebar/discussion.mdwn
doc/plugins/theme.mdwn
doc/plugins/type/auth.mdwn
doc/plugins/type/bundle.mdwn
doc/plugins/type/chrome.mdwn
doc/plugins/type/comments.mdwn
doc/plugins/type/core.mdwn
doc/plugins/type/date.mdwn
doc/plugins/type/format.mdwn
doc/plugins/type/fun.mdwn
doc/plugins/type/html.mdwn
doc/plugins/type/link.mdwn
doc/plugins/type/meta.mdwn
doc/plugins/type/slow.mdwn
doc/plugins/type/special-purpose.mdwn
doc/plugins/type/tags.mdwn
doc/plugins/type/web.mdwn
doc/plugins/type/widget.mdwn
doc/plugins/websetup.mdwn
doc/plugins/write.mdwn
doc/rcs/cvs/discussion.mdwn
doc/rcs/git.mdwn
doc/sandbox.mdwn
doc/sandbox/Fantasia.mdwn [deleted file]
doc/sandbox/Hey__33__.mdwn [deleted file]
doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn [deleted file]
doc/sandbox/Mooooo.mdwn [deleted file]
doc/sandbox/Nur_so..mdwn [deleted file]
doc/sandbox/Nyus_of_se_däi.mdwn [deleted file]
doc/sandbox/Test_it.mdwn [deleted file]
doc/sandbox/Testing_blog_entry.mdwn [deleted file]
doc/sandbox/adding_a_new_post.mdwn [deleted file]
doc/sandbox/ainvyu.mdwn [deleted file]
doc/sandbox/bullet_list_and_code_test.mdwn [deleted file]
doc/sandbox/danc.mdwn [deleted file]
doc/sandbox/dateenumeration.mdwn [deleted file]
doc/sandbox/hey.mdwn [deleted file]
doc/sandbox/plop.mdwn [deleted file]
doc/sandbox/revert_me.mdwn [deleted file]
doc/sandbox/sandbocen.mdwn [deleted file]
doc/sandbox/sidebar.mdwn [deleted file]
doc/security.mdwn
doc/setup.mdwn
doc/setup/byhand.mdwn
doc/shortcuts.mdwn
doc/soc/application.mdwn
doc/style.css
doc/theme_market.mdwn
doc/themes.mdwn
doc/themes/discussion.mdwn
doc/themes/monochrome_small.png [new file with mode: 0644]
doc/tipjar.mdwn
doc/tips/DreamHost.mdwn
doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
doc/tips/Make_calendar_start_week_on_Monday/discussion.mdwn [new file with mode: 0644]
doc/tips/convert_blogger_blogs_to_ikiwiki.mdwn
doc/tips/convert_moinmoin_to_ikiwiki.mdwn
doc/tips/dot_cgi.mdwn
doc/tips/dot_cgi/discussion.mdwn
doc/tips/importing_posts_from_wordpress/ikiwiki-wordpress-import.mdwn
doc/tips/mailman_subscription_form.mdwn [new file with mode: 0644]
doc/todo/BTS_integration.mdwn
doc/todo/Calendar:_listing_multiple_entries_per_day_.mdwn [new file with mode: 0644]
doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn [new file with mode: 0644]
doc/todo/FormattingHelp_should_open_new_window.mdwn [new file with mode: 0644]
doc/todo/Restrict_formats_allowed_for_comments.mdwn [new file with mode: 0644]
doc/todo/Restrict_page_viewing.mdwn
doc/todo/Separate_OpenIDs_and_usernames.mdwn
doc/todo/Set_templates_for_whole_sections_of_the_site.mdwn
doc/todo/Track_Markdown_Standardisation_Efforts.mdwn [new file with mode: 0644]
doc/todo/Zoned_ikiwiki.mdwn
doc/todo/anti-spam_protection.mdwn
doc/todo/assumes_system_perl.mdwn
doc/todo/avatar/discussion.mdwn [new file with mode: 0644]
doc/todo/calendar_with___34__create__34___links.mdwn [new file with mode: 0644]
doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl [new file with mode: 0644]
doc/todo/custom_location_for_openlayers.mdwn [new file with mode: 0644]
doc/todo/ease_archivepage_styling.mdwn [new file with mode: 0644]
doc/todo/edittemplate_should_support_uuid__44___date_variables.mdwn [new file with mode: 0644]
doc/todo/etherpad_support.mdwn [new file with mode: 0644]
doc/todo/fancypodcast.mdwn [new file with mode: 0644]
doc/todo/fastcgi_or_modperl_installation_instructions.mdwn
doc/todo/hook_to_detect_markdown_links_to_wiki_pages.mdwn [new file with mode: 0644]
doc/todo/inline_directive_should_support_pagination.mdwn [new file with mode: 0644]
doc/todo/lucene_search_engine.mdwn [new file with mode: 0644]
doc/todo/monochrome_theme.mdwn [new file with mode: 0644]
doc/todo/osm__95__optimisations__95__and__95__fixes.mdwn [new file with mode: 0644]
doc/todo/osm_arbitrary_layers.mdwn [new file with mode: 0644]
doc/todo/please_add_some_table_styles.mdwn [new file with mode: 0644]
doc/todo/provide_inline_diffs_in_recentchanges.mdwn
doc/todo/publishing_in_the_future.mdwn [new file with mode: 0644]
doc/todo/recentchanges_feed_with_comment.mdwn [new file with mode: 0644]
doc/todo/sortable_tables.mdwn [new file with mode: 0644]
doc/todo/toc-with-human-readable-anchors.mdwn [new file with mode: 0644]
doc/todo/translation_links.mdwn [new file with mode: 0644]
doc/translation/discussion.mdwn
doc/users/JoshBBall.mdwn [new file with mode: 0644]
doc/users/LucaCapello.mdwn [new file with mode: 0644]
doc/users/Ramsey.mdwn [new file with mode: 0644]
doc/users/RickOwens.mdwn [new file with mode: 0644]
doc/users/adamshand.mdwn
doc/users/anarcat.mdwn
doc/users/hb/discussion.mdwn
doc/users/mathdesc.mdwn
doc/users/schmonz.mdwn
doc/users/svend.mdwn
doc/users/undx.mdwn [new file with mode: 0644]
doc/wishlist/watched_pages.mdwn [new file with mode: 0644]
ikiwiki-update-wikilist
ikiwiki.spec
plugins/proxy.py [changed mode: 0644->0755]
plugins/rst
po/bg.po
po/cs.po
po/da.po
po/de.po
po/es.po
po/fr.po
po/gu.po
po/ikiwiki.pot
po/it.po
po/pl.po
po/sv.po
po/tr.po
po/vi.po
t/cvs.t
t/map.t [new file with mode: 0755]
t/permalink.t
t/trail.t
templates/archivepage.tmpl
templates/change.tmpl
themes/monochrome/gradient.png [new file with mode: 0644]
themes/monochrome/style.css [new file with mode: 0644]
underlays/osm/ikiwiki/osm.js

index fe1c3d441cc362d12390c70d8e3c9266f1ac5021..f8991a63dcc3100130f9b575cba36a568184df6d 100644 (file)
@@ -9,6 +9,7 @@ ikiwiki.out
 ikiwiki-transition.out
 ikiwiki-calendar.out
 pm_to_blib
+/MYMETA.yml
 *.man
 /po/cover_db
 po/po2wiki_stamp
index f68797ae3b962bc7556308fffa0da5d644c46ca3..0570c8bc521c3989d1c733cfb1b16fedd6770ca7 100644 (file)
@@ -118,6 +118,22 @@ sub getsetup () {
                safe => 0,
                rebuild => 0,
        },
+       cgi_overload_delay => {
+               type => "string",
+               default => '',
+               example => "10",
+               description => "number of seconds to delay CGI requests when overloaded",
+               safe => 1,
+               rebuild => 0,
+       },
+       cgi_overload_message => {
+               type => "string",
+               default => '',
+               example => "Please wait",
+               description => "message to display when overloaded (may contain html)",
+               safe => 1,
+               rebuild => 0,
+       },
        rcs => {
                type => "string",
                default => '',
@@ -1417,7 +1433,7 @@ sub preprocess ($$$;$$) {
                        # consider it significant.
                        my @params;
                        while ($params =~ m{
-                               (?:([-\w]+)=)?          # 1: named parameter key?
+                               (?:([-.\w]+)=)?         # 1: named parameter key?
                                (?:
                                        """(.*?)"""     # 2: triple-quoted value
                                |
@@ -1514,7 +1530,7 @@ sub preprocess ($$$;$$) {
                        (               # 4: the parameters..
                                \s+     # Must have space if parameters present
                                (?:
-                                       (?:[-\w]+=)?            # named parameter key?
+                                       (?:[-.\w]+=)?           # named parameter key?
                                        (?:
                                                """.*?"""       # triple-quoted value
                                                |
@@ -1542,7 +1558,7 @@ sub preprocess ($$$;$$) {
                        \s+
                        (               # 4: the parameters..
                                (?:
-                                       (?:[-\w]+=)?            # named parameter key?
+                                       (?:[-.\w]+=)?           # named parameter key?
                                        (?:
                                                """.*?"""       # triple-quoted value
                                                |
index 83bd670cb449f017ce9c35b81262af29ccdb6883..89da5c453aa7e36143ad46271d053f446215b15d 100644 (file)
@@ -113,8 +113,7 @@ sub launchaggregation () {
        my @feeds=needsaggregate();
        return unless @feeds;
        if (! lockaggregate()) {
-               debug("an aggregation process is already running");
-               return;
+               error("an aggregation process is already running");
        }
        # force a later rebuild of source pages
        $IkiWiki::forcerebuild{$_->{sourcepage}}=1
index d32c2f169d643a7db9e9fffc292201a4bf93276e..e48ed729f5439f148e7f70e0d228990cbbe2a0f2 100644 (file)
@@ -53,6 +53,7 @@ sub checkconfig () {
        eval q{
                use RPC::XML;
                use RPC::XML::Client;
+               $RPC::XML::ENCODING = 'utf-8';
        };
        error $@ if $@;
 }
index 72552abccaa96212c5f71d48cefcbb1b21e4498b..99a07d2c0eb2afa5512f6fc96043df6ff24171ff 100644 (file)
@@ -195,7 +195,7 @@ sub rcs_add ($) {
 sub rcs_remove ($) {
        my ($file) = @_;
 
-       my @cmdline = ("bzr", "rm", "--force", "--quiet", "$config{srcdir}/$file");
+       my @cmdline = ("bzr", "rm", "--quiet", "$config{srcdir}/$file");
        if (system(@cmdline) != 0) {
                warn "'@cmdline' failed: $!";
        }
index 151e839d0bb826a7bda242a9d94b882e79e7cb17..1ef79a27a958a77dde14f75dd34b1b5c75dd5763 100644 (file)
@@ -460,10 +460,7 @@ sub editcomment ($$) {
                $content .= " nickname=\"$nickname\"\n";
        }
        elsif (defined $session->remote_addr()) {
-               my $ip = $session->remote_addr();
-               if ($ip =~ m/^([.0-9]+)$/) {
-                       $content .= " ip=\"$1\"\n";
-               }
+               $content .= " ip=\"".$session->remote_addr()."\"\n";
        }
 
        if ($config{comments_allowauthor}) {
index 788f5116786f291d1543944c55522b6a758439e7..841aec914f7208df52036379319f4bdfda7ddc01 100644 (file)
@@ -216,14 +216,12 @@ sub rcs_add ($) {
 
        while ($file = pop @files_to_add) {
                if (@files_to_add == 0) {
-                       # file
                        cvs_runcvs('add', cvs_keyword_subst_args($file)) ||
-                               warn("cvs add $file failed\n");
+                               warn("cvs add file $file failed\n");
                }
                else {
-                       # directory
                        cvs_runcvs('add', $file) ||
-                               warn("cvs add $file failed\n");
+                               warn("cvs add dir $file failed\n");
                }
        }
 }
@@ -316,7 +314,9 @@ sub rcs_recentchanges ($) {
                        $oldrev =~ s/INITIAL/0/;
                        $newrev =~ s/\(DEAD\)//;
                        my $diffurl = defined $config{diffurl} ? $config{diffurl} : "";
-                       my $epage = uri_escape_utf8($page);
+                       my $epage = join('/',
+                               map { uri_escape_utf8($_) } split('/', $page)
+                       );
                        $diffurl=~s/\[\[file\]\]/$epage/g;
                        $diffurl=~s/\[\[r1\]\]/$oldrev/g;
                        $diffurl=~s/\[\[r2\]\]/$newrev/g;
@@ -396,11 +396,15 @@ sub rcs_diff ($;$) {
        my @cvsps = `env TZ=UTC cvsps -q --cvs-direct -z 30 -g -s $rev`;
        my $blank_lines_seen = 0;
 
+       # skip log, get to the diff
        while (my $line = shift @cvsps) {
                $blank_lines_seen++ if ($line =~ /^$/);
                last if $blank_lines_seen == 2;
        }
 
+       @cvsps = @cvsps[0..$maxlines-1]
+               if defined $maxlines && @cvsps > $maxlines;
+
        if (wantarray) {
                return @cvsps;
        }
@@ -491,24 +495,53 @@ sub cvs_keyword_subst_args ($) {
        my $filemime = File::MimeInfo::default($file);
        # if (-T $file) {
 
-       if (defined($filemime) && $filemime eq 'text/plain') {
-               return ($file);
-       }
-       else {
-               return ('-kb', $file);
-       }
+       defined($filemime) && $filemime eq 'text/plain'
+               ? return ('-kkv', $file)
+               : return ('-kb', $file);
 }
 
 sub cvs_runcvs(@) {
        my @cmd = @_;
        unshift @cmd, 'cvs', '-Q';
 
-       local $CWD = $config{srcdir};
+       # CVS can't operate outside a srcdir, so we're always setting $CWD.
+       # "local $CWD" restores the previous value when we go out of scope.
+       # Usually that's correct. But if we're removing the last file from
+       # a directory, the post-commit hook will exec in a working directory
+       # that's about to not exist (CVS will prune it).
+       #
+       # chdir() manually here, so we can selectively not chdir() back.
+
+       my $oldcwd = $CWD;
+       chdir($config{srcdir});
+
+       eval q{
+               use IPC::Open3;
+               use Symbol qw(gensym);
+               use IO::File;
+       };
+       error($@) if $@;
+
+       my $cvsout = '';
+       my $cvserr = '';
+       local *CATCHERR = IO::File->new_tmpfile;
+       my $pid = open3(gensym(), \*CATCHOUT, ">&CATCHERR", @cmd);
+       while (my $l = <CATCHOUT>) {
+               $cvsout .= $l
+                       unless 1;
+       }
+       waitpid($pid, 0);
+       my $ret = $? >> 8;
+       seek CATCHERR, 0, 0;
+       while (my $l = <CATCHERR>) {
+               $cvserr .= $l
+                       unless $l =~ /^cvs commit: changing keyword expansion /;
+       }
+
+       print STDOUT $cvsout;
+       print STDERR $cvserr;
 
-       open(my $savedout, ">&STDOUT");
-       open(STDOUT, ">", "/dev/null");
-       my $ret = system(@cmd);
-       open(STDOUT, ">&", $savedout);
+       chdir($oldcwd) if -d $oldcwd;
 
        return ($ret == 0) ? 1 : 0;
 }
index 061242fd82c1f1a76251dac12f8017821688a2a1..c7f1e4fa7f7117660b5d89207a1795caec9fc6af 100644 (file)
@@ -132,7 +132,7 @@ sub filltemplate ($$) {
        if ($@) {
                # Indicate that the earlier preprocessor directive set 
                # up a template that doesn't work.
-               return "[[!pagetemplate ".gettext("failed to process template:")." $@]]";
+               return "[[!edittemplate ".gettext("failed to process template:")." $@]]";
        }
 
        $template->param(name => $page);
index 9992f2c2699371eb39ddb86776bba6c18c7a3562..cdea5c706f4085686bf20b5e7a09283792137c31 100644 (file)
@@ -139,7 +139,7 @@ sub match_mimetype ($$;@) {
        my $mimeinfo_ok=! $@;
        my $mimetype;
        if ($mimeinfo_ok) {
-               my $mimetype=File::MimeInfo::Magic::magic($file);
+               $mimetype=File::MimeInfo::Magic::magic($file);
        }
 
        # Fall back to using file, which has a more complete
index 0c0e27521aa55d0381041e75721a618e1f55cf43..3879abeae5b20e05d4f9c2990c270c6943982b65 100644 (file)
@@ -341,8 +341,8 @@ sub parse_diff_tree ($) {
        my $dt_ref = shift;
 
        # End of stream?
-       return if !defined @{ $dt_ref } ||
-                 !defined @{ $dt_ref }[0] || !length @{ $dt_ref }[0];
+       return if ! @{ $dt_ref } ||
+                 !defined $dt_ref->[0] || !length $dt_ref->[0];
 
        my %ci;
        # Header line.
index 4e86207f101224cfb216dfbff8609ac5973bdbd5..fbe7ddff44f0c9111b63cca96f6a58fb80ac41f8 100644 (file)
@@ -89,7 +89,7 @@ sub checkconfig () {
                                id => $file,
                                call => sub {
                                        my %params=@_;
-                                       highlight($langfile, $params{content});
+                                       highlight($langfile, $file, $params{content});
                                },
                                longname => sprintf(gettext("Source code: %s"), $file),
                                @opts,
@@ -106,7 +106,7 @@ sub htmlizeformat {
                return;
        }
 
-       return Encode::decode_utf8(highlight($langfile, shift));
+       return Encode::decode_utf8(highlight($langfile, $format, shift));
 }
 
 my %ext2lang;
@@ -172,6 +172,7 @@ sub ext2langfile ($) {
 # Interface to the highlight C library.
 sub highlight ($$) {
        my $langfile=shift;
+       my $extorfile=shift;
        my $input=shift;
 
        eval q{use highlight};
@@ -200,7 +201,7 @@ sub highlight ($$) {
                $gen=$highlighters{$langfile};
        }
 
-       return $gen->generateString($input);
+       return "<div class=\"highlight-$extorfile\">".$gen->generateString($input)."</div>";
 }
 
 1
index a58a27d5221acc50e932057b9fabaffcf38c7b97..36c012c73cdc17743231e79a24f3806151d58d20 100644 (file)
@@ -29,6 +29,7 @@ sub import {
                "irc", "ircs", "lastfm", "ldaps", "magnet", "mms",
                "msnim", "notes", "rsync", "secondlife", "skype", "ssh",
                "sftp", "smb", "sms", "snews", "webcal", "ymsgr",
+               "bitcoin", "git", "svn", "bzr", "darcs", "hg"
        );
        # data is a special case. Allow a few data:image/ types,
        # but disallow data:text/javascript and everything else.
index 38f090ff782f8799edbe074b9778477809f9d045..4a9bf58dbc1a446ae72f37f13089af05fdc7b221 100644 (file)
@@ -72,6 +72,9 @@ sub preprocess (@) {
                $common_prefix=IkiWiki::dirname($common_prefix);
        }
 
+       # Set this to 1 or more spaces to pretty-print maps for debugging
+       my $spaces = "";
+
        # Create the map.
        my $parent="";
        my $indent=0;
@@ -94,33 +97,37 @@ sub preprocess (@) {
                        if defined $common_prefix && length $common_prefix;
                my $depth = ($item =~ tr/\//\//) + 1;
                my $baseitem=IkiWiki::dirname($item);
-               my $parentbase=IkiWiki::dirname($parent);
-               while (length $parentbase && length $baseitem && $baseitem !~ /^\Q$parentbase\E(\/|$)/) {
-                       $parentbase=IkiWiki::dirname($parentbase);
+               while (length $parent && length $baseitem && $baseitem !~ /^\Q$parent\E(\/|$)/) {
+                       $parent=IkiWiki::dirname($parent);
                        last if length $addparent && $baseitem =~ /^\Q$addparent\E(\/|$)/;
                        $addparent="";
-                       $indent--;
-                       $map .= "</li>\n";
-                       if ($indent > 0) {
-                               $map .= "</ul>\n";
+                       $map .= ($spaces x $indent) . "</li>\n";
+                       if ($indent > 1) {
+                               $map .= ($spaces x $indent) . "</ul><map:collapse>\n";
                        }
+                       $indent--;
                }
                while ($depth < $indent) {
-                       $indent--;
-                       $map .= "</li>\n";
-                       if ($indent > 0) {
-                               $map .= "</ul>\n";
+                       $map .= ($spaces x $indent) . "</li>\n";
+                       if ($indent > 1) {
+                               $map .= ($spaces x $indent) . "</ul>\n";
                        }
+                       $indent--;
                }
                my @bits=split("/", $item);
                my $p="";
-               $indent++  unless length $parent;
                $p.="/".shift(@bits) for 1..$indent;
                while ($depth > $indent) {
-                       if (@bits && !(length $parent && "/$parent" eq $p)) {
+                       $indent++;
+                       if ($indent > 1) {
+                               $map .= ($spaces x $indent) . "<ul><map:collapse>\n";
+                       }
+                       if ($depth > $indent) {
+                               $p.="/".shift(@bits);
                                $addparent=$p;
                                $addparent=~s/^\///;
-                               $map .= "<li>"
+                               $map .= ($spaces x $indent) . "<li>\n";
+                               $map .= ($spaces x $indent)
                                        .htmllink($params{page}, $params{destpage},
                                                 "/".$common_prefix.$p, class => "mapparent",
                                                 noimageinline => 1)
@@ -130,14 +137,10 @@ sub preprocess (@) {
                        else {
                                $openli=0;
                        }
-                       $indent++;
-                       $p.="/".shift(@bits) if @bits;
-                       if ($indent > 1) {
-                               $map .= "<ul>\n";
-                       }
                }
-               $map .= "</li>\n" if $openli;
-               $map .= "<li>"
+               $map .= ($spaces x $indent) . "</li>\n" if $openli;
+               $map .= ($spaces x $indent) . "<li>\n";
+               $map .= ($spaces x $indent)
                        .htmllink($params{page}, $params{destpage}, 
                                "/".$common_prefix."/".$item,
                                @linktext,
@@ -147,9 +150,12 @@ sub preprocess (@) {
                $parent=$item;
        }
        while ($indent > 0) {
+               $map .= ($spaces x $indent) . "</li>\n";
                $indent--;
-               $map .= "</li>\n</ul>\n";
+               $map .= ($spaces x $indent) . "</ul>\n";
        }
+       $map =~ s{\n *</ul><map:collapse>\n *<ul><map:collapse>\n}{\n}gs;
+       $map =~ s{<map:collapse>}{}g;
        $map .= "</div>\n";
        return $map;
 }
index 421f1dc86a83d33ac823f9989ad9e42c6dea12c9..7ea70b5d19e17595e2a6b611dee1178347da7a81 100644 (file)
@@ -107,12 +107,12 @@ sub preprocess (@) {
                # fallthrough
        }
        elsif ($key eq 'license') {
-               push @{$metaheaders{$page}}, '<link rel="license" href="#page_license" />';
+               push @{$metaheaders{$page}}, '<link rel="license" href="#pagelicense" />';
                $pagestate{$page}{meta}{license}=$value;
                return "";
        }
        elsif ($key eq 'copyright') {
-               push @{$metaheaders{$page}}, '<link rel="copyright" href="#page_copyright" />';
+               push @{$metaheaders{$page}}, '<link rel="copyright" href="#pagecopyright" />';
                $pagestate{$page}{meta}{copyright}=$value;
                return "";
        }
index 2c1775f2e81df281a7c7769220acc26ade476cdf..b50a22a00c2e0bc6179a21b22b987d8241282afb 100644 (file)
@@ -78,6 +78,7 @@ sub anonsubscribe ($$) {
 sub notify (@) {
        my @files=@_;
        return unless @files;
+       return if $config{rebuild};
 
        eval q{use Mail::Sendmail};
        error $@ if $@;
index 2805f60efdb6d415a19aeb17195df8ff2543487b..808d3cd2bd730c3847a876e016df9145c4bb32a9 100644 (file)
@@ -25,7 +25,7 @@ sub canedit ($$) {
        my $cgi=shift;
        my $session=shift;
 
-       return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/i;
+       return "" if $config{discussion} && $page=~/(\/|^)\Q$config{discussionpage}\E$/i;
        return "" if pagespec_match($page, "postcomment(*)");
        return undef;
 }
index b6642619ac29330944da4af8b3e3c90ffcf21e9a..40a9568499be29710966b8115f0286c99aa899f7 100644 (file)
@@ -100,9 +100,10 @@ sub formbuilder_setup (@) {
               IkiWiki::openiduser($session->param("name"))) {
                $form->field(name => "openid_identifier", disabled => 1,
                        label => htmllink("", "", "ikiwiki/OpenID", noimageinline => 1),
-                       value => $session->param("name"), 
-                       size => length($session->param("name")), force => 1,
-                       fieldset => "login");
+                       value => "", 
+                       size => 1, force => 1,
+                       fieldset => "login",
+                       comment => $session->param("name"));
                $form->field(name => "email", type => "hidden");
        }
 }
index c9c5646c475801c125ac984a60a59a8a9b1f1cf3..a7baa5f2b968ebb0464a787be7371a26a2f98423 100644 (file)
@@ -60,6 +60,46 @@ sub getsetup () {
                        safe => 0,
                        rebuild => 1,
                },
+               osm_openlayers_url => {
+                       type => "string",
+                       example => "http://www.openlayers.org/api/OpenLayers.js",
+                       description => "Url for the OpenLayers.js file",
+                       safe => 0,
+                       rebuild => 1,
+               },
+               osm_layers => {
+                       type => "string",
+                       example => { 'OSM', 'GoogleSatellite' },
+                       description => "Layers to use in the map. Can be either the 'OSM' string or a type option for Google maps (GoogleNormal, GoogleSatellite, GoogleHybrid or GooglePhysical). It can also be an arbitrary URL in a syntax acceptable for OpenLayers.Layer.OSM.url parameter.",
+                       safe => 0,
+                       rebuild => 1,
+               },
+               osm_google_apikey => {
+                       type => "string",
+                       example => "",
+                       description => "Google maps API key, Google layer not used if missing, see https://code.google.com/apis/console/ to get an API key",
+                       safe => 1,
+                       rebuild => 1,
+               },
+}
+
+sub register_rendered_files {
+       my $map = shift;
+       my $page = shift;
+       my $dest = shift;
+
+       if ($page eq $dest) {
+               my %formats = get_formats();
+               if ($formats{'GeoJSON'}) {
+                       will_render($page, "$map/pois.json");
+               }
+               if ($formats{'CSV'}) {
+                       will_render($page, "$map/pois.txt");
+               }
+               if ($formats{'KML'}) {
+                       will_render($page, "$map/pois.kml");
+               }
+       }
 }
 
 sub preprocess {
@@ -98,6 +138,8 @@ sub preprocess {
                );
        }
 
+       register_rendered_files($map, $page, $dest);
+
        $pagestate{$page}{'osm'}{$map}{'displays'}{$name} = {
                height => $height,
                width => $width,
@@ -108,6 +150,7 @@ sub preprocess {
                lat => $lat,
                lon => $lon,
                href => $href,
+               google_apikey => $config{'osm_google_apikey'},
        };
        return "<div id=\"mapdiv-$name\"></div>";
 }
@@ -150,18 +193,7 @@ sub process_waypoint {
        }
        $icon = urlto($icon, $dest, 1);
        $tag = '' unless $tag;
-       if ($page eq $dest) {
-               my %formats = get_formats();
-               if ($formats{'GeoJSON'}) {
-                       will_render($page, "$map/pois.json");
-               }
-               if ($formats{'CSV'}) {
-                       will_render($page, "$map/pois.txt");
-               }
-               if ($formats{'KML'}) {
-                       will_render($page, "$map/pois.kml");
-               }
-       }
+       register_rendered_files($map, $page, $dest);
        $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name} = {
                page => $page,
                desc => $desc,
@@ -327,22 +359,29 @@ sub writekml($;$) {
        foreach my $map (keys %waypoints) {
                my $output;
                my $writer = XML::Writer->new( OUTPUT => \$output,
-                       DATA_MODE => 1, ENCODING => 'UTF-8');
+                       DATA_MODE => 1, DATA_INDENT => ' ', ENCODING => 'UTF-8');
                $writer->xmlDecl();
                $writer->startTag("kml", "xmlns" => "http://www.opengis.net/kml/2.2");
+               $writer->startTag("Document");
 
                # first pass: get the icons
+               my %tags_map = (); # keep track of tags seen
                foreach my $name (keys %{$waypoints{$map}}) {
                        my %options = %{$waypoints{$map}{$name}};
-                       $writer->startTag("Style", id => $options{tag});
-                       $writer->startTag("IconStyle");
-                       $writer->startTag("Icon");
-                       $writer->startTag("href");
-                       $writer->characters($options{icon});
-                       $writer->endTag();
-                       $writer->endTag();
-                       $writer->endTag();
-                       $writer->endTag();
+                       if (!$tags_map{$options{tag}}) {
+                           debug("found new style " . $options{tag});
+                           $tags_map{$options{tag}} = ();
+                           $writer->startTag("Style", id => $options{tag});
+                           $writer->startTag("IconStyle");
+                           $writer->startTag("Icon");
+                           $writer->startTag("href");
+                           $writer->characters($options{icon});
+                           $writer->endTag();
+                           $writer->endTag();
+                           $writer->endTag();
+                           $writer->endTag();
+                       }
+                       $tags_map{$options{tag}}{$name} = \%options;
                }
        
                foreach my $name (keys %{$waypoints{$map}}) {
@@ -389,6 +428,7 @@ sub writekml($;$) {
                        $writer->endTag();
                }
                $writer->endTag();
+               $writer->endTag();
                $writer->end();
 
                writefile("pois.kml", $config{destdir} . "/$map", $output);
@@ -500,6 +540,7 @@ sub cgi($) {
                zoom => "urlParams['zoom']",
                fullscreen => 1,
                editable => 1,
+               google_apikey => $config{'osm_google_apikey'},
        );
        print "</script>";
        print "</body></html>";
@@ -509,9 +550,14 @@ sub cgi($) {
 
 sub embed_map_code(;$) {
        my $page=shift;
-       return '<script src="http://www.openlayers.org/api/OpenLayers.js" type="text/javascript" charset="utf-8"></script>'.
+       my $olurl = $config{osm_openlayers_url} || "http://www.openlayers.org/api/OpenLayers.js";
+       my $code = '<script src="'.$olurl.'" type="text/javascript" charset="utf-8"></script>'."\n".
                '<script src="'.urlto("ikiwiki/osm.js", $page).
                '" type="text/javascript" charset="utf-8"></script>'."\n";
+       if ($config{'osm_google_apikey'}) {
+           $code .= '<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key='.$config{'osm_google_apikey'}.'&sensor=false" type="text/javascript" charset="utf-8"></script>';
+       }
+       return $code;
 }
 
 sub map_setup_code($;@) {
@@ -519,6 +565,8 @@ sub map_setup_code($;@) {
        my $name=shift;
        my %options=@_;
 
+       my $mapurl = $config{osm_map_url};
+
        eval q{use JSON};
        error $@ if $@;
                                
@@ -535,6 +583,11 @@ sub map_setup_code($;@) {
                $options{'kmlurl'} = urlto($map."/pois.kml");
        }
 
+       if ($mapurl) {
+               $options{'mapurl'} = $mapurl;
+       }
+        $options{'layers'} = $config{osm_layers};
+
        return "mapsetup('mapdiv-$name', " . to_json(\%options) . ");";
 }
 
index 2773486a6c69560fdd0a2236607b800dc88b15e6..32756a5712301cb6977f498dd61d99ebea054d71 100644 (file)
@@ -23,11 +23,13 @@ sub getsetup () {
 
 my %pagenum;
 sub preprocess (@) {
-       my %params=(open => "yes", total => "yes", percent => "yes", @_);
+       my %params=(open => "yes", total => "yes", percent => "yes",
+               expandable => "no", @_);
 
        my $open=IkiWiki::yesno($params{open});
        my $showtotal=IkiWiki::yesno($params{total});
        my $showpercent=IkiWiki::yesno($params{percent});
+       my $expandable=IkiWiki::yesno($params{expandable});
        $pagenum{$params{page}}++;
 
        my %choices;
@@ -74,6 +76,19 @@ sub preprocess (@) {
                        $ret.="</form>\n";
                }
        }
+       
+       if ($expandable && $open && exists $config{cgiurl}) {
+               $ret.="<p>\n";
+               $ret.="<form method=\"POST\" action=\"".IkiWiki::cgiurl()."\">\n";
+               $ret.="<input type=\"hidden\" name=\"do\" value=\"poll\" />\n";
+               $ret.="<input type=\"hidden\" name=\"num\" value=\"$pagenum{$params{page}}\" />\n";
+               $ret.="<input type=\"hidden\" name=\"page\" value=\"$params{page}\" />\n";
+               $ret.=gettext("Write in").": <input name=\"choice\" size=50 />\n";
+               $ret.="<input type=\"submit\" value=\"".gettext("vote")."\" />\n";
+               $ret.="</form>\n";
+               $ret.="</p>\n";
+       }
+
        if ($showtotal) {
                $ret.="<span>".gettext("Total votes:")." $total</span>\n";
        }
@@ -85,7 +100,7 @@ sub sessioncgi ($$) {
        my $session=shift;
        if (defined $cgi->param('do') && $cgi->param('do') eq "poll") {
                my $choice=decode_utf8($cgi->param('choice'));
-               if (! defined $choice) {
+               if (! defined $choice || not length $choice) {
                        error("no choice specified");
                }
                my $num=$cgi->param('num');
@@ -118,7 +133,14 @@ sub sessioncgi ($$) {
                        my $params=shift;
                        return "\\[[$prefix $params]]" if $escape;
                        if (--$num == 0) {
-                               $params=~s/(^|\s+)(\d+)\s+"?\Q$choice\E"?(\s+|$)/$1.($2+1)." \"$choice\"".$3/se;
+                               if ($params=~s/(^|\s+)(\d+)\s+"?\Q$choice\E"?(\s+|$)/$1.($2+1)." \"$choice\"".$3/se) {
+                               }
+                               elsif ($params=~/expandable=(\w+)/
+                                   & &IkiWiki::yesno($1)) {
+                                       $choice=~s/["\]\n\r]//g;
+                                       $params.=" 1 \"$choice\""
+                                               if length $choice;
+                               }
                                if (defined $oldchoice) {
                                        $params=~s/(^|\s+)(\d+)\s+"?\Q$oldchoice\E"?(\s+|$)/$1.($2-1 >=0 ? $2-1 : 0)." \"$oldchoice\"".$3/se;
                                }
index 8ce9474be631dbd8ae428304e25d1d1d2adac3df..eec9803be1397dc0a473b5c4287a0b8cdfa25ac7 100644 (file)
@@ -165,6 +165,7 @@ sub store ($$$) {
        # Limit pages to first 10, and add links to the changed pages.
        my $is_excess = exists $change->{pages}[10];
        delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess;
+       my $has_diffurl=0;
        $change->{pages} = [
                map {
                        if (length $config{cgiurl}) {
@@ -180,6 +181,9 @@ sub store ($$$) {
                        else {
                                $_->{link} = pagetitle($_->{page});
                        }
+                       if (defined $_->{diffurl} && length($_->{diffurl})) {
+                               $has_diffurl=1;
+                       }
 
                        $_;
                } @{$change->{pages}}
@@ -227,6 +231,8 @@ sub store ($$$) {
                wikiname => $config{wikiname},
        );
        
+       $template->param(has_diffurl => 1) if $has_diffurl;
+
        $template->param(permalink => urlto($config{recentchangespage})."#change-".titlepage($change->{rev}))
                if exists $config{url};
        
index 41882279331f8b1a2171bb98197602197ba64190..eb358be67bef0e8a87146846857d5bc24cfdc396 100644 (file)
@@ -9,10 +9,12 @@ use HTML::Entities;
 my $maxlines=200;
 
 sub import {
+       add_underlay("javascript");
        hook(type => "getsetup", id => "recentchangesdiff",
                call => \&getsetup);
        hook(type => "pagetemplate", id => "recentchangesdiff",
                call => \&pagetemplate);
+       hook(type => "format", id => "recentchangesdiff.pm", call => \&format);
 }
 
 sub getsetup () {
@@ -55,4 +57,24 @@ sub pagetemplate (@) {
        }
 }
 
+sub format (@) {
+        my %params=@_;
+
+       if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
+               # no <body> tag, probably in preview mode
+               $params{content}=include_javascript(undef).$params{content};
+       }
+       return $params{content};
+}
+
+# taken verbatim from toggle.pm
+sub include_javascript ($) {
+       my $from=shift;
+       
+       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $from).
+               '" type="text/javascript" charset="utf-8"></script>'."\n".
+               '<script src="'.urlto("ikiwiki/toggle.js", $from).
+               '" type="text/javascript" charset="utf-8"></script>';
+}
+
 1
index ee94547e90c51dad608b020e1be6bc0a434d38d7..9b84ea7f023d10c6db947f136adb4ed8b8ec72e0 100644 (file)
@@ -9,6 +9,7 @@ sub import {
        hook(type => "getsetup", id => "theme", call => \&getsetup);
        hook(type => "checkconfig", id => "theme", call => \&checkconfig);
        hook(type => "needsbuild", id => "theme", call => \&needsbuild);
+       hook(type => "pagetemplate", id => "theme", call => \&pagetemplate);
 }
 
 sub getsetup () {
@@ -63,4 +64,12 @@ sub needsbuild ($) {
        return $needsbuild;
 }
 
+sub pagetemplate (@) {
+       my %params=@_;
+       my $template=$params{template};
+       if (exists $config{theme} && length $config{theme})  {
+               $template->param("theme_$config{theme}" => 1);
+       }
+}
+
 1
index 7d2338f9b9c7bd0dee446b1f0d7b60b80417fb90..d5fb2b5d624c1b21cf0fa9163b5b223a090e917e 100644 (file)
@@ -62,12 +62,20 @@ sub getsetup () {
                },
 }
 
+# Cache of pages' old titles, so we can tell whether they changed
+my %old_trail_titles;
+
 sub needsbuild (@) {
        my $needsbuild=shift;
+
        foreach my $page (keys %pagestate) {
                if (exists $pagestate{$page}{trail}) {
                        if (exists $pagesources{$page} &&
                            grep { $_ eq $pagesources{$page} } @$needsbuild) {
+                               # Remember its title, so we can know whether
+                               # it changed.
+                               $old_trail_titles{$page} = title_of($page);
+
                                # Remove state, it will be re-added
                                # if the preprocessor directive is still
                                # there during the rebuild. {item} is the
@@ -78,6 +86,7 @@ sub needsbuild (@) {
                        }
                }
        }
+
        return $needsbuild;
 }
 
@@ -230,6 +239,12 @@ sub trails_differ {
                if (! exists $new->{$trail}) {
                        return 1;
                }
+
+               if (exists $old_trail_titles{$trail} &&
+                       title_of($trail) ne $old_trail_titles{$trail}) {
+                       return 1;
+               }
+
                my ($old_p, $old_n) = @{$old->{$trail}};
                my ($new_p, $new_n) = @{$new->{$trail}};
                $old_p = "" unless defined $old_p;
@@ -239,9 +254,20 @@ sub trails_differ {
                if ($old_p ne $new_p) {
                        return 1;
                }
+
+               if (exists $old_trail_titles{$old_p} &&
+                       title_of($old_p) ne $old_trail_titles{$old_p}) {
+                       return 1;
+               }
+
                if ($old_n ne $new_n) {
                        return 1;
                }
+
+               if (exists $old_trail_titles{$old_n} &&
+                       title_of($old_n) ne $old_trail_titles{$old_n}) {
+                       return 1;
+               }
        }
 
        foreach my $trail (keys %$new) {
@@ -318,8 +344,6 @@ sub prerender {
                        $prev = $members->[$i - 1] if $i > 0;
                        my $next = $members->[$i + 1];
 
-                       add_depends($member, $trail);
-
                        $member_to_trails{$member}{$trail} = [$prev, $next];
                }
 
@@ -359,6 +383,12 @@ sub prerender {
 sub build_affected {
        my %affected;
 
+       # In principle we might not have done this yet, although in practice
+       # at least the trail itself has probably changed, and its template
+       # almost certainly contains TRAILS or TRAILLOOP, triggering our
+       # prerender as a side-effect.
+       prerender();
+
        foreach my $member (keys %rebuild_trail_members) {
                $affected{$member} = sprintf(gettext("building %s, its previous or next page has changed"), $member);
        }
@@ -381,6 +411,8 @@ sub pagetemplate (@) {
        my $page = $params{page};
        my $template = $params{template};
 
+       return unless length $page;
+
        if ($template->query(name => 'trails') && ! $recursive) {
                prerender();
 
@@ -406,13 +438,11 @@ sub pagetemplate (@) {
                        my ($prevurl, $nexturl, $prevtitle, $nexttitle);
 
                        if (defined $prev) {
-                               add_depends($params{destpage}, $prev);
                                $prevurl = urlto($prev, $page);
                                $prevtitle = title_of($prev);
                        }
 
                        if (defined $next) {
-                               add_depends($params{destpage}, $next);
                                $nexturl = urlto($next, $page);
                                $nexttitle = title_of($next);
                        }
index 3ea19c63519bdecf6cd7331d21d722b3e0bc72de..2967761c8d3dab055bb52c098b40cb6762e68f3e 100644 (file)
@@ -18,6 +18,7 @@ sub getsetup () {
                plugin => {
                        safe => 0,
                        rebuild => undef,
+                       section => "special-purpose",
                },
                add_underlays => {
                        type => "string",
index 48f3d4634da0371f988ba16ae1107849fcd24172..453d19670d2bfc6113c2d87b3d0af44242823754 100644 (file)
@@ -172,6 +172,11 @@ sub getsetup () {
                        my @s=eval { $IkiWiki::hooks{getsetup}{$plugin}{call}->() };
                        next unless @s;
 
+                       if (scalar(@s) % 2 != 0) {
+                               print STDERR "warning: plugin $plugin has a broken getsetup; ignoring\n";
+                               next;
+                       }
+
                        # set default section value (note use of shared
                        # hashref between array and hash)
                        my %s=@s;
@@ -223,6 +228,10 @@ sub commented_dump ($$) {
                my $setup=$pair->[1];
                my %s=@{$setup};
                my $section=$s{plugin}->{section};
+               if (! defined $section) {
+                       print STDERR "warning: missing section in $plugin\n";
+                       $section="other";
+               }
                push @{$section_plugins{$section}}, $plugin;
                if (@{$section_plugins{$section}} == 1) {
                        push @ret, "", $indent.("#" x 70), "$indent# $section plugins",
index c39aa2ef7d678207ef86c938baef3f7af1933c30..84b4b5a2f298f23bac5d5e223fb4144a7ebd72f1 100644 (file)
@@ -28,10 +28,11 @@ sub gen_wrappers () {
        %config=(%origconfig);
 }
 
+our $program_to_wrap = $0;
 sub gen_wrapper () {
        $config{srcdir}=File::Spec->rel2abs($config{srcdir});
        $config{destdir}=File::Spec->rel2abs($config{destdir});
-       my $this=File::Spec->rel2abs($0);
+       my $this=File::Spec->rel2abs($program_to_wrap);
        if (! -x $this) {
                error(sprintf(gettext("%s doesn't seem to be executable"), $this));
        }
@@ -93,12 +94,53 @@ EOF
                # memory, a pile up of processes could cause thrashing
                # otherwise. The fd of the lock is stored in
                # IKIWIKI_CGILOCK_FD so unlockwiki can close it.
-               $pre_exec=<<"EOF";
+               #
+               # A lot of cgi wrapper processes can potentially build
+               # up and clog an otherwise unloaded web server. To
+               # partially avoid this, when a GET comes in and the lock
+               # is already held, rather than blocking a html page is
+               # constructed that retries. This is enabled by setting
+               # cgi_overload_delay.
+               if (defined $config{cgi_overload_delay} &&
+                   $config{cgi_overload_delay} =~/^[0-9]+/) {
+                       my $i=int($config{cgi_overload_delay});
+                       $pre_exec.="#define CGI_OVERLOAD_DELAY $i\n"
+                               if $i > 0;
+                       my $msg=gettext("Please wait");
+                       $msg=~s/"/\\"/g;
+                       $pre_exec.='#define CGI_PLEASE_WAIT_TITLE "'.$msg."\"\n";
+                       if (defined $config{cgi_overload_message} && length $config{cgi_overload_message}) {
+                               $msg=$config{cgi_overload_message};
+                               $msg=~s/"/\\"/g;
+                       }
+                       $pre_exec.='#define CGI_PLEASE_WAIT_BODY "'.$msg."\"\n";
+               }
+               $pre_exec.=<<"EOF";
        lockfd=open("$config{wikistatedir}/cgilock", O_CREAT | O_RDWR, 0666);
-       if (lockfd != -1 && lockf(lockfd, F_LOCK, 0) == 0) {
-               char *fd_s=malloc(8);
-               sprintf(fd_s, "%i", lockfd);
-               setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
+       if (lockfd != -1) {
+#ifdef CGI_OVERLOAD_DELAY
+               char *request_method = getenv("REQUEST_METHOD");
+               if (request_method && strcmp(request_method, "GET") == 0) {
+                       if (lockf(lockfd, F_TLOCK, 0) == 0) {
+                               set_cgilock_fd(lockfd);
+                       }
+                       else {
+                               printf("Content-Type: text/html\\nRefresh: %i; URL=%s\\n\\n<html><head><title>%s</title><head><body><p>%s</p></body></html>",
+                                       CGI_OVERLOAD_DELAY,
+                                       getenv("REQUEST_URI"),
+                                       CGI_PLEASE_WAIT_TITLE,
+                                       CGI_PLEASE_WAIT_BODY);
+                               exit(0);
+                       }
+               }
+               else if (lockf(lockfd, F_LOCK, 0) == 0) {
+                       set_cgilock_fd(lockfd);
+               }
+#else
+               if (lockf(lockfd, F_LOCK, 0) == 0) {
+                       set_cgilock_fd(lockfd);
+               }
+#endif
        }
 EOF
        }
@@ -140,6 +182,12 @@ void addenv(char *var, char *val) {
        newenviron[i++]=s;
 }
 
+set_cgilock_fd (int lockfd) {
+       char *fd_s=malloc(8);
+       sprintf(fd_s, "%i", lockfd);
+       setenv("IKIWIKI_CGILOCK_FD", fd_s, 1);
+}
+
 int main (int argc, char **argv) {
        int lockfd=-1;
        char *s;
@@ -214,7 +262,7 @@ $set_background_command
 EOF
 
        my @cc=exists $ENV{CC} ? possibly_foolish_untaint($ENV{CC}) : 'cc';
-       push @cc, possibly_foolish_untaint($ENV{CFLAGS}) if exists $ENV{CFLAGS};
+       push @cc, split(' ', possibly_foolish_untaint($ENV{CFLAGS})) if exists $ENV{CFLAGS};
        if (system(@cc, "$wrapper.c", "-o", "$wrapper.new") != 0) {
                #translators: The parameter is a C filename.
                error(sprintf(gettext("failed to compile %s"), "$wrapper.c"));
index ef29a950c777b8e3c7b74821790a1b184be28c3b..f1df8bcd3f2dbfa463e3e182c4a295f5b547ff7d 100755 (executable)
@@ -96,7 +96,7 @@ underlay_install:
                install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme; \
                for file in $$theme/*; do \
                        if echo "$$file" | grep -q style.css; then \
-                               (cat doc/style.css; cat $$theme/base.css 2>/dev/null; cat $$file) >> $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
+                               (cat doc/style.css; cat $$theme/base.css 2>/dev/null; cat $$file) > $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
                        elif echo "$$file" | grep -q base.css; then \
                                :; \
                        elif [ -f "$$file" ]; then \
index ce2ec060a09a2a5d3eabc5d0f39852bb2a5478fb..375a9d0a98583315220c1dc67f7264a1e7df50c8 100644 (file)
@@ -1,3 +1,108 @@
+ikiwiki (3.20130519) UNRELEASED; urgency=low
+
+  * blogspam: Fix encoding issue in RPC::XML call.
+    Thanks, Changaco
+
+ -- Joey Hess <joeyh@debian.org>  Sun, 23 Jun 2013 14:02:01 -0400
+
+ikiwiki (3.20130518) unstable; urgency=low
+
+  * Fix test suite to not fail when XML::Twig is not installed.
+    Closes: #707436
+  * theme: Now <TMPL_IF THEME_$NAME> can be used in all templates when
+    a theme is enabled.
+  * notifyemail: Fix bug that caused duplicate emails to be sent when
+    site was rebuilt.
+  * bzr: bzr rm no longer has a --force option, remove
+
+ -- Joey Hess <joeyh@debian.org>  Sat, 18 May 2013 16:28:21 -0400
+
+ikiwiki (3.20130504) unstable; urgency=low
+
+  * Allow dots in directive parameter names. (tango)
+  * Add missing plugin section, and deal with missing sections with a warning.
+  * Detect plugins with a broken getsetup and warn.
+  * map: Correct reversion introduced in version 3.20110225 that could
+    generate invalid html. (smcv)
+  * Makefile.PL: overwrite theme style.css instead of appending
+    (Thanks, Mikko Rapeli)
+  * meta: Fix anchors used to link to the page's license and copyright.
+    Closes: #706437
+
+ -- Joey Hess <joeyh@debian.org>  Sat, 04 May 2013 23:47:21 -0400
+
+ikiwiki (3.20130212) unstable; urgency=low
+
+  * htmlscrubber: Allow the bitcoin URI scheme.
+  * htmlscrubber: Allow the URI schemes of major VCS's.
+  * aggregate: When run with --aggregate, if an aggregation is already
+    running, don't go on and --refresh.
+  * trail: Avoid excess dependencies between pages in the trail
+    and the page defining the trail. Thanks, smcv.
+  * opendiscussion: Don't allow editing discussion pages if discussion pages
+    are disabled. (smcv)
+  * poll: Add expandable option to allow users to easily add new choices to
+    a poll.
+  * trail: Avoid massive slowdown caused by pagetemplate hook when displaying
+    dynamic cgi pages, which cannot use trail anyway.
+  * Deal with empty diffurl in configuration.
+  * cvs: Various fixes. (schmonz)
+  * highlight: Now adds a span with class highlight-<extension> around
+    highlighted content, allowing for language-specific css styling.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 12 Feb 2013 21:48:02 -0400
+
+ikiwiki (3.20121212) unstable; urgency=low
+
+  * filecheck: Fix bug that prevented File::MimeInfo::Magic from ever
+    being used.
+  * openid: Display openid in Preferences page as a comment, so it can be
+    selected in all browsers.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 11 Dec 2012 12:12:12 -0400
+
+ikiwiki (3.20121017) unstable; urgency=low
+
+  * recentchangesdiff: fix further breakage to the template from 3.20120725 
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 16 Oct 2012 20:49:27 -0400
+
+ikiwiki (3.20121016) unstable; urgency=low
+
+  * monochrome: New theme, contributed by Jon Dowland.
+  * rst: Ported to python 3, while still also being valid python 2.
+    Thanks, W. Trevor King
+  * Try to avoid a situation in which so many ikiwiki cgi wrapper programs
+    are running, all waiting on some long-running thing like a site rebuild,
+    that it prevents the web server from doing anything else. The current
+    approach only avoids this problem for GET requests; if multiple cgi's
+    run GETs on a site at the same time, one will display a "please wait"
+    page for a configurable number of seconds, which then redirects to retry.
+    To enable this protection, set cgi_overload_delay to the number of
+    seconds to wait. This is not enabled by default.
+  * Add back a 1em margin between archivepage divs.
+  * recentchangesdiff: Correct broken template that resulted in duplicate
+    diff icons being displayed, and bloated the recentchanges page with
+    inline diffs when the configuration should have not allowed them.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 16 Oct 2012 15:14:19 -0400
+
+ikiwiki (3.20120725) unstable; urgency=low
+
+  * recentchangesdiff: When diffurl is not set, provide inline diffs
+    in the recentchanges page, with visibility toggleable via javascript.
+    Thanks, Antoine Beaupré
+  * Split CFLAGS into words when building wrapper. Closes: #682237
+  * osm: Avoid calling urlto before generated files are registered.
+    Thanks, Philippe Gauthier and Antoine Beaupré
+  * osm: Add osm_openlayers_url configuration setting.
+    Thanks, Genevieve
+  * osm: osm_layers can be used to configured the layers displayed on the map.
+    Thanks, Antoine Beaupré
+  * comments: Remove ipv6 address specific code.
+
+ -- Joey Hess <joeyh@debian.org>  Sat, 25 Aug 2012 10:58:42 -0400
+
 ikiwiki (3.20120629) unstable; urgency=low
 
   * mirrorlist: Add mirrorlist_use_cgi setting that avoids usedirs or
index ee52c0eda5f43d80bd34934a879b6472cec37b88..e1a81932b2f0a5b8145aecbf33f73cb9063f20e5 100644 (file)
@@ -248,6 +248,10 @@ Files: underlays/themes/goldtype/*
 Copyright: © Lars Wirzenius
 License: GPL-2+
 
+Files: underlays/themes/monochrome/*
+Copyright: © 2012 Jon Dowland
+License: GPL-2+
+
 License: BSD-2-clause
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
index b7b9164acd0c8bcbc3cc96e5e0e2134af1933b56..232f2ce6a71f1cd14ca2b85d4d8dad2baf7c5e02 100644 (file)
@@ -20,6 +20,6 @@ Long-lived branches in the main git repository:
 * `ignore` gets various branches merged to it that [[Joey]] wishes to ignore
   when looking at everyone's unmerged changes.
 * `pristine-tar` contains deltas that
-  [pristine-tar](http://kitenet.net/~joey/code/pristine-tar)
+  [pristine-tar](http://joeyh.name/code/pristine-tar)
   can use to recreate released tarballs of ikiwiki
 * `setup` contains the ikiwiki.setup file for this site
index 0da368644055e5003b2e70fe986a377b339ca5a0..81a5abf2862e0430ff566c758e0fe5ebc6ce3fff 100644 (file)
@@ -6,3 +6,23 @@ I think the CGI wrapper should remember PERL5LIB too.
 
 -- Martin
 
+Thank's a lot for pointing me to this location in the code. I was looking it for some time.
+
+This brutal patch implement your solution as a temporary fix.
+
+    *** Wrapper.pm.old      2012-08-25 16:41:41.000000000 +0200
+    --- Wrapper.pm  2012-10-01 17:33:17.582956524 +0200
+    ***************
+    *** 149,154 ****
+    --- 149,155 ----
+      $envsave
+            newenviron[i++]="HOME=$ENV{HOME}";
+            newenviron[i++]="PATH=$ENV{PATH}";
+    +       newenviron[i++]="PERL5LIB=$ENV{PERL5LIB}";
+            newenviron[i++]="WRAPPED_OPTIONS=$configstring";
+      
+      #ifdef __TINYC__
+
+As I am not sure that remembering `PERL5LIB` is a good idea, I think that a prettier solution will be to add a config variable (let's say `cgi_wrapper_perllib`) which, if fixed, contains the `PERL5LIB` value to include in the wrapper, or another (let's say `cgi_wrapper_remember_libdir`), which, if fixed, remember the current `PERL5LIB`.
+
+-- Bruno
diff --git a/doc/bugs/CamelCase_and_Recent_Changes_create_spurious_Links.mdwn b/doc/bugs/CamelCase_and_Recent_Changes_create_spurious_Links.mdwn
new file mode 100644 (file)
index 0000000..de95fb7
--- /dev/null
@@ -0,0 +1,11 @@
+Hi folks,
+
+This is a fairly fresh wiki.  I recently noticed the Links: section the the bottom looked like this:
+
+Links: index recentchanges/change 0b2f03d3d21a3bb21f6de75d8711c73df227e17c recentchanges/change 1c5b830b15c4f2f0cc97ecc0adfd60a1f1578918 recentchanges/change 20b20b91b90b28cdf2563eb959a733c6dfebea7a recentchanges/change 3377cedd66380ed416f59076d69f546bf12ae1e4 recentchanges/change 4c53d778870ea368931e7df2a40ea67d00130202 recentchanges/change 7a9f3c441a9ec7e189c9df322851afa21fd8b00c recentchanges/change 7dcaea1be47308ee27a18f893ff232a8370e348a recentchanges/change 963245d4e127159e12da436dea30941ec371c6be recentchanges/change cd489ff4abde8dd611f7e42596b93953b38b9e1c ... 
+
+All of those "recentchanges/ change xxxxxxx" links are clickable, but all yield 404 when clicked.
+
+When I disable the CamelCase plugin and rebuild the wiki, all the Links other than index disappear, as they should.  Re-enable CamelCase, and they're back.
+
+This is a very simple wiki.  Just fresh, only one page other than index (this one), and nothing at all fancy/weird about it.
index 093eb77aa8d66508b8bbc0fb72e366e769922e77..9ba4ede6ec52939be48b3c6f62735ecc205abaf3 100644 (file)
@@ -1,3 +1,5 @@
 If you look at [[todo/org mode]], the link to the Discussion page is not there (has a question mark), as if it didn't exist. But--through the search--I discovered that the Discussion page does exist actually: [[todo/org mode/Discussion]]. 
 
 So, there is a bug that prevents a link to the existing Discussion page from appearing in the correct way on the corresponding main page. --Ivan Z.
+
+Perhaps, this has something to do with the same piece of code/logic (concerning case-sensitivity) as the fixed [[bugs/unwanted discussion links on discussion pages]]? --Ivan Z.
diff --git a/doc/bugs/Linkmap_doesn__39__t_support_multiple_linkmaps_on_a_single_page.mdwn b/doc/bugs/Linkmap_doesn__39__t_support_multiple_linkmaps_on_a_single_page.mdwn
new file mode 100644 (file)
index 0000000..a064547
--- /dev/null
@@ -0,0 +1,3 @@
+If I use the linkmap directive twice on a single page, I get the same image appearing in both locations, even though the parameters for the two directives may have been different.
+
+-- Martin
diff --git a/doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn b/doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn
new file mode 100644 (file)
index 0000000..4c7b12e
--- /dev/null
@@ -0,0 +1,11 @@
+Say you are commenting on this report. The Navbar on top will look like
+
+[ikiwiki](http://ikiwiki.info/)/ [bugs](http://ikiwiki.info/bugs/)/ commenting on Navbar does not link to page being commented on while commenting
+
+while either of those two options would be better:
+
+[ikiwiki](http://ikiwiki.info/)/ [bugs](http://ikiwiki.info/bugs/)/ commenting on [Navbar does not link to page being commented on while commenting](http://ikiwiki.info/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting/)
+
+[ikiwiki](http://ikiwiki.info/)/ [bugs](http://ikiwiki.info/bugs/)/ [Navbar does not link to page being commented on while commenting](http://ikiwiki.info/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting/) / New comment
+
+-- RichiH
diff --git a/doc/bugs/Remove_redirect_pages_from_inline_pages.mdwn b/doc/bugs/Remove_redirect_pages_from_inline_pages.mdwn
new file mode 100644 (file)
index 0000000..a43bd40
--- /dev/null
@@ -0,0 +1,15 @@
+[[!tag bugs wishlist]]
+
+
+I accidentally made a typo spelling "surprises" and changed my URL from
+
+<http://natalian.org/archives/2012/12/04/Singapore_banking_suprises/>
+to
+<http://natalian.org/archives/2012/12/04/Singapore_banking_suprises/>
+
+Using the meta redir. However the meta redir now appears in the index of <http://natalian.org/>
+
+Any ideas how to handle this situation?
+
+> Well, you can adjust the inline's pagespec to exclude it, or even tag it
+> with a tag that the pagespec is adjusted to exclude. --[[Joey]]
diff --git a/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn b/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn
new file mode 100644 (file)
index 0000000..e93f4e5
--- /dev/null
@@ -0,0 +1,47 @@
+Saving a wiki page in ikwiki or 
+<tt>ikiwiki --setup wiki.setup --rebuild</tt> takes a **dozen minutes** on a tiny tiny wiki (10 user-added pages)!
+
+I profiled ikiwiki with [[!cpan Devel::SmallProf]] : see [[users/mathdesc]] for details.
+
+And I came to the conclusion that [[plugins/filecheck]] on attachment was the only cause.
+It always go the fallback code using time-consuming file even there it's look like it's
+not successful. 
+
+<pre>
+ # Get the mime type.
+        #
+        # First, try File::Mimeinfo. This is fast, but doesn't recognise
+        # all files.
+        eval q{use File::MimeInfo::Magic};                    
+        my $mimeinfo_ok=! $@;                                     
+        my $mimetype;
+        if ($mimeinfo_ok) {
+                my $mimetype=File::MimeInfo::Magic::magic($file);
+        }                                                         
+        
+        # Fall back to using file, which has a more complete
+        # magic database.
+        if (! defined $mimetype) {
+                open(my $file_h, "-|", "file", "-bi", $file); 
+                $mimetype=<$file_h>;                                 
+                chomp $mimetype;                            
+                close $file_h;                   
+        }
+        if (! defined $mimetype || $mimetype !~s /;.*//) {
+                # Fall back to default value.
+                $mimetype=File::MimeInfo::Magic::default($file)
+                        if $mimeinfo_ok; 
+                if (! defined $mimetype) {
+                        $mimetype="unknown";
+                }                                                  
+        }        
+</pre>
+
+I found on [[plugins/filecheck/discussion/]] what [[users/DavidBremner/]] described as :
+> no way to detect text/plain using File::MimeInfo::Magic::magic()
+But I can't figure out if my issue is boarder and includes this or not.. 
+
+Any ideas , solve :) more that welcome.
+
+> [[done]], as isbear noted in [[discussion]], there was a bug that
+> prevented File::MimeInfo::Magic from ever being used. --[[Joey]]
diff --git a/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn b/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn
new file mode 100644 (file)
index 0000000..629aba7
--- /dev/null
@@ -0,0 +1,141 @@
+##Foreword :
+Disabling of filecheck is not actually possible because btw it cause the attachment.pm to malfunction and
+any of pagespec that could contain a *mimetype* condition.
+
+attachment.pm imports "statically"  filecheck so actually disabling it should be *interdicted* .
+
+<pre>
+sub import {
+        add_underlay("attachment");
+        add_underlay("javascript");
+        add_underlay("jquery");
+        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, last => 1);
+        IkiWiki::loadplugin("filecheck");
+}
+</pre>
+
+----
+
+## How bad is it ?
+
+So I tried on three pages to inline <tt>!mimetype(image/*)</tt> while I allowed attachment of <tt>mimetype(image/*)</tt>
+
+My profiling tests in the bug report shows that most of the time is spend in the "Fallback using file" block code,
+I tried to comment that block and see how it'll perform. Obviously this is much much faster ... but is the mimetype
+discovered using only *File::MimeInfo* ?
+
+
+Dumping some strings before return to STDERR, rebuilding . This is just a  [[!toggle  id="code-test" text="dumpdebug adding"]] 
+
+[[!toggleable  id="code-test" text="""
+<pre>
+sub match_mimetype ($$;@) {
+        my $page=shift;
+        my $wanted=shift;
+
+        my %params=@_;
+        my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page});
+        if (! defined $file) {
+                return IkiWiki::ErrorReason->new("file does not exist");
+        }
+
+        # Get the mime type.
+        #
+        # First, try File::Mimeinfo. This is fast, but doesn't recognise
+        # all files.
+        eval q{use File::MimeInfo::Magic};
+        my $mimeinfo_ok=! $@;
+        my $mimetype;
+        print STDERR " --- match_mimetype (".$file.")\n";
+        if ($mimeinfo_ok) {
+                my $mimetype=File::MimeInfo::Magic::magic($file);
+        }
+
+        # Fall back to using file, which has a more complete
+        # magic database.
+        #if (! defined $mimetype) {
+        #       open(my $file_h, "-|", "file", "-bi", $file);
+        #       $mimetype=<$file_h>;
+        #       chomp $mimetype;
+        #       close $file_h;
+        #}
+
+        if (! defined $mimetype || $mimetype !~s /;.*//) {
+                # Fall back to default value.
+                $mimetype=File::MimeInfo::Magic::default($file)
+                        if $mimeinfo_ok;
+                if (! defined $mimetype) {
+                        $mimetype="unknown";
+                }
+        }
+
+        my $regexp=IkiWiki::glob2re($wanted);
+        if ($mimetype!~$regexp) {
+                 print STDERR " xxx MIME unknown ($mimetype - $wanted - $regexp ) \n";
+                return IkiWiki::FailReason->new("file MIME type is $mimetype, not $wanted");
+        }
+        else {
+                print STDERR " vvv MIME found\n";
+                return IkiWiki::SuccessReason->new("file MIME type is $mimetype");
+        }
+}
+</pre>
+"""]]
+
+The results dump to stderr (or a file called... 'say *mime*) looks like this :
+<pre>
+--- match_mimetype (/usr/share/ikiwiki/attachment/ikiwiki/jquery.fileupload-ui.js)
+ xxx MIME unknown (text/plain - image/* - (?i-xsm:^image\/.*$) )
+ --- match_mimetype (/usr/share/ikiwiki/locale/fr/directives/ikiwiki/directive/fortune.mdwn)
+ xxx MIME unknown (text/plain - image/* - (?i-xsm:^image\/.*$) )
+ --- match_mimetype (/usr/share/ikiwiki/locale/fr/basewiki/shortcuts.mdwn)
+ xxx MIME unknown (text/plain - image/* - (?i-xsm:^image\/.*$) 
+ --- match_mimetype (/usr/share/ikiwiki/smiley/smileys/alert.png)
+ xxx MIME unknown (application/octet-stream - image/* - (?i-xsm:^image\/.*$) )
+ --- match_mimetype (/usr/share/ikiwiki/attachment/ikiwiki/images/ui-bg_flat_75_ffffff_40x100.png)
+ xxx MIME unknown (application/octet-stream - image/* - (?i-xsm:^image\/.*$) 
+</pre>
+
+<tt>---</tt> prepend signals the file on analysis<br/>
+<tt>xxx</tt> prepend signals a returns failure : mime is unknown, the match is a failure<br/>
+<tt>vvv</tt> prepend signals a return success.<br/>
+
+
+This is nasty-scary results ! Something missed me or this mime-filecheck is plain nuts ?
+
+*Question 1* : How many files have been analysed : **3055** (yet on a tiny tiny wiki)
+<pre>grep "^ --- " mime | wc -l
+3055
+</pre>
+
+*Question 2* : How many time it fails : *all the time*
+<pre>
+ grep "^ xxx " mime | wc -l
+3055
+</pre>
+
+*Question 1bis*  : Doh btw , how many files have been re-analysed ?  ** 2835 ** OMG !!
+<pre>grep "^ --- " mime | sort -u | wc -l
+220
+</pre>
+
+## Conclusion
+
+- Only the system command *file -bi* works. While it is **should** be easy on the cpu , it's also hard on the I/O -> VM :( 
+- Something nasty with the mime  implementation and/or my system configuration -> Hints ? :D
+- Need to cache during the rebuild : a same page needs not being rechecked for its mime while it's locked !
+
+
+--mathdesc
+
+> >        if ($mimeinfo_ok) {
+> >                my $mimetype=File::MimeInfo::Magic::magic($file);
+> >        }
+> 
+> That seems strange to me, `my` restricts scope of $mimetype to enclosing if block, thus, assigned value will be dropped - I think, it is the problem.
+> Try removing that stray `my`.
+>
+> --isbear
diff --git a/doc/bugs/blogspam_marks_me_as_spam_on_ipv6.mdwn b/doc/bugs/blogspam_marks_me_as_spam_on_ipv6.mdwn
new file mode 100644 (file)
index 0000000..9b415a8
--- /dev/null
@@ -0,0 +1,8 @@
+I just got this message trying to post to this wiki:
+
+    Error: Sorry, but that looks like spam to blogspam: No reverse DNS entry for 2001:1928:1:9::1
+
+So yeah, it seems I have no reverse DNS for my IPv6 address, which may
+be quite common for emerging IPv6 deployments...
+
+This may be related to [[blogspam_options whitelist vs. IPv6?]].
diff --git a/doc/bugs/capitalized_attachment_names.mdwn b/doc/bugs/capitalized_attachment_names.mdwn
new file mode 100644 (file)
index 0000000..b10781b
--- /dev/null
@@ -0,0 +1,14 @@
+Given an uploaded image via: \[\[!img NAME.svg alt="image"\]\]
+
+Viewing the generated page shows the following error:
+
+"\[\[!img Error: failed to read name.svg: Exception 420: no decode delegate for this image format `/home/user/path/name.svg' @ error/svg.c/ReadSVGImage/2815\]\]"
+
+The caps in the image title were somehow converted to small letters and then the image is saved as a directory.  Very puzzling.  
+I get the same error when image names are small letters.
+
+The error also occurs with png images.  
+
+How do I fix this?
+
+Later investigation ... I got around the problem by creating the mark-up in a new directory.  However, if I try to create a new directory with the same name as the directory containing the problem code, the problem re-emerges -- the old directory is apparently not overwritten.  Perhaps this is an issue with the git storage.    
diff --git a/doc/bugs/encoding_issue_in_blogspam_plugin.mdwn b/doc/bugs/encoding_issue_in_blogspam_plugin.mdwn
new file mode 100644 (file)
index 0000000..92318d1
--- /dev/null
@@ -0,0 +1,34 @@
+[[!tag patch]]
+
+<pre>
+From 5ad35b2805ca50478f07d810e57e7c9b8f4eddea Mon Sep 17 00:00:00 2001
+From: Changaco &lt;changaco@changaco.net>
+Date: Tue, 4 Jun 2013 02:54:35 +0200
+Subject: [PATCH] fix encoding issue in blogspam plugin
+
+RPC::XML uses ascii as default encoding, we have to tell it to use utf8.
+
+Without this, ikiwiki returns "failed to get response from blogspam server"
+every time a non-ascii character is used in a content that needs checking.
+
+---
+ IkiWiki/Plugin/blogspam.pm | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/IkiWiki/Plugin/blogspam.pm b/IkiWiki/Plugin/blogspam.pm
+index d32c2f1..e48ed72 100644
+--- a/IkiWiki/Plugin/blogspam.pm
++++ b/IkiWiki/Plugin/blogspam.pm
+@@ -53,6 +53,7 @@ sub checkconfig () {
+       eval q{
+               use RPC::XML;
+               use RPC::XML::Client;
++              $RPC::XML::ENCODING = 'utf-8';
+       };
+       error $@ if $@;
+ }
+-- 
+1.8.3
+</pre>
+
+[[done]] --[[Joey]] 
diff --git a/doc/bugs/feedpages_does_not_prevent_tags_from_being_aggregated.mdwn b/doc/bugs/feedpages_does_not_prevent_tags_from_being_aggregated.mdwn
new file mode 100644 (file)
index 0000000..a004154
--- /dev/null
@@ -0,0 +1,32 @@
+I added a feedpages directive to `blog/index.mdwn` to not pick up anything tagged `tags/random/hidden` yet that still happenend.
+
+    ~git/richardhartmann.de/blog % grep hidden index.mdwn
+    \[[!inline pages="./posts/*/*/* and !*/Discussion" feedpages="./posts/*/*/* and !*/Discussion and not tagged(tags/random/hidden)" show="10" actions=yes rootpage="blog"]]
+    ~git/richardhartmann.de/blog % grep hidden posts/2013/05/17-Debian_Release_Critical_Bug_report_for_Week_20.mdwn
+    \[[!tag tags/tech/floss/debian tags/tech/floss/debian/rc-stats/8.0-jessie tags/random/hidden]]
+    ~git/richardhartmann.de/blog %
+
+If you need more information, please let me know.
+
+Richard
+
+> I don't think this is a bug. You have a syntax error in your pagespec:
+> "not" is not a recognised keyword in [[pagespecs|ikiwiki/pagespec]],
+> so `and not tagged(...)` should be `and !tagged(...)`. Presumably inline
+> falls back to `pages` when `feedpages` doesn't work.
+>
+> By posting the pagespec here with insufficient escaping (which I've fixed)
+> you caused *this* ikiwiki instance's HTML to contain an error message
+> illustrating that syntax error :-)
+>
+>     <span class="error">Error: syntax error in pagespec "(./posts/*/*/* and !*/Discussion) and (./posts/*/*/* and !*/Discussion and not tagged(tags/random/hidden))"</span>
+>
+> [[done]]. --[[smcv]]
+
+> > As per IRC: Thanks. As an aside, shouldn't this ikiwiki instance ignore directives in normal text? The problem may be non-trivial, but still... -- Richard
+
+>>> "Normal text" is exactly where directives go, so, not really.
+>>> If you mean verbatim text (e.g. indentation in Markdown): the fact that
+>>> directives still expand to HTML, which is then treated as verbatim, is an
+>>> unfortunate result of how ikiwiki interacts with pages' markup languages
+>>> (directives and wikilinks happen before markup is converted to HTML). --[[smcv]]
diff --git a/doc/bugs/feeds_get_removed_in_strange_conditions.mdwn b/doc/bugs/feeds_get_removed_in_strange_conditions.mdwn
new file mode 100644 (file)
index 0000000..deec208
--- /dev/null
@@ -0,0 +1,57 @@
+For some time now, in circumstances that I've had enormous troubles
+trying to track, I've seen feeds getting removed by ikiwiki when
+apparently unrelated pages got changed, with the message:
+
+> removing somepath/somepage/somefeed, no longer built by some/unrelated/page
+
+I've finally been able to find how and why it happens. The situation is
+the following:
+
+* page A has an inline directive that (directly) generates a feed F
+* page B inlines A, thus (indirectly) generating F again
+* page B is rendered after page A
+
+The feed removal happens when changes are made to prevent B from
+inlining A; for example, because B is a tag page and A is untagged B, or
+because B includes A through a pagespec that no longer matches A. In
+this case, this happens:
+
+* page A is built, rendering F
+* page B is built, _not_ rendering F, which it used to render
+* F is removed because it is not built by B anymore
+
+Note that although this issue is triggered (for me) from the changes I
+proposed last year to allow feed generation from nested inlines
+coalescing it to be page-based instead of destpage-based
+(bb8f76a4a04686def8cc6f21bcca80cb2cc3b2c9 and
+72c8f01b36c841b0e83a2ad7ad1365b9116075c5) there is potential for it
+popping up in other cases.
+
+Specifically, the logic for the removal of dependent pages currently
+relies on the assumption that each output has a single generator. My
+changes caused this assumption to be violated, hence the error, but
+other cases may pop up for other plugins in the future.
+
+I have a [patch] fixing this issue (for feeds specifically, i.e. only
+the problem I am actually having) on top of my `mystuff` branch, but
+since that also has heaps of other unrelated stuff, you may want to just
+[pick it from my gitweb][gw].
+
+[gw]: (http://git.oblomov.eu/ikiwiki/patch/671cb26cf50643827f258270d9ac8ad0b1388a65)
+
+The patch changes the `will_render()` for feeds to be based on the page
+rather than on the destpage, matching the fact that for nested inlines
+it's the inner page that is ultimately responsible for generating the
+feed.
+
+I've noticed that it requires at least _two_ full rebuilds before the
+index is again in a sensible state. (On the first rebuild, all feeds
+from nested inlines are actually _removed_.)
+
+While the patch is needed because there are legitimate cases in which
+nested feeds are needed (for example, I have an index page that inlines
+index pages for subsection of my site, and I want _those_ feed from
+being visible), there are other cases when one may want to skip feed
+generation from nested inlines.
+
+--[[GiuseppeBilotta]]
index 55d66e785b346e9bd91c4128806b31414796c8a4..90391650a2ada0000ed7eedd7e45546b18a39629 100644 (file)
@@ -13,3 +13,7 @@ the problem for me. Not sure if this is the best solution. --[[cstamas]]
 [[patch]]
 
 [[!tag ipv6]]
+
+> [[done]] --[[Joey]] 
+
+> > Thank you! --[[cstamas]]
diff --git a/doc/bugs/map_generates_malformed_HTML.mdwn b/doc/bugs/map_generates_malformed_HTML.mdwn
new file mode 100644 (file)
index 0000000..890a6ef
--- /dev/null
@@ -0,0 +1,36 @@
+[[!template id=gitbranch branch=smcv/ready/map author="[[Simon McVittie|smcv]]"]]
+[[!tag patch]]
+
+`\[[!map]]` can generate bad HTML with unbalanced open/close tags
+(in XML terms: "not well-formed") in certain situations. This
+appears to be a regression caused by fixing
+[[maps with nested directories sometimes make ugly lists]], which
+suppressed some redundant `</ul><ul>` pairs, but appears not to
+have the ideal logic for this, leading to malformed HTML.
+
+In particular, on a site with these pages:
+
+* alpha
+    * 1
+        * i
+        * ii
+        * iii
+        * iv
+    * 2
+        * a
+        * b
+    * 3
+* beta
+
+the maps "`alpha/1 or beta`", "`alpha/1/i* or alpha/2/a or beta`" and
+"`alpha/1/i* or alpha/2/a`" have malformed HTML.
+
+My `ready/map` branch adds a regression test and makes it pass.
+
+The fix is not particularly elegant - it generates the previous
+HTML with redundant `</ul><ul>` pairs, marks the redundant
+pairs, and edits them out afterwards - but it works. If anyone can come
+up with a cleaner algorithm that avoids generating the redundant tags
+in the first place, that would be even better. --[[smcv]]
+
+> [[merged|done]] (not thrilled at this solution, but it works) --[[Joey]] 
index e4bc736e3c3b73a71a6a0288f4049cf92b36d8cb..cacd2b73b946c92e628163e06f2b13db6416bdb5 100644 (file)
@@ -1,6 +1,11 @@
+[[!template id=gitbranch branch=smcv/ready/less-open author="[[smcv]]"]]
+[[!tag patch]]
+
 The [[plugins/opendiscussion]] plugin allows pages named according to
 the `discussionpage` setting to be edited anonymously, even if
 `discussion => 0` is set.
 
 (If it respected the `discussion` option, the combination of
 `opendiscussion` and `moderatedcomments` might be good for blogs.)
+
+[[done]] --[[smcv]]
diff --git a/doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn b/doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn
new file mode 100644 (file)
index 0000000..a5c9516
--- /dev/null
@@ -0,0 +1,26 @@
+This would be great to see fixed. It's perplexing to have discussion => 0 in my configuration, not have any discussion links on my site, but still be able to add a discussion page by URL hacking something like this: /cgi-bin/ikiwiki/ikiwiki.cgi?page=posts%2Fdiscussion&do=edit.
+
+spammers have figured that little trick out so I am consitently getting spammed checked into my git repository.
+
+I'm not really sure if this patch introduced other problems, but it seems to have fixed my site:
+
+               0 mcclelland@chavez:~/.ikiwiki/IkiWiki/Plugin$ diff -u /usr/share/perl5/IkiWiki/Plugin/opendiscussion.pm opendiscussion.pm 
+               --- /usr/share/perl5/IkiWiki/Plugin/opendiscussion.pm   2012-05-07 11:31:24.000000000 -0400
+               +++ opendiscussion.pm   2012-07-29 17:49:28.000000000 -0400
+               @@ -25,7 +25,7 @@
+                       my $cgi=shift;
+                       my $session=shift;
+                
+               -       return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/i;
+               +       return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/i && $config{discussion};
+                       return "" if pagespec_match($page, "postcomment(*)");
+                       return undef;
+                }
+               1 mcclelland@chavez:~/.ikiwiki/IkiWiki/Plugin$  
+
+If libdir is configured to be ~/.ikiwiki in your ikiwiki.settings file, and you are running Debian, you can do the following:
+
+               mkdir -p ~/.ikiwiki/IkiWiki/Plugin
+               cp /usr/share/perl5/IkiWiki/Plugin/opendiscussion.pm ~/.ikiwiki/IkiWiki/Plugin/
+
+And then apply the patch above to ~/.ikiwiki/Ikiwiki/Plugin/opendiscussion.pm.
diff --git a/doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn b/doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn
new file mode 100644 (file)
index 0000000..2b20240
--- /dev/null
@@ -0,0 +1,14 @@
+[[!template  id=gitbranch branch=anarcat/master author="[[anarcat]]"]]
+
+I know this sounds backwards, but it seems to me that the KML-generated map should be displayable on google maps. KML is the standard Google uses for google maps, and since we use it, we should interoperate with them. God knows why this is failing, but it is and should probably be fixed for the sake of interoperability: <https://maps.google.ca/maps?q=http:%2F%2Fwiki.reseaulibre.ca%2Fmap%2Fpois.kml> -- [[users/anarcat]]
+
+> The KML only needs a Document tag because it uses "shared styles" -- don't ask me what this is. Here is a [[patch]]: [[https://reseaulibre.deuxpi.ca/0001-Add-Document-tag-to-OSM-plugin-KML-output.patch]] --[[deuxpi]]
+
+> > I applied the patch to my master branch and tested it on the above URL: it works... mostly. The icons for the elements on the actual map seem incorrect (some are the proper icons, some others are the ugly default blue pin of google maps, weird) but I think this is a step in the right direction. Thus, this should be merged. -- [[anarcat]]
+
+>>> I've cherry-picked this patch, but from the description it does not
+>>> sound "fixed" enough to close this bug. (OTOH, perhaps only google can
+>>> fix it, so it people are happy with the state of affairs I won't insist
+>>> this bug be left open.) --[[Joey]]
+
+> > > > I am happy with this right now, so let's mark this as [[done]]. I do agree this seems like a google bug, so let's move on. --[[anarcat]]
diff --git a/doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn b/doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn
new file mode 100644 (file)
index 0000000..0677d0e
--- /dev/null
@@ -0,0 +1,32 @@
+This is not a problem on Apache webservers because they, oddly enough, ignore trailing slashes on paths (maybe some `PATH_INFO` magic, no idea). But basically, in our wiki, the paths to the icon tags are generated with a trailing slash. An excerpt of our [KML file](http://wiki.reseaulibre.ca/map/pois.kml):
+
+    <Style id="/tag/up">
+    <IconStyle>
+    <Icon>
+    <href>http://wiki.reseaulibre.ca//tag/up/icon.png/</href>
+    </Icon>
+    </IconStyle>
+    </Style>
+
+Notice the trailing `/` after the `icon.png`. This breaks display on nginx - the file that gets served isn't the icon, but the frontpage for some reason. I followed the [[setup instructions|tips/dot cgi]] for Nginx that I just had to write because there weren't any, so maybe I screwed up some part, but it does seem to me that the trailing slash is wrong regardless.
+
+(Also notice how the style tag is being turned over backwards by the HTML sanitizer here, cute. :P)
+
+I wrote a crude hack for this, but this strikes me as a similar problem to the one we found in [[bugs/osm linkto() usage breaks map rendering]]. However, I am at a loss how to fix this cleanly because we cannot `will_render()` the tag icons, as they are already generated out there! Weird. Anyways, here's the stupid [[patch]]:
+
+[[!format diff """
+diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm
+index a7baa5f..c9650d0 100644
+--- a/IkiWiki/Plugin/osm.pm
++++ b/IkiWiki/Plugin/osm.pm
+@@ -192,6 +192,7 @@ sub process_waypoint {
+                }
+        }
+        $icon = urlto($icon, $dest, 1);
++       $icon =~ s!/*$!!; # hack - urlto shouldn't be appending a slash in the first place
+        $tag = '' unless $tag;
+        register_rendered_files($map, $page, $dest);
+        $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name} = {
+"""]]
+
+I'm not writing this to a branch out of sheer shame of my misunderstanding. ;) There also may be a workaround that could be done in Nginx too. --[[anarcat]]
index 01d1ec8bcc5c52f808eadd87189090548381d3a2..89c08b73ccc186e9eb07b32c3c1888c7f39063dc 100644 (file)
@@ -1,5 +1,23 @@
+[[!template  id=gitbranch branch=anarcat/master author="[[anarcat]]"]]
+
 Under some circumstances that remain unclear to me, the usage of `urlto()` in the revised version of the [[plugins/osm]] plugin break the map totally. The javascript console in Chromium tells me the following:
 
     GET http://mesh.openisp.ca/map/pois.kml/ 404 (Not Found)
 
 Indeed, that URL yields a 404. The proper URL is <http://mesh.openisp.ca/map/pois.kml>. --[[anarcat]]
+
+## Proposed solution
+
+The problem seems to be caused by `urlto()` being called for the `osm`
+directive before the generated files are registered with `will_render()`
+from the `waypoint` directive. Proposed patch adds a function that is
+called from the `preprocess` hook for both directives that registers the
+files.
+
+Here is a [[patch]] to IkiWiki/Plugin/osm.pm: <https://reseaulibre.deuxpi.ca/0000-Fix-incorrect-URL-pointing-to-the-generated-waypoint.patch>
+
+--[[deuxpi]]
+
+I confirm the patch works, and I added it to my master branch. --[[anarcat]]
+
+> [[applied|done]]. Thanks guys. --[[Joey]]
index c6e3cd4fd3326c09c08e629ab795318e7cb1a67f..15d28f9893865855c5817ca4ab860acffdf3c341 100644 (file)
@@ -279,3 +279,11 @@ So, looking at your meta branch: --[[Joey]]
 >>>> for the po plugin, because I want to merge the po plugin soon.
 >>>> If #2 gets tackled later, we will certianly have all kinds of fun.
 >>>> no matter what is done for the po plugin. --[[Joey]] 
+
+>>>>> For the record: I've gotten used to the lack of this feature,
+>>>>> and it now seems much less important to me than it was when
+>>>>> initially developing the po plugin. So, I'm hereby officially
+>>>>> removing this from my plate. If anyone else wants to start from
+>>>>> scratch, or from my initial work, I'm happy to review the
+>>>>> po-related part of things -- just drop me an email in this
+>>>>> case. --[[intrigeri]]
diff --git a/doc/bugs/possibly_po_related_error.mdwn b/doc/bugs/possibly_po_related_error.mdwn
new file mode 100644 (file)
index 0000000..2a65ae6
--- /dev/null
@@ -0,0 +1,20 @@
+A site got stuck like this:
+
+<pre>
+/home/b-fusioninventory/public_html/documentation/index.es.html independently created, not overwriting with version from documentation.es
+</pre>
+
+I tried rebuilding it, and the rebuild failed like this:
+
+<pre>
+building recentchanges/change_ef4b9f92821335d96732c4b2c93ed96bc84c2f0d._change, which depends on templates/page.tmpl
+removing recentchanges/change_9ca1de878ea654566ce4a8a031d1ad8ed135ea1c/index.html, no longer built by recentchanges/change_9ca1de878ea654566ce4a8a031d1ad8ed135ea1c
+internal error: recentchanges/change_9ca1de878ea654566ce4a8a031d1ad8ed135ea1c._change cannot be found in /home/b-fusioninventory/source or underlay
+</pre>
+
+This internal error seems like the root cause of the original failure.
+ikiwiki crashed and did not record that it wrote the index.es.html file.
+
+Deleting the indexdb and rebuilding cleaned up the problem.
+
+This needs more investigation. --[[Joey]]
diff --git a/doc/bugs/recentchanges_sets_has__95__diffurl__61__1_when_diffurl_is_empty.mdwn b/doc/bugs/recentchanges_sets_has__95__diffurl__61__1_when_diffurl_is_empty.mdwn
new file mode 100644 (file)
index 0000000..6c6e24b
--- /dev/null
@@ -0,0 +1,18 @@
+recentchanges.pm sets the template variable HAS_DIFFURL to 1 based solely on whether or not diffurl is defined. I found that diffurl was defined, but empty. The recentchanges template depends on this for recentchangesdiff to properly function -- diff toggling is dependent on HAS_DIFFURL evaluating to false. Adding a check for a non-zero length diffurl fixed the issue for me. A patch against ikiwiki-3.20121212 is as follows:
+
+    --- a/IkiWiki/Plugin/recentchanges.pm      2013-01-27 20:08:59.000000000 -0800
+    +++ b/IkiWiki/Plugin/recentchanges.pm      2013-01-27 20:08:30.000000000 -0800
+    @@ -181,7 +181,8 @@ sub store ($$$) {
+                       else {
+                               $_->{link} = pagetitle($_->{page});
+                       }
+    -                  if (defined $_->{diffurl}) {
+    +                  if (defined $_->{diffurl} &&
+    +                          length($_->{diffurl}) > 0) {
+                               $has_diffurl=1;
+                       }
+     
+
+(There should be one more line at the bottom with a single space on it...)
+
+> [[applied|done]] --[[Joey]]
index 4843b59007b82d50a062a46d0fb033c976033268..6d0caf42eeca6592fe4994f6e103e4d3bcbcd5c9 100644 (file)
@@ -65,7 +65,12 @@ inconsistent between the one-and two-argument forms. Thoughts?
 >> Try this, then? I had to make some changes to `attachment`
 >> to make the split versions available. I suggest reviewing
 >> patch-by-patch.
->>
+
+>>> Branch updated; I'd missed a use of prune in ikiwiki.in itself.
+>>> Unfortunately, this means it does still need to support the
+>>> "undefined top directory" case: there isn't an obvious top
+>>> directory for wrappers. --[[smcv]]
+
 >> I also tried to fix a related bug which I found while testing it:
 >> the special case for renaming held attachments didn't seem to work.
 >> (`smcv/wip/rename-held`.) Unfortunately, it seems that with that
index 5509efefe872fc054f6c76a339e8f0d76d7c21b1..3bc430f68039e6b0d5cd07a02cd72bdf66873742 100644 (file)
@@ -8,3 +8,7 @@ I found that Debian stable is currently shipping 1.2.3, and on a hunch, I built
 
 > Debian has 1.2.7 now, and I have it installed and searching is working
 > fine with it. --[[Joey]]
+
+> I have this same issue. I tried xapian version 1.2.5. 1.2.8, 1.2.13. I will try and see if installing 1.2.3 fixes this issue. --[[Ramsey]]
+
+> 1.2.3 didn't fix the issue either --[[Ramsey]]
diff --git a/doc/bugs/sidebar_not_updated_in_unedited_subpages.mdwn b/doc/bugs/sidebar_not_updated_in_unedited_subpages.mdwn
new file mode 100644 (file)
index 0000000..c3e0ee1
--- /dev/null
@@ -0,0 +1,9 @@
+I turned on the sidebar plugin, with global_sidebars on (in the web setup page), created a sidebar page in the root, and edited the sidebar a few times.
+
+I then noticed that all pages on the root had been updated with a sidebar, but no subpages (i.e. a/b). Only after editing a subpage did it get a sidebar. Editing sidebar itself only updated subpages with sidebars, the other subpages had not been refreshed (proven by their unchanged filesystem date)  
+
+After calling ikiwiki --setup on the command line all pages were updated. So this seems to be a difference between web-started --setup and command-line --setup. Or it just doesn't work the first time --setup is called after sidebars are enabled.
+
+
+
+
diff --git a/doc/bugs/template_creation_error.mdwn b/doc/bugs/template_creation_error.mdwn
new file mode 100644 (file)
index 0000000..79dccc1
--- /dev/null
@@ -0,0 +1,111 @@
+Hi,
+I am trying to build a template. The compilation of this template results in a weird exception. I have isolated the cause of the exception to the following point:
+
+If i have this in the template code:
+
+\[[!inline<br/>
+pages="\<TMPL_VAR SEL_PAGES\>"<br/>
+template=extract-entry<br/>
+\]]<br/>
+
+There is no problem at all. I can use the template with the desired result. But if I try to use this (just adding the "show" parameter):
+
+\[[!inline <br/>
+pages="\<TMPL_VAR SEL_PAGES>"<br/>
+template=extract-entry<br/>
+show=\<TMPL_VAR CNTPG><br/>
+\]]<br/>
+
+I get this exception on the Git bash console:
+
+<pre>
+$ git push
+Counting objects: 7, done.
+Delta compression using up to 8 threads.
+Compressing objects: 100% (4/4), done.
+Writing objects: 100% (4/4), 410 bytes, done.
+Total 4 (delta 3), reused 0 (delta 0)
+remote: From /home/b-odelama-com/source
+remote:    eb1421e..5e1bac5  master     -> origin/master
+remote: Argument "\x{3c}\x{54}..." isn't numeric in numeric lt (<) at /usr/share/perl5/IkiWiki/Plugin/inline.pm line 231.
+remote: Argument "\x{3c}\x{54}..." isn't numeric in numeric lt (<) at /usr/share/perl5/IkiWiki/Plugin/inline.pm line 231.
+To ssh://b-odelama-com@odelama-com.branchable.com/
+   eb1421e..5e1bac5  master -> master
+</pre>
+
+Please, let me know what to do to avoid this kind of error.
+
+> When you add a template page `templates/foo.mdwn` for use
+> the [[ikiwiki/directive/template]] directive, two things happen:
+>
+> 1. `\[[!template id=foo ...]]` becomes available;
+> 2. a wiki page `templates/foo` is built, resulting in a HTML file,
+>    typically `templates/foo/index.html`
+>
+> The warnings you're seeing are the second of these: when ikiwiki
+> tries to process `templates/foo.mdwn` as an ordinary page, without
+> interpreting the `<TMPL_VAR>` directives, `inline` receives invalid
+> input.
+>
+> This is a bit of a design flaw in [[plugins/template]] and
+> [[plugins/edittemplate]], I think - ideally it would be possible to
+> avoid parts of the page being interpreted when the page is being
+> rendered normally rather than being used as a template.
+>
+> There *is* a trick to avoid parts of the page being interpreted when
+> the page is being used as a template, while having them appear
+> when it's rendered as a page:
+>
+>     <TMPL_IF FALSE>
+>     <!-- This part only appears when being used as a page.
+>          It assumes that you never set FALSE to a true value :-) -->
+>     \[[!meta robots="noindex,nofollow"]]
+>     This template is used to describe a thing. Parameters:
+>     * name: the name of the thing
+>     * size: the size of the thing
+>     </TMPL_IF>
+>
+>     The thing is called <TMPL_VAR name> and its size is <TMPL_VAR size>
+>
+> I suppose you could maybe extend that to something like this:
+>
+>     <TMPL_IF FALSE>
+>     <!-- This part only appears when being used as a page.
+>          It assumes that you never set FALSE to a true value :-) -->
+>     \[[!meta robots="noindex,nofollow"]]
+>     This template is used to describe a thing. Parameters:
+>     * name: the name of the thing
+>     * size: the size of the thing
+>     </TMPL_IF>
+>
+>     <TMPL_IF FALSE>
+>     \[[!if test="included() and !included()" then="""
+>     </TMPL_IF>
+>     <!-- This part only appears when being used as a template. It also
+>          assumes that you never set FALSE to a true value, and it
+>          relies on the [[ikiwiki/pagespec]] "included() and !included()"
+>          never being true. -->
+>     The thing is called <TMPL_VAR name> and its size is <TMPL_VAR size>
+>     <TMPL_IF FALSE>
+>     """]]
+>     </TMPL_IF>
+>
+> but that's far harder than it ought to be!
+>
+> Perhaps the right solution would be to change how the template plugin
+> works, so that templates are expected to contain a new `definetemplate`
+> directive:
+>
+>     This template is used to describe a thing. Parameters:
+>     * name: the name of the thing
+>     * size: the size of the thing
+>     
+>     \[[!definetemplate """
+>     The thing is called <TMPL_VAR name> and its size is <TMPL_VAR size>
+>     """]]
+>
+> with templates not containing a `\[[!definetemplate]]` being treated
+> as if the whole text of the page was copied into a `\[[!definetemplate]]`,
+> for backwards compatibility?
+>
+> --[[smcv]]
diff --git a/doc/bugs/toc_displays_headings_from_sidebar.mdwn b/doc/bugs/toc_displays_headings_from_sidebar.mdwn
new file mode 100644 (file)
index 0000000..469ca8a
--- /dev/null
@@ -0,0 +1,3 @@
+The [[/ikiwiki/directive/toc]] directive scrapes all headings from the page, including those in the sidebar.  So, if the sidebar includes navigational headers, every page with a table of contents will display those navigational headers before the headers in that page's content.
+
+I'd like some way to exclude the sidebar from the table of contents.  As discussed via Jabber, perhaps toc could have a config option to ignore headers inside a nav tag or a tag with id="sidebar".
diff --git a/doc/bugs/trail_excess_dependencies.mdwn b/doc/bugs/trail_excess_dependencies.mdwn
new file mode 100644 (file)
index 0000000..f806a62
--- /dev/null
@@ -0,0 +1,95 @@
+I've just modified the trail plugin to use only presence, and not
+content dependencies. Using content dependencies, particularly to the page
+that defines the trail, meant that every time that page changed, *every*
+page in the trail gets rebuilt. This leads to users setting up sites that
+have horrible performance, if the trail is defined in, for example, the top
+page of a blog.
+
+Unfortunatly, this change to presence dependencies has
+introduced a bug. Now when an existing trail is removed, the pages in the
+trail don't get rebuilt to remove the trail (both html display and state).
+
+> Actually, this particular case is usually OK. Suppose a trail `untrail`
+> contains `untrail/a` (as is the case in the regression
+> test I'm writing), and you build the wiki, then edit `untrail` to no
+> longer be a trail, and refresh. `untrail` has changed, so it is
+> rendered. Assuming that the template of either `untrail` or another
+> changed page happens to contain the `TRAILS` variable (which is not
+> guaranteed, but is highly likely), `I::P::t::prerender`
+> is invoked. It notices that `untrail/a` was previously a trail
+> member and is no longer, and rebuilds it with the diagnostic
+> "building untrail/a, its previous or next page has changed".
+> 
+> Strictly speaking, I should change `I::P::t::build_affected`
+> so it calls `prerender`, so we're guaranteed to have done the
+> recalculation. Fixed in my branch. --[[smcv]]
+
+I think that to fix this bug, the plugin should use a hook to 
+force rebuilding of all the pages that were in the trail, when
+the trail is removed (or changed).
+
+> The case of "the trail is changed" is still broken:
+> if the order of items changes, or the trail is removed,
+> then the logic above means it's OK, but if you
+> change the `\[[!meta title]]` of the trail, or anything else
+> used in the prev/up/next bar, the items won't show that
+> change. Fixed in my branch. --[[smcv]]
+
+There's a difficulty in doing that: The needsbuild hook runs before the scan
+hook, so before it has a chance to see if the trail directive is still there.
+It'd need some changes to ikiwiki's hooks.
+
+> That's what `build_affected` is for, and trail already used it. --s
+
+(An improvement in this area would probably simplify other plugins, which
+currently abuse the needsbuild hook to unset state, to handle the case
+where the directive that resulted in that state is removed.)
+
+I apologise for introducing a known bug, but the dependency mess was too
+bad to leave as-is. And I have very little time (and regrettably, even less
+power) to deal with it right now. :( --[[Joey]] 
+
+[[!template id=gitbranch branch=smcv/ready/trail author="[[Simon_McVittie|smcv]]"]]
+[[!tag patch]]
+
+> I believe my `ready/trail` branch fixes this. There are regression tests.
+>
+> Here is an analysis of how the trail pages interdepend.
+>
+> * If *trail* contains a page *member* which does exist, *member* depends
+>   on *trail*. This is so that if the trail directive is deleted from
+>   *trail*, or if *trail*'s "friendly" title or trail settings are changed,
+>   the trail navigation bar in *member* will pick up that change. This is
+>   now only a presence dependency, which isn't enough to make those happen
+>   correctly. [Edited to add: actually, the title is the only thing that
+>   can affect *member* without affecting the order of members.]
+>
+> * If *trail* contains consecutive pages *m1* and *m2* in that order,
+>   *m1* and *m2* depend on each other. This is so that if one's
+>   "friendly" title changes, the other is rebuilt. This is now only
+>   a presence dependency, which isn't enough to make those happen
+>   correctly. In my branch, I explicitly track the "friendly" title
+>   for every page that's edited and is involved in a trail somehow.
+>
+> * If *trail* has *member* in its `pagenames` but there is no page called
+>   *member*, then *trail* must be rebuilt if *member* is created. This
+>   was always a presence dependency, and is fine.
+>
+> In addition, the `trail` plugin remembers the maps
+> { trail => next item in that trail } and { trail => previous item in
+> that trail } for each page. If either changes, the page gets rebuilt
+> by `build_affected`, with almost the same logic as is used to update
+> pages that link to a changed page. My branch extends this to track the
+> "friendly title" of each page involved in a trail, either by being
+> the trail itself or a member (or both).
+>
+> I think it's true to say that the trail always depends on every member,
+> even if it doesn't display them. This might mean that we can use
+> "render the trail page" as an opportunity to work out whether any of
+> its members are also going to need re-rendering?
+> [Edited to add: actually, I didn't need this to be true, but I made the
+> regression test check it anyway.]
+>
+> --[[smcv]]
+
+>>> Thanks **very** much! [[done]] --[[Joey]]
diff --git a/doc/bugs/undefined_value_as_a_HASH_reference.mdwn b/doc/bugs/undefined_value_as_a_HASH_reference.mdwn
new file mode 100644 (file)
index 0000000..228c3ba
--- /dev/null
@@ -0,0 +1,68 @@
+Hello,
+
+does anyone have an idea why I see the following error when I run websetup (Setup button in Preferences)?
+
+    Error: Can't use an undefined value as a HASH reference at /usr/share/perl5/IkiWiki/Plugin/websetup.pm line 82, line 97.
+
+Maybe, related to this is also
+
+    $ ikiwiki --setup /etc/ikiwiki/auto-blog.setup
+    What will the blog be named? tmpblog
+    What revision control system to use? git
+    What wiki user (or openid) will be admin? wsh
+
+
+    Setting up tmpblog ...
+    Importing /home/wsh/tmpblog into git
+    Initialized empty shared Git repository in /home/wsh/tmpblog.git/
+    Initialized empty Git repository in /home/wsh/tmpblog/.git/
+    [master (root-commit) d6847e1] initial commit
+     8 files changed, 48 insertions(+)
+     create mode 100644 .gitignore
+     create mode 100644 archives.mdwn
+     create mode 100644 comments.mdwn
+     create mode 100644 index.mdwn
+     create mode 100644 posts.mdwn
+     create mode 100644 posts/first_post.mdwn
+     create mode 100644 sidebar.mdwn
+     create mode 100644 tags.mdwn
+    Counting objects: 11, done.
+    Delta compression using up to 4 threads.
+    Compressing objects: 100% (9/9), done.
+    Writing objects: 100% (11/11), 1.53 KiB, done.
+    Total 11 (delta 0), reused 0 (delta 0)
+    Unpacking objects: 100% (11/11), done.
+    To /home/wsh/tmpblog.git
+     * [new branch]      master -> master
+    Directory /home/wsh/tmpblog is now a clone of git repository /home/wsh/tmpblog.git
+    Reference found where even-sized list expected at /usr/share/perl5/IkiWiki/Setup.pm line 177, <GEN4> line 97.
+    Reference found where even-sized list expected at /usr/share/perl5/IkiWiki/Setup.pm line 224, <GEN4> line 97.
+    Use of uninitialized value $section in hash element at /usr/share/perl5/IkiWiki/Setup.pm line 226, <GEN4> line 97.
+    Use of uninitialized value $section in hash element at /usr/share/perl5/IkiWiki/Setup.pm line 227, <GEN4> line 97.
+    Use of uninitialized value $section in concatenation (.) or string at /usr/share/perl5/IkiWiki/Setup.pm line 233, <GEN4> line 97.
+    /etc/ikiwiki/auto-blog.setup: Can't use an undefined value as a HASH reference at /usr/share/perl5/IkiWiki/Setup.pm line 252, <GEN4> line 97.
+
+    usage: ikiwiki [options] source dest
+           ikiwiki --setup configfile
+
+I'm on Debian unstable.
+
+Thanks,
+-Michal
+
+> Some plugin has a broken getsetup hook, and is feeding a corrupted setup list in. Both the websetup and the auto.setup files cause all plugins to be loaded and all their setup to be available. 
+> 
+> This command will help you find the plugin. Here it prints some noise around the rst plugin, for unrelated reasons,
+> but what you're looking for is the plugin printed before the "even sized list" message.
+
+<pre>
+perl -le 'use warnings; use strict; use Data::Dumper; use IkiWiki; %config=IkiWiki::defaultconfig(); use IkiWiki::Setup; my @s=IkiWiki::Setup::getsetup(); foreach my $pair (@s) { print "plugin ".$pair->[0]; my $setup=$pair->[1]; if ($pair->[0] eq "rst") { print Dumper($setup)} my %s=@{$setup} }'
+</pre>
+
+> I was able to replicate this by making a plugin's getsetup hook return a list reference, rather than a list, 
+> and have put in a guard against that sort of thing.
+>  --[[Joey]]
+
+>> Thanks. Your command didn't helped me, but with trial and error approach I found that the victim an old version asciidoc plugin. For some reason, asciidoc was never listed in the output of the command. --[[wentasah]]  
+
+>>> Ok. My fix should prevent the problem, so [[done]] --[[Joey]] 
index b2a8b06323cd7f497918d748eb0b710ef981b10f..9f0a1d1022459d4a00cfbbec88dcf2c86281c0b4 100644 (file)
@@ -46,4 +46,22 @@ and have it render like:
 > there should give some strong hints how to fix this bug, though I haven't
 > tried to apply the method yet. --[[Joey]]
 
+>> As far, as I can see, smileys bug is solved by checking for code/pre. In
+>> this case, however, this is not applicable. WikiLinks/directives *should* be
+>> expanded before passing text to formatter, as their expansion may contain
+>> markup. Directives should be processed before, as they may provide *partial*
+>> markup (eg `template` ones), that have no sense except when in the page
+>> cotext. Links should be processed before, because, at least multimarkdown may
+>> try to expand them as anchor-links.
+>>
+>> For now, my partial solution is to restrict links to not have space at the
+>> start, this way in many cases escaping in code may be done in natural way
+>> and not break copypastability. For example, shell 'if \[[ condition ]];'
+>> will work fine with this.
+>>
+>> Maybe directives can also be restricted to only be allowed on the line by
+>> themselves (not separated by blank lines, however) or something similar.
+>>
+>> --[[isbear]]
+
 [[!debbug 487397]]
diff --git a/doc/bugs/yaml:xs_codependency_not_listed.mdwn b/doc/bugs/yaml:xs_codependency_not_listed.mdwn
new file mode 100644 (file)
index 0000000..f136d8b
--- /dev/null
@@ -0,0 +1,13 @@
+YAML:XS is not listed as a dep in the spec file which results in
+
+```
+HOME=/home/me /usr/bin/perl -Iblib/lib   ikiwiki.in -dumpsetup ikiwiki.setup
+Can't locate YAML/XS.pm in @INC (@INC contains: . blib/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at (eval 39) line 2.
+BEGIN failed--compilation aborted at (eval 39) line 2.
+make: *** [ikiwiki.setup] Error 2
+error: Bad exit status from /var/tmp/rpm-tmp.Sgq2QK (%build)
+```
+
+when trying to build
+
+> Ok, added. [[done]] --[[Joey]] 
index 486a4d1864a2e731cb9d7d6cd6bc37c9f2705609..7d31ddf1078cdce298ced4ff5c30e66583a585be 100644 (file)
@@ -4,7 +4,7 @@ ikiwiki's own wiki. ikiwiki provides a [[bug_tracker|bugs]], a
 [[TODO_list|TODO]], and "discussion" sub-pages for every page, as well as a
 [[forum]] for general questions and discussion. ikiwiki
 developers monitor [[RecentChanges]] closely, via the webpage, email,
-[CIA](http://cia.navi.cx), and IRC, and respond in a timely fashion.
+and IRC, and respond in a timely fashion.
 
 You could also drop by the IRC channel `#ikiwiki` on
 [OFTC](http://www.oftc.net/) (`irc.oftc.net`), or use the
diff --git a/doc/examples/softwaresite/bugs/hghg.mdwn b/doc/examples/softwaresite/bugs/hghg.mdwn
new file mode 100644 (file)
index 0000000..cece641
--- /dev/null
@@ -0,0 +1 @@
+hghg
diff --git a/doc/forum/Background_picture_and_css.mdwn b/doc/forum/Background_picture_and_css.mdwn
new file mode 100644 (file)
index 0000000..8271009
--- /dev/null
@@ -0,0 +1,8 @@
+Is it possible to put two different background pictures into the right and left sides of the following ikiwiki css?
+
+[lessish css theme](https://raw.github.com/spiffin/ikiwiki_lessish/master/lessish.css)
+
+Is it also possible to have a background like this: [http://ysharifi.wordpress.com/](http://ysharifi.wordpress.com/)
+or this [tex.stackexchange.com](tex.stackexchange.com)
+
+I am not a css expert so, it would be nice if you could provide some details.
diff --git a/doc/forum/CGI_script_and_HTTPS.mdwn b/doc/forum/CGI_script_and_HTTPS.mdwn
new file mode 100644 (file)
index 0000000..2f25500
--- /dev/null
@@ -0,0 +1,29 @@
+Dear ikiwiki folks,
+
+using Debian Wheezy and ikiwiki 3.20120629 for some reason when accessing the site using HTTP (and not HTTPS), going to Edit, so executing the CGI script, all URLs are prepended with HTTPS, which I do not want.
+
+        <base href="https://www.example.org/" />
+
+Trying to look at the source, I guess it is originating from `IkiWiki/CGI.pm`.
+
+        sub printheader ($) {
+               my $session=shift;
+       
+               if (($ENV{HTTPS} && lc $ENV{HTTPS} ne "off") || $config{sslcookie}) {
+                       print $session->header(-charset => 'utf-8',
+                               -cookie => $session->cookie(-httponly => 1, -secure => 1));
+               }
+               else {
+                       print $session->header(-charset => 'utf-8',
+                               -cookie => $session->cookie(-httponly => 1));
+               }
+        }
+
+Does it check if HTTPS is enabled in the environment? During `ikiwiki --setup example.setup` or when the CGI script is run when the site is accessed (for example in an Apache environment)?
+
+Can this somehow be disabled in ikiwiki. Reading the code I guess I could somehow set `HTTPS = off` somewhere in the `VirtualHost` section of the Apache configuration.
+
+
+Thanks,
+
+--[[PaulePanter]]
diff --git a/doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment b/doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment
new file mode 100644 (file)
index 0000000..03f1032
--- /dev/null
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-11-05T11:27:02Z"
+ content="""
+IkiWiki generates self-referential URLs using the `url` and `cgiurl`
+configuration parameters, and the `urlto()` and `cgiurl()` functions;
+the code you quoted isn't involved (it's choosing whether to set
+HTTPS-only cookies or not, rather than choosing how to generate
+self-referential URLs).
+
+If you want your wiki to be accessible via both HTTP and HTTPS, and use
+whichever the user first requested, you should set both `url` and
+`cgiurl` to the same URI scheme and hostname with no port specified,
+either both `http` or both `https`, for instance:
+
+    url: http://www.example.com/
+    cgiurl: http://www.example.com/ikiwiki.cgi
+
+or
+
+    url: https://example.org/wiki/
+    cgiurl: https://example.org/cgi-bin/ikiwiki
+
+(or the Perl-syntax equivalents if you're not using a YAML
+setup file).
+
+If you use one of those, IkiWiki will attempt to generate
+path-only links, like \"/wiki/\" and \"/cgi-bin/ikiwiki?...\",
+whenever it's valid to do so. A visitor using HTTP will stay
+on HTTP and a visitor using HTTPS will stay on HTTPS.
+
+The choice of `http` or `https` for the `url` and `cgiurl`
+still matters when a URL *must* be absolute, such as in an
+RSS feed.
+
+I improved this code in late 2010 for this todo item:
+[[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]].
+It's possible that it has regressed (that's happened
+a couple of times). If it has, please quote your exact
+`url` and `cgiurl` configuration.
+"""]]
index ebea43697b8ef745225ffc5ac6e3f8be8a7da2ed..251cd6d9f9cfb22e5c92651dce6f02a426308316 100644 (file)
@@ -15,3 +15,5 @@ I'm not sure how I go about swapping the link on the day number to a link to, I
 and a suitable whilst loop looks to be all that's needed...
 
 Any pointers appreciated.
+
+A [[!taglink patch]] has been proposed in [comment](#comment-d6f94e2b779d1c038b6359aad79ed14b)
diff --git a/doc/forum/Can_ikiwiki_be_configured_as_multi_user_blog__63__.mdwn b/doc/forum/Can_ikiwiki_be_configured_as_multi_user_blog__63__.mdwn
new file mode 100644 (file)
index 0000000..118b534
--- /dev/null
@@ -0,0 +1,7 @@
+All the ikiwiki blogs I have seen have a single user blog. Is it possible to give every user a blog, where they can create their own pages in their own directory = based on their user name? 
+
+I feel that a wiki might give more options in the way users share and collaborate when compared to a blog engine (like Word Press in multi user format)
+
+Is this the best place to post a question like this? There doesn't seem to be much traffic in this forum
+Thanks for your help
+Richard
diff --git a/doc/forum/Email_notifications_for_comment_moderation.mdwn b/doc/forum/Email_notifications_for_comment_moderation.mdwn
new file mode 100644 (file)
index 0000000..6a840ce
--- /dev/null
@@ -0,0 +1,3 @@
+I use both [[plugins/moderatedcomments/]] and [[plugins/anonok]] on my [blog](http://feeding.cloud.geek.nz) but having to remember to visit the comment moderation page manually is not ideal.
+
+Is there a way to get an email notification (or maybe even just an RSS feed) whenever a new comment enters the moderation queue?
diff --git a/doc/forum/Email_notifications_for_comment_moderation/comment_1_668bf6a21310dcc8b882bc60a130ba06._comment b/doc/forum/Email_notifications_for_comment_moderation/comment_1_668bf6a21310dcc8b882bc60a130ba06._comment
new file mode 100644 (file)
index 0000000..0614072
--- /dev/null
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm6VdLM7IKcNgkDiJ2YKHpcWli9bRLsZDk"
+ nickname="Oscar"
+ subject="How to get a comment moderation feed"
+ date="2013-02-25T18:04:21Z"
+ content="""
+I was looking for the same subject and I have found the following:
+
+http://ikiwiki.info/tips/comments_feed/
+
+
+"""]]
diff --git a/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name.mdwn b/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name.mdwn
new file mode 100644 (file)
index 0000000..ad52c00
--- /dev/null
@@ -0,0 +1,11 @@
+I tried to upload a file to my wiki last week, and got this error:
+
+    Error: CGI::tmpFileName failed to return the uploaded file name
+
+This used to work, and I honestly don't know what could have changed to screw it up.
+
+I see that there's a lot of frustrated comments around this particular block of code in `attachment.pm`; so, for the record, I'm on Debian 6, using perl `5.10.1-17squeeze4`.
+
+Any thoughts?
+
+~jonathon
diff --git a/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_1_66c321b9eb618d20872cee7d6ca9e44c._comment b/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_1_66c321b9eb618d20872cee7d6ca9e44c._comment
new file mode 100644 (file)
index 0000000..fb49900
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlRjjrKEyPmXnh2qBEGx9PgH5DP32wCMAQ"
+ nickname="Jonathon"
+ subject="ikiwiki version"
+ date="2013-01-02T14:59:19Z"
+ content="""
+I should also identify that I'm using ikiwiki `3.20100815.9`.
+"""]]
diff --git a/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_2_80296d67c7f1dd75b56b85c14f5efa3b._comment b/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_2_80296d67c7f1dd75b56b85c14f5efa3b._comment
new file mode 100644 (file)
index 0000000..e765941
--- /dev/null
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlRjjrKEyPmXnh2qBEGx9PgH5DP32wCMAQ"
+ nickname="Jonathon"
+ subject="figured it out"
+ date="2013-01-19T15:59:09Z"
+ content="""
+It looks like this was just another expression of [the header size limit issue] [1] that has already been reported and addressed.
+
+I got `3.20120629` from `squeeze-backports`, and my issue has been resolved.
+
+[1]: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=638009
+"""]]
diff --git a/doc/forum/Forward_slashes_being_escaped_as_252F/comment_1_7702cf6d354ab600d6643b075b9f09da._comment b/doc/forum/Forward_slashes_being_escaped_as_252F/comment_1_7702cf6d354ab600d6643b075b9f09da._comment
new file mode 100644 (file)
index 0000000..7c9ccbc
--- /dev/null
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawm6gCEo_Z36OJ7x5kyZn52lEVvyjn3zSUc"
+ nickname="Ángel"
+ subject="comment 1"
+ date="2013-05-31T16:03:03Z"
+ content="""
+Simply add the NE (No escape) flag:
+
+RewriteEngine on
+RewriteCond %{HTTP_HOST} ^www\.ciffer\.net$
+RewriteRule /(.*) http://ciffer.net/$1 [L,R,NE]
+"""]]
diff --git a/doc/forum/How_can_I_prevent_spam__63__.mdwn b/doc/forum/How_can_I_prevent_spam__63__.mdwn
new file mode 100644 (file)
index 0000000..44e3192
--- /dev/null
@@ -0,0 +1,17 @@
+I am getting continuous spam like this:
+
+    discussion  85.25.146.11  web  11:02:19 05/17/13  2rand[0,1,1]
+    discussion  85.25.146.11  web  11:02:13 05/17/13  2rand[0,1,1]
+
+The bot uses an IP address as the username and puts '2rand[0,1,1]' as comment text.
+
+I do not have a page 'discussion' in use, so I have redirected this page with an apache2
+Alias to a static page, just in case anyone stumbles on it.  This means it cannot really 
+be edited via the web. However the bots that post 
+this spam are evidently not opening the page to edit it, but merely sending a cgi request 
+as if they had edited the page.  The result is that no damage is done on the site and no 
+benefit is achieved for the spammer since google cannot see the result.  However, the 
+logs are stuffed with spurious entries and a page is constantly recompiled, which wastes 
+resources.  
+
+Is there some way to reject edits that do not arise from an established session?
diff --git a/doc/forum/How_can_I_prevent_spam__63__/comment_1_fd26fb7f1569e8c44ba8262794f938db._comment b/doc/forum/How_can_I_prevent_spam__63__/comment_1_fd26fb7f1569e8c44ba8262794f938db._comment
new file mode 100644 (file)
index 0000000..a729328
--- /dev/null
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ nickname="joey"
+ subject="comment 1"
+ date="2013-05-17T17:55:46Z"
+ content="""
+Normally ikiwiki requires a valid session cookie of a logged in user to edit pages. It sounds like you may have the opendiscussion or anonok plugins enabled, which allows anyone to edit without logging in. Recommend disabling them.
+
+Since you know the spammer's IP, put it into ikiwiki.setup:
+
+<pre>
+banned_users:
+  - ip(85.25.146.11)
+</pre>
+
+If the user was logging in, you could also put their username in the ban list.
+
+You can also try enabling the blogspam plugin.
+"""]]
diff --git a/doc/forum/How_can_I_prevent_spam__63__/comment_2_d098124f005976ee815d25c883bc9106._comment b/doc/forum/How_can_I_prevent_spam__63__/comment_2_d098124f005976ee815d25c883bc9106._comment
new file mode 100644 (file)
index 0000000..53e7433
--- /dev/null
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://claimid.com/richard-lyons"
+ nickname="richard-lyons"
+ subject="comment 2"
+ date="2013-05-17T20:56:23Z"
+ content="""
+I did indeed have opendiscussion active.  I shall wait to see what happens after disabling it.
+
+The bots seem to make 5 consecutive edits at short intervals (around 2 minutes) using an IP 
+address as a username.  I do not know if the IP is the one from which they work.  There are 
+usually two or three sets of five edits using different IP addresses as username in each hour.
+
+I did try blocking specific IPs but they constantly change.
+
+It would be good if blocking could match a regexp, but as far as I can see this is not an option,
+"""]]
diff --git a/doc/forum/How_can_I_prevent_spam__63__/comment_3_deb434d01aaefa18d2791e48d6c824ae._comment b/doc/forum/How_can_I_prevent_spam__63__/comment_3_deb434d01aaefa18d2791e48d6c824ae._comment
new file mode 100644 (file)
index 0000000..64783be
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://claimid.com/richard-lyons"
+ nickname="richard-lyons"
+ subject="SOLVED -- How can I prevent spam?"
+ date="2013-05-18T08:13:19Z"
+ content="""
+I can now confirm that this particular attack has stopped after removing the opendiscussion plugin.
+"""]]
diff --git a/doc/forum/How_do_I_enable_OpenID__63__.mdwn b/doc/forum/How_do_I_enable_OpenID__63__.mdwn
new file mode 100644 (file)
index 0000000..a4e1a45
--- /dev/null
@@ -0,0 +1 @@
+I'm trying to set up a new ikiwiki based blog and I want commentors to be able to log in with OpenID.  To enable OpenID I installed Net::OpenID::Consumer, and enabled the openid plugin in my blog.setup file and ran the ikiwiki --setup command.  Despite doing that I still only see the username and password in the login screen.  What am I missing?
diff --git a/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn b/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn
new file mode 100644 (file)
index 0000000..537ba61
--- /dev/null
@@ -0,0 +1,3 @@
+How to add additional links to the gray horizontable bar under page title?  
+
+What I meant by the gray horizontable bar shows "Edit RecentChanges Preferences".  I want to disable those three but add some other links to other pages in my website.
diff --git a/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment b/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment
new file mode 100644 (file)
index 0000000..1bb3fa7
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmb2CAGUNU_Kx6YSImD2ox6MtjuaM6Jp1E"
+ nickname="Nicolas"
+ subject="comment 1"
+ date="2012-11-09T08:34:42Z"
+ content="""
+You could use custom templates and hardcode those links there.
+"""]]
diff --git a/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn
new file mode 100644 (file)
index 0000000..3f771e7
--- /dev/null
@@ -0,0 +1,14 @@
+In a Ikiwiki instance, I made a subdirectory to hold blog pages
+
+    /website
+    blog.mdwn
+    ...
+
+    /website/blog
+    /website/blog/blog1.mdwn
+    /website/blog/blog2.mdwn
+    ...
+
+On blog.mdwn,  reader by default see the last 10 posts, but it seems there is no link to blog pages older than that. What's a good way to make titles of blog pages older also somehow visible to reader at the blog front page `blog.mdwn`?
+
+On any individual blog page such as `blog1.mdwn`, there is not a link to the blog pages immediately before and after it. How to make such links?
diff --git a/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment
new file mode 100644 (file)
index 0000000..ce99b84
--- /dev/null
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="use trail=yes, and an extra inline with archive=yes"
+ date="2012-08-04T17:22:18Z"
+ content="""
+To get just the titles of older posts, you want an inline with
+`archive=\"yes\"`, probably one that skips the same number of posts
+displayed in full:
+
+    [[!inline pages=\"blog/* and !*/Discussion\"
+      skip=\"10\" feeds=\"no\" archive=\"yes\"]]
+
+To get 'next' and 'previous' links on each post, use a recent
+IkiWiki version, enable the [[plugins/trail]] plugin and add
+`trail=\"yes\"` to your main inline:
+
+    [[!inline pages=\"blog/* and !*/Discussion\"
+      show=\"10\" trail=\"yes\"]]
+
+For instance see
+[my blog](http://git.pseudorandom.co.uk/pseudorandom.co.uk/smcv.git/blob/83e9a713d77778b58460ed04f6c48665d817f3cd:/index.mdwn).
+"""]]
diff --git a/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment
new file mode 100644 (file)
index 0000000..5546c47
--- /dev/null
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmKyeW2G4jjSdnL1m6kPPtAiGFUBsnYCfY"
+ nickname="FName"
+ subject="How to install the trail package?"
+ date="2012-08-09T00:11:26Z"
+ content="""
+I tried putting
+
+trail 
+
+in
+
+    add_plugins => [qw{ 
+    ...
+    trail
+    ...
+    }]
+
+in site.setup and rebuild.  It gives error
+
+    Failed to load plugin IkiWiki::Plugin::trail: Can't locate IkiWiki/Plugin/trail.pm in @IN ...
+
+"""]]
diff --git a/doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn b/doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn
new file mode 100644 (file)
index 0000000..e4901d7
--- /dev/null
@@ -0,0 +1,26 @@
+My Ikiwiki and blog has structure
+
+    /website
+    blog.mdwn
+    ...
+
+    /website/blog
+    /website/blog/blog1.mdwn
+    /website/blog/blog2.mdwn
+    ...
+
+After running
+
+    ikiwiki-calendar ./foo.setup "/blog/*"
+
+I got a
+
+   /website/archives/
+
+and archive pages in it.
+
+I'd like to have it in 
+
+   /website/blog/archives/
+
+as those are archive pages for blog pages only.  How to do it?
diff --git a/doc/forum/How_to_set_up_a_page_as_internal__63__.mdwn b/doc/forum/How_to_set_up_a_page_as_internal__63__.mdwn
new file mode 100644 (file)
index 0000000..ed77129
--- /dev/null
@@ -0,0 +1,5 @@
+I have a folder with few administrative tasks, like a page showing the comments waiting for moderation.
+
+There is no link from "normal/public" pages in my site to this administrative pages, but it doesn't prevent the possibility of any person writing down that address in the browser address-bar or finding that address in the browser navigation history.
+
+Please, is there any way or best-practice restricting the access to this kind of pages? I know that these pages will eventually ask the user to log-in as admin, but I don't want them to see this stuff.
diff --git a/doc/forum/How_to_set_up_git_repository_hook___63__.mdwn b/doc/forum/How_to_set_up_git_repository_hook___63__.mdwn
new file mode 100644 (file)
index 0000000..34bc4ac
--- /dev/null
@@ -0,0 +1,19 @@
+Hi,
+
+I want to set up hooks for Git, and I don't know how to. Is there any documentation somewhere? Basically, I'd like to do what [[/ikiwiki-makerepo]] does, but manually.
+
+Why? Because I want to have a special layout to my repository. Especially, I want to include at the root level some special files:
+
+- the nginx configuration
+- the script that installs the nginx configuration to the system
+- the script that starts the fast-cgi wrapper
+- the `ikiwiki.setup` file
+- ...
+
+And I want the ikiwiki sources to be in a subdirectory `src/` and the generated files in `out/` (where the nginx configuration points).
+
+So, what is the special `post-update` hook generated by [[/ikiwiki-makerepo]]? I noticed it was an ELF file, why not a script? What does it do?
+
+Thanks,
+
+Mildred
diff --git a/doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn b/doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn
new file mode 100644 (file)
index 0000000..09cf014
--- /dev/null
@@ -0,0 +1,13 @@
+How to style main sidebar and SubPage sidebar differently using CSS?
+
+I have a main sidebar
+
+   /sidebar.mdwn
+
+and a SubPage sidebar
+
+  /blog/sidebar.mdwn
+
+How to style the two differently using CSS?
+
+For example I'd like the sidebar shown on any page inside /blog to have a blue border and any other page outside of /blog to have a sidebar with red border.
diff --git a/doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn b/doc/forum/Ikiwiki_themes_for_mobile_devices__63__.mdwn
new file mode 100644 (file)
index 0000000..dc1b31c
--- /dev/null
@@ -0,0 +1,7 @@
+Has anyone else created ikiwiki themes for mobile devices like phones and tablets?
+
+I've been using Blueview theme for a few years and finally tried to adapt the theme for my phone.
+My local.css is [here](http://mcfrisk.kapsi.fi/local.css), and my hobby web page full of images and videos [here](http://mcfrisk.kapsi.fi/skiing/).
+
+Previously I also had problems like wasted screen space, big minimum width and images not scaled down to the CSS element. Those got fixed as well.
+Would be nice if others could test that and maybe share their setups.
diff --git a/doc/forum/Multiple_urls.mdwn b/doc/forum/Multiple_urls.mdwn
new file mode 100644 (file)
index 0000000..03125d2
--- /dev/null
@@ -0,0 +1,8 @@
+Hi,
+Is there a way of making a given ikiwiki instance accessible both from the LAN where it's server is and from the WAN?
+
+Say I have ikiwiki installed on a server connected to a router. That router has  port forwarding and dyndns configured so I could open ikiwiki from outside the LAN. Trying to open normal ikiwiki pages, from outside the LAN, or with a proxy, works. However, the Editing and Preferences pages, for example, redirect to http://192.168.x.x/~username/ikiwiki/ikiwiki.cgi?page=posts%2Fhello_world&do=edit (in the case of the edit page), which of course only exists inside the LAN, and fails loading.
+
+Editing the "url" and "cgiurl" directives in the .setup file to point to the dyndns address makes it work from the outside, but I can't edit the pages from inside the LAN anymore with this configuration. The normal pages, once again, are accessible. Edit or Preferences, on the other hand, redirect to the public address, which I can't open from inside the same LAN it points to.
+
+For this reason I ask, is there an way to have multiple urls point to the same ikiwiki page, namely a LAN IP url and a public IP one? Thanks in advance.
diff --git a/doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment b/doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment
new file mode 100644 (file)
index 0000000..9806f53
--- /dev/null
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ ip="60.241.8.244"
+ subject="A Few Ways To Do This"
+ date="2012-10-09T02:02:09Z"
+ content="""
+I don't think one can alter IkiWiki to have multiple URLs, because the URL is built in to the CGI when the CGI is generated.
+
+1. Use the external hostname (say, foo.com) for the URL, and tell your local machine that foo.com has an IP of 192.168.x.x, thus making it accessible from within the LAN.
+2. Give the URL as a relative-absolute URL; that is, rather than \"http://foo.com/ikiwiki.cgi\" give it as \"/ikiwiki.cgi\". This doesn't always work, though.
+3. Build two versions of the site from the same git repo. One for access from inside, and one for access from outside. Both setup files would need to be identical, apart from
+
+    * the destination directory
+    * the URLs
+    * the git-update file name; one would need to call it something other than post-update.
+    
+    Then one would make a new \"post-update\" file which calls *both* of the ikiwiki post-update scripts, so that both versions of the site are updated when you make a change.
+    Then set up your web-server to point to the \"external\" directory for the external site, and the \"internal\" directory for the internal site; easy enough to do if you use virtual hosts.
+
+Yes, I know the third one is somewhat complex... I use the idea myself in order to make two versions of a site where one is editable and the other is not, but that's not what you're aiming for, I know.
+
+"""]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude/comment_6_1dccdfebad31446200213a2cae25f0e2._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_6_1dccdfebad31446200213a2cae25f0e2._comment
new file mode 100644 (file)
index 0000000..d93684d
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkiulxucQx_YZQZUVJdNF6oMaZwWb8JF2M"
+ nickname="Martin"
+ subject="Reproduced"
+ date="2012-07-25T02:23:13Z"
+ content="""
+I also encountered this bug (having to delete indexdb) in 3.20120629.
+
+-- Martin
+"""]]
diff --git a/doc/forum/Problem_with_local_git_commit.mdwn b/doc/forum/Problem_with_local_git_commit.mdwn
new file mode 100644 (file)
index 0000000..e9dfdb4
--- /dev/null
@@ -0,0 +1,42 @@
+I have a problem when I edit my wiki with a text editor and use just git to commit. 
+
+Suppose `iki` is my scrdir and `iki.git` my repository. Then I did `git clone iki.git myiki` to get a copy. Then I do 
+
+    cd myiki 
+    echo "test" >> somepage.mdwm"
+    git add somepage.mdwm
+    git pull 
+    git commit -m "test"
+    git push
+
+Then I get the following error message
+
+    Counting objects: 5, done.        
+    Delta compression using up to 2 threads.
+    Compressing objects: 100% (2/2), done.
+    Writing objects: 100% (3/3), 287 bytes, done.
+    Total 3 (delta 1), reused 0 (delta 0)
+    Unpacking objects: 100% (3/3), done.
+    remote: From /home/myuser/iki
+    remote:    32bb6be..1f3a647  master     -> origin/master
+    remote: There are no candidates for merging among the refs that you just fetched.
+    remote: Generally this means that you provided a wildcard refspec which had no
+    remote: matches on the remote end.
+    remote: 'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 207.
+    remote: skipping bad filename local.css~
+    remote: skipping bad filename #tex_sandbox.mdwn#
+    To /home/myuser/iki.git
+       32bb6be..1f3a647  master -> master
+
+When I check the repository via gitk I see that everything seems to be ok, if I check the scrdir the same way origin master is one step away from master and the change doesn't appear on the iki web page. Then I tried to do a `sudo git pull --prune origin master` in my scrdir which sets master to the head, but the change isn't there anyway. It foremost appears when I do a second change as above or if I do `sudo ikiwiki --setup iki.setup`.
+
+By the way the setup gives me a similar error message:
+
+    successfully generated /var/www/iki/ikiwiki.cgi  
+    successfully generated /home/myuser/iki.git/hooks/post-update
+    There are no candidates for merging among the refs that you just fetched.
+    Generally this means that you provided a wildcard refspec which had no
+    matches on the remote end.
+    'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 207.
+
+Any ideas what may be wrong here and how to fix this?
diff --git a/doc/forum/Refresh_or_recreate_style.css__63__.mdwn b/doc/forum/Refresh_or_recreate_style.css__63__.mdwn
new file mode 100644 (file)
index 0000000..262b0e3
--- /dev/null
@@ -0,0 +1,40 @@
+I was trying to use plain blueview theme but that's not what I see in the installed style.css:
+
+    ~/src/ikiwiki/themes/blueview$ grep bzed style.css
+    /*    bzed theme for ikiwiki
+    ~/src/ikiwiki/themes/blueview$ wc -l style.css
+    281 style.css
+    $ grep bzed ~/www/style.css
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    $ wc -l ~/www/style.css
+    7913
+
+I have installed ikiwiki to my home directory on the shared server and it seems the big css file is there too:
+
+    $ grep bzed ~/bin/share/ikiwiki/themes/blueview/style.css 
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    /*    bzed theme for ikiwiki
+    $ wc -l ~/bin/share/ikiwiki/themes/blueview/style.css 
+    7913
+
+Is the style.css really supposed to be that big?
+If not, how to create it from scratch?
+
+Reason why I'm debugging the css is that I'd like to make it better on small handset screens, like drop all margins, inline or hide sidebar etc. Chromium shows that the processed css is quite a mess.
diff --git a/doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment b/doc/forum/Refresh_or_recreate_style.css__63__/comment_1_3274be931d0b543c7f7cf641810817aa._comment
new file mode 100644 (file)
index 0000000..608dca0
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://mcfrisk.myopenid.com/"
+ nickname="mikko.rapeli"
+ subject="bug/feature in Makefile.PL"
+ date="2013-03-30T11:53:41Z"
+ content="""
+Theme style.css files were appended when installing in Makefile.PL. IMO overwriting the destination files is more correct. Sent a patch to Joey.
+"""]]
diff --git a/doc/forum/Setting_http__95__proxy.mdwn b/doc/forum/Setting_http__95__proxy.mdwn
new file mode 100644 (file)
index 0000000..3bf8a76
--- /dev/null
@@ -0,0 +1,22 @@
+Hi! My wiki is behind a proxy and, as I understood looking in the web, I need to set the environment variables using ENV inside the wiki's config.
+
+So far I tried:
+
+ENV: {
+  http_proxy => 'http://proxy.uns.edu.ar:1280/',
+  https_proxy => 'http://proxy.uns.edu.ar:1280/'
+}
+
+without luck, as I get:
+
+
+YAML::XS::Load Error: The problem:
+
+    found unexpected ':'
+
+was found at document: 1, line: 85, column: 22
+while scanning a plain scalar at line: 85, column: 3
+usage: ikiwiki [options] source dest
+       ikiwiki --setup configfile
+
+What am I missing? (maybe learning perl?)
diff --git a/doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment b/doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment
new file mode 100644 (file)
index 0000000..3623652
--- /dev/null
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-10-10T13:45:10Z"
+ content="""
+If your wiki configuration is written in YAML (it says IkiWiki::Setup::Yaml near the top), the correct syntax is something like
+
+    ENV:
+      http_proxy: http://proxy.uns.edu.ar:1280/
+      https_proxy: http://proxy.uns.edu.ar:1280/
+
+or
+
+    ENV: { http_proxy: 'http://proxy.uns.edu.ar:1280/', https_proxy: 'http://proxy.uns.edu.ar:1280/' }
+
+(many variations are possible, see <http://www.yaml.org/>).
+
+The syntax you quoted is correct for Perl-syntax setup files (which will mention IkiWiki::Setup::Standard near the top), but not YAML ones.
+"""]]
diff --git a/doc/forum/Slow_ikiwiki_after_first_run.mdwn b/doc/forum/Slow_ikiwiki_after_first_run.mdwn
new file mode 100644 (file)
index 0000000..db07f6d
--- /dev/null
@@ -0,0 +1 @@
+I have local ikiwiki on my notebook. When I save an edit the first time after booting and logging in, saving is very slow. Any idea how to fix this?
diff --git a/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment b/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment
new file mode 100644 (file)
index 0000000..ff0d79d
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://andrewspiers.pip.verisignlabs.com/"
+ ip="118.209.91.42"
+ subject="passing environment variables."
+ date="2012-08-24T03:47:07Z"
+ content="""
+I am getting this 'Error: \"do\" parameter missing' when trying to log in as well. I am using Apache and Firefox. The Apache error log says \"Died at /usr/share/perl5/IkiWiki/CGI.pm line 428.\" when it dies.
+
+I do have ssl set up, not sure if this is part of the problem?
+"""]]
diff --git a/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment b/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment
new file mode 100644 (file)
index 0000000..53c44d1
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://andrewspiers.pip.verisignlabs.com/"
+ ip="118.209.91.42"
+ subject="comment 9"
+ date="2012-08-24T04:29:06Z"
+ content="""
+SSL was the problem, it was necessary to specify https:// in the url=> and cgiurl=> parameters in ikiwiki.setup, the redirect wasn't working otherwise.
+"""]]
diff --git a/doc/forum/Translating_ikiwiki_interface.mdwn b/doc/forum/Translating_ikiwiki_interface.mdwn
new file mode 100644 (file)
index 0000000..4003302
--- /dev/null
@@ -0,0 +1,2 @@
+I am using ikiwiki for a spanish language wiki. I've read the [[translation]] page and [[plugins/po]] plugin page but it is not completely clear to me. As I understand it the po plugin is the recommended way to create translated versions of existing pages in your wiki based on a master language.  But I actually don't need that as myself and other users already edit the wiki in spanish.  What I would actually like is to have the ikiwiki interface itself translated into spanish. 
+Is it possible to have my wiki always appear in spanish? I can see that the debian package already includes po files for spanish.  How do i activate the spanish translation permanently? Did I miss something obvious?
diff --git a/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn b/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn
new file mode 100644 (file)
index 0000000..4fee07d
--- /dev/null
@@ -0,0 +1,9 @@
+It occurred to me the difference between tag and taglink, as described in http://ikiwiki.info/ikiwiki/directive/tag/ is just that the latter enable the option to have a displayed form of the tag different from the tag itself, e.g. a tag `foo` can be displayed as `bar` using 
+
+    \[[!taglink foo|bar]]
+
+while with tag you can only display the tag `foo` as itself
+
+    \[[!tag foo]]
+
+Is that it?
diff --git a/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment b/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment
new file mode 100644 (file)
index 0000000..2394445
--- /dev/null
@@ -0,0 +1,49 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-08-19T15:05:35Z"
+ content="""
+`\[[!tag]]` does not produce any output in the body of the page, but
+stores an invisible tag (which, in the default templates, gets displayed
+in the footer of the page).
+
+For instance, this
+
+    Here is some text about badgers
+    \[[!tag badger]]
+
+or this
+
+    \[[!tag badger]]
+    Here is some text about badgers
+
+or even this
+
+    Here is some text about \[[!tag badger]]badgers
+
+will all come out like this:
+
+    Edit | RecentChanges | etc.
+    ----
+    Here is some text about badgers
+    ----
+    tags: badger
+
+`\[[!taglink]]` produces a [[ikiwiki/WikiLink]] in the body of the
+page, *and* stores an invisible tag like `\[[!tag]]`.
+
+So this:
+
+    Some text about \[[!tag mushrooms]] and toadstools
+
+renders like this
+
+    Edit | RecentChanges | etc.
+    ----
+    Some text about _mushrooms_ and toadstools
+    ----
+    tags: mushrooms
+
+where `_mushrooms_` represents a hyperlink.
+"""]]
diff --git a/doc/forum/Xapian_search:_empty_postlist_table/comment_4_40479ac2cfbca609f5f423e539a20ee0._comment b/doc/forum/Xapian_search:_empty_postlist_table/comment_4_40479ac2cfbca609f5f423e539a20ee0._comment
new file mode 100644 (file)
index 0000000..a120f97
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlXywgEUJjKArnORJR-5hmNFv8bTraXO1Y"
+ nickname="Ramsey"
+ subject="The same issue is happening with me"
+ date="2013-03-06T13:10:15Z"
+ content="""
+I use ikiwiki version 3.20130212 and tried xapian versions 1.2.5, 1.2.8, 1.2.13. All to no avail. The postlist.DB file is empty for me. I think that is the crux of the problem. Does anybody know why this could be?
+"""]]
diff --git a/doc/forum/Xapian_search:_empty_postlist_table/comment_5_397443138da276e11c2e9b9fa7b51406._comment b/doc/forum/Xapian_search:_empty_postlist_table/comment_5_397443138da276e11c2e9b9fa7b51406._comment
new file mode 100644 (file)
index 0000000..56dd7c6
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawljJoWAYhI55qm4hRLdzIOQBNMVB6fgrs8"
+ nickname="Ramsey"
+ subject="comment 5"
+ date="2013-03-06T22:42:54Z"
+ content="""
+Tried version xapian 1.2.3  and it did not work either. Can someone please help me debug this?
+"""]]
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_4_d5d0174e09a94359c23fd9c006a22bbc._comment b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_4_d5d0174e09a94359c23fd9c006a22bbc._comment
new file mode 100644 (file)
index 0000000..57c99be
--- /dev/null
@@ -0,0 +1,50 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmKyeW2G4jjSdnL1m6kPPtAiGFUBsnYCfY"
+ nickname="FName"
+ subject="Still can't use ikiwiki on Mac OS X"
+ date="2012-10-21T17:12:15Z"
+ content="""
+I'm still not able to use Ikiwiki on Mac:
+
+    $ ikiwiki --setup ./web.setup
+    generating wrappers..
+    rebuilding wiki..
+    Cannot decode string with wide characters at /opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/Encode.pm line 174.
+
+
+       $ ls -la /opt/local/bin/perl*
+       lrwxr-xr-x  1 root  admin     20 Oct 21 12:06 /opt/local/bin/perl -> /opt/local/bin/perl5
+       lrwxr-xr-x  1 root  admin     23 Oct 21 12:06 /opt/local/bin/perl5 -> /opt/local/bin/perl5.12
+       -rwxr-xr-x  1 root  admin   9896 Jun 26 01:39 /opt/local/bin/perl5.12
+       lrwxr-xr-x  1 root  admin      8 Jun 26 01:39 /opt/local/bin/perl5.12.4 -> perl5.12
+       -rwxr-xr-x  1 root  admin  10000 Jun 26 01:55 /opt/local/bin/perl5.14
+       lrwxr-xr-x  1 root  admin      8 Jun 26 01:56 /opt/local/bin/perl5.14.2 -> perl5.14
+       -rwxr-xr-x  1 root  admin  10000 Aug 23 13:41 /opt/local/bin/perl5.16
+       lrwxr-xr-x  1 root  admin      8 Aug 23 13:42 /opt/local/bin/perl5.16.1 -> perl5.16
+       lrwxr-xr-x  1 root  admin     12 Oct 21 11:44 /opt/local/bin/perlbug -> perlbug-5.16
+       -rwxr-xr-x  2 root  admin  45815 Jun 26 01:39 /opt/local/bin/perlbug-5.12
+       -rwxr-xr-x  2 root  admin  45203 Jun 26 01:55 /opt/local/bin/perlbug-5.14
+       -rwxr-xr-x  2 root  admin  41712 Aug 23 13:41 /opt/local/bin/perlbug-5.16
+       lrwxr-xr-x  1 root  admin     12 Oct 21 11:44 /opt/local/bin/perldoc -> perldoc-5.16
+       -rwxr-xr-x  1 root  admin    244 Jun 26 01:39 /opt/local/bin/perldoc-5.12
+       -rwxr-xr-x  1 root  admin    244 Jun 26 01:55 /opt/local/bin/perldoc-5.14
+       -rwxr-xr-x  1 root  admin    244 Aug 23 13:41 /opt/local/bin/perldoc-5.16
+       lrwxr-xr-x  1 root  admin     12 Oct 21 11:44 /opt/local/bin/perlivp -> perlivp-5.16
+       -rwxr-xr-x  1 root  admin  12484 Jun 26 01:39 /opt/local/bin/perlivp-5.12
+       -rwxr-xr-x  1 root  admin  12297 Jun 26 01:55 /opt/local/bin/perlivp-5.14
+       -rwxr-xr-x  1 root  admin  10802 Aug 23 13:41 /opt/local/bin/perlivp-5.16
+       lrwxr-xr-x  1 root  admin     15 Oct 21 11:44 /opt/local/bin/perlthanks -> perlthanks-5.16
+       -rwxr-xr-x  2 root  admin  45815 Jun 26 01:39 /opt/local/bin/perlthanks-5.12
+       -rwxr-xr-x  2 root  admin  45203 Jun 26 01:55 /opt/local/bin/perlthanks-5.14
+       -rwxr-xr-x  2 root  admin  41712 Aug 23 13:41 /opt/local/bin/perlthanks-5.16
+
+
+If I simply relink `/opt/local/bin/perl` to a newer version of perl such as `/opt/local/bin/perl5.16`, it still doesn't work, as it seems 
+
+    $ ikiwiki -version
+    ikiwiki version 3.20110608
+
+simply force to use perl5.12.
+
+
+"""]]
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment
new file mode 100644 (file)
index 0000000..08bde8c
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnxp2XU8gIribhhGhGuYtU6eMMwHv5gUGI"
+ nickname="Amitai"
+ subject="may I recommend pkgsrc?"
+ date="2012-10-22T03:50:56Z"
+ content="""
+Looks like the MacPorts ikiwiki package is old. I use ikiwiki from pkgsrc as mentioned in [[tips/ikiwiki_on_mac_os_x]]. I also maintain the package, so it's updated regularly.
+"""]]
index 96ba2d79145adbc9c2fdcaba05201a380b57ce6c..d25d8fe4cc3d29d29fa7176a9ee833a58f2e1e17 100644 (file)
@@ -4,6 +4,9 @@ directly to sign into ikiwiki. Just use, for example,
 
 > This seems to work fine if you use the profile directly as an OpenID.  It doesn't seem to work with delegation.  From that I can see, this is a deliberate decision by Google for security reasons.  See the response [here](http://groups.google.com/group/google-federated-login-api/browse_thread/thread/825067789537568c/23451a68c8b8b057?show_docid=23451a68c8b8b057). -- [[Will]]
 
+### adding the GMail OpenID as an admin is unhandy
+Adding the non-human-friendly OpenID from Gmail as an admin for ikiwiki (if you haven't set up a profile with a readabe URL) is unhandy; first, you need to discover the URL, for example, by making a web edit with it (like me [here](http://source.ikiwiki.branchable.com/?p=source.git;a=search;s=https://www.google.com/accounts/o8/id%3Fid%3DAItOawl3JW_Ow4xMqj98Ig1vwGx_AnjUSsgwE8E;st=author)), and then copy the URL to ikiwiki.setup. --Ivan Z.
+
 ## historical discussion
 
 when I login via to this wiki (or ours) via Google's OpenID, I get this error:
diff --git a/doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn b/doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn
new file mode 100644 (file)
index 0000000..d82a419
--- /dev/null
@@ -0,0 +1,3 @@
+I am already using the [[plugins/contrib/report]] plugin to generate reports aggregated from multiple pages, and it's great! However, I am now looking at generating non-HTML reports. Basically, I want to generate a BIND zonefile from the data aggregated from similar reports. I have gone as far as using the [[plugins/pagetemplate]] plugin to have an empty page as a template - but even that bit doesn't work as i still get pesky `<script>` tags in the output. Besides, the data actually gets parsed on display, and I'd like to do some validation and processing.
+
+How should I go forward? Should i write a separate plugin from [[plugins/contrib/report]]? Should I make a plugin that, like [[plugins/graphviz]] generates data in a separate page? Any suggestions? --[[anarcat]]
diff --git a/doc/forum/ikiwiki_and_big_files/comment_1_df8a9f4249af435cc335f77768a3278d._comment b/doc/forum/ikiwiki_and_big_files/comment_1_df8a9f4249af435cc335f77768a3278d._comment
new file mode 100644 (file)
index 0000000..4ab5b52
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://mildred.fr/"
+ ip="2a01:e35:2f7b:8350:8d29:c70d:c3e:d110"
+ subject="git-annex"
+ date="2012-12-18T14:12:31Z"
+ content="""
+I suppose we could use git-annex to do that. The question is: does the Git plugin in ikiwiki supports git-annex ? I'd hope so.
+"""]]
diff --git a/doc/forum/ikiwiki_and_big_files/comment_2_2d996f1124aedc10f345139c3d8b11df._comment b/doc/forum/ikiwiki_and_big_files/comment_2_2d996f1124aedc10f345139c3d8b11df._comment
new file mode 100644 (file)
index 0000000..6a11d9a
--- /dev/null
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 2"
+ date="2012-12-21T11:02:19Z"
+ content="""
+Unfortunately, ikiwiki [[doesn't follow symlinks for security
+reasons|security]] - if it did, anyone who can commit to the wiki
+repository could publish any file readable by the user who runs ikiwiki,
+including secrets like `~/.gnupg/secring.gpg` or
+`~/.ssh/identity`.
+
+git-annex relies on symlinks, so that restriction breaks it.
+It would be great to be able to use some restricted, safe subset
+of symlinks (\"relative symlinks that point into `.git/annex`\" would
+be enough to support git-annex), and I've looked into it in the past.
+My [[plugins/contrib/album]] plugin would benefit from being able
+to annex the actual photos, for instance.
+"""]]
diff --git a/doc/forum/ikiwiki_and_big_files/comment_3_dfbd38e2b457ea3c4f70266dbf8fbeab._comment b/doc/forum/ikiwiki_and_big_files/comment_3_dfbd38e2b457ea3c4f70266dbf8fbeab._comment
new file mode 100644 (file)
index 0000000..6aae6db
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="2001:4978:f:21a::2"
+ subject="comment 3"
+ date="2012-12-21T14:49:13Z"
+ content="""
+git-annex is gaining a new \"direct\" mode where it does not use symlinks. It remains to be seen if enough git operations will be supported in that mode to make it attractive to use.
+"""]]
diff --git a/doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment b/doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment
new file mode 100644 (file)
index 0000000..eac5dc1
--- /dev/null
@@ -0,0 +1,44 @@
+[[!comment format=mdwn
+ username="mathdesc"
+ subject="For lighttpd with mod_magnet"
+ date="2012-08-18T18:27:32Z"
+ content="""
+Same can be done for lighttpd via a lua script (said rewrite.lua) using *mod_magnet* than need to be installed and
+called in your conf like this :
+
+<pre>
+# error-handler for status 404                                         
+$HTTP[\"url\"] =~ \"^/mysite/\" { 
+magnet.attract-physical-path-to = ( server.document-root + \"/rewrite.lua\" )
+}
+</pre>
+
+Ref :
+[[mod_magnet docs|http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModMagnet]]
+
+
+
+<pre>
+
+  function removePrefix(str, prefix)    
+        return str:sub(1,#prefix+1) == prefix..\"/\" and str:sub(#prefix+2)
+  end
+
+
+
+   attr = lighty.stat(lighty.env[\"physical.path\"])
+   local prefix = '/mysite'
+   if (not attr) then
+        -- we couldn't stat() the file 
+        -- let's generate a xapian query with it
+        new_uri =removePrefix(lighty.env[\"uri.path\"], prefix)
+        print (\"page not found : \" .. new_uri .. \" asking xapian\")
+        lighty.env[\"uri.path\"] = \"/mysite/ikiwiki.cgi\"    
+        lighty.env[\"uri.query\"] = \"P=\" .. new_uri  
+        lighty.env[\"physical.rel-path\"] = lighty.env[\"uri.path\"]
+        lighty.env[\"physical.path\"] = lighty.env[\"physical.doc-root\"] .. lighty.env[\"physical.rel-path\"]
+    end
+</pre>   
+
+Hope this is useful to you :)
+"""]]
diff --git a/doc/forum/po_plugin_doesn__39__t_create_po_files___40__only_pot__41__..mdwn b/doc/forum/po_plugin_doesn__39__t_create_po_files___40__only_pot__41__..mdwn
new file mode 100644 (file)
index 0000000..95cb62d
--- /dev/null
@@ -0,0 +1,11 @@
+On [[the po plugin's page|plugins/po]] it is clearly stated that "when the plugin has just been enabled, or when a page has just been declared as being translatable, the needed POT and PO files are created". Yet on all my attempts, only the pot file was created. Do I have to create the po files manually somehow? 
+
+To be precise, these are the settings I put in my wiki's setup file to enable the po plugin:
+
+    add_plugins => [qw{... po ...}],
+    po_master_language => 'de|Deutsch',
+    po_slave_languages => 'en|English',
+    po_translatable_pages => "mytranslatedpage",
+    po_link_to => 'current',
+
+… followed by "ikiwiki --setup mysetupfile".
diff --git a/doc/forum/possible_utf-8_problem__63__.mdwn b/doc/forum/possible_utf-8_problem__63__.mdwn
new file mode 100644 (file)
index 0000000..fb87fad
--- /dev/null
@@ -0,0 +1,26 @@
+I have some problems with a blog wiki that I try to setup.
+
+Everything seemed to work correctly with utf-8 until
+I tried to have a page name with utf-8 characters that
+contained a blog. More testing showed that the 'from'-parameter
+in the form didn't like utf-8. Just that variable, everything
+else works fine.
+
+As soon as I try to add a new entry I get "bad page name"
+instead of the editpage.
+
+Here is an example:
+The page itself is named 'hönshuset.mdwn' and it contains
+this blog inline:
+
+\[\[!inline  pages="honshuset/*" postform=yes ]]
+
+Looking at the form, it is the from-parameter that contains 'hönshuset'
+that triggers the problem. If I rename the file to honshuset.mdwn
+everything works fine.
+
+For some reason the from-parameter seems to depend on both the filename and
+the rootpage parameter. If I add *rootpage*, then I must not use
+utf-8 characters in *rootpage* or in the source filename.
+
+I use ikiwiki 3.20120629 in Debian sid.
index 4a78fb932e92ba6380d05cff0f97fe0728bc1470..84b227eef1980d8b948f4ea43dbb8a74800efacb 100644 (file)
@@ -11,3 +11,8 @@ Anyway - I've realised that a big part of the interactive todo lists stuff is tr
 Second, and in a way related, I've been mooting hacking fastcgi support into ikiwiki. Essentially one ikiwiki.cgi process would persist and serve CGI-ish requests on stdin/stdout. The initial content-scanning and dependency generation would happen once and not need to be repeated for future requests. Although, all state-changing operations would need to be careful to ensure the in-memory models were accurate. Also, I don't know how suited the data structures would be for persistence, since the current model is build em up, throw em away, they might not be space-efficient enough for persistence.
 
 If I did attempt this, I would want to avoid restructuring things in a way which would impair ikiwiki's core philosophy of being a static compiler. -- [[Jon]]
+
+> This is quite interesting! There is a related discussion about FastCGI
+> support (and therefore better support for Nginx, for example) in
+> [[todo/fastcgi_or_modperl_installation_instructions/]]... --
+> [[anarcat]]
diff --git a/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__.mdwn b/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__.mdwn
new file mode 100644 (file)
index 0000000..6c5ee43
--- /dev/null
@@ -0,0 +1,4 @@
+is there a way to know which file ikiwiki is currently processing while i am running "ikiwiki --setup $FOO.setup" ?
+
+i am migrating a large ikiwiki instance and the compiler dies in the middle of setup -- but i don't know which file is causing the problem.
+
diff --git a/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment b/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment
new file mode 100644 (file)
index 0000000..21b5e7d
--- /dev/null
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="try --verbose"
+ date="2012-09-14T05:01:16Z"
+ content="""
+you can try `--verbose` when you use `--rebuild`, otherwise you could also try `strace`.
+"""]]
diff --git a/doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment b/doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment
new file mode 100644 (file)
index 0000000..cc8c9ac
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk_MMtLPS7osC5MjX00q2ATjvvXPWqm0ik"
+ nickname="micheal"
+ subject="comment 1"
+ date="2012-08-18T06:30:56Z"
+ content="""
+Any Ideas how to do this?
+"""]]
index 1da9fbfbd8926b1e6e0a9b0f41fed84b08e2998e..b743f6175e9c28db46165f5c710076af4b13fc93 100644 (file)
@@ -12,10 +12,8 @@ rejected.
 
 The gitweb is [here](http://source.ikiwiki.branchable.com/?p=source.git;a=summary).
 
-Commits to this git repository are fed into [CIA](http://cia.vc), and can
-be browsed, subscribed to etc on its
-[project page](http://cia.vc/stats/project/ikiwiki). They're also fed into
-[twitter](http://twitter.com/ikiwiki).
+Commits to this git repository are fed into [KGB](http://kgb.alioth.debian.org/)
+for transmission to the #ikiwiki irc channel.
 
 ## personal git repositories
 
@@ -77,6 +75,8 @@ think about merging them. This is recommended. :-)
 * [[chrismgray]] `git://github.com/chrismgray/ikiwiki.git`
 * [[ttw]] `git://github.com/ttw/ikiwiki.git`
 * [[anarcat]] `git://src.anarcat.ath.cx/ikiwiki`
+* anderbubble `git://civilfritz.net/ikiwiki.git`
+* frioux `git://github.com/frioux/ikiwiki`
 
 ## branches
 
index e5ea72e36cf519816489c17d34b45c9eb895031e..b6330c5e5e2882991a4fdafd81e15f57eecf191a 100644 (file)
@@ -8,8 +8,11 @@ ikiwiki-update-wikilist [-r]
 
 # DESCRIPTION
 
-`ikiwiki-update-wikilist` is designed to be made suid root, but is not installed
-suid by default. If made suid, it allows users to add or remove their names
+`ikiwiki-update-wikilist` is designed to be safely run as root by arbitrary
+users, either by being made suid and using the (now deprecated suidperl), or
+by being configured in `/etc/sudoers` to allow arbitrary users to run.
+
+All it does is allows users to add or remove their names
 from the `/etc/ikiwiki/wikilist` file. 
 
 By default, the user's name will be added.
index c486e821b0fc3ddd66d61226cb53f56ab18ad6bc..569c2818f01835fcbacb24e5d873059c990a8ed4 100644 (file)
@@ -2,9 +2,15 @@ The `edittemplate` directive is supplied by the [[!iki plugins/edittemplate desc
 
 This directive allows registering template pages, that provide default
 content for new pages created using the web frontend. To register a
-template, insert a [[ikiwiki/directive/template]] directive on some other page.
+template, insert a [[ikiwiki/directive/template]] directive on some other
+page.
 
        \[[!edittemplate template="bugtemplate" match="bugs/*"]]
+A recommended place to put the directive is on the parent page
+of the pages that will be created using the template. So the above
+example would be put on the bugs page. (Do not put the directive on the
+template page itself.)
 
 In the above example, the page named "bugtemplate" is registered as a
 template to be used when any page named "bugs/*" is created. To avoid
@@ -25,12 +31,4 @@ like other ikiwiki [[templates]]. Currently only one variable is
 set: `<TMPL_VAR name>` is replaced with the name of the page being
 created.
 
-----
-
-It's generally not a good idea to put the `edittemplate` directive in
-the template page itself, since the directive would then be included as
-part of the template on new pages, which would then in turn be registered
-as templates. If multiple pages are registered as templates for a new page,
-an arbitrary one is chosen, so that could get confusing.
-
 [[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/meta/discussion.mdwn b/doc/ikiwiki/directive/meta/discussion.mdwn
new file mode 100644 (file)
index 0000000..a0aefe0
--- /dev/null
@@ -0,0 +1,69 @@
+Is there any reason the [language attribute](https://en.wikipedia.org/wiki/Meta_element#The_language_attribute) is not supported?
+--[[LucaCapello]]
+
+> Attached a patch against the Git repository, working on Debian ikiwiki_3.20100815.9. --[[LucaCapello]]
+
+[[patch]]
+
+-----
+
+<pre>
+From 680e57fd384b65e289d92054835687f3d6f3a19d Mon Sep 17 00:00:00 2001
+From: Luca Capello <luca@pca.it>
+Date: Sat, 6 Oct 2012 14:11:19 +0200
+Subject: [PATCH] IkiWiki/Plugin/meta.pm: support the language attribute
+
+---
+ IkiWiki/Plugin/meta.pm          |    9 +++++++++
+ doc/ikiwiki/directive/meta.mdwn |    4 ++++
+ 2 files changed, 13 insertions(+)
+
+diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
+index 421f1dc..1a49f0c 100644
+--- a/IkiWiki/Plugin/meta.pm
++++ b/IkiWiki/Plugin/meta.pm
+@@ -102,6 +102,10 @@ sub preprocess (@) {
+               $pagestate{$page}{meta}{description}=$value;
+               # fallthrough
+       }
++      elsif ($key eq 'language') {
++              $pagestate{$page}{meta}{language}=$value;
++              # fallthrough
++      }
+       elsif ($key eq 'guid') {
+               $pagestate{$page}{meta}{guid}=$value;
+               # fallthrough
+@@ -279,6 +283,11 @@ sub preprocess (@) {
+               push @{$metaheaders{$page}}, '<meta name="'.$key.
+                       '" content="'.encode_entities($value).'" />';
+       }
++      elsif ($key eq 'language') {
++              push @{$metaheaders{$page}},
++                      '<meta http-equiv="Content-Language" content="'.
++                      encode_entities($value).'" />';
++      }
+       elsif ($key eq 'name') {
+               push @{$metaheaders{$page}}, scrub('<meta name="'.
+                       encode_entities($value).
+diff --git a/doc/ikiwiki/directive/meta.mdwn b/doc/ikiwiki/directive/meta.mdwn
+index 984f685..b82fa58 100644
+--- a/doc/ikiwiki/directive/meta.mdwn
++++ b/doc/ikiwiki/directive/meta.mdwn
+@@ -59,6 +59,10 @@ Supported fields:
+   Specifies a short description for the page. This will be put in
+   the html header, and can also be displayed by eg, the [[map]] directive.
++* language
++
++  Specifies the natural language for the page, for example, "en".
++
+ * keywords
+   Specifies keywords summarizing the contents of the page. This
+-- 
+1.7.10.4
+</pre>
+
+----
+
+I guess patching [[/ikiwiki/directive/meta]] to document the fact this attribute is supported would be good. — [[Jon]]
index 6aa3d2ceacf967c6441013765956fa2987451360..0b47a2167979eda2ada81e4756aae5371f437e81 100644 (file)
@@ -19,6 +19,8 @@ Parameters:
 
 * `open` - Whether voting is still open. Set to "no" to close the poll to
   voting.
+* `expandable` - Set to "yes" to make this poll have an interface to add
+  another choice to the poll.
 * `total` - Show total number of votes at bottom of poll. Default is "yes".
 * `percent` - Whether to display percents. Default is "yes".
 
index a6692f92c59eaa24a3414c6774e17ea1426af055..3e791778978e42b87d20d55eeee813555c338408 100644 (file)
@@ -26,7 +26,7 @@ cells. For example:
        \[[!table data="""
        left||right|
        a|b|c|d
-       this cell spans 4 columns|||
+       this cell spans **4** columns|||
        """]]
 
 ## usage
@@ -47,4 +47,7 @@ or a spreadsheet), `delimiter` must be set to a literal tab character. These
 are difficult to type in most web browsers - copying and pasting one from
 the table data is likely to be the easiest way.
 
+Note that the contents of table cells can contain arbitrary ikiwiki and
+markdown markup.
+
 [[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/tag/discussion.mdwn b/doc/ikiwiki/directive/tag/discussion.mdwn
new file mode 100644 (file)
index 0000000..23352eb
--- /dev/null
@@ -0,0 +1,13 @@
+# Tags in HTML pages
+
+http://rhombus-tech.net is an ikiwiki site where the hardware development is expanding: there are now four hardware projects each of which has its own news page.  For convenience (putting in images for example), the pages have to use HTML not markdown or any other non-HTML format.
+
+However as there are quite a lot of them it would make sense to have an overview page saying "news reports", and that page to be auto-generated because every individual news page is tagged.
+
+... except the news pages are written in HTML, not any markup language into which a tag can be placed.
+
+question: what is the directive which allows an HTML page to have embedded within it a markup "tag"?
+
+> You can use the tag directive in `.html` pages, just like in `.mdwn` pages. This is if you're using
+> the default html plugin. If you instead use the rawhtml plugin, ikiwiki just copies your html files
+> and directives in them won't work. --[[Joey]]
index 9474cd75699ee3d707355a2eb4fb075f41f7a50f..ecba46e03227a4bb28a25e1886416c82426c1451 100644 (file)
@@ -19,7 +19,7 @@ Projects & Organizations
 ========================
 
 * [This wiki](http://ikiwiki.info) (of course!)
-<!-- * [NetBSD wiki](http://wiki.netbsd.org) -->
+* [NetBSD wiki](http://wiki.netbsd.org)
 * The [GNU Hurd](http://www.gnu.org/software/hurd/)
 * [DragonFly BSD](http://www.dragonflybsd.org/)
 * [Monotone](http://wiki.monotone.ca/)
@@ -81,6 +81,16 @@ Projects & Organizations
 * [Arcada Project](http://arcadaproject.org/)
 * [*BSD UNIX user group in Denmark](http://www.bsd-dk.dk/)
 * [Telecomix Broadcast System](http://broadcast.telecomix.org/)
+* [WikiMIX.cc](http://WikiMIX.cc/)
+* Paris Observatory [Information System website](http://dio.obspm.fr/), also used for internal documentation
+* [SolderPad Documentation](http://docs.solderpad.com)
+* [The Open TV White Space Project](http://opentvws.org)
+* [The RS-232 Club](http://rs232club.org)
+* [FusionInventory project](http://www.fusioninventory.org)
+* FabLab Deventer i.o.
+* [Börn og tónlist](http://bornogtonlist.net/) - an Icelandic open-content site, primarily for kindergarten teachers, about music and music-related activites with children. Migrated from MediaWiki to IkiWiki in June 2013. Heavily changed appearance with only minimal changes to page.tmpl.
+* [Réseaulibre.ca](http://wiki.reseaulibre.ca) - a mesh project in Montréal, most data is stored in the wiki, including IP address allocation and geographic data. Features map ([[plugins/osm]]) integration.
+* [Foufem](http://foufem.orangeseeds.org/) - Foufem, a feminist hackerspace
 
 Personal sites and blogs
 ========================
@@ -158,7 +168,7 @@ Personal sites and blogs
 * [Marco Silva](http://marcot.eti.br/) a weblog + wiki using the [darcs](http://darcs.net) backend
 * [NeX-6](http://nex-6.taht.net/) ikiwiki blog and wiki running over ipv6
 * [Jason Riedy](http://lovesgoodfood.com/jason/), which may occasionally look funny if I'm playing with my branch...
-* [pmate](http://pmate.nfshost.com)'s homepage and [blog](http://pmate.nfshost.com/blog/)
+* [pmate](http://www.gnurant.org)'s homepage and [blog](http://www.gnurant.org/blog/)
 * [tychoish.com](http://tychoish.com/) - a blog/wiki mashup. blog posts are "rhizomes."
 * [Martin Burmester](http://www.martin-burmester.de/)
 * [Øyvind A. Holm (sunny256)](http://www.sunbase.org) — Read my Ikiwiki praise [here](http://www.sunbase.org/blog/why_ikiwiki/).
@@ -171,7 +181,6 @@ Personal sites and blogs
 * [Michael Hammer](http://www.michael-hammer.at/)
 * [Richardson Family Wiki](http://the4richardsons.com) A wiki, blog or some such nonsense for the family home page or something or other... I will eventually move the rest of my sites to ikiwiki. The source of the site is in git.
 * [The personal website of Andrew Back](http://carrierdetect.com)
-* [SolderPad Documentation](http://docs.solderpad.com)
 * [Paul Elms](http://paul.elms.pro) Personal site and blog in russian.
 * [James' Tech Notes](http://jamestechnotes.com) My technical notes, blog, wiki, personal site.
 * [Salient Dream](http://www.salientdream.com/) - All Things Strange. 
@@ -180,3 +189,10 @@ Personal sites and blogs
 * [Waldgarten]( http://waldgarten.greenonion.org/ ) News and documentation of a permaculture inspired neighbourhood-garden located in Hamburg, Germany.
 * [[OscarMorante]]'s [personal site](http://oscar.morante.eu).
 * [Puckspage]( http://www.puckspage.org/ ) Political and personal blog in German. The name comes from the elf out of midsummer nights dream.  
+* [[LucaCapello]]'s [homepage](http://luca.pca.it)
+* [[Martín Ferrari's homepage|http://tincho.org/]] and [[blog|http://blog.tincho.org/]]
+* [WikiAtoBR](http://wiki.hi.ato.br) Open, free and annoymous wiki. No need for account registering and login. It is Brazilian so it is in Portuguese.
+* [Manifesto](http://manifesto.hi.ato.br) Open, free and annoymous blog. No need for account registering and login. It is Brazilian so it is in Portuguese.
+ * [Z is for Zombies](http://blog.zouish.org/) — personal blog/site of Francesca Ciceri
+* Julien Lefrique's [homepage](http://julien.lefrique.name/), hosted on [GitHub pages](https://github.com/jlefrique/jlefrique.github.com) with CGI disabled
+* [Anarcat's homepage](http://anarcat.ath.cx/) - with a custom [[theme|theme_market]]
index 5e2b3c736ad780a6dab54ccd510e9103ea76d2b9..3608cb382bd417b73ebf4cbc0701d6132f8f062d 100644 (file)
@@ -57,3 +57,13 @@ added).
   A simplified (442 byte) plain SVG version of the ikiwiki favicon.
 
   Contributed by [[JasonBlevins]]
+
+* <https://archive.org/download/IkiwikiLogo-hi.ato.br/ikiwiki_logo-hiato.png>
+
+  Hosted on: <https://archive.org/details/IkiwikiLogo-hi.ato.br>
+
+  I had to change the black letters to #c8c8c8 to put in my website.
+
+  This was created from the svg source.
+
+  Contributed by [[hiato]]
diff --git a/doc/news/cia.mdwn b/doc/news/cia.mdwn
deleted file mode 100644 (file)
index 3e22be9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Commits to ikiwiki's source code are now fed into
-[CIA](http://cia.navi.cx/), and can be browsed, subscribed to etc on its
-[project page](http://cia.navi.cx/stats/project/ikiwiki). Note that changes
-to the documentation wiki are currently excluded.
index b1695c38545237be66c9db6f2c796dd9c892a41d..0f4b8b5bf560d2299fa5c4722458641d1b1ab880 100644 (file)
@@ -10,4 +10,4 @@ log back in, try out the OpenID signup process if you don't already have an
 OpenID, and see how OpenID works for you. And let me know your feelings about
 making such a switch. --[[Joey]]
 
-[[!poll 67 "Accept only OpenID for logins" 21 "Accept only password logins" 42 "Accept both"]]
+[[!poll 70 "Accept only OpenID for logins" 21 "Accept only password logins" 47 "Accept both"]]
diff --git a/doc/news/version_3.20120115.mdwn b/doc/news/version_3.20120115.mdwn
deleted file mode 100644 (file)
index ba665c6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-ikiwiki 3.20120115 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Make backlink(.) work. Thanks, Giuseppe Bilotta.
-   * mdwn: Workaround discount's eliding of &lt;style&gt; blocks.
-   * attachment: Fix utf-8 display bug."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120202.mdwn b/doc/news/version_3.20120202.mdwn
deleted file mode 100644 (file)
index 3a9ebeb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-ikiwiki 3.20120202 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * mdwn: Added nodiscount setting, which can be used to avoid using the
-     markdown discount engine, when maximum compatability is needed.
-   * Switch to YAML::XS to work around insanity in YAML::Mo. Closes: #[657533](http://bugs.debian.org/657533)
-   * cvs: Ensure text files are added in non-binary mode. (Amitai Schlair)
-   * cvs: Various cleanups and testing. (Amitai Schlair)
-   * calendar: Fix strftime encoding bug.
-   * shortcuts: Fixed a broken shortcut to wikipedia (accidentially
-     made into a shortcut to wikiMedia).
-   * Various portability improvements. (Amitai Schlair)"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120203.mdwn b/doc/news/version_3.20120203.mdwn
deleted file mode 100644 (file)
index 22d1404..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-ikiwiki 3.20120203 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * osm: New plugin to embed an OpenStreetMap into a wiki page.
-     Supports waypoints, tags, and can even draw paths matching
-     wikilinks between pages containing waypoints.
-     Thanks to Blars Blarson and Antoine Beaupré, as well as the worldwide
-     OpenStreetMap community for this utter awesomeness.
-   * trail: New plugin to add navigation trails through pages via Next and
-     Previous links. Trails can easily be added to existing inlines by setting
-     trail=yes in the inline.
-     Thanks to Simon McVittie for his persistance developing this feature.
-   * Fix a snail mail address. Closes: #[659158](http://bugs.debian.org/659158)
-   * openid-jquery.js: Update URL of Wordpress favicon. Closes: #[660549](http://bugs.debian.org/660549)
-   * Drop the version attribute on the generator tag in Atom feeds
-     to make builds more reproducible. Closes: #[661569](http://bugs.debian.org/661569) (Paul Wise)
-   * shortcut: Support Wikipedia's form of url-encoding for unicode
-     characters, which involves mojibake. Closes: #[661198](http://bugs.debian.org/661198)
-   * Add a few missing jquery UI icons to attachment upload widget underlay.
-   * URI escape filename when generating the diffurl.
-   * Add build-affected hook. Used by trail."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120419.mdwn b/doc/news/version_3.20120419.mdwn
deleted file mode 100644 (file)
index 4a7ee67..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-ikiwiki 3.20120419 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Remove dead link from plugins/teximg. Closes: #[664885](http://bugs.debian.org/664885)
-   * inline: When the pagenames list includes pages that do not exist, skip
-     them.
-   * meta: Export author information in html &lt;meta&gt; tag. Closes: #[664779](http://bugs.debian.org/664779)
-     Thanks, Martin Michlmayr
-   * notifyemail: New plugin, sends email notifications about new and
-     changed pages, and allows subscribing to comments.
-   * Added a "changes" hook. Renamed the "change" hook to "rendered", but
-     the old hook name is called for now for back-compat.
-   * meta: Support keywords header. Closes: #[664780](http://bugs.debian.org/664780)
-     Thanks, Martin Michlmayr
-   * passwordauth: Fix url in password recovery email to be absolute.
-   * httpauth: When it's the only auth method, avoid a pointless and
-     confusing signin form, and go right to the httpauthurl.
-   * rename: Allow rename to be started not from the edit page; return to
-     the renamed page in this case.
-   * remove: Support removing of pages in the transient underlay. (smcv)
-   * inline, trail: The pagenames parameter is now a list of absolute
-     pagenames, not relative wikilink type names. This is necessary to fix
-     a bug, and makes pagenames more consistent with the pagespec used
-     in the pages parameter. (smcv)
-   * link: Fix renaming wikilinks that contain embedded urls.
-   * graphviz: Handle self-links.
-   * trail: Improve CSS, also display trail links at bottom of page,
-     and a bug fix. (smcv)"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120516.mdwn b/doc/news/version_3.20120516.mdwn
deleted file mode 100644 (file)
index aa85f54..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ikiwiki 3.20120516 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * meta: Security fix; add missing sanitization of author and authorurl.
-     Thanks, Raúl Benencia"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20121017.mdwn b/doc/news/version_3.20121017.mdwn
new file mode 100644 (file)
index 0000000..98a5caf
--- /dev/null
@@ -0,0 +1,3 @@
+ikiwiki 3.20121017 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * recentchangesdiff: fix further breakage to the template from 3.20120725"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20121212.mdwn b/doc/news/version_3.20121212.mdwn
new file mode 100644 (file)
index 0000000..473b631
--- /dev/null
@@ -0,0 +1,6 @@
+ikiwiki 3.20121212 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * filecheck: Fix bug that prevented File::MimeInfo::Magic from ever
+     being used.
+   * openid: Display openid in Preferences page as a comment, so it can be
+     selected in all browsers."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20130212.mdwn b/doc/news/version_3.20130212.mdwn
new file mode 100644 (file)
index 0000000..7ec4b0f
--- /dev/null
@@ -0,0 +1,18 @@
+ikiwiki 3.20130212 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * htmlscrubber: Allow the bitcoin URI scheme.
+   * htmlscrubber: Allow the URI schemes of major VCS's.
+   * aggregate: When run with --aggregate, if an aggregation is already
+     running, don't go on and --refresh.
+   * trail: Avoid excess dependencies between pages in the trail
+     and the page defining the trail. Thanks, smcv.
+   * opendiscussion: Don't allow editing discussion pages if discussion pages
+     are disabled. (smcv)
+   * poll: Add expandable option to allow users to easily add new choices to
+     a poll.
+   * trail: Avoid massive slowdown caused by pagetemplate hook when displaying
+     dynamic cgi pages, which cannot use trail anyway.
+   * Deal with empty diffurl in configuration.
+   * cvs: Various fixes. (schmonz)
+   * highlight: Now adds a span with class highlight-&lt;extension&gt; around
+     highlighted content, allowing for language-specific css styling."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20130504.mdwn b/doc/news/version_3.20130504.mdwn
new file mode 100644 (file)
index 0000000..18baf01
--- /dev/null
@@ -0,0 +1,11 @@
+ikiwiki 3.20130504 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Allow dots in directive parameter names. (tango)
+   * Add missing plugin section, and deal with missing sections with a warning.
+   * Detect plugins with a broken getsetup and warn.
+   * map: Correct reversion introduced in version 3.20110225 that could
+     generate invalid html. (smcv)
+   * Makefile.PL: overwrite theme style.css instead of appending
+     (Thanks, Mikko Rapeli)
+   * meta: Fix anchors used to link to the page's license and copyright.
+     Closes: #[706437](http://bugs.debian.org/706437)"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20130518.mdwn b/doc/news/version_3.20130518.mdwn
new file mode 100644 (file)
index 0000000..635b869
--- /dev/null
@@ -0,0 +1,9 @@
+ikiwiki 3.20130518 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix test suite to not fail when XML::Twig is not installed.
+     Closes: #[707436](http://bugs.debian.org/707436)
+   * theme: Now &lt;TMPL\_IF THEME\_$NAME&gt; can be used in all templates when
+     a theme is enabled.
+   * notifyemail: Fix bug that caused duplicate emails to be sent when
+     site was rebuilt.
+   * bzr: bzr rm no longer has a --force option, remove"""]]
\ No newline at end of file
index 1764b31b2a009afae8fe0fca846f4032dfcef912..d9b7172d58a488f69a99bf7d0393dcc326bf9663 100644 (file)
@@ -7,4 +7,7 @@ link.
 
 If this plugin is enabled, this will be a link: SandBox
 
+Use of this plugin is not recommended, particularly on complex wikis with
+things like [[aggregate]] in use.
+
 [[!tag type/link]]
index 227890bdd621e446417cb03054bf53cd7b9ecec3..2b8add93820297e76abdae78d9cfeea2130ef0de 100644 (file)
@@ -216,3 +216,17 @@ Or at least a reply functionality that quotes the subject/contents?
 -- [[iustin]]
 
 ---
+
+## Disabling certain formats for comments
+
+It seems that comments plugin allows using all enabled formats and
+there is not way to disable some of them. For my blog, I want to use
+additional formats for writing posts but I do not want commenters to
+use those formats because it would be a security problem.
+
+Any suggestions or hints how to implement this?
+
+-- [[wentasah]]
+
+> I've implemented this. See [[todo/Restrict_formats_allowed_for_comments]].
+> --[[wentasah]]
diff --git a/doc/plugins/contrib/asymptote.mdwn b/doc/plugins/contrib/asymptote.mdwn
new file mode 100644 (file)
index 0000000..a85c60e
--- /dev/null
@@ -0,0 +1,141 @@
+[[!template id=plugin name=asymptote author="[Peter Simons](http://cryp.to/)"]]
+[[!tag type/widget]]
+
+This plugin provides the [[ikiwiki/directive/asymptote]]
+[[ikiwiki/directive]] which allows embedding
+[asymptote](http://asymptote.sourceforge.net/) diagrams in a page.
+
+Security implications: asymptote has functions for reading files and
+other dangerous stuff, so enabling this plugin means that everyone who
+can edit your Wiki can also read any file from your hard drive thats
+accessible to the user running Ikiwiki. 
+
+[[!if test="enabled(asymptote)" then="""
+An example diagram:
+
+[[!asymptote src="""
+import geometry;
+unitsize(1cm);
+triangle t = triangle((0,0), (4,0), (0.5,2));
+show(La="$D$", Lb="$E$", Lc="", t);
+dot(t.A^^t.B^^t.C);
+point pD = midpoint(t.BC); dot(pD);
+point pE = midpoint(t.AC); dot(pE);
+draw(pD--pE);
+
+point A_ = (pD-t.A)*2+t.A; dot("$A'$", A_, NE);
+draw(t.B--A_--t.C, dashed);
+draw(t.A--A_, dashed);
+
+point E_ = midpoint(line(t.B,A_)); dot(Label("$E'$", E_, E));
+draw(E_--pD, dashed);
+"""]]
+"""]]
+
+This plugin uses the [[!cpan Digest::SHA]] perl module.
+
+The full source code is:
+
+        #! /usr/bin/perl
+
+        package IkiWiki::Plugin::asymptote;
+        use warnings;
+        use strict;
+        use Digest::MD5 qw(md5_hex);
+        use File::Temp qw(tempdir);
+        use HTML::Entities;
+        use Encode;
+        use IkiWiki 3.00;
+
+        sub import {
+                hook(type => "getsetup", id => "asymptote", call => \&getsetup);
+                hook(type => "preprocess", id => "asymptote", call => \&preprocess);
+        }
+
+        sub getsetup () {
+                return
+                        plugin => {
+                                safe => 1,
+                                rebuild => undef,
+                                section => "widget",
+                        },
+        }
+
+        sub preprocess (@) {
+                my %params = @_;
+
+                my $code = $params{src};
+                if (! defined $code && ! length $code) {
+                        error gettext("missing src attribute");
+                }
+                return create($code, \%params);
+        }
+
+        sub create ($$$) {
+                # This function calls the image generating function and returns
+                # the <img .. /> for the generated image.
+                my $code = shift;
+                my $params = shift;
+
+                my $digest = md5_hex(Encode::encode_utf8($code));
+
+                my $imglink= $params->{page} . "/$digest.png";
+                my $imglog =  $params->{page} .  "/$digest.log";
+                will_render($params->{page}, $imglink);
+                will_render($params->{page}, $imglog);
+
+                my $imgurl=urlto($imglink, $params->{destpage});
+                my $logurl=urlto($imglog, $params->{destpage});
+
+                if (-e "$config{destdir}/$imglink" ||
+                    gen_image($code, $digest, $params->{page})) {
+                        return qq{<img src="$imgurl}
+                                .(exists $params->{alt} ? qq{" alt="} . $params->{alt} : qq{})
+                                .qq{" class="asymptote" />};
+                }
+                else {
+                        error qq{<a href="$logurl">}.gettext("failed to generate image from code")."</a>";
+                }
+        }
+
+        sub gen_image ($$$$) {
+                # Actually creates the image.
+                my $code = shift;
+                my $digest = shift;
+                my $imagedir = shift;
+
+                my $tmp = eval { create_tmp_dir($digest) };
+                if (! $@ &&
+                    writefile("$digest.asy", $tmp, $code) &&
+                    writefile("$imagedir/$digest.png", $config{destdir}, "") &&
+                    system("asy -render=2 -offscreen -f png -o $config{destdir}/$imagedir/$digest.png $tmp/$digest.asy &>$tmp/$digest.log") == 0
+                   ) {
+                        return 1;
+                }
+                else {
+                        # store failure log
+                        my $log="";
+                        {
+                                if (open(my $f, '<', "$tmp/$digest.log")) {
+                                        local $/=undef;
+                                        $log = <$f>;
+                                        close($f);
+                                }
+                        }
+                        writefile("$digest.log", "$config{destdir}/$imagedir", $log);
+
+                        return 0;
+                }
+        }
+
+        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;
+        }
+
+        1
+
diff --git a/doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn b/doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn
new file mode 100644 (file)
index 0000000..c6bdb1a
--- /dev/null
@@ -0,0 +1,27 @@
+The `asymptote` directive is supplied by the [[!iki plugins/contrib/asymptote
+desc=asymptote]] plugin.
+
+This directive allows embedding [asymptote](http://asymptote.sourceforge.net/)
+diagrams in a page. Example usage:
+
+       \[[!asymptote src="""
+        import geometry;
+        unitsize(1cm);
+        triangle t = triangle((0,0), (4,0), (0.5,2));
+        show(La="$D$", Lb="$E$", Lc="", t);
+        dot(t.A^^t.B^^t.C);
+        point pD = midpoint(t.BC); dot(pD);
+        point pE = midpoint(t.AC); dot(pE);
+        draw(pD--pE);
+        point A_ = (pD-t.A)*2+t.A; dot("$A'$", A_, NE);
+        draw(t.B--A_--t.C, dashed);
+        draw(t.A--A_, dashed);
+        point E_ = midpoint(line(t.B,A_)); dot(Label("$E'$", E_, E));
+        draw(E_--pD, dashed);
+        """]]
+
+The `asymptote` directive supports the following parameters:
+
+- `src` - The asymptote source code to render.
+
+[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/contrib/dynamiccookies.mdwn b/doc/plugins/contrib/dynamiccookies.mdwn
new file mode 100644 (file)
index 0000000..c43b18f
--- /dev/null
@@ -0,0 +1,12 @@
+[[!template id=plugin name=dynamiccookies author="[[schmonz]]"]]
+[[!template id=gitbranch branch=schmonz/dynamiccookies author="[[schmonz]]"]]
+[[!tag type/web]]
+
+This plugin populates ikiwiki's cookiejar by calling an external
+program. The program is expected to print the serialized cookies
+on `stdout` in a form which can be `eval`'d (e.g., `Data::Dumper`).
+
+The plugin author's use case for this seemingly hacky interface:
+aggregating authenticated feeds at work, where for various reasons
+the needed cookies must be acquired using a separate `perl` from
+the one used by ikiwiki.
index d3c1a127799cfa3080fddc178320cc884992123e..13ea8b1b3aa2fdefeb2f678ce51269d36d2857d3 100644 (file)
@@ -14,7 +14,36 @@ yields:
 
     ARRAY(0x266db10)
 
-Seems to me this could be checked and `join(" ")`'d. :)
+Seems to me this could be checked and `join(" ")`'d. :) -- [[anarcat]]
+
+> I wrote a stupid fix for this, which works for getfield, but isn't as good for report. It simply does that `join()`. Here's the patch:
+> 
+> [[!format diff """
+--- a/IkiWiki/Plugin/field.pm
++++ b/IkiWiki/Plugin/field.pm
+@@ -322,6 +322,9 @@ sub field_get_value ($$;@) {
+     {
+        $basevalue = calculated_values($lc_field_name, $page);
+     }
++    if (ref($basevalue) eq "ARRAY") {
++        $basevalue = join(" ", @{$basevalue}); # hack
++    }
+     if (defined $basevalue)
+     {
+        $Cache{$page}{$basename} = $basevalue;
+@@ -360,6 +363,9 @@ sub field_get_value ($$;@) {
+     {
+        $value = $basevalue;
+     }
++    if (ref($value) eq "ARRAY") {
++        $value = join(" ", @{$value}); # hack
++    }
+     if (defined $value)
+     {
+        $Cache{$page}{$lc_field_name} = $value;
+"""]]
+>
+> Seems to me this should be the default, at the very least in getfield. But at least, with the above patch we don't see expanded Perl ref's. ;) --[[anarcat]]
 
 ## Templating, and other uses
 
diff --git a/doc/plugins/contrib/livefyre.mdwn b/doc/plugins/contrib/livefyre.mdwn
new file mode 100644 (file)
index 0000000..d4a62c0
--- /dev/null
@@ -0,0 +1,14 @@
+[[!template id=plugin name=livefyre core=0 author="[[cmauch]]"]]
+[[!tag  type/special-purpose]]
+
+[LiveFyre](http://www.livefyre.com) is a third party comment and discussion system similar in some ways to Disqus or IntenseDebate.  All three services use javascript to attach comments to your site without the need to use a native commenting system.  
+
+This plugin is designed to replace the commenting system in IkiWiki entirely.  It embeds LiveFyre comments on your ikiwiki blog or posts.  It is was originally based on the [Disqus Plugin](https://code.google.com/p/ikiwiki-plugin-disqus/).  After a few days of noticing odd page title names on the livefyre moderation interface, I updated the script to make use of JSON.  I made extensive use of the [integration guide](https://github.com/Livefyre/livefyre-docs/wiki/StreamHub-Integration-Guide) to get it all running.
+
+It's loud and messy and slow, but kind of neat too.
+
+Requires the [[!cpan JSON]], [[!cpan JSON::WebToken]], and [[!cpan Digest::MD5]] perl modules to be available. 
+
+You can grab the source [here](https://bitbucket.org/cmauch/ikiwiki/src/master/IkiWiki/Plugin/livefyre.pm)
+
+See the POD documention in the module for installation and configuration instructions.
diff --git a/doc/plugins/contrib/mathjax.mdwn b/doc/plugins/contrib/mathjax.mdwn
new file mode 100644 (file)
index 0000000..a784b95
--- /dev/null
@@ -0,0 +1,13 @@
+[[!template id="plugin" name="mathjax" author="Baldur Kristinsson"]]
+
+The [mathjax plugin](https://github.com/bk/ikiwiki-plugin-mathjax), available on GitHub, provides easy MathJax support for ikiwiki.
+
+Features:
+
+- No change needed to page.tmpl
+- Javascript is only loaded on pages which need it.
+- Both inline and display math are supported.
+- Unlike [[the pandoc plugin|plugins/contrib/pandoc]] or a solution based on editing page.tmpl, no irritating conflicts with the smiley plugin.
+- Unlike the pandoc plugin, it is easy to use in shared hosting or other environments where you have difficulty in installing extra software (beyond Perl modules, obviously).
+
+However, if you need the power of Pandoc, such as bibliography support or pdf generation, then that is probably the better option for you.
index 5066d9de54be523707f91aaa8f7ca8ee34eb876e..c288d9bd182a59a18818cfef06368f60531267b0 100644 (file)
@@ -3,3 +3,7 @@ Anyone know a safe place where this plugin can be found? -- mjr at phonecoop.coo
 > I ended up doing a backassward way of doing it, as described at the [convert discussion page](http://ikiwiki.info/tips/convert_mediawiki_to_ikiwiki/discussion/). -[[simonraven]]
 
 >> I've mirrored it at <http://alcopop.org/~jon/mediawiki.pm>. -- [[Jon]]
+
+---
+
+Something that gives me better results is to edit the source of the [[wikitext]] plugin, and change all occurences of Text::WikiFormat to Text::MediawikiFormat. (This of course depends on ''libtext-mediawikiformat-perl'' instead of ''libtext-wikiformat-perl'' -- [[gi1242]]
diff --git a/doc/plugins/contrib/proxies.mdwn b/doc/plugins/contrib/proxies.mdwn
new file mode 100644 (file)
index 0000000..7f8f5fa
--- /dev/null
@@ -0,0 +1,13 @@
+[[!template id=plugin name=proxies author="[[schmonz]]"]]
+[[!template id=gitbranch branch=schmonz/proxies author="[[schmonz]]"]]
+[[!tag type/web]]
+
+This plugin enables ikiwiki to open outbound connections (such as
+found in [[plugins/aggregate]], [[plugins/openid]], and [[plugins/pinger]])
+via a proxy. The proxy can be configurably avoided for connections
+to certain domains.
+
+### To do
+
+* Move duplicated user-agent setup out of other plugins into this one.
+* While I'm at it, fix [[bugs/http_proxy_for_openid]].
index e23a4ced441508a8dad517cc164f0f9ecb5d3cd1..419c4bca62898c3539f4a9a08e1a4dc006076c39 100644 (file)
@@ -73,3 +73,8 @@ to select pages? How does it relate to [[todo/wikitrails]] or
 >>>>> It might be that adding arrays to the `field` plugin is a good way to go: after all, even though field=value is the most common, with the flexibility of things like YAML, one could define all sorts of things.  What I'm not so sure about is how to return the values when queried, since some things would be expecting scalars all the time.  Ah, perhaps I could use wantarray?
 >>>>> Is there a way of checking a HTML::Template template to see if it expecting an array for a particular value?
 >>>>> --[[KathrynAndersen]]
+
+How about arrays?
+-----------------
+
+In [[plugins/contrib/getfield/discussion]], I outline how there's a problem in getfield displaying array refs when the data is a YAML array. I also propose a patch there so that arrays are join'd with a space separator, which is less than ideal, but at least works for getfield. However, for report, I am not sure it's as good. Should it make two rows for those? How should we parse this? Thanks. -- [[anarcat]]
diff --git a/doc/plugins/contrib/wc.mdwn b/doc/plugins/contrib/wc.mdwn
new file mode 100644 (file)
index 0000000..fb5a732
--- /dev/null
@@ -0,0 +1,22 @@
+[[!template id=plugin name=wc author="[[schmonz]]"]]
+[[!template id=gitbranch branch=schmonz/wc author="[[schmonz]]"]]
+[[!tag type/meta]]
+[[!tag patch]]
+
+This plugin counts words in a page. For a single page, write a
+`\[[!wc]]` directive and the word count will be interpolated there.
+For a site, add `<TMPL_VAR WORDCOUNT>` to your [[templates]].
+
+If [[!cpan HTML::Strip]] is installed, the wordcount will be slightly
+more accurate.
+
+Possible enhancements:
+
+* Optimize: count words iff the result will be displayed. `sanitize()`
+  seems like the right place to count. Since it's called well after
+  `preprocess()`, I can tell whether a directive needs the result,
+  but since it appears to be called before `pagetemplate()`, I can't
+  tell whether a template wants to know and possibly skip the
+  computation. (In other words, if I add `$needed_for_template`
+  like `$needed_for_directive`, it gets set too late for `sanitize()`
+  to see.)
index 349c278eec1d6dcfd256b47ed58f063bc03b7239..5346b8f40e07a7572908987e3728c97ec7ca239f 100644 (file)
@@ -1,4 +1,4 @@
-[[!template id=plugin name=google author="Peter Simons"]]
+[[!template id=plugin name=google author="[Peter Simons](http://cryp.to/)"]]
 [[!tag type/web]]
 
 This plugin adds a search form to the wiki, using google's site search.
index 151af8d92b31b827836b4d12a7063ca440654162..eaf111f4ee1162a49ed4f1b4de4d4135d51ae9ce 100644 (file)
@@ -31,3 +31,19 @@ A patch to make it more like MediaWiki:
  </pre>
 
 --Changaco
+
+----
+
+I think using this below would let the source html clear for the browser
+without changing the render:
+
+        #use URI::Escape
+        .
+        .
+
+        #$str = uri_escape_utf8($str);
+        $str = Encode::decode_utf8($str);
+        #$str =~ s/%/./g;
+
+Don't you think ?
+[[mathdesc]]
index 0eda5554f452ea41b2e6f7eb451d5fa04e9e62dd..2fae07739ea7c33abe4117d816f883b26c949ced 100644 (file)
@@ -2,7 +2,9 @@
 [[!tag type/auth]]
 
 This plugin allows HTTP basic authentication to be used to log into the
-wiki. 
+wiki. In this mode, the web browser authenticates the user by some means,
+and sets the `REMOTE_USER CGI` environment variable. This plugin trusts
+that if that variable is set, the user is authenticated.
 
 ## fully authenticated wiki
 
diff --git a/doc/plugins/notifyemail/discussion.mdwn b/doc/plugins/notifyemail/discussion.mdwn
new file mode 100644 (file)
index 0000000..631c680
--- /dev/null
@@ -0,0 +1,5 @@
+When I try to add this plugin to the setup file and run "ikiwiki --setup" I get an error: Can't locate IkiWiki/Plugin/notifyemail.pm
+
+All the other plugins I have installed have worked, so my setup should be ok - just this one is missing!?! 
+
+> It's new in version 3.20120419, perhaps you have an older version? --[[smcv]]
index 703244947b9a99aabc7c285685cce4eeebb3f1b2..b7c1582ca4e1348cef265f06ddbf0579389772c4 100644 (file)
@@ -229,6 +229,14 @@ are not rendered correctly on the slave pages:
   could be used to support it, but it would need a security audit
 * other markup languages have not been tested.
 
+Renaming a page
+---------------
+
+A translatable page may be renamed using the web interface and the
+[[rename plugin|plugins/rename]], or using the VCS directly; in
+the latter case, *both* the "master" page and every corresponding
+`.po` file must be renamed in the same commit.
+
 Security
 ========
 
index 57299f92dd17c0e2fc9e9ac236cdc7a2ca90090d..660a430b956f4848191d19588624317f0e3d970e 100644 (file)
@@ -2,6 +2,8 @@
 [[!tag type/meta]]
 
 This plugin extends the [[recentchanges]] plugin, adding a diff for each
-change. The diffs are by default hidden from display on the recentchanges
-page, but will display in its feeds. The [[rcs]] must have implemented
-support for the `rcs_diff()` function for any diffs to be generated.
+change. The diffs can be toggled on the recentchanges page (requires
+javascript), and are also included in its feeds.
+
+The [[rcs]] must have implemented support for the `rcs_diff()` function for
+any diffs to be generated.
index e95739cf36569171e863e7587c3613bea53f4b50..f116649c1006ee1ed68d16de8e16d1de049bd458 100644 (file)
@@ -5,7 +5,7 @@ This plugin adds full text search to ikiwiki, using the
 [xapian](http://xapian.org/) engine, its
 [omega](http://xapian.org/docs/omega/overview.html) frontend, and the
 [[!cpan Search::Xapian]], [[!cpan Digest::SHA]], and [[!cpan HTML::Scrubber]]
-perl modules.
+perl modules (on debian, check that you have packages `libsearch-xapian-perl`, `libdigest-sha-perl` and `libhtml-scrubber-perl` installed).
 
 The [[ikiwiki/searching]] page describes how to write search queries.
 
index 42bc6a3e185314573c1d08ac7604c884f5640af4..245fb15445be3eb9961c93dfb0754aec706fa7c3 100644 (file)
@@ -8,3 +8,5 @@ I needed to include inline directives into sidebars at different site sections t
 
 Then I came across the tip to include the quick=yes variable with the inline directive, where it is described as not showing page titles included with the meta-directive, and I thought, well if it lets me have it only this way, maybe I can restrain from using meta titles.   
 But to my surprise, even with the quick=yes variable included into the inline directive in the sidebars meta titles still are shown, no more forced rebuild when editing via cgi, which is amazing, but maybe it should be noted somewhere. One more time ikiwiki showed its bright face, thank you. --Boris
+
+How to use a different sidebar and its own CSS for SubPages under a certain directory?  -- Joe
index d74784ac2cfae2cff6ebbed0147d657cbe6f5b7c..5261df111f91b1462f36d3f9731479ddb01a7ae2 100644 (file)
@@ -8,7 +8,7 @@ inside `/usr/share/ikiwiki/themes/`. See [[themes]] for an overview
 of the themes included in ikiwiki and the [[theme market]] for third party themes.
 
 You can set the theme via the **theme** option in your config file (after
-enabling the plugin). Refresh the wiki after changing it to see the changes.
+enabling the plugin). Refresh the wiki (with `ikiwiki -setup <file>`, `--setup` won't work, they are not interchangable) after changing it to see the changes.
 
 Hints for theme builders
 ------------------------
index 400a5bccad9b143822ab3d52368eb09308600ff3..6a1f2d12c64653682965b4466b90174501575cbd 100644 (file)
@@ -1,2 +1,4 @@
 These plugins add different authentication methods for logging in to the
 wiki and control what pages users can edit.
+
+[[!map pages="plugins/* and tagged(.)"]]
index 0bf049ece72d6c40a9b699c1a1d993851a34ec21..980dbbe5776053b50f38ca2df5cec957777e45e8 100644 (file)
@@ -1 +1,3 @@
 These plugins enable whole bundles of other plugins.
+
+[[!map pages="plugins/* and tagged(.)"]]
index a1c6d07283c66623e2c533b349c5375f47cdae20..73a6e58985b80d6ede15b96c3678952608a0d6cf 100644 (file)
@@ -1 +1,3 @@
 These plugins affect the look and feel of the overall wiki.
+
+[[!map pages="plugins/* and tagged(.)"]]
index 6eaa2c25a0b875598549dd27c6c6883e11037fb0..1e4dd7278fc2c42bbb011bde399cebfdc48f0c30 100644 (file)
@@ -1 +1,3 @@
 These plugins relate to [[plugins/comments]].
+
+[[!map pages="plugins/* and tagged(.)"]]
index 71d93c4a6763dea439fd19230504d6079876c73d..2646996ba2fc744adb0f76ead8a86ed063349e8c 100644 (file)
@@ -1 +1,3 @@
 These plugins provide core functionality and are enabled by default.
+
+[[!map pages="plugins/* and tagged(.)"]]
index eae1226dad02b4df9c999b55188717eb42fa314f..b95a7ecd3c05668aec9d323ef65bb3503c298d91 100644 (file)
@@ -1 +1,3 @@
 These plugins control how ikiwiki displays dates.
+
+[[!map pages="plugins/* and tagged(.)"]]
index a60d725d8d1696d832f576ad5c8638912dba3e75..8a100f963a387dcaecd6b6b32c40ee65f6b74b60 100644 (file)
@@ -1 +1,3 @@
 These plugins provide ways to format text on wiki pages.
+
+[[!map pages="plugins/* and tagged(.)"]]
index 4d97c8e6641aa6adac4aec3ea2e7dde3d67cd2a1..ad9e9c2e66c89463fe005b77f6d08a6225eef151 100644 (file)
@@ -1 +1,3 @@
 These plugins are just for fun.
+
+[[!map pages="plugins/* and tagged(.)"]]
index 290208f92312906a0eac02fb463111d7ed2fd89c..94e13b621e6150d0ec6a30dd8a026b73decdd893 100644 (file)
@@ -1 +1,3 @@
 These plugins generate or process html.
+
+[[!map pages="plugins/* and tagged(.)"]]
index c10863fac250d39c4271b3729c73d31b7c304ec1..fce27ae9c6f0c0a0f9a9c065f3d99b9828cb1e8f 100644 (file)
@@ -1 +1,3 @@
 These plugins deal with [[WikiLinks|ikiwiki/WikiLink]].
+
+[[!map pages="plugins/* and tagged(.)"]]
index cae30cad17512e0926c1790a53a4268c66c8f9a1..7a339747e93b89b98f7fddbb1dea2cf8e60f6170 100644 (file)
@@ -1 +1,3 @@
 These plugins deal in meta-information about the wiki.
+
+[[!map pages="plugins/* and tagged(.)"]]
index c0e72158527356b5979ec60f23243b50261cd28c..5907d26f96f75e423392c03080eaac3bb9a37565 100644 (file)
@@ -1,3 +1,5 @@
 These plugins can cause wiki rendering to be significantly slowed down,
 due to things like needing to run an external program for every page
 rendered.
+
+[[!map pages="plugins/* and tagged(.)"]]
index b6ed045313cb89acc1f0df6f2eaae39f84bc36ae..7aeb8be9ce6d71567e900943b88369b101b8508b 100644 (file)
@@ -1 +1,3 @@
 Special-purpose plugins.
+
+[[!map pages="plugins/* and tagged(.)"]]
index bb74066f8f2f0300f4bed9d1f8c8b36bffec807f..78daebd53180781fcd057b93c80c9ce35dcb0a1a 100644 (file)
@@ -1 +1,3 @@
 These plugins support tagging.
+
+[[!map pages="plugins/* and tagged(.)"]]
index b60e26a29f5d6f8246012442f88a5613747ddee5..6ebd6cd373930588e6819ea7e3fd691d0b977e78 100644 (file)
@@ -1 +1,3 @@
 These plugins enhance the web interface.
+
+[[!map pages="plugins/* and tagged(.)"]]
index 875829d0bcdb048f0e0b749f8b8c728ff402e010..496b7da2465d3a94fb93ae36857eb3d1d2532918 100644 (file)
@@ -1,2 +1,4 @@
 These plugins allow inserting various things into pages via a
 [[ikiwiki/directive]].
+
+[[!map pages="plugins/* and tagged(.)"]]
index a20a3248945780b22b3673c7653a3aa99e58f83b..387c90b75bdf54d56d24b92a74b3b8f409d58f4b 100644 (file)
@@ -23,5 +23,5 @@ Plugins that should not be enabled/disabled via the web interface can be
 listed in `websetup_force_plugins` in the setup file.
 
 When the setup is saved, the setup file will be rewritten with the new
-settings, and the wiki will be refreshed, or rebuilt, to make the setip
+settings, and the wiki will be refreshed, or rebuilt, to make the setup
 changes take effect.
index 4c66e51f865dc4f0490a18d9426286909dfd2d5e..d6e6d8d1e61aec99163b5afdcdef6bcee56e811e 100644 (file)
@@ -31,20 +31,26 @@ is accomplished by calling various hooks provided by plugins.
 
 ### compiler
 
-As a compiler, ikiwiki starts by calling the `refresh` hook. Then it checks
-the wiki's source to find new or changed pages. The `needsbuild` hook is
-then called to allow manipulation of the list of pages that need to be
-built. 
-
-Now that it knows what pages it needs to build, ikiwiki runs two
-compile passes. First, it runs `scan` hooks, which collect metadata about
-the pages. Then it runs a page rendering pipeline, by calling in turn these
-hooks: `filter`, `preprocess`, `linkify`, `htmlize`, `indexhtml`,
-`pagetemplate`, `sanitize`, `format`.
-
-After all necessary pages are built, it calls the `change` hook. Finally,
-if a page is was deleted, the `delete` hook is called, and the files that
-page had previously produced are removed.
+As a compiler, ikiwiki starts by calling the
+[[`refresh`|plugins/write#refresh]] hook. Then it checks the wiki's source to
+find new or changed pages. The [[`needsbuild`|plugins/write#needsbuild]] hook
+is then called to allow manipulation of the list of pages that need to be
+built.
+
+Now that it knows what pages it needs to build, ikiwiki runs two compile
+passes. First, it runs [[`scan`|plugins/write#scan]] hooks, which collect
+metadata about the pages. Then it runs a page rendering pipeline, by calling
+in turn these hooks: [[`filter`|plugins/write#filter]],
+[[`preprocess`|plugins/write#preprocess]],
+[[`linkify`|plugins/write#linkify]], [[`htmlize`|plugins/write#htmlize]],
+[[`indexhtml`|plugins/write#indexhtml]],
+[[`pagetemplate`|plugins/write#pagetemplate]],
+[[`sanitize`|plugins/write#sanitize]], [[`format`|plugins/write#format]].
+
+After all necessary pages are built, it calls the
+[[`changes`|plugins/write#changes]] hook. Finally, if a page was deleted, the
+[[`delete`|plugins/write#delete]] hook is called, and the files that page had
+previously produced are removed.
 
 ### cgi
 
@@ -53,33 +59,39 @@ an example.
 
 Alice browses to a page and clicks Edit.
 
-* Ikiwiki is run as a cgi. It assigns Alice a session cookie, and,
-  by calling the `auth` hooks, sees that she is not yet logged in.
-* The `sessioncgi` hooks are then called, and one of them,
-  from the [[editpage]] plugin, notices that the cgi has been told "do=edit".
-* The [[editpage]] plugin calls the `canedit` hook to check if this
-  page edit is allowed. The [[signinedit]] plugin has a hook that says not:
-  Alice is not signed in.
-* The [[signinedit]] plugin then launches the signin process. A signin
-  page is built by calling the `formbuilder_setup` hook.
+* Ikiwiki is run as a cgi. It assigns Alice a session cookie, and, by calling
+  the [[`auth`|plugins/write#auth]] hooks, sees that she is not yet logged in.
+* The [[`sessioncgi`|plugins/write#sessioncgi]] hooks are then called, and one
+  of them, from the [[editpage]] plugin, notices that the cgi has been told
+  "do=edit".
+* The [[editpage]] plugin calls the [[`canedit`|plugins/write#canedit]] hook
+  to check if this page edit is allowed. The [[signinedit]] plugin has a hook
+  that says not: Alice is not signed in.
+* The [[signinedit]] plugin then launches the signin process. A signin page is
+  built by calling the [[`formbuilder_setup`|plugins/write#formbuilder]]
+  hook.
 
 Alice signs in with her openid.
 
-* The [[openid]] plugin's `formbuilder` hook sees that an openid was
-  entered in the signin form, and redirects to Alice's openid provider.
-* Alice's openid provider calls back to ikiwiki. The [[openid]] plugin
-  has an `auth` hook that finishes the openid signin process.
+* The [[openid]] plugin's [[`formbuilder`|plugins/write#formbuilder]] hook
+  sees that an openid was entered in the signin form, and redirects to Alice's
+  openid provider.
+* Alice's openid provider calls back to ikiwiki. The [[openid]] plugin has an
+  [[`auth`|plugins/write#auth]] hook that finishes the openid signin process.
 * Signin complete, ikiwiki returns to what Alice was doing before; editing
   a page.
-* Now all the `canedit` hooks are happy. The [[editpage]] plugin calls
-  `formbuilder_setup` to display the page editing form.
+* Now all the [[`canedit`|plugins/write#canedit]] hooks are happy. The
+  [[editpage]] plugin calls
+  [[`formbuilder_setup`|plugins/write#formbuilder]] to display the page
+  editing form.
 
 Alice saves her change to the page.
 
-* The [[editpage]] plugin's `formbuilder` hook sees that the Save button
-  was pressed, and calls the `checkcontent` and `editcontent` hooks.
-  Then it saves the page to disk, and branches into the compiler part
-  of ikiwiki to refresh the wiki.
+* The [[editpage]] plugin's [[`formbuilder`|plugins/write#formbuilder]] hook
+  sees that the Save button was pressed, and calls the
+  [[`checkcontent`|plugins/write#checkcontent]] and
+  [[`editcontent`|plugins/write#editcontent]] hooks.  Then it saves the page
+  to disk, and branches into the compiler part of ikiwiki to refresh the wiki.
 
 ## Types of plugins
 
@@ -165,7 +177,7 @@ is populated at this point, but other state has not yet been loaded.
 The function is passed no values. It's ok for the function to call
 `error()` if something isn't configured right.
 
-### refresh
+### <a name="refresh">refresh</a>
 
        hook(type => "refresh", id => "foo", call => \&refresh);
 
@@ -173,7 +185,7 @@ This hook is called just before ikiwiki scans the wiki for changed files.
 It's useful for plugins that need to create or modify a source page. The
 function is passed no values.
 
-### needsbuild
+### <a name="needsbuild">needsbuild</a>
 
        hook(type => "needsbuild", id => "foo", call => \&needsbuild);
 
@@ -187,7 +199,7 @@ modified version of its input. It can add or remove files from it.
 The second parameter passed to the function is a reference to an array of
 files that have been deleted.
 
-### scan
+### <a name="scan">scan</a>
 
        hook(type => "scan", id => "foo", call => \&scan);
 
@@ -199,7 +211,7 @@ them to `%links`. Present in IkiWiki 2.40 and later.
 The function is passed named parameters "page" and "content". Its return
 value is ignored.
 
-### filter
+### <a name="filter">filter</a>
 
        hook(type => "filter", id => "foo", call => \&filter);
 
@@ -207,7 +219,7 @@ Runs on the full raw source of a page, before anything else touches it, and
 can make arbitrary changes. The function is passed named parameters "page",
 "destpage", and "content". It should return the filtered content.
 
-### preprocess
+### <a name="preprocess">preprocess</a>
 
 Adding a preprocessor [[ikiwiki/directive]] is probably the most common use
 of a plugin.
@@ -250,7 +262,7 @@ format at preprocessor time. Text output by a preprocessor directive will
 be linkified and passed through markdown (or whatever engine is used to
 htmlize the page) along with the rest of the page.
 
-### linkify
+### <a name="linkify">linkify</a>
 
        hook(type => "linkify", id => "foo", call => \&linkify);
 
@@ -263,7 +275,7 @@ Plugins that implement linkify must also implement a scan hook, that scans
 for the links on the page and adds them to `%links` (typically by calling
 `add_link`).
 
-### htmlize
+### <a name="htmlize">htmlize</a>
 
        hook(type => "htmlize", id => "ext", call => \&htmlize);
 
@@ -287,7 +299,7 @@ like `Makefile` that have no extension.
 If `hook` is passed an optional "longname" parameter, this value is used
 when prompting a user to choose a page type on the edit page form.
 
-### indexhtml
+### <a name="indexhtml">indexhtml</a>
 
        hook(type => "indexhtml", id => "foo", call => \&indexhtml);
 
@@ -298,7 +310,7 @@ update search indexes. Added in ikiwiki 2.54.
 The function is passed named parameters "page", "destpage", and "content".
 Its return value is ignored.
 
-### pagetemplate
+### <a name="pagetemplate">pagetemplate</a>
 
        hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
 
@@ -333,7 +345,7 @@ page (next to Edit, RecentChanges, etc). The hook is passed a "page"
 parameter, and can return a list of html fragments to add to the action
 bar.
 
-### sanitize
+### <a name="sanitize">sanitize</a>
 
        hook(type => "sanitize", id => "foo", call => \&sanitize);
 
@@ -343,7 +355,7 @@ modify the body of a page after it has been fully converted to html.
 The function is passed named parameters: "page", "destpage", and "content",
 and should return the sanitized content.
 
-### format
+### <a name="format">format</a>
 
        hook(type => "format", id => "foo", call => \&format);
 
@@ -372,7 +384,7 @@ each pair is a page name to be rebuilt (if it was not already rebuilt), and
 the second is a log message resembling
 `building plugins/write because the phase of the moon has changed`.
 
-### delete
+### <a name="delete">delete</a>
 
        hook(type => "delete", id => "foo", call => \&delete);
 
@@ -390,7 +402,7 @@ source files that were rendered.
 (This hook used to be called "change", but that was not accurate.
 For now, plugins using the old hook name will still work.)
 
-### changes
+### <a name="changes">changes</a>
 
        hook(type => "changes", id => "foo", call => \&changes);
 
@@ -410,7 +422,7 @@ parameters, and if it will handle this CGI request, output a page
 Note that cgi hooks are called as early as possible, before any ikiwiki
 state is loaded, and with no session information.
 
-### auth
+### <a name="auth">auth</a>
 
        hook(type => "auth", id => "foo", call => \&auth);
 
@@ -423,7 +435,7 @@ object's "name" parameter to the authenticated user's name. Note that
 if the name is set to the name of a user who is not registered,
 a basic registration of the user will be automatically performed.
 
-### sessioncgi
+### <a name="sessioncgi">sessioncgi</a>
 
        hook(type => "sessioncgi", id => "foo", call => \&sessioncgi);
 
@@ -432,7 +444,7 @@ is only run once a session object is available. It is passed both a CGI
 object and a session object. To check if the user is in fact signed in, you
 can check if the session object has a "name" parameter set.
 
-### canedit
+### <a name="canedit">canedit</a>
 
        hook(type => "canedit", id => "foo", call => \&canedit);
 
@@ -472,7 +484,7 @@ bypass it). It works exactly like the `canedit` hook,
 but is passed the named parameters `cgi` (a CGI object), `session` (a
 session object), `src`, `srcfile`, `dest` and `destfile`.
 
-### checkcontent
+### <a name="checkcontent">checkcontent</a>
        
        hook(type => "checkcontent", id => "foo", call => \&checkcontent);
 
@@ -493,7 +505,7 @@ should return a message stating what the problem is, or a function
 that can be run to perform whatever action is necessary to allow the user
 to post the content.
 
-### editcontent
+### <a name="editcontent">editcontent</a>
 
        hook(type => "editcontent", id => "foo", call => \&editcontent);
 
@@ -504,7 +516,7 @@ user, the page name, a `CGI` object, and the user's `CGI::Session`.
 
 It can modify the content as desired, and should return the content.
 
-### formbuilder
+### <a name="formbuilder">formbuilder</a>
 
        hook(type => "formbuilder_setup", id => "foo", call => \&formbuilder_setup);
        hook(type => "formbuilder", id => "foo", call => \&formbuilder);
@@ -621,7 +633,7 @@ describes the plugin as a whole. For example:
   strictly required.
 * `section` can optionally specify which section in the config file
   the plugin fits in. The convention is to name the sections the
-  same as the tags used for [[plugins|plugin]] on this wiki.
+  same as the tags used for [[plugins]] on this wiki.
 
 ### genwrapper
 
@@ -672,7 +684,7 @@ wiki updates.
 
 The `%wikistate` hash can be used by a plugin to store persistant state
 that is not bound to any one page. To set a value, use
-`$wikistate{$id}{$key}=$value, where `$value` is anything Storable can
+`$wikistate{$id}{$key}=$value`, where `$value` is anything Storable can
 serialize, `$key` is any string you like, and `$id` must be the same as the
 "id" parameter passed to `hook()` when registering the plugin, so that the
 state can be dropped if the plugin is no longer used.
index fdd2fbfd419db786dd336ce07905ab04304ffee6..57b0d044b513788658652a7133486e4be3282c2d 100644 (file)
@@ -171,8 +171,21 @@ Bugs found and fixed so far:
 
 > Merged to current head. --[[Joey]] 
 
-* Return bounded output from `rcs_diff()` when asked, as the API states.
-   (6753235d98a3903364af26c0614106c47d93ae35)
-* When adding a text file under a name formerly tracked as binary,
-  fix CVS keyword substitution behavior by explicitly setting `-kkv`.
-   (e45175d5454cc72b261507260accb309f13b5e8b)
+----
+
+Hi! Bugfixes in `schmonz/cvs` I'd like to see merged:
+
+* `6753235d`: Return bounded output from `rcs_diff()` when asked, as
+  the API states.
+* `e45175d5`: Always explicitly set CVS keyword substitution behavior.
+  Fixes behavior when a text file is added under a name formerly
+  used for a binary file.
+* `b30cacdf`: If the previous working directory no longer exists after
+  a CVS operation, don't try to `chdir()` back to it afterward.
+* `91b477c0`: Fix diffurl links (cvsweb expects unescaped '/').
+
+These are all the diffs that exist on the branch, so if the changes
+are acceptable you should be able to simply merge the branch.
+--[[schmonz]]
+
+> All applied. --[[Joey]] 
index b4f639c614f199dc56f1e61d09057769df288d22..c82adbd049258d7cf49ead1ac8d043138b5ef5fc 100644 (file)
@@ -116,3 +116,38 @@ pulling changes from the bare root repository, you will need to
 manually update the local wiki, with a command such as `ikiwiki
 -setup localwiki.setup -refresh`. You could use git's `post-merge` hook
 to automate that command.
+
+## Using ikiwiki with Gerrit
+
+[Gerrit Code Review](https://code.google.com/p/gerrit/) manages a set of Git
+repositories and provides a web interface to review and merge commits.  You can
+configure ikiwiki to work with a Gerrit-managed repository, allowing you to
+review and merge commits to your wiki.
+
+First, create your initial wiki repository with Gerrit.  On the server, as the
+user that will own the wiki, clone that repository to create a working
+directory for ikiwiki, such as /srv/wiki/ikiwiki-checkout.  Create a setup file
+and target directory as usual, referencing that working directory path, and
+creating a post-update hook in Gerrit's repository.  You'll need to set
+appropriate permissions on the hook directory for the repository so that the
+user running ikiwiki can compile and install the post-update hook.  Also note
+that you must disable web editing by disabling the editpage plugin, and you
+must not enable any other plugin that commits to the repository, since ikiwiki
+will not have permission to push to the repository.  (Allowing web edits to
+have such permission would bypass Gerrit's code review, defeating the purpose.)
+
+Gerrit does not run per-repository hooks, such as the post-update hook ikiwiki
+installs to update the wiki after pushes.  However, Gerrit has site-wide hooks,
+including a ref-updated hook that runs whenever a ref changes.  You can use
+that hook to trigger ikiwiki's post-update hook.  The following script,
+installed as Gerrit's ref-updated hook, will run the post-update hook on any
+repository that has a "gerrit-run-post-update-hook" file in it:
+
+    #!/bin/sh
+    if [ -e "$GIT_DIR/gerrit-run-post-update-hook" ] ; then
+        exec "$GIT_DIR/hooks/post-update"
+    fi
+
+Then just create gerrit-run-post-update-hook in the wiki repository, run
+ikiwiki --setup on the setup file, add your wiki to /etc/ikiwiki/wikilist, and
+start reviewing and committing wiki changes via Gerrit.
index 51c24ba96a176e3b3eef3e8679e58af7f3aeaaae..3ecd588439bca77d499ed24269638712615b3db5 100644 (file)
@@ -1,34 +1,7 @@
-# Sandbox
-
-[[!pagestats  pages="/tags/*"]]
-
-An initial change
-Hello, ikiwiki.
-
-Testing.
-
-[[!sidebar ]]
-
-
-## number 2
-### number 3
-
-This is the SandBox, a page anyone can edit to try out ikiwiki
+This is the [[SandBox]], a page anyone can edit to try out ikiwiki
 (version [[!version  ]]).
 
-[[!toc levels=1 startlevel=2 ]]
-
-See, online editing :-p
-
-Let's try this~!
-
-w00t, how does this look on the **git** end? Well, as a commit of course.
-
-Testing this sandbox thing.
-
-Awesome :P
-
-## Blockquotes
+hello world
 
 > This is a blockquote.
 >
@@ -40,19 +13,9 @@ Awesome :P
 >>> to three levels
 >
 > Back to the first level.
-
-> It's kinda like e-mail...
->> ...but without the cool colored lines...
->>> ...and different font colors.
->>>> ...but it's nothing a little CSS can't fix.
-
-# Pointless heading
-
-Let's see a table:
-
-[[!table data="""
-Heading 1|Heading 2|Heading 3
-Item 1| Item 2| Item 3"""]]
+>
+> added a line in level 1
+> and another
 
 
 Numbered list 
@@ -73,9 +36,10 @@ Bulleted list
 * one
   * footballs; runner; unices
   * Cool !
-  * Indeed.
 
-[[new link]]
+test _this_ out.
+
+`test this code block`
 
 ----
 
@@ -109,85 +73,11 @@ Bulleted list
 
 _italic_
 
+test ms
 
-Umcacaumca
-
-### this shows a problem with the list and the verbatim 
-
-Now we try to write a "code" block starting with a hash sign
-
-    # test 1,2,3
-    $ another test
-
-
-Oh, let's try to do the same thing using sane syntax instead:
-
-~~~
-# test 1,2,3
-$ another test
-~~~
-
-Now let's write the same block, with a bullest list preceding it.
-
-
-* This is a bullet list
-
-    # test 1,2,3
-    $ another test
-
-
+opopopo
 ----
 
-Test some tags
-[[!tag  tech life linux]]
-[[!taglink tech life linux]]
-
-Toggle:
-[[!toggle  id="ipsum" text="show"]]
-
-[[!toggleable  id="ipsum" text="""
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
-eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
-ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
-aliquip ex ea commodo consequat.
-
-[[!toggle id="ipsum" text="hide"]]
-"""]]
-----
-
-This **SandBox** is also a [[blog]]! xxx
-
-[[!inline pages="sandbox/* and !*/Discussion" rootpage="sandbox" show="4" archive="yes"]]a
-
-[[!format  verilog """
-module vc_Mux2 #( parameter W = 1 )
-(
-  input      [W-1:0] in0, in1,
-  input              sel,
-  output reg [W-1:0] out
-);
-
-  always @(*)
-  begin
-    case ( sel )
-      1'd0 : out = in0;
-      1'd1 : out = in1;
-      default : out = {W{1'bx}};
-    endcase
-  end
-
-endmodule
-"""]]
-
-#<asd>
-
-This is simple enough for now [[sandbocen]] no?
-
-    Do code tags work?
-
-test by max
-
-test by bbb
-
+This **SandBox** is also a [[blog]]!
 
-Can I make a [[NewPage]]?
+[[!inline pages="sandbox/* and !*/Discussion" rootpage="sandbox" show="4" archive="yes"]]
diff --git a/doc/sandbox/Fantasia.mdwn b/doc/sandbox/Fantasia.mdwn
deleted file mode 100644 (file)
index 8845ec9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
->> Block
->>> Two Block
-
-[[blog]] blog
-
-* one
-* two
-
-# one
-# two
diff --git a/doc/sandbox/Hey__33__.mdwn b/doc/sandbox/Hey__33__.mdwn
deleted file mode 100644 (file)
index 6902ee3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Don't you love it...
diff --git a/doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn b/doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn
deleted file mode 100644 (file)
index 44b139a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Ελληνικά
diff --git a/doc/sandbox/Mooooo.mdwn b/doc/sandbox/Mooooo.mdwn
deleted file mode 100644 (file)
index 6f11d35..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Hrm.
diff --git a/doc/sandbox/Nur_so..mdwn b/doc/sandbox/Nur_so..mdwn
deleted file mode 100644 (file)
index 32c9f23..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Das ist ein Test.
diff --git a/doc/sandbox/Nyus_of_se_däi.mdwn b/doc/sandbox/Nyus_of_se_däi.mdwn
deleted file mode 100644 (file)
index 6205f18..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Sies ahr se nyus of se däi...... säi ahr väri interesting, for schur.
diff --git a/doc/sandbox/Test_it.mdwn b/doc/sandbox/Test_it.mdwn
deleted file mode 100644 (file)
index 5478d7a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Test it just now!
diff --git a/doc/sandbox/Testing_blog_entry.mdwn b/doc/sandbox/Testing_blog_entry.mdwn
deleted file mode 100644 (file)
index aa5fa5b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# Be cool, this is a test!
-
-Hello guys, this is *just a test* entry.
-
-* Did I say
-* that I love
-* bulleted lists?
diff --git a/doc/sandbox/adding_a_new_post.mdwn b/doc/sandbox/adding_a_new_post.mdwn
deleted file mode 100644 (file)
index b42ae70..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Bob has many drives to archive his data, most of them kept offline, in a safe place.
-
-With git-annex, Bob has a single directory tree that includes all his files, even if their content is being stored offline. He can reorganize his files using that tree, committing new versions to git, without worry about accidentally deleting anything. 
diff --git a/doc/sandbox/ainvyu.mdwn b/doc/sandbox/ainvyu.mdwn
deleted file mode 100644 (file)
index 7c96095..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-## 룰루랄라 잘되나 테스트
-
-### 두번째
-
-#### 세번째
-
-[[link test]]
-
-    code test
-    basic
-
-----
-
-몸에 좋고 맛도 좋은 소고기
diff --git a/doc/sandbox/bullet_list_and_code_test.mdwn b/doc/sandbox/bullet_list_and_code_test.mdwn
deleted file mode 100644 (file)
index a17729c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-paragraph.
-
-    code
-
- * bullet list
- * bullet list
-
-    more code
-
- * bullet list continued
-
-    tailing code
diff --git a/doc/sandbox/danc.mdwn b/doc/sandbox/danc.mdwn
deleted file mode 100644 (file)
index 9766475..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ok
diff --git a/doc/sandbox/dateenumeration.mdwn b/doc/sandbox/dateenumeration.mdwn
deleted file mode 100644 (file)
index adc40bd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-* 1. January
-* 23. February
-* 99. March
-* 7. November
diff --git a/doc/sandbox/hey.mdwn b/doc/sandbox/hey.mdwn
deleted file mode 100644 (file)
index a955185..0000000
+++ /dev/null
@@ -1 +0,0 @@
-* Hello
diff --git a/doc/sandbox/plop.mdwn b/doc/sandbox/plop.mdwn
deleted file mode 100644 (file)
index e8b7c91..0000000
+++ /dev/null
@@ -1 +0,0 @@
-plop
diff --git a/doc/sandbox/revert_me.mdwn b/doc/sandbox/revert_me.mdwn
deleted file mode 100644 (file)
index 2b1cd2f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-this looks good
diff --git a/doc/sandbox/sandbocen.mdwn b/doc/sandbox/sandbocen.mdwn
deleted file mode 100644 (file)
index 8f7e049..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Great!
-
-<code>
-if (sample == test) goto Dijkstra
-</code>
diff --git a/doc/sandbox/sidebar.mdwn b/doc/sandbox/sidebar.mdwn
deleted file mode 100644 (file)
index 9daeafb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-test
index c3b62cd3c6395fb9072071f8f15da3af4679f542..afefd1bc300eb4d18811c42f72931d9dfd7b7860 100644 (file)
@@ -110,7 +110,7 @@ runs ikiwiki to update a given wiki. The wrapper can in turn be made suid,
 for example to be used in a [[post-commit]] hook by people who cannot write
 to the html pages, etc.
 
-If the wrapper script is made suid, then any bugs in this wrapper would be
+If the wrapper program is made suid, then any bugs in this wrapper would be
 security holes. The wrapper is written as securely as I know how, is based
 on code that has a history of security use long before ikiwiki, and there's
 been no problem yet.
index ce51faa6d47688754acc04f08c0931d4cd90134a..bdbe323fd673884eba68e1387ca4aa4c9d70f4c2 100644 (file)
@@ -143,3 +143,10 @@ setup file.
 
 Add yourself to [[IkiWikiUsers]]. And check out
 the [[tips]] to find out how to get more out of ikiwiki.
+
+----
+
+_Notes_:
+
+- If you are searching for the file where the users are stored, it's in `your_repository/.ikiwiki/userdb`. The one which is in YOUR REPOSITORY, it cannot be found into your `~/.ikiwiki`.
+- If you want to enable a plugin you **WILL HAVE** to add it to the `add_plugins` array in the `*.setup` file (or to use the `--plugin` switch while calling `ikiwiki`). Uncommenting the plugin options/configuration fields in the setup is not **ALWAYS** sufficient. You have been warned.
index 75a5648d5212ba8d090764ea4064229d2a7d1923..6d0f37cd9e05333ea35a211ebdc4ed36e3aabd0f 100644 (file)
@@ -93,9 +93,15 @@ will set everything up.
 
 ## Turn on additional features.
 
+[[!template id="note" text="""
+CGI configuration is heavily dependent on webserver. Figure out (or
+configure) the location and/or filename extension your webserver
+needs to execute a CGI, then set `cgi_wrapper` to a suitable path.
+"""]]
+
 Now you have a basic wiki with a setup file. Time to experiment
 with ikiwiki's many features. 
-   
+
 Let's first enable a key wiki feature and set up [[CGI]] to allow
 editing the wiki from the web. Just edit ikiwiki.setup, uncomment the
 settings for the `cgi_wrapper`, make sure the filename for the cgi wrapper
index 722c6b141b06aee390b82cf10e216f5dfdbfbb4b..b4f6d8ef47b4fb0ec1a067743c8732c6eb6f7d24 100644 (file)
@@ -7,7 +7,7 @@ Some examples of using shortcuts include:
        \[[!google foo]]
        \[[!wikipedia War_of_1812]]
        \[[!debbug 12345]]
-       Check the \[[!cia ikiwiki desc="CIA page for %s"]].
+       Check the \[[!google ikiwiki desc="google search for %s"]].
 
 This page controls what shortcut links the wiki supports.
 
@@ -54,8 +54,6 @@ This page controls what shortcut links the wiki supports.
 * [[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]]
 * [[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain"]]
 * [[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]]
-* [[!shortcut name=cia url="http://cia.vc/stats/project/%s"]]
-* [[!shortcut name=ciauser url="http://cia.vc/stats/user/%s"]]
 * [[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]]
 * [[!shortcut name=man url="http://linux.die.net/man/%s"]]
 * [[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]]
index 635ca755c97f5a4dc5488183f4dba0717201da0d..5cdb10bb72fce91161bcc81eff52963a5a3419f3 100644 (file)
@@ -47,7 +47,7 @@ Based on ["What should a mentoring organization application look like?"](http://
     The ikiwiki project strongly encourages collaboration through ikiwiki itself, and thus does not have a mailing list.
     Anyone can create an account on ikiwiki's own wiki.  ikiwiki provides a bug tracker, a TODO list, and the ability
     to create a weblog on any page.  ikiwiki also includes "discussion" sub-pages on every page.  The developers and mentors
-    monitor RecentChanges closely, via the webpage, email, and [CIA](http://cia.navi.cx), and will respond in a timely fashion.
+    monitor RecentChanges closely, via the webpage, email, and CIA, and will respond in a timely fashion.
 
 9. **What is the main IRC channel for your organization?**
 
index 6e2afce66b97075614b067991833ed578b8b195f..424d438167dd9ee5272ec55971f261515a4d95ff 100644 (file)
@@ -202,6 +202,13 @@ div.recentchanges {
        margin-top: 1em;
 }
 
+.archivepagedate {
+       font-style: italic;
+}
+.archivepage {
+       margin-bottom: 1em;
+}
+
 .error {
        color: #C00;
 }
index 06526df1a2e3dc6ff7c33e343585a3dd4a282f0e..e9bdaa0566e3457a4bcf82742cbcf88710fd5108 100644 (file)
@@ -9,3 +9,5 @@ Feel free to add your own [[theme|themes]] here, but first consider writing a si
  * **[[AntPortal theme|https://github.com/AntPortal/ikiwiked]]**, contributed by Danny, see an example [[on the Antportal wiki|https://antportal.com/wiki/]]
 
  * **[[Night city theme|http://anarcat.ath.cx/night_city/README/]]**, contributed by [[anarcat]], see an example [[on his homepage|http://anarcat.ath.cx/]]
+
+ * **[[Bootstrap theme|http://anonscm.debian.org/gitweb/?p=users/jak/website.git;a=summary]]**, contributed by [[JAK LINUX|http://jak-linux.org/about/]], based on [[Twitter Bootstrap|http://twitter.github.com/bootstrap/]]
index 57f899677f8bade0c71f21d350414cd09e5adaa8..e15248360cc6a157f8c60045c8a52b4577d232f2 100644 (file)
@@ -3,7 +3,9 @@ ikiwiki a nice look and feel. The local.css [[CSS]] file is left
 free for you to further customize.
 
 Ikiwiki now comes with several themes contributed by users.
-You can enable the [[theme_plugin|plugins/theme]] to use any of these:
+You can enable the [[theme_plugin|plugins/theme]] to use any of
+these, but you can also deploy custom themes maintained by the
+community from the [[theme market]].
 
 [[!img actiontabs_small.png align=left]] The **actiontabs** theme, contributed by
 [[svend]]. This style sheet displays the action list
@@ -21,6 +23,11 @@ blueview and featuring the photography of Lars Wirzenius.
 
 <br clear="both" />
 
+[[!img monochrome_small.png align==left]] The **monochrome** theme,
+based on [[Jon]]'s homepage design.
+
+<br clear="both" />
+
 [[!img none_small.png align=left]] For completeness, ikiwiki's default
 anti-theme.
 
index ce79d0f70202ec52184bd061f0352c5f0e2be7e9..d01b7838a87d50f3ba97d617fc07250dad63ff6b 100644 (file)
@@ -7,3 +7,8 @@ For an example of the theme in action, see: [[https://antportal.com/wiki/]]
 > Shouldn't we just make people post their themes in the [[themes]] page? Or maybe we should make a [[theme market]]? --[[anarcat]]
 
 > I did just that. -- [[anarcat]]
+
+What is the process for merging a theme in Ikiwiki? It seems to me the
+[[Bootstrap theme|http://www2.tblein.eu/posts/How_to_have_a_nice_design_for_ikiwiki/]]
+could improve the options a lot... See the [[theme market]] for the
+links to the actual theme. -- [[anarcat]]
diff --git a/doc/themes/monochrome_small.png b/doc/themes/monochrome_small.png
new file mode 100644 (file)
index 0000000..6c98100
Binary files /dev/null and b/doc/themes/monochrome_small.png differ
index ae612e129d8812bd2c9b8e1d12570b11bb27f623..6d65a0a70a87447fc819d810fba6425436a224e3 100644 (file)
@@ -19,6 +19,7 @@ Thanks to the following people for their kind contributions:
 * Nico Schottelius
 * Jon Dowland
 * Amitai Schlair
+* Luca Capello
 
 (Note that this page is locked to prevent anyone from tampering with the PayPal button.
 If you prefer your donation *not* be listed here, let [[Joey]] know.)
index 070638e3e41a947f5717f92f26365459cd673bb9..338bca78239e33500f38bf0209150b941796eb63 100644 (file)
@@ -176,6 +176,7 @@ Then you'll have to add a few variables to your path [referenced by your compile
 
     export C_INCLUDE_PATH=YOUR_INSTALL_PATH_HERE/include/
     export LIBRARY_PATH=YOUR_INSTALL_PATH_HERE/lib/
+    export LD_LIBRARY_PATH=YOUR_INSTALL_PATH_HERE/lib/
 
 Then you should be able to install the module, and it'll be faster.
 
index 09e6f67424fa3c190ddf24bf37b8766fbc731a2a..f1028bc3884b58c4dffc6147cfc1f8bd3e88a91b 100644 (file)
@@ -1,3 +1,18 @@
+Using a new debian 6.0.5 system, I get the following error trying to run the script:
+
+    ~/bin/ikiwiki-wordpress-import.py "Name" email@domain log < ~/share/wordpress.2012-08-23.xml.edited | git-fast-import
+    Traceback (most recent call last):
+      File "/home/luke/bin/ikiwiki-wordpress-import.py", line 139, in <module>
+        main(*sys.argv[1:])
+      File "/home/luke/bin/ikiwiki-wordpress-import.py", line 65, in main
+        content += x.find('content:encoded').string.replace('\r\n', '\n')
+    AttributeError: 'NoneType' object has no attribute 'replace'
+    git-fast-import statistics:
+
+Any ideas on what I am doing wrong would be appreciated.
+
+-----
+
 When I attempt to use this script, I get the following error:
 warning: Not updating refs/heads/master (new tip 26b1787fca04f2f9772b6854843fe99fe06e6088 does not contain fc0ad65d14d88fd27a6cee74c7cef3176f6900ec).  I have git 1.5.6.5, any ideas?
 
diff --git a/doc/tips/Make_calendar_start_week_on_Monday/discussion.mdwn b/doc/tips/Make_calendar_start_week_on_Monday/discussion.mdwn
new file mode 100644 (file)
index 0000000..fffd587
--- /dev/null
@@ -0,0 +1 @@
+It should be pointed out that copying the templates are optional -- you only have to add **week_start_day="1"** to the calendar part of the sidebar.
index 39ffc040483a1368bd0f4d0cb3975c25894390f4..e71e2132d48103e126710ce51df811b80d107660 100644 (file)
@@ -1,3 +1,5 @@
 Daniel Burrows
 [explains](http://algebraicthunk.net/~dburrows/blog/entry/howto-convert-your-blogger-or-blogspot-blog-to-ikiwiki/)
 how to convert your Blogger/BlogSpot blog to ikiwiki.
+
+François Marier used a [different approach](http://feeding.cloud.geek.nz/posts/moving-from-blogger-to-ikiwiki-and-branchable/) on a more recent version of Blogger.
index 23e4d60351920d622c272f92921966fc2a04ebdb..ec4574971269154e8fb53de349a4e97b2dfa8242 100644 (file)
@@ -4,10 +4,12 @@ The converter was originally written by [[JoshTriplett]] and included support fo
 
 The MoinMoin side of things was completely re-written by [[anarcat]] and is currently still in development. That version is available at:
 
-    git clone git://src.anarcat.ath.cx/moin2iki
+    git clone git://git.koumbit.net/moin2iki.git
 
 It doesn't feature support to migrate from Tikiwiki anymore and focuses on MoinMoin support.
 
+Issues can be filed in the redmine bugtracker: <https://redmine.koumbit.net/projects/moin2iki>
+
 [[!toc levels=2]]
 
 The software is made of two pieces:
@@ -50,7 +52,7 @@ The software is made of two pieces:
  * FullSearch, partially, only through [[ikiwiki/directive/inline]] (so no textual search)
  * Include, partially through [[ikiwiki/directive/inline]] (so missing boundary extraction and heading level generation)
  * PageCount, same name even :)
- * OrphanedPages, through [[ikiwiki/directive/oprhans]]
+ * OrphanedPages, through [[ikiwiki/directive/orphans]]
  * Date and Datetime, should be through [[plugins/date]] instead of
    current hack
 
@@ -58,7 +60,7 @@ The software is made of two pieces:
 
  * the main "moin wiki" markup
  * highlight parser, through the [[plugins/format]] plugin
- * other parsers may be supported if an equivalent plugin exists in Ikiwiki (example: [[plugin/rst]])
+ * other parsers may be supported if an equivalent plugin exists in Ikiwiki (example: [[plugins/rst]])
 
 ## Current blocker
 
index 42a0aa7bf16350d8dde600bf125c05a55f5de3a7..9067fbea57c6f3e77cdb2b72d00403a12d096f2c 100644 (file)
@@ -15,7 +15,10 @@ configuration changes should work anywhere.
 
 ## apache 2
 
-* Edit /etc/apache2/apache2.conf and add a line like this:
+* Make sure the cgi module is loaded. (Ie, `a2enmod cgi`)
+
+* Edit /etc/apache2/apache2.conf (or /etc/apache2/mods-available/mime.conf)
+  and add a line like this:
 
        AddHandler cgi-script .cgi
 
@@ -26,8 +29,10 @@ 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 install some dependencies to enable CGI in apache2 setup as: `libcgi-formbuilder-perl` and `libcgi-session-perl`.
-
+* If your wiki is in `~/public_html` and does not appear when you enter the URL given by the installer, check that you have 
+  the userdir mod enabled (there should be simlinks to userdir.load and userdir.conf in /etc/apache2/modes-enabled).  If not,
+  run `a2enmod userdir` and reload apache2.
+  
 * You may also want to enable the [[plugins/404]] 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.
@@ -60,7 +65,44 @@ If you have any thought about it, feel free to let me know.
 
 ## nginx
 
-* To run CGI under nginx, just use a FastCGI wrapper like [this one](http://technotes.1000lines.net/?p=23). The wrapper must be started somehow just like any other FastCGI program. I use launchd on OSX.
+To run CGI under nginx, you need to use a FastCGI wrapper. The wrapper must be started somehow just like any other FastCGI program. You can use launchd on OSX.
+
+In Linux, you will need the spawn-fcgi and fcgiwrap packages and start
+them with:
+
+    spawn-fcgi -s /tmp/fcgi.socket -n -- /usr/sbin/fcgiwrap
+
+This needs to be ran as your user. It can be added to `inittab` or
+made into a startup script in `init.d`. You may also need to make this file writable by the webserver, if that's running as a different user, e.g.:
+
+    chmod a+w /tmp/fcgi.socket
+
+Then you need an nginx config plugged in that wrapper. Here's an
+example virtual host configuration:
+
+    server {
+        #listen   80; ## listen for ipv4; this line is default and implied
+        #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
+
+        root /home/anarcat/public_html/wiki.reseaulibre.ca/;
+        index index.html index.htm;
+
+        # Make site accessible from http://localhost/
+        server_name wiki.reseaulibre.ca;
+
+        location / {
+                try_files $uri $uri/ /index.html;
+        }
+        location /ikiwiki.cgi {
+                fastcgi_pass  unix:/tmp/fcgi.socket;
+                fastcgi_index ikiwiki.cgi;
+                fastcgi_param SCRIPT_FILENAME   /home/anarcat/public_html/ikiwiki.cgi;
+                fastcgi_param  DOCUMENT_ROOT      /home/anarcat/public_html/wiki.reseaulibre.ca;
+                include /etc/nginx/fastcgi_params;
+        }
+    }
+
+Also, note that the `/tmp/fcgi.socket` file needs to be writable by the webserver. I am also unsure as to the security of this setup, as I am using this only on my dev server. Needless to say that [[real fastcgi support|todo/fastcgi_or_modperl_installation_instructions]] would be great. ;) --[[anarcat]]
 
 ## boa
 
index a8854565ca502794e95f8a27b82087e5df547cbe..0e23e3a0834ba8388b21817ebdff75ec303db0cd 100644 (file)
@@ -1,3 +1,8 @@
+## Alt explanation/instructions
+For whatever reason, I found the info on the dot cgi page very confusing.  The instructions on [[http://maketecheasier.com/install-and-configure-apache-in-ubuntu/2011/03/09]] were a lot easier to follow, and ultimately got me over the ubuntu-apache hump.
+
+Following this method the wiki won't be at the same url, it will be at localhost/*wiki_name*
+
 ## warning: lighttpd only or both?
 
 Is your warning at the bottom (you don't know how secure it is) only about
index 0c0527f2ce8e84a7d4aff0e1f9a85fb875ad64f5..a59d4b5ad48595418d915b12382370f82a3b3064 100644 (file)
@@ -1,9 +1,244 @@
 [[!meta title="ikiwiki-wordpress-import"]]
 
+I converted the script to Perl.  The new version gets your name and email automatically from your git config, converts the body of your posts to markdown, and also imports comments.  More importantly it works with the latest wordpress, which the python version does not.  Note that it's still not 100% perfect and I intend to make a few modifications still, but they will require access to the mysql database and that may render the script useless to some users.
+
+-----
+[[!format perl '''
+#!/usr/bin/env perl
+
+use 5.16.1;
+use warnings;
+
+use XML::Simple;
+use DateTime::Format::Strptime;
+use HTML::WikiConverter;
+use LWP::UserAgent;
+use Try::Tiny;
+use Digest::MD5 'md5_hex';
+
+die "usage: $0 import_file subdir [branch] | git-fast-import"
+   unless @ARGV == 2 or @ARGV == 3;
+
+chomp(my $name = qx(git config --get user.name));
+chomp(my $email = qx(git config --get user.email));
+
+my ($file, $subdir, $branch) = @ARGV;
+
+my %events;
+
+POST:
+for my $x (grep $_->{'wp:status'} eq 'publish', @{XMLin($file)->{channel}{item}}) {
+   state $date_parser = DateTime::Format::Strptime->new(
+      pattern => '%F %T',
+      time_zone => 'UTC',
+   );
+
+   my $stub = $x =~ m<([^/]+)\/$>
+      ? $1
+      : lc($x->{title} =~ s/\W/-/gr =~ s/-$//r)
+   ;
+
+   my $guid = $x->{guid}{content} || $x->{link};
+   utf8::encode($x->{title});
+   my $msg = qq($x->{title}\n\nfrom WordPress [$guid]);
+   my $timestamp = $date_parser
+      ->parse_datetime($x->{'wp:post_date_gmt'})
+      ->epoch;
+
+   my $c = $x->{category};
+   $c = [$c] if ref $c && ref $c ne 'ARRAY';
+
+   my $content =
+      sprintf(qq([[!meta title="%s"]]\n), $x->{title} =~ s/"/\\"/gr) .
+      convert_content($x->{'content:encoded'}) . "\n\n" .
+      join("\n",
+         map '[[!tag ' . s/ /-/r . ']]',
+         keys %{
+            +{
+               map { $_ => 1 }
+               grep $_ ne 'uncategorized',
+               map $_->{nicename},
+               @$c
+            }
+         }
+      );
+
+   $events{$timestamp} = join "\n",
+      "commit refs/heads/$branch",
+      "committer $name <$email> $timestamp +0000",
+      'data <<8675309',
+      $msg,
+      '8675309',
+      "M 644 inline $subdir/$stub.mdwn",
+      'data <<8675309',
+      $content,
+      '8675309'
+   ;
+
+   get_comments($x->{link}, "$subdir/$stub")
+      if $x->{'wp:post_type'} eq 'post'
+}
+
+sub get_comments {
+   my ($url, $dir) = @_;
+
+   state $ua = LWP::UserAgent->new;
+
+   my $content = $ua->get("$url/feed")->decoded_content;
+   my $first;
+   my $bail;
+   my $decoded =
+      try { XMLin($content, ForceArray => ['item']) }
+      catch { $bail = 1 };
+
+   return if $bail;
+
+   COMMENT:
+   for my $x (@{$decoded->{channel}{item}}) {
+      my $date = $x->{pubDate};
+      $date =~ s/^\S+\s//;
+      $date =~ s/\s\S+$//;
+
+      #ghetto
+      $date =~ s/Jan/01/;
+      $date =~ s/Feb/02/;
+      $date =~ s/Mar/03/;
+      $date =~ s/Apr/04/;
+      $date =~ s/May/05/;
+      $date =~ s/Jun/06/;
+      $date =~ s/Jul/07/;
+      $date =~ s/Aug/08/;
+      $date =~ s/Sep/09/;
+      $date =~ s/Oct/10/;
+      $date =~ s/Nov/11/;
+      $date =~ s/Dec/12/;
+
+      state $date_parser = DateTime::Format::Strptime->new(
+         pattern => '%d %m %Y %T',
+         time_zone => 'UTC',
+      );
+
+      my $datetime = $date_parser
+         ->parse_datetime($date);
+
+      my $timestamp = $datetime->epoch;
+      my $formatted_date = "$timestamp";
+
+      my $msg = 'Added a comment';
+      my $content = convert_content($x->{'content:encoded'});
+      utf8::encode($x->{'dc:creator'});
+
+      $events{$timestamp} = join "\n",
+         "commit refs/heads/$branch",
+         # still need to get email address
+         "committer $x->{'dc:creator'} <$x->{'dc:creator'}> $timestamp +0000",
+         'data <<8675309',
+         $msg,
+         '8675309',
+         "M 644 inline " . unique_comment_location($dir, $content),
+         'data <<8675309',
+
+      <<"COMMENT",
+[[!comment format=mdwn
+ username="$x->{'dc:creator'}"
+ date="$formatted_date"
+ content="""
+$content
+"""]]
+COMMENT
+      '8675309'
+      ;
+   }
+}
+
+say $events{$_} for sort keys %events;
+
+sub convert_content {
+   my $body = shift;
+
+   utf8::encode($body);
+
+   state $converter = HTML::WikiConverter->new(
+      dialect              => 'Markdown',
+      link_style           => 'inline',
+      unordered_list_style => 'dash',
+      image_style          => 'inline',
+      image_tag_fallback   => 0,
+   );
+
+   # I know I know you can't parse XML with regular expressions.  Go find a real
+   # parser and send me a patch
+   my $in_code = 0;
+
+   my $start_code = qr(<pre[^>]*>);
+   # (?:) is a no op but keeps ikiwiki from breaking my script
+   my $end_code = qr(</p(?:)re>);
+
+   $body =~ s(&#(?:8217|039);)(')g;
+   $body =~ s(&(?:quot|#822[01]);)(")g;
+   $body =~ s(&lt;)(<)g;
+   $body =~ s(&gt;)(>)g;
+   $body =~ s(&amp;)(&)g;
+   $body =~ s(&#8230;)(...)g;
+   $body =~ s(&#821[12];)(-)g;
+   $body =~ s(&#8216;)(')g;
+   $body =~ s(&#8242;)(')g;
+   $body =~ s(&infin;)(∞)g;
+   $body =~ s(&nbsp;)()g;
+   $body =~ s(<code[^>]*>)(<p(?:)re>)g;
+   $body =~ s(</c(?:)ode>)(</p(?:)re>)g;
+
+   my @tokens =
+      map {; split qr[(?=<p(?:)re>)] }
+      map {; split qr[</p(?:)re>\K] }
+      split /\n\n/,
+      $body;
+
+   my @new_tokens;
+   for my $t (@tokens) {
+      if (
+         ($in_code && $t !~ $end_code) ||
+         ($t =~ $start_code && $t =~ $end_code)
+      ) {
+         # do nothing
+      } elsif ($t =~ $start_code) {
+         $in_code = 1;
+      } elsif ($t =~ $end_code) {
+         $in_code = 0;
+      } else {
+         die "$t !!! '$1'" if $t =~ m/&([^;\s]+);/ && $1 !~ /[lg]t/;
+
+         $t = "<p>$t</p>"
+      }
+      push @new_tokens, $t
+   }
+
+   $converter->html2wiki(join "\n\n", @new_tokens)
+}
+
+sub unique_comment_location {
+   my ($dir, $content) = @_;
+
+   utf8::encode($content);
+   my $md5 = md5_hex($content);
+
+   my $location;
+   my $i = 0;
+   do {
+      $i++;
+      $location = "$dir/comment_${i}_$md5._comment";
+   } while -e $location;
+
+   return $location
+}
+
+''']]
+-----
+
 I modified the script a bit so categories and tags would actually show up in the output file.
 
 -----
-<pre>
+[[!format '''
 #!/usr/bin/env python
 
 """
@@ -110,7 +345,7 @@ if __name__ == "__main__":
     else:
         main(*sys.argv[1:])
 
-</pre>
+''']]
 -----
 
 I have another version of the script, which uses the `timestamp` from the script, and inserts that as a \[[!meta date="foodate"]]. I'm posting it here just in case I happen to be doing something to the httpd.
@@ -118,7 +353,7 @@ I have another version of the script, which uses the `timestamp` from the script
 (Hopefully I've escaped everything properly; if I missed something, check the source.)
 
 -----
-<pre>
+[[!format '''
 #!/usr/bin/env python
 
 """
@@ -223,7 +458,7 @@ if __name__ == "__main__":
     else:
         main(*sys.argv[1:])
 
-</pre>
+''']]
 -----
 
 
diff --git a/doc/tips/mailman_subscription_form.mdwn b/doc/tips/mailman_subscription_form.mdwn
new file mode 100644 (file)
index 0000000..3e9ed07
--- /dev/null
@@ -0,0 +1,10 @@
+One can think about implementing "[[Mailman integration]]" or something, but I find that rather overdoing it. Mailman is simple enough that you can add a clean subscription form to your ikiwiki site in seconds, just add:
+
+~~~~
+<form action="https://listes.example.com/cgi-bin/mailman/subscribe/listname" method="POST">
+Email: <input name="email" />
+<input type="submit" value="Subscribe" />
+</form>
+~~~~
+
+To your site and voilà, you are done! No more scary mailman subscription form! (Thanks to [[bgm]] for that trick!) --[[anarcat]]
index b504698c495131cef5f594a4e60ad0ede279ccc2..6355867099fc133ad8e884ff09573432142818bc 100644 (file)
@@ -4,7 +4,7 @@ This seems somewhat difficult, as ikiwiki would need to maintain a cache of the
 
 --[[JoshTriplett]]
 
-[scmbug](http://www.mkgnu.net/?q=scmbug) might help here. --[[JoshTriplett]]
+[scmbug](http://www.mkgnu.net/scmbug) might help here. --[[JoshTriplett]]
 
 [[!tag soc]]
 
diff --git a/doc/todo/Calendar:_listing_multiple_entries_per_day_.mdwn b/doc/todo/Calendar:_listing_multiple_entries_per_day_.mdwn
new file mode 100644 (file)
index 0000000..94a4f15
--- /dev/null
@@ -0,0 +1,92 @@
+[[!tag patch]]
+
+I am copying stuff discussed in the [[forum|/forum/Calendar:_listing_multiple_entries_per_day]], since the [[patch]] only list pages that are todo or bugs.
+
+If there are several pages created on the same date, the [[calendar directive|/ikiwiki/directive/calendar]] only display the first one.
+Here is a patch that:
+
+- if there is a single entry in one day, does not change anything (compared to the previous version of the calendar plugin);
+- if there are several entries, when mouse passes over the day, displays a popup listing all the entries of that day.
+
+That's all. No new pages for each day, takes as little space as it took before, and only a few lines more in the source.
+
+The only thing I am not totally happy with is the CSS. We have to say that the text is aligned on the left (otherwise, it is aligned on the right, as is each day of the calendar), but I do not know which place is the more sensible to put that line of CSS in.
+
+Regards,    
+-- Louis
+
+
+    diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
+    index d443198..2c9ed79 100644
+    --- a/IkiWiki/Plugin/calendar.pm
+    +++ b/IkiWiki/Plugin/calendar.pm
+    @@ -86,8 +86,11 @@ sub format_month (@) {
+               my $year  = $date[5] + 1900;
+               my $mtag  = sprintf("%02d", $month);
+     
+    -          # Only one posting per day is being linked to.
+    -          $linkcache{"$year/$mtag/$mday"} = $p;
+    +          # Several postings per day
+    +          if (! $linkcache{"$year/$mtag/$mday"}) {
+    +                  $linkcache{"$year/$mtag/$mday"} = [];
+    +          }
+    +          push(@{$linkcache{"$year/$mtag/$mday"}}, $p);
+       }
+               
+       my $pmonth = $params{month} - 1;
+    @@ -221,11 +224,36 @@ EOF
+                               $tag='month-calendar-day-link';
+                       }
+                       $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
+    -                  $calendar.=htmllink($params{page}, $params{destpage}, 
+    -                          $linkcache{$key},
+    -                          noimageinline => 1,
+    -                          linktext => $day,
+    -                          title => pagetitle(IkiWiki::basename($linkcache{$key})));
+    +                  if ( scalar(@{$linkcache{$key}}) == 1) {
+    +                          # Only one posting on this page
+    +                          my $page = $linkcache{$key}[0];
+    +                          $calendar.=htmllink($params{page}, $params{destpage}, 
+    +                                  $page,
+    +                                  noimageinline => 1,
+    +                                  linktext => $day,
+    +                                  title => pagetitle(IkiWiki::basename($page)));
+    +                  } else {
+    +                          $calendar.=qq{<div class='popup'>$day<div class='balloon'>};
+    +                          # Several postings on this page
+    +                          $calendar.=qq{<ul>};
+    +                          foreach my $page (@{$linkcache{$key}}) {
+    +                                  $calendar.= qq{\n\t\t\t<li>};
+    +                                  my $title;
+    +                                  if (exists $pagestate{$page}{meta}{title}) {
+    +                                          $title = "$pagestate{$page}{meta}{title}";
+    +                                  } else {
+    +                                          $title = pagetitle(IkiWiki::basename($page));
+    +                                  }
+    +                                  $calendar.=htmllink($params{page}, $params{destpage}, 
+    +                                          $page,
+    +                                          noimageinline => 1,
+    +                                          linktext => $title,
+    +                                          title => $title);
+    +                                  $calendar.= '</li>';
+    +                          }
+    +                          $calendar.=qq{\n\t\t</ul>};
+    +                          $calendar.=qq{</div></div>};
+    +                  }
+                       $calendar.=qq{</td>\n};
+               }
+               else {
+    diff --git a/doc/style.css b/doc/style.css
+    old mode 100644
+    new mode 100755
+    index 424d438..b52c72b
+    --- a/doc/style.css
+    +++ b/doc/style.css
+    @@ -323,6 +323,7 @@ div.progress-done {
+     .popup .paren,
+     .popup .expand {
+       display: none;
+    +  text-align: left;
+     }
+     .popup:hover .balloon,
+     .popup:focus .balloon {
diff --git a/doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn b/doc/todo/Fenced_code_blocks___40__from_GitHub_Flavored_Markdown__41__.mdwn
new file mode 100644 (file)
index 0000000..24552b2
--- /dev/null
@@ -0,0 +1,44 @@
+GitHub's flavor of markdown adds fenced code blocks, delimited by triple-backquotes, like this:
+
+    ```
+    code
+    more code
+    ```
+
+That syntax proves quite a bit more convenient in many cases, because it doesn't require modifying every line of the code block to add indentation.  Please consider adding optional support for this in ikiwiki.  Please also consider turning it on by default for new wikis, though not for existing wikis since it could *potentially* break backward compatibility with existing content.
+
+> I don't think that's an official markdown feature, although it might be available
+> as an extension in some markdown library or other -- possibly one of the ones
+> supported by ikiwiki.
+> 
+> However, aside from compatability, ikiwiki already provides a way to do it that does not
+> require indenting the code: The [[ikiwiki/directive/format]] directive. Which has the benefit of
+> also telling it what kind of code it is, so it can syntax highlight it. Example:
+
+[[!format haskell """
+main :: IO ()
+main = forever $
+  putStrLn "hello, world!"
+"""]]
+
+> --[[Joey]]
+
+> > It is not a standard feature (as much as Markdown is [[standardized|Track_Markdown_Standardisation_Efforts]]...) But it does allow for [syntax hilightning](https://help.github.com/articles/github-flavored-markdown) too, just tag the language name after the backticks. It *seems* that Discount supports github-style backtick format (as well as Pandoc `~~~~` format) but doesn't allow the keyword argument.
+> > 
+> > I strongly support this feature. --[[anarcat]]
+> > 
+> > In fact, it turns out that it already works here!
+> >
+> > ~~~~
+> > this is a pandoc-style fenced in code block
+> > this is another line
+> > ~~~~
+> > 
+> > github-style backticks, however, do not add a wrapping `<pre>` block for some reason:
+> >
+> > ```
+> > this is a github-style fenced in code block
+> > this is another line
+> > ```
+> >
+> > ... maybe a bug in Discount... --[[anarcat]]
diff --git a/doc/todo/FormattingHelp_should_open_new_window.mdwn b/doc/todo/FormattingHelp_should_open_new_window.mdwn
new file mode 100644 (file)
index 0000000..58b4b68
--- /dev/null
@@ -0,0 +1 @@
+Currently the FormattingHelp link on the editing page takes you away from the editing page. The formattinghelp link should open in a new window, to allow the user to continue editing; wikipedia's edit page behaves this way.
diff --git a/doc/todo/Restrict_formats_allowed_for_comments.mdwn b/doc/todo/Restrict_formats_allowed_for_comments.mdwn
new file mode 100644 (file)
index 0000000..cfae384
--- /dev/null
@@ -0,0 +1,97 @@
+I want to write my blog posts in a convenient format (Emacs org mode)
+but do not want commenters to be able to use this format for security
+reasons. This patch allows to configure which formats are allowed for
+writing comments.
+
+Effectively, it restricts the formats enabled with add_plugin to those
+mentioned in comments_allowformats. If this is empty, all formats are
+allowed, which is the behavior without this patch.
+
+The patch can be pulled from my repo ([gitweb](https://rtime.felk.cvut.cz/gitweb/sojka/ikiwiki.git/commitdiff/c42fd7d7580d081f3e3f624fd74219b0435230f6?hp=bfc9dc93c9f64a9acfff4683b69995d5a0edb0ea))
+
+    git pull git://rtime.felk.cvut.cz/sojka/ikiwiki.git restrict-comment-formats
+---
+
+<pre>
+From c42fd7d7580d081f3e3f624fd74219b0435230f6 Mon Sep 17 00:00:00 2001
+From: Michal Sojka <sojkam1@fel.cvut.cz>
+Date: Tue, 5 Mar 2013 10:54:51 +0100
+Subject: [PATCH] Add configuration to restrict the formats allowed for
+ comments
+
+I want to write my blog posts in a convenient format (Emacs org mode)
+but do not want commenters to be able to use this format for security
+reasons. This patch allows to configure which formats are allowed for
+writing comments.
+
+Effectively, it restricts the formats enabled with add_plugin to those
+mentioned in comments_allowformats. If this is empty, all formats are
+allowed, which is the behavior without this patch.
+---
+ IkiWiki/Plugin/comments.pm |   21 +++++++++++++++++++--
+ 1 file changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm
+index 285013e..151e839 100644
+--- a/IkiWiki/Plugin/comments.pm
++++ b/IkiWiki/Plugin/comments.pm
+@@ -90,6 +90,15 @@ sub getsetup () {
+                       safe => 0,
+                       rebuild => 0,
+               },
++              comments_allowformats => {
++                      type => 'string',
++                      default => '',
++                      example => 'mdwn txt',
++                      description => 'Restrict formats for comments to (no restriction if empty)',
++                      safe => 1,
++                      rebuild => 0,
++              },
++
+ }
+ sub checkconfig () {
+@@ -101,6 +110,8 @@ sub checkconfig () {
+               unless defined $config{comments_closed_pagespec};
+       $config{comments_pagename} = 'comment_'
+               unless defined $config{comments_pagename};
++      $config{comments_allowformats} = ''
++              unless defined $config{comments_allowformats};
+ }
+ sub htmlize {
+@@ -128,12 +139,18 @@ sub safeurl ($) {
+       }
+ }
++sub isallowed ($) {
++    my $format = shift;
++    return ! $config{comments_allowformats} || $config{comments_allowformats} =~ /\b$format\b/;
++}
++
+ sub preprocess {
+       my %params = @_;
+       my $page = $params{page};
+       my $format = $params{format};
+-      if (defined $format && ! exists $IkiWiki::hooks{htmlize}{$format}) {
++      if (defined $format && (! exists $IkiWiki::hooks{htmlize}{$format} ||
++                              ! isallowed($format))) {
+               error(sprintf(gettext("unsupported page format %s"), $format));
+       }
+@@ -332,7 +349,7 @@ sub editcomment ($$) {
+       my @page_types;
+       if (exists $IkiWiki::hooks{htmlize}) {
+-              foreach my $key (grep { !/^_/ } keys %{$IkiWiki::hooks{htmlize}}) {
++              foreach my $key (grep { !/^_/ && isallowed($_) } keys %{$IkiWiki::hooks{htmlize}}) {
+                       push @page_types, [$key, $IkiWiki::hooks{htmlize}{$key}{longname} || $key];
+               }
+       }
+-- 
+1.7.10.4
+
+</pre>
+
+[[!tag patch]]
index 9c1889d63b88d40cba94cd58cc1e464e0962c2fb..20b59cb13f396566a4d33f7fa21c203caacbdec0 100644 (file)
@@ -37,3 +37,6 @@ much more maintainable htaccess file.
 
 >>>> Yes, I think this could probably be used in combination with ikiwiki's
 >>>> httpauth and openid plugins. --[[Joey]] 
+
+>>>>> If you use the httpauth and the cgiauthurl method, you can restrict a path 
+>>>>> like /private/* to be accessible only under the authenticated request uri.
index a4940220adef0fabdbc10175f27c5bfe5e198df9..b7ff82282ed04078907ef889a14538004c6b6cd5 100644 (file)
@@ -13,6 +13,8 @@ A slightly more complex next step would be to request sreg from the provider and
 > implemented as a badly-done wart on the side of their regular login
 > system.
 > 
+> > If there are user profiles on the site with non-empty information associated with them (including permissions, reputation), then it would make more sense to be able to access your user profile with alternative OpenIDs (in case one of the provider goes down), as on <http://stackoverflow.com>. In ikiwiki, there might be no such special information associated with users (or you can think of something like this?), except for the admin rights. But fortunately, several OpenIDs can be set up for admins in ikwiki. (Only if it comes to [the OpenIDs provided by Gmail][forum/google openid broken?], then it turns out to be unhandy to write the ID into the configuration file as a second admin ID.)--Ivan Z.
+> 
 > The openid plugin now attempts to get an email and a username, and stores
 > them in the session database for later use (ie, when the user edits a
 > page).
index e679d98e02dc71d03df637b21242860c2162f0d1..0dbda8a3ae56f5d73e42571cef69935bb46196c2 100644 (file)
@@ -37,3 +37,5 @@ I've written a new plugin, sectiontemplate, available in the `page_tmpl` branch
 >>>>> I've implemented this functionality as part of `pagetemplate` as on my "pagetemplate" branch of ikiwiki at https://github.com/rubykat/ikiwiki/tree/pagetemplate - do you want to pull this, Joey?
 >>>>> It isn't implemented quite the same way as Will did; I have the template name first and the pagespec last, but it does the same thing.
 >>>>> --[[KathrynAndersen]]
+
+Just a quick note that Kathryn's branch is ready.[[!template id=gitbranch branch=rubykat/pagetemplate author="[[KathrynAndersen]]"]][[!tag patch]] --[[Will]]
diff --git a/doc/todo/Track_Markdown_Standardisation_Efforts.mdwn b/doc/todo/Track_Markdown_Standardisation_Efforts.mdwn
new file mode 100644 (file)
index 0000000..54a6159
--- /dev/null
@@ -0,0 +1,7 @@
+Just a quick note that some people are making noise about Markdown standardisation.  Specifically:
+
+  * <http://markdown.github.com/>
+  * <http://www.codinghorror.com/blog/2012/10/the-future-of-markdown.html>
+  * <http://johnmacfarlane.net/babelmark2/faq.html#what-are-some-big-questions-that-the-markdown-spec-does-not-answer>
+
+It might be worth following...
index ba21e3ca297183f5a11c6456278df3cc982dc1fc..26260b2567d310a71fa226388eadfe191342f2ee 100644 (file)
@@ -57,4 +57,8 @@ diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
         return @links;
  }
 
-</pre> 
+</pre>
+
+> Have you considered all the ways that anyone with edit access to the
+> public wiki could expose information from the public wiki? For example,
+> you could inline all the private pages into a public page. --[[Joey]] 
index b0524be5fcabfba5b66ef671ddebab6eb0645eb4..e39d4c19b1d15a8680d96fbd7645810aaa5a9c37 100644 (file)
@@ -24,7 +24,7 @@ You might look at the Wikipedia page on "Spam\_in\_blogs" for more ideas.  In pa
 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
+There is a [[plugins/blogspam]] plugin that uses the blogspam.org service
 to check for common spam signatures. --[[Joey]] 
 
 [[done]]
index a0405472b64110f0e6ee210d4b92384964a105ce..63ffccf0d8d41abf24df21adf78d0a3463af74bd 100644 (file)
@@ -13,4 +13,8 @@ The installed bin/ikiwiki file also refers to /usr/bin/perl rather than the perl
 > yours, but do not plan to work on it myself, since I do not use systems
 > where /usr/bin/perl is not a sane default. --[[Joey]]
 
+> > I've implemented a change that should fix this.  For what it's worth this is a
+> > life saver on shared hosting where building your own perl is super effective.
+> > --frioux ([code here](https://github.com/frioux/ikiwiki/tree/use-env-perl))
+
 [[wishlist]]
diff --git a/doc/todo/avatar/discussion.mdwn b/doc/todo/avatar/discussion.mdwn
new file mode 100644 (file)
index 0000000..568866f
--- /dev/null
@@ -0,0 +1 @@
+It seems that this thing is on by default. How to turn it off?
diff --git a/doc/todo/calendar_with___34__create__34___links.mdwn b/doc/todo/calendar_with___34__create__34___links.mdwn
new file mode 100644 (file)
index 0000000..9fe6c43
--- /dev/null
@@ -0,0 +1,10 @@
+the [[ikiwiki/directive/calendar]] directive is well usable without ikiwiki-calendar (eg for articles about meetings), but in such situations, it might be useful to have page creating links at the days.
+
+a [[!taglink patch]] to address this [[!taglink wishlist]] item is [[attached|incomplete_patch.pl]].
+
+from the new documentation (also in the patch):
+
+> * `newpageformat` - In month mode, if no articles match the query, the value of
+>   `newpageformat` will be used to strformat the date in question. A good value
+>   is `newpageformat="meetings/%Y-%m-%d"`. It might be a good idea to have
+>   `\[[!meta date="<TMPL_VAR name>"]]` in the edittemplate of `meetings/*`
diff --git a/doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl b/doc/todo/calendar_with___34__create__34___links/incomplete_patch.pl
new file mode 100644 (file)
index 0000000..dc67988
--- /dev/null
@@ -0,0 +1,36 @@
+diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
+index d443198..0436eda 100644
+--- a/IkiWiki/Plugin/calendar.pm
++++ b/IkiWiki/Plugin/calendar.pm
+@@ -238,7 +238,16 @@ EOF
+                       else {
+                               $tag='month-calendar-day-nolink';
+                       }
+-                      $calendar.=qq{\t\t<td class="$tag $downame{$wday}">$day</td>\n};
++                      if ($params{newpageformat}) {
++                              $calendar.=qq{\t\t<td class="$tag $downame{$wday}">};
++                              $calendar.=htmllink($params{page}, $params{destpage},
++                                      strftime_utf8($params{newpageformat}, 0, 0, 0, $day, $params{month} - 1, $params{year} - 1900),
++                                      noimageinline => 1,
++                                      linktext => $day);
++                              $calendar.=qq{</td>\n};
++                      } else {
++                              $calendar.=qq{\t\t<td class="$tag $downame{$wday}">$day</td>\n};
++                      }
+               }
+       }
+diff --git a/doc/ikiwiki/directive/calendar.mdwn b/doc/ikiwiki/directive/calendar.mdwn
+index cb40f88..7b7fa85 100644
+--- a/doc/ikiwiki/directive/calendar.mdwn
++++ b/doc/ikiwiki/directive/calendar.mdwn
+@@ -56,5 +56,9 @@ An example crontab:
+   and so on. Defaults to 0, which is Sunday.
+ * `months_per_row` - In the year calendar, number of months to place in
+   each row. Defaults to 3.
++* `newpageformat` - In month mode, if no articles match the query, the value of
++  `newpageformat` will be used to strformat the date in question. A good value
++  is `newpageformat="meetings/%Y-%m-%d"`. It might be a good idea to have
++  `\[[!meta date="<TMPL_VAR name>"]]` in the edittemplate of `meetings/*`.
+ [[!meta robots="noindex, follow"]]
diff --git a/doc/todo/custom_location_for_openlayers.mdwn b/doc/todo/custom_location_for_openlayers.mdwn
new file mode 100644 (file)
index 0000000..3ccfa29
--- /dev/null
@@ -0,0 +1,17 @@
+In the [[plugins/osm]], we use an absolute URL to download the OpenLayers.js script file. This has two downsides:
+
+ 1. if the wiki is behind HTTPS, this will create a nasty SSL warning in the browser and we don't want that
+ 2. if we want the map to work offline, we need to load the js locally
+
+For those reasons, I think the location of that script should be customizable. --[[anarcat]]
+
+[[!template  id=gitbranch branch=anarcat/master author="[[anarcat]]"]]
+
+There is now a [[patch]] for this, thanks to Genevieve, available in my master branch.
+
+Note that there's an update to the patch in my master branch, that allows changing the URL for tiles too.
+
+> There's a lot of stuff in your master branch. Which commit is it,
+> or if you want me to merge it, spin a branch I can merge. --[[Joey]]
+
+> > I believe this was already fixed, actually - it's commit 409c4e48f983d10aceb6321148d7f440d17eb28f, which you cherry-picked on August 5th in d926c4a. So this is [[done]], thanks! -- [[anarcat]]
diff --git a/doc/todo/ease_archivepage_styling.mdwn b/doc/todo/ease_archivepage_styling.mdwn
new file mode 100644 (file)
index 0000000..67415c1
--- /dev/null
@@ -0,0 +1,59 @@
+Hi! Please apply the following [[patch]] to make the
+`archivepage.tmpl` template more semantic and easier to style with
+a local CSS:
+
+       From 4e5cc0d9e5582f20df9f26dd5b1937ead0b46827 Mon Sep 17 00:00:00 2001
+       From: intrigeri <intrigeri@boum.org>
+       Date: Sat, 18 Aug 2012 10:34:36 +0200
+       Subject: [PATCH] Ease archivepage styling by using named classes, move
+        styling to the CSS.
+       
+       ---
+        doc/style.css              |    4 ++++
+        templates/archivepage.tmpl |    8 ++++----
+        2 files changed, 8 insertions(+), 4 deletions(-)
+       
+       diff --git a/doc/style.css b/doc/style.css
+       index 6e2afce..5fb4100 100644
+       --- a/doc/style.css
+       +++ b/doc/style.css
+       @@ -202,6 +202,10 @@ div.recentchanges {
+               margin-top: 1em;
+        }
+        
+       +.archivepagedate {
+       +       font-style: italic;
+       +}
+       +
+        .error {
+               color: #C00;
+        }
+       diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl
+       index 93bdd9c..3e0bd9b 100644
+       --- a/templates/archivepage.tmpl
+       +++ b/templates/archivepage.tmpl
+       @@ -1,10 +1,10 @@
+       -<p>
+       +<div class="archivepage">
+        <TMPL_IF PERMALINK>
+        <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a><br />
+        <TMPL_ELSE>
+        <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a><br />
+        </TMPL_IF>
+       -<i>
+       +<span class="archivepagedate">
+        Posted <TMPL_VAR CTIME>
+        <TMPL_IF AUTHOR>
+        by <span class="author">
+       @@ -15,5 +15,5 @@ by <span class="author">
+        </TMPL_IF>
+        </span>
+        </TMPL_IF>
+       -</i>
+       -</p>
+       +</span>
+       +</div>
+       -- 
+       1.7.10.4
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/edittemplate_should_support_uuid__44___date_variables.mdwn b/doc/todo/edittemplate_should_support_uuid__44___date_variables.mdwn
new file mode 100644 (file)
index 0000000..7ec95b5
--- /dev/null
@@ -0,0 +1,19 @@
+[[!tag wishlist patch]]
+
+I use a default template for all new pages:
+
+    \[[!meta title="<TMPL_VAR name>"]]
+    \[[!meta author=]]
+    \[[!meta date="<TMPL_VAR time>"]]
+    \[[!meta guid="urn:uuid:<TMPL_VAR uuid>"]]
+    \[[!tag ]]
+
+This encourages me to include useful metadata on the page.  In particular, though, I've modified the `edittemplate` plugin to generate a uuid for use in the guid, for use in `inline`.  Importantly, this keeps `inline` from flooding aggregators when I rename these pages.
+
+I've also noticed that IkiWiki seems to use the creation time for the generated page for the page date.  This means that when I do a rebuild, `inline`d pages get shuffled.  The inclusion of a `time` variable in `edittemplate` (and in a `meta` declaration for all such pages) prevents the date from changing unexpectedly.
+
+I've already made these changes in my installation, and have made my patches available in the `edittemplate` branch of git://civilfritz.net/ikiwiki.git.
+
+Changes to the structure of `$pagestate{$registering_page}{edittemplate}{$pagespec}` mean that a `cgi` rebuild is necessary (for reasons I don't entirely understand); but I think that's preferable to creating an entirely separate `$pagestate` namespace for storing parameters.  That said, I'm not really a perl programmer, so corrections are welcome.
+
+> I like this patch. I hate seeing things I've already read get marked as unread in my rss feed. -- [[JoshBBall]]
diff --git a/doc/todo/etherpad_support.mdwn b/doc/todo/etherpad_support.mdwn
new file mode 100644 (file)
index 0000000..c11243f
--- /dev/null
@@ -0,0 +1,22 @@
+[[Other wikis are doing it|https://www.mediawiki.org/wiki/Extension:EtherEditor]], why not jump the fray? The idea here would be to make the main editor hook into etherpad. 
+
+Trivial implementation
+----------------------
+
+There are a lot of funky things that would be done here, but the basic functionality would be to throw the document in etherpad and make everyone that edits the same page join the same etherpad. Only one person would need to save the document, but the last person to save it would save the last version. Documents would be left on the etherpad server. That's what I would call the trivial way to go around this.
+
+This would translate in a simple javascript hook for the editor page. The pad name could simply be the page name, which makes it insecure for private wikis.
+
+Garbage-collecting implementation
+---------------------------------
+
+This would require a bit more work. With this implementation, a "counter" would be implemented for every user that would edit the page simultaneously. Once a user saves the page, the counter goes down, when the counter reaches zero, the pad is deleted.
+
+Resources
+---------
+
+ * [etherpad jquery plugin](https://github.com/ether/etherpad-lite-jquery-plugin) - for embeding in any page
+ * [embed parameters](https://github.com/ether/etherpad-lite/wiki/Embed-Parameters) - for embeding using an iframe, probably not what we want
+ * [other integrations](https://github.com/ether/etherpad-lite/wiki/Third-party-web-services-that-have-support-for-Etherpad-Lite) - document us here when done
+ * [no Perl API implementation](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) - we'll have to write our own?
+ * [API documentation](http://etherpad.org/doc/v1.2.0/)
diff --git a/doc/todo/fancypodcast.mdwn b/doc/todo/fancypodcast.mdwn
new file mode 100644 (file)
index 0000000..f67c62d
--- /dev/null
@@ -0,0 +1,227 @@
+ikiwiki's simple podcasting, while elegant and minimal, doesn't (as
+mentioned in [[todo/blogging]]) produce full-featured feeds. In
+fancy podcasts, episodes are accompanied by text content. The feeds
+also have lots more metadata.
+
+[[!toc]]
+
+## Status
+
+[[!template id=gitbranch branch=schmonz/fancypodcast author="[[schmonz]]"]]
+[[!tag patch]]
+
+In summary, the branch preserves ikiwiki's existing podcast behavior,
+adds more featureful behavior, and has been tested to work well in
+some common podcatchers. I believe it is ready for review and
+possible integration, and I'd like to get feedback to that effect
+(or to the contrary) before making further enhancements. I know
+[[joey]]'s the final arbiter here, but I'd appreciate any qualified,
+critical eyes ([[smcv]]?) raking over my diffs. --[[schmonz]]
+
+## Features
+
+[[!table data="""
+Feature            |iTunes RSS|iTunes Atom|Downcast RSS|Downcast Atom
+Feed image         |          |           |            |
+Feed title         |(./)      |(./)       |(./)        |(./)
+Feed publisher     |          |           |            |
+Feed "category"    |          |           |            |
+Feed date          |(./)      |(./)       |(./)        |(./)
+Feed description   |(./)      |(./)       |(./)        |
+Episode image      |          |           |            |
+Episode title      |(./)      |(./)       |(./)        |(./)
+Episode date       |(./)      |(./)       |(./)        |(./)
+Episode duration   |          |           |            |
+Episode author     |          |           |            |
+Episode description|(./)      |(./)       |(./)        |
+Episode enclosure  |(./)      |(./)       |(./)        |(./)
+"""]]
+
+## Design
+
+7. For each fancy podcast episode, write a blog post containing
+   `\[[!meta enclosure="WikiLink/to/media.mp3"]]`. (Don't specify
+   more than one enclosure -- but if you do, last one wins.)
+7. When rendering to HTML (single-page or inlined), append a link
+   to the media file.
+7. When rendering to RSS/Atom, the text is the entry's content and
+   the media file is its enclosure.
+7. Don't break simple podcasts in pursuit of fancy podcasts.
+
+## Implementation
+
+### Completed
+
+* Cover the existing simple podcast behavior with tests.
+* Add an `enclosure` field to [[plugins/meta]] that expands the
+  given [[ikiwiki/WikiLink]] to an absolute URL (feed enclosures
+  pretty much need to be, and the reference feeds I've looked at
+  all do this).
+* Write failing tests for the desired single-page and inlined
+  HTML behavior, then make them pass by adding enclosure stanzas
+  to `{,inline}page.tmpl`.
+* Write failing tests for the desired RSS/Atom behavior, then make
+  them pass via changes to `{atom,rss}item.tmpl` and [[plugins/inline]].
+* Match feature-for-feature with
+  [tru_podcast](http://www.rainskit.com/blog/542/tru_podcast-a-podcasting-plugin-for-textpattern)
+  (what [[schmonz]] will be migrating from).
+* Enrich [feed metadata](http://cyber.law.harvard.edu/rss/rss.html)
+  by catching up `rsspage.tmpl` to `atompage.tmpl`.
+* Verify that [[plugins/more]] plays well with fancy podcasts.
+* Verify that the feeds validate.
+* Subscribe to a fancy feed in some common podcatchers and verify
+  display details against a reference podcast.
+* Verify smooth transitions for two common use cases (see testing
+  details below).
+
+### Must-have (for [[schmonz]], anyway)
+
+* Think carefully about UTF-8.
+* Verify that _all_ the tests pass (not just my new ones).
+
+## Migration
+
+### Upgrading within ikiwiki: from simple to fancy
+
+#### My test podcast
+
+For this test, I chose a podcast that tries to work around ikiwiki's
+current limitations by issuing two separate `inline`s:
+
+* One with `feedonly=yes` that includes `.mdwn`, `.pdf`, and `.mp3`
+* One with `feeds=no` that includes only `.mdwn` (and makes a trail)
+
+This has the following effects:
+
+* Browser: sees just the articles (each of which has a manually
+  created link to its corresponding media file)
+* Feedreader: sees all the articles and media in one flat stream
+* Podcatcher: sees just the media (sans articles)
+
+I want instead to write one `inline` with these effects:
+
+* Browser: sees just the articles (each of which automatically links
+  to its enclosure)
+* Feedreader: sees just the articles (each of which specifies its
+  enclosure)
+* Podcatcher: sees just the enclosures (each of which has an enclosing
+  article, rendered as the media's "description")
+
+#### Upgrade steps
+
+7. Set up a non-production copy of the podcast.
+    7. Visually diff RSS and Atom feeds against production.
+    7. Subscribe to the copy (both feeds) in `r2e`, iTunes, Downcast.
+7. Apply fancypodcast patch to the installed ikiwiki:
+    7. `cd ~/Documents/trees/ikiwiki && git checkout fancypodcast`
+    7. `git diff --no-prefix master > ~/Documents/trees/localpatches/www/ikiwiki/fancypodcast.diff`
+    7. `cd ~/Documents/trees/pkgsrc-current/www/ikiwiki && make deinstall && make install clean`
+7. Verify that simple podcasts are unaffected:
+    7. Rerun `ikiwiki --setup`.
+    7. `diff -uB simple-before.rss simple-after.rss`
+        * A few new elements and attributes, as expected.
+    7. `diff -uB simple-before.atom simple-after.atom`
+        * No change.
+7. Remove the feed-only `inline` and enable feeds on the remaining one.
+7. Convert articles' manual download links to `\[[!meta enclosure=""]]`.
+7. I want existing and future podcatchers to get my new fancy
+   episodes, and I know my podcast isn't in any planets, so I'm
+   going to skip [[tips/howto avoid flooding aggregators]].
+7. Rerun `ikiwiki --setup`.
+7. Verify browser shows the same stuff.
+7. `diff -uB simple-after.rss fancy-after.rss   # and atom`
+    * MP3s and PDFs are no longer naked enclosures, but belong to
+      articles as they should.
+    * Articles have updated modification times, as they should.
+7. `r2e run` (both RSS and Atom)
+    * Nothing new with the default `trust-guid = True` (otherwise
+      would expect updated articles).
+7. iTunes "Update Podcast" (both RSS and Atom)
+    * Added one episode per article, with article text as the episode
+      description.
+    * Kept old naked-enclosure episodes around.
+7. Downcast refresh (RSS):
+    * Added one episode per article, with article text as the episode
+      description.
+    * Kept old naked-enclosure episodes around.
+7. Downcast refresh (Atom):
+    * Added one episode per article, with no episode description
+      (expected, see feature table).
+    * Kept old naked-enclosure episodes around.
+
+Different tradeoffs are possible. These seem okay to me.
+
+### Importing into ikiwiki: fancy (from another CMS)
+
+#### My test podcast
+
+For this test, I chose a podcast currently being published with
+Textpattern and tru_podcast, because I'd strongly prefer to publish
+it with ikiwiki instead.
+
+#### Upgrade steps
+
+7. Set up a non-production copy of the podcast.
+    7. Visually diff RSS and Atom feeds against production.
+    7. Subscribe to the copy (both feeds) in `r2e`, iTunes, Downcast.
+7. With a fancypodcast-enabled ikiwiki installed:
+    7. Copy content from Textpattern to ikiwiki:
+        7. Match article paths to preserve `/YYYY/MM/DD/post-title` permalinks.
+        7. Match enclosure paths (or redirect) to preserve Textpattern's URLs.
+        7. Match titles, post dates, and guids with `\[[!meta]]`.
+           7. Match feed paths with permanent redirects from `/atom/` to
+           `/index.atom` (and same for RSS).
+        7. `\[[!inline]]` the articles.
+    7. Rerun `ikiwiki --setup`.
+7. Stop Textpattern, start ikiwiki.
+7. Verify that podcatchers see the feeds and don't redownload anything.
+7. Naively add two new blog posts, one with an enclosure.
+7. Verify that podcatchers download the new enclosures.
+
+-----
+
+## Future improvements
+
+### iTunes fancy podcasting
+
+* [iTunes-specific tags](https://www.apple.com/itunes/podcasts/specs.html)
+  appear to be RSS-only
+    * If they work in Atom, teach `inline` to optionally iTunesify RSS/Atom.
+    * Else, add `itunes` as a third kind of feed (RSS plus more stuff).
+* Notable tags for feeds:
+    * `itunes:subtitle`
+    * `itunes:author`
+    * `itunes:summary` (same as `description`)
+    * `itunes:owner` (includes `itunes:name` and `itunes:email`)
+    * `itunes:image href=''`
+    * `itunes:publisher`
+    * `itunes:category text=''` (can contain subcategories)
+    * `itunes:keywords`
+* Notable tags for entries:
+    * `itunes:duration`
+        * [[!cpan Audio::TagLib]] might be fastest, if present and applicable
+        * [ffprobe](http://ffmpeg.org/ffprobe.html) is reasonably fast
+        * [mediainfo](http://mediainfo.sourceforge.net/) is way slower
+        * Cache computed durations as pagestate
+
+### Fancy podcast aggregating
+
+* Write tests comparing a fancy podcast (HTML and feeds) against
+  the same podcast aggregated and republished, then make them pass
+  via changes to `aggregatepost.impl` and [[plugins/aggregate]].
+
+### Other ideas
+
+* Don't render template text (e.g., "Use this template to insert a
+  note into a page") in feeds.
+* Optionally specify the enclosure's:
+    * MIME type, in case `File::MimeInfo` guesses wrong.
+    * Duration, in case `ffprobe` guesses wrong.
+* Optionally specify enclosures outside the wiki:
+    * Some people don't want to store big unchanging files in the VCS.
+    * Other people like [podcasting found media](http://huffduffer.com/about).
+    * We'd have to download the file just to compute some metadata
+      about it, and then somehow not frequently re-download it.
+* Configurably generate additional subscription links (such as
+  iTunes) alongside the RSS/Atom ones in [[plugins/inline]].
+* Support Apple's "enhanced podcasts" (if they're still relevant).
index 74dcaeb61b8ff7f1ac075233cdae087ec4db763a..ad791095638a2b74ae7331112d7420cd551faab3 100644 (file)
@@ -9,4 +9,10 @@ There has got to be a way to run the CGI wrapper under fastcgi or modperl (apach
 > I've not looked at what code changes fastcgi or modperl would require in
 > ikiwiki. --[[Joey]]
 
+> > Looking at nginx support in [[tips/dot_cgi]], I had to figure that out, and it's not so complicated. The hackish way that's documented there right now (and also supported by [answers on serverfault.com](http://serverfault.com/questions/93090/installing-ikiwiki-on-nginx-fastcgi-fcgi-wrapper) or [other](http://vilain.net/comp/ikiwiki_setup.html) [guides](https://library.linode.com/web-applications/wikis/ikiwiki/arch-linux)), and involves starting up a fcgi wrapper, which I find personnally quite weird.
+> > 
+> > Otherwise the general idea would be to launch a daemon per site that would have a pool of fastcgi processes to answer requests. The common setup pattern here is that users have a fixed quota of processes running as their user, listening either on the network (hackish: a port need to be allocated for each user) or on a socket (documented above, but then the webserver needs write access).
+> >
+> > Perl has had extensive support for FastCGI for quite a while. It seems to me a simple daemon could be written to wrap around the `.cgi`, it's a common way things are deployed. [RT](http://rt.bestpractical.com/) for example can run as a regular CGI, under `mod_perl` or `FastCGI` indiscrimenatly, the latter being more reliable and faster. They use [Plack](http://search.cpan.org/dist/Plack/) to setup that server (see the [startup script](https://github.com/bestpractical/rt/blob/stable/sbin/rt-server.in) for an example). But of course, [TIMTOWTDI](http://search.cpan.org/search?query=fastcgi&mode=all). --[[anarcat]]
+
 [[!tag wishlist]]
diff --git a/doc/todo/hook_to_detect_markdown_links_to_wiki_pages.mdwn b/doc/todo/hook_to_detect_markdown_links_to_wiki_pages.mdwn
new file mode 100644 (file)
index 0000000..ad9c7dd
--- /dev/null
@@ -0,0 +1 @@
+For an internal wiki, we occasionally get patches that link to internal wiki pages using the Markdown link syntax.  I'd love to see an optional git hook to detect that and complain.
diff --git a/doc/todo/inline_directive_should_support_pagination.mdwn b/doc/todo/inline_directive_should_support_pagination.mdwn
new file mode 100644 (file)
index 0000000..eafe6ee
--- /dev/null
@@ -0,0 +1,8 @@
+Ikiwiki should support pagination for index pages. Something like showing only 10 items on the first page, and then having the other items on the other pages.
+
+Basically, the same page would be rendered multiple times:
+
+- The index page: rendered normally, but item list is truncated to N items
+- The separate pages: rendered with a slice of the item list containing N items (or less for the last page)
+
+This I think breaks one major assumption: that source pages only generate one page in the output directory.
diff --git a/doc/todo/lucene_search_engine.mdwn b/doc/todo/lucene_search_engine.mdwn
new file mode 100644 (file)
index 0000000..bac9f91
--- /dev/null
@@ -0,0 +1 @@
+There are [some issue](http://www.branchable.com/bugs/Exception:_Cannot_open_tables_at_consistent_revisions_at___47__usr__47__lib__47__perl5__47__Search__47__Xapian__47__WritableDatabase.pm_line_41./#comment-c159ea3f9be35fcd9ed0eeedb162e816) with the current search engine. Sometimes the database gets corrupted and it's not very good at weighting say, the title against the content. For example, [searching for pagespec](http://ikiwiki.info/ikiwiki.cgi?P=pagespec) in this wiki doesn't lead to the [[ikiwiki/pagespec]] page in the first page... but in the third page. In [[different_search_engine]], there was the idea of using Lucene - is there any reason why we should have both, or at least let lucene live in contrib?
diff --git a/doc/todo/monochrome_theme.mdwn b/doc/todo/monochrome_theme.mdwn
new file mode 100644 (file)
index 0000000..eaf51c0
--- /dev/null
@@ -0,0 +1,48 @@
+[[!template id=gitbranch branch=jmtd/monochrome_theme author="[[Jon]]"
+
+]][As requested](http://jmtd.net/log/goodreads/), please find a new theme named
+'monochrome' in listed git repo/branch. [Here's the screenshot of what it looks like](https://github.com/jmtd/ikiwiki/blob/30af2437cd41d394930864e93b3c2319d1ec2b06/doc/themes/monochrome.png). — [[Jon]]
+
+Perhaps controversially, I think that this would be a good basis for a default theme for the ikiwiki website. (I suspect more work is needed, I have not tested the theme against every plugin which provides theme-able bits and pieces, nor with e.g. HTML5 mode turned on, etc. etc.) Whilst the anti-theme is the best default for an ikiwiki instance (although an argument could be made against that, too!), the site needs to try to advertise some of the potential of ikiwiki to visitors, and serve as an example of what can be done. I'd appreciate thoughts of frequent ikiwiki contributors on this proposal ☺  — [[Jon]]
+
+> I appreciate you putting that branch together. I was ready to merge it,
+> but `themes/monochrome/style.css` seems to contain a lot of redundant
+> things that are in ikiwiki's normal style.css. This is especially
+> redundant since ikiwiki's style.css gets prepended to the theme's stylesheet
+> at build time! Can you remove those redundant bits please? (PITA I know,
+> but it will make maintaining this much easier.) --[[Joey]]
+
+>> Sure I'll sort that out.  Sorry, I didn't realise the prepending was an automatic process. I did it manually. It should be quick for me to fix. — [[Jon]]
+
+>>> Fixed. I rebased the branch; hopefully that won't cause your script issues.  — [[Jon]]
+
+>>>> I've merged your branch.
+>>>> 
+>>>> Looking more closely at the css, I do have a few questions:
+>>>> 
+>>>> * Is the google-provided font really necessary? I consider that a sort
+>>>>   of web bug, I would prefer users of ikiwiki not need to worry that
+>>>>   their referer information is being sent to some third party.
+>>>>   I'd also prefer for ikiwiki sites to always be functional when
+>>>>   viewed offline.
+>>>> * The external link markup needs the local url to be put into
+>>>>   local.css to work right, correct? I wonder if this is too much of a
+>>>>   complication to ask of users. It seems to be it could either be left
+>>>>   out of the theme, or perhaps ikiwiki could be made to expand
+>>>>   something in the css to the site's url at build time.
+>>>> 
+>>>> --[[Joey]]
+
+>>>>>Thanks for merging!
+>>>>>
+>>>>> * the font is not necessary. I will check, it might be license-compatible
+>>>>>   and thus could be bundled. As things stand, if people have no 'net connection
+>>>>>   or the font fails to load, the theme still "works". Good point RE the referral
+>>>>>   situation.
+>>>>>
+>>>>> * The external link markup works without customizing the CSS, but if something
+>>>>>   generates a non-relative link within the content area of a page, it will be
+>>>>>   styled as an external link.  By default, nothing does this in ikiwiki afaik,
+>>>>>   so the impact is pretty small. (except perhaps if someone specifies an absolute
+>>>>>   `cgiurl` path?)  The additional customization is belt-and-braces.
+>>>>>   — [[Jon]]
diff --git a/doc/todo/osm__95__optimisations__95__and__95__fixes.mdwn b/doc/todo/osm__95__optimisations__95__and__95__fixes.mdwn
new file mode 100644 (file)
index 0000000..fa74d31
--- /dev/null
@@ -0,0 +1,27 @@
+[[!template  id=gitbranch branch=anarcat/osm_kml_formatting author="[[anarcat]]"]]
+[[!template  id=gitbranch branch=anarcat/osm_openlayers_misc author="[[anarcat]]"]]
+
+I have accumulated a small series of patches to the OSM plugin along with the [[other|todo/osm_arbitrary_layers]] [[fixes|bugs/osm_KML_maps_do_not_display_properly_on_google_maps]] I have submitted here. They have lived in a tangled mess on my master branch so far, but not anymore!
+
+I have two main branches that need merging (on top of [[todo/osm_arbitrary_layers]]):
+
+ * `osm_kml_formatting` - indentation of the KML, optimisation: remove duplicate style declarations, folders support (even though [[it's not supported by openlayers just yet|https://trac.osgeo.org/openlayers/ticket/2195]])
+
+> If it's not supported yet, does it break something? Seems it must be hard
+> to test the change at least if it's not supported. --[[Joey]]
+
+> > Good point. Maybe that can be skipped for now, it sure doesn't look like it will be merged any time soon anyways. I do think that the optimisation needs to be merged, it's quite important because if halves the size of the resulting KML file. --[[anarcat]]
+
+> > > The merge you just did is fine, the only thing missing is folder support, I'll keep it in a separate branch for now, maybe it will be useful later! This is [[done]]. --[[anarcat]]
+
+ * `osm_openlayers_misc` - do not override the sorting of layers (so that the order defined in [[todo/osm_arbitrary_layers]] takes effect) and tell Emacs about the non-default indentation policies of the file.
+
+> I prefer not to pollute files with editor-specific garbage, and that goes
+> doubly for files served over the network. Cherry-picked the layer sorting
+> change. --[[Joey]]
+
+> > Alright, I am fine with that, thanks. -- [[anarcat]]
+
+Those two branches are also merged directly on my master branch... along with [[todo/osm_arbitrary_layers]].
+
+I am filing this as one todo to simplify matter, but I can also split it further if needs be. --[[anarcat]]
diff --git a/doc/todo/osm_arbitrary_layers.mdwn b/doc/todo/osm_arbitrary_layers.mdwn
new file mode 100644 (file)
index 0000000..d59f394
--- /dev/null
@@ -0,0 +1,43 @@
+[[!template  id=gitbranch branch=anarcat/osm_arbitrary_layers author="[[anarcat]]"]]
+
+I got tired of hacking at the osm.pm every time I wanted to change the layers, so I made it so the layers can be changed in the .setup file. In my master branch, there are now two new configuration settings: `osm_layers` and `osm_layers_order` which replace the hackish `osm_mapurl`. The variables are a hash and an array that allow the operator to define the list of URLs to be loaded as layers and also to change the order of layers. -- [[users/anarcat]]
+
+> I try to avoid adding hashes to config, because websetup does
+> not allow configuring hashes.
+> 
+> The example for `osm_layers_order` is confusing, it makes
+> it look like a perl hash, but it appears to really be a javascript
+> code fragement string, and one that is tightly bound to other
+> configuration too. Why not generate that javascript code from
+> data in a robust way?
+>
+> Does it even make sense to configure this stuff globally?
+> Could the layers be passed as parameters to the osm direction? --[[Joey]]
+>
+> > The reason for `osm_layers_order` is that order is important in the layers: the default layer is the first one and it's not possible to force Perl to have arrays generated in a reliable, reproducable order. Maybe an alternative would be to just set the default layer.
+> > 
+> > That said - maybe you're right and this should be passed as an argument to the OSM directive. The problem then is that you need to pass this stuff around the waypoint directive too. It also makes it hard to have a consistent set of maps all across the wiki. On our site, we have map inserts here and there, and it's nice to have them consistent all around.
+> > 
+> > In closing, I would say that I agree that `.._order` is confusing: maybe I should just have a `_default` to choose the first one? -- [[anarcat]]
+
+>>> If there's no reason to order the other layers, that makes some sense.
+>>> --[[Joey]]
+
+>>>> The layers are ordered because that's the way they are displayed in the menu. Take a look at the base layers on the top left here for an idea: <http://wiki.reseaulibre.ca/ikiwiki.cgi?map=map&do=osm&zoom=12&lat=45.5227&lon=-73.59554>. -- [[anarcat]]
+
+>>>> After sleeping over this - maybe it would be simpler if `osm_layers` was just an array. First, it would get rid of the duplication with `osm_layers_order`. Then I do not feel that having the keys in that hash is worth the duplication anymore. The only reason this is a hash is to provide an arbitrary string description for the layers. We could replace this with an automated description based on the path to the tiles provided.
+>>>> 
+>>>> If that's an acceptable solution for you, I'll go right ahead and rewrite this in a separate branch for merging. Note that on my master branch, there are now 3 main  changes that are not merged: arbitrary OSM layers (includes Google Maps support), KML formatting improvements (indentation, non-duplication of tags), minor OpenLayers improvements (don't sort layers arbitrarily, folders support, higher default zoom level and projection fixes). I can either make a branch for those three things or leave it on my master branch, but be warned that it will be hard to separate those as distinct/orthogonal patches as they mangle each other quite a bit.
+>>>>
+>>>> So basically, I need to know two things from you:
+>>>>
+>>>> 1. on the layers design: a) hash (which include arbitrary descriptions) + default value or b) a simple array with automated descriptions
+>>>> 2. the above changes on a single branch or on 3 different ones?
+>>>>
+>>>> Thanks for your time.  -- [[anarcat]]
+
+>>>>> I have implemented 1.b) and 2. (ie. it's a simple array now, and I split this stuff in different branches.) I'll open another todo for the other branches. --[[anarcat]]
+
+>>>>>> [[merged|done]] --[[Joey]] 
+
+Confirmed, thanks!! --[[anarcat]]
diff --git a/doc/todo/please_add_some_table_styles.mdwn b/doc/todo/please_add_some_table_styles.mdwn
new file mode 100644 (file)
index 0000000..1308e19
--- /dev/null
@@ -0,0 +1,8 @@
+[[!template id=gitbranch branch=jmtd/tablestyle author="[[Jon]]"
+
+]]The [[plugins/table]] plugin's "`class`" argument is a pretty useful
+shortcut, and it would be nice to provide at least one example class
+designed for use with tables pre-defined in ikiwiki. I've written a
+quick, minimal one that makes the table full-width (and some very
+minimal, useful table styling) called `fullwidth_table` — please
+consider merging it. Thanks! — [[Jon]][[!tag wishlist patch]]
index 7e95791c6467127c8095d4da89f50ad6fbd3e03d..3bf1bdc33ea56fea6a59d7955d68be8c6f04db78 100644 (file)
@@ -11,13 +11,17 @@ It would rock if I could view diffs from the web without going via feeds. I envi
 > > 
 > > Unfortunately it has some issues:
 > > 
-> > 1. it assumes the toggle.js code is loaded somehow
-> > 2. if the toggle code isn't loaded the diffs are displayed (which is arguably better than showing nothing since we ship the diff to the UA anyways...)
+> > 1. <del>it assumes the toggle.js code is loaded somehow</del> - now loaded manually
+> > 2. <del>if the toggle code isn't loaded the diffs are displayed (which is arguably better than showing nothing since we ship the diff to the UA anyways...)</del> - i actually think that's fine
 > > 3. <del>it will show only if there's a revert URL, which is backwards, but otherwise the display is weird, with each button on its own line</del> fixed!
-> > 4. if the diffurl parameter is set in the template, we'd actually see two sets of glasses, which is silly. 
+> > 4. <del>if the diffurl parameter is set in the template, we'd actually see two sets of glasses, which is silly.</del> - just added a tmp_unless to fix this.
 > >
 > > I feel this should nevertheless be implemented because if we're going to compile all this crap in the page anyways and send it to the client, why not allow the user to show it? I also feel that showing it by default is a lesser evil for non-javascript users.
 > >
 > > -- [[anarcat]] 2012-03-03
 
+> > > I have pushed a new version of this patch to my branch, which fixes all the above issues. I think this is ready to be merged now. -- [[anarcat]] 2012-07-19
+
+>>>> [[done]] --[[Joey]] 
+
 [[!tag wishlist patch]]
diff --git a/doc/todo/publishing_in_the_future.mdwn b/doc/todo/publishing_in_the_future.mdwn
new file mode 100644 (file)
index 0000000..55fe3aa
--- /dev/null
@@ -0,0 +1,127 @@
+[[!tag wishlist]]I would quite like the ability to write a page (blog post in
+practice) but for the page to not be displayed until a date and time after it
+is added to the wiki. I've thought this through a bit, but would appreciate
+feedback from people before I go any further. Would anyone else find this
+useful?
+
+Thinking about how to implement this in ikiwiki, perhaps a conditional
+pagespec would be best (which could be tidied up into a template)
+
+    \[[!if test="current_date_before(<TMPL_VAR date>)"
+    then="""[[!tag draft]]"""
+    else="""[[!meta date="<TMPL_VAR date>"]]"""
+    ]]
+
+…pre-supposing a scheme whereby tagging 'draft' hides the page from an
+aggregation somewhere.  With a template, this could collapse to
+
+    \[[!template id=publishafter date="Thu Aug 30 14:13:06 BST 2012"]]
+
+This would require implementing the `current_date_before` pagespec.
+
+You would also need a regularly scheduled wiki refresh and a way of marking the
+unpublished pages as 'dirty' so they were always scanned on refresh until their
+publish date has occurred. That could perhaps be implemented via a small plugin
+which defined a pagespec which ensured the page was 'dirty':
+
+    \[[!meta date="<TMPL_VAR date>"]]
+    \[[!if test="!current_date_before(<TMPL_VAR date>)"
+    then="""[[!tag draft]][[!dirty]]"""
+    ]]
+
+The following is an attempt at the dirty part:
+
+    #!/usr/bin/perl
+    package IkiWiki::Plugin::dirty;
+    # provides a pagespec 'dirty' which ensures the page will always be
+    # re-scanned for content on wiki refresh.
+    
+    use warnings;
+    use strict;
+    use IkiWiki 3.00;
+    
+    hook(type => "preprocess", id => "dirty", call => \&preprocess);
+    hook(type => "needsbuild", id => "dirty", call => \&needsbuild);
+    
+    sub preprocess (@) {
+      my %params = @_;
+      $pagestate{$params{page}}{dirty}{dirty} = 1;
+      return '';
+    }
+    
+    sub needsbuild (@) {
+      my $pages= shift;
+      my %p2 = map { $_ => 1 } @$pages;
+      my %d2 = map { $_ => 1 } @$deleted;
+    
+      foreach my $page (keys %pagestate) {
+        if(exists $pagestate{$page}{dirty}{dirty}) {
+          push @$pages, $pagesources{$page} unless
+            (exists $p2{$pagesources{$page}} or exists $d2{$pagesources{$page}});
+          delete $pagestate{$page}{dirty}{dirty};
+        }
+      }
+    
+      return $pages;
+    }
+    
+    1
+
+Although it doesn't fit, the `current_date_before` pagespec could be implemented
+in the same plugin. I tried the following (before the trailing `1`):
+
+    package IkiWiki::PageSpec;
+    use Date::Parse;
+    
+    sub match_current_date_before ($$;@) {
+      shift;
+      my $date = shift;
+      my $out = str2time($date);
+      if(defined $out) {
+        return IkiWiki::SuccessReason->new("time before now") if $out < time();
+        return IkiWiki::FailReason->new("time not before now");
+      } else { return IkiWiki::ErrorReason->new("couldn't parse time $date")};
+    }
+
+I always hit the `ErrorReason` branch when I try to use it, even with strings
+which work fine in test scripts.  If anyone can help me debug that I'd be very
+grateful.
+If anyone has any clues as to why this doesn't work 
+
+Thoughts on the whole idea? — [[Jon]]
+
+> There is an old todo about it: [[tagging_with_a_publication_date]].
+> I feel my idea there about making a pagespec that is limited to
+> items in the present/past, combined with setting the meta data, is a good
+> way.. --[[Joey]]  
+
+>> Thanks for your response Joey. Should I merge these two TODOs, then?
+>> So if I understand you correctly, you would prefer some new pagespecs
+>> to match future/past dates, and a plugin which kept track of pages with
+>> a future date and kept them 'dirty' (similar to the above), which means
+>> avoiding the need for a `dirty` pagespec in the page itself. Is that
+>> about right?
+>> 
+>> I came up with the following, but I haven't adapted `dirty.pm` inline
+>> with my understanding above, yet.
+
+    sub match_infuture ($$;@) {
+      my $page = shift;
+      return IkiWiki::SuccessReason->new("page time is in the future")
+        if $IkiWiki::pagectime{$page} > time;
+      return IkiWiki::FailReason->new("page time is not in the future");
+    }
+
+>> I've managed to get my original suggestion working. The problem was
+>> I was using quotes when invoking the pagespec, which stopped `str2time`
+>> working. 
+>> 
+>> Let me know if I've understood your POV correctly and I'll see about
+>> tidying this up and putting it in a branch.
+>> 
+>> Finally, a way of scheduling future runs of ikiwiki *within ikiwiki
+>> itself* might be useful for other things too, and would avoid the 
+>> need for a cron job in this case. (I'm thinking of a plugin that
+>> implemented itself in terms of cron, or at, or both, or possibly
+>> other things depending on what people want to support). But that would
+>> be substantially more work, more than I can afford atm at least. — [[Jon]]
diff --git a/doc/todo/recentchanges_feed_with_comment.mdwn b/doc/todo/recentchanges_feed_with_comment.mdwn
new file mode 100644 (file)
index 0000000..4c32b9c
--- /dev/null
@@ -0,0 +1,5 @@
+There is currently know clean way to extract the actual "description" the user provided for a change in the recent changes. They get displayed in the "description" blob of the recent changes, but only as HTML and alongside the diff blob and other things.
+
+It would be nice if the user's "description" (the git commitlog, really) would be a first class citizen, because right now the RSS feed titles only say "user: change to page/blah", which is really not informative. We should at least have the commitlog available as a field. -- [[anarcat]]
+
+[[!tag wishlist]]
diff --git a/doc/todo/sortable_tables.mdwn b/doc/todo/sortable_tables.mdwn
new file mode 100644 (file)
index 0000000..8e7e6fe
--- /dev/null
@@ -0,0 +1 @@
+It would be nice if ikiwiki's table plugin could create sortable tables like Mediawiki does.
diff --git a/doc/todo/toc-with-human-readable-anchors.mdwn b/doc/todo/toc-with-human-readable-anchors.mdwn
new file mode 100644 (file)
index 0000000..0f358f4
--- /dev/null
@@ -0,0 +1,7 @@
+The [[/plugins/toc]] plugin is very useful but it creates anchors with names such as #index1h3
+
+In #ikiwiki today, another user and I were in agreement that an option for human readable anchors would be preferable.
+
+> +1 - i would love to see that happen too. Here's a patch I wrote a while back for similar functionality in moinmoin: https://svn.koumbit.net/koumbit/trunk/patches/moinmoin/nice_headings.patch -- [[anarcat]]
+
+[[!tag wishlist]]
diff --git a/doc/todo/translation_links.mdwn b/doc/todo/translation_links.mdwn
new file mode 100644 (file)
index 0000000..63e8d10
--- /dev/null
@@ -0,0 +1,46 @@
+This is an offshoot of [[this rant|translation/discussion/#index3h1]].
+
+Basically, while I can appreciate the [[plugins/po]] plugin for more or less "static" site, or more organised wikis, for certain wikis, it's way too overhead.
+
+## Stories
+
+The following stories should be answered by that plugin:
+
+ 1. a user browses the wiki, finds that the page is translated in another language and clicks on the language to see that page translated
+ 2. a user browses the wiki and gets automatically the right language
+ 3. an editor creates a wiki page, and it gets assigned a language
+ 4. a translator sees that page and translates it to another language, and that page is linked with the first one, both ways (in that stories 1 and 2 can work)
+ 5. (optional) a translator can see the list of pages needing translation and translate pages
+ 6. (optional) an editor changes a wiki page, the translated page is marked as "dirty" (ie. needing translation)
+
+## Fundamental constraints
+
+This issue is about creating a "wikipedia-like" translation structure where:
+
+ 1. there's no "master language"
+ 2. there's a loose connexion between pages
+ 3. not all pages are necessarily translated, nor is it a goal
+
+Those are fundamental constraints that should be required by that plugin. It doesn't mean that the plugin cannot be used otherwise, but that's all it needs to respect to fulfill the requirements here.
+
+## Optional constraints
+
+There can be more constraints that we may want to impose or not, which will make things more or less complicated:
+
+ 4. the page URLs need to be translatable - it would make [[!wikipedia Content_negotiation]] fail, so it would require the CGI for story 2. it would also make it harder to create the connexion between pages, as metadata would be needed in each page
+ 5. the language must not be visible in the URL - same as #4
+ 6. translation system must also be usable from the commandline/git repository - #5 and #6 would be basically impossible to implement there
+
+## Basic spec
+
+ 1. a hook that looks for foo.la.mdwn pages, where la is a language code (defined where..?), and that lists available translations - 
+    this is where most of the work needs to happen. we can probably reuse the builtin template stuff that got injected with the [[plugins/po]] plugin was imported, to start with
+ 2. instructions on how to setup [[!wikipedia Content_negotiation]] so that the above works out of the box - just documentation
+ 3. a button to create such translations - that would be through the [[pageactions hook|plugins/write/#index15h3]]
+ 4. a default language setting? - that's obviously the getsetup hook
+ 5. a set of language code settings? - same
+ 6. content-negotiation - the po module has good code for that
+
+## Authors
+
+ * [[anarcat]]
index 61606e3d0d067f4daf5fbf7db09cbf7cf12ec73d..b274317cd34dc17d93a1b8b834fabb98aa99e642 100644 (file)
@@ -117,3 +117,5 @@ Obviously, this is a lot more work, diverging in a different direction than the
 Also, the thing with the above is that if functionalities 1 and 2 (mapping and page flipping) is stripped out of the po plugin and made reusable, functionalities 3 and 4 can be made optional and a wiki is still translatable, giving the user the responsability of tracking the translations...
 
 So basically, what I think should happen is to have ikiwiki be able to use the .po plugin without .po files - just allow for pages to be linked together. Detect foo.fr.mdwn when parsing foo.mdwn and create links to it would already be a huge start... -- [[anarcat]]
+
+> I have a hopefully clearer spec for a plugin called [[todo/translation_links]]. -- [[anarcat]]
diff --git a/doc/users/JoshBBall.mdwn b/doc/users/JoshBBall.mdwn
new file mode 100644 (file)
index 0000000..ed4b5b2
--- /dev/null
@@ -0,0 +1,3 @@
+My name is Joshua B. Ball. I can be contacted at [JoshBBall@gmail.com](mailto:JoshBBall@gmail.com). I love haskell.
+
+[Github](http://github.com/sciolizer)
diff --git a/doc/users/LucaCapello.mdwn b/doc/users/LucaCapello.mdwn
new file mode 100644 (file)
index 0000000..5ddccbf
--- /dev/null
@@ -0,0 +1,5 @@
+[Debian Developer](http://wiki.debian.org/LucaCapello)
+
+[homepage](http://luca.pca.it)
+
+[write me](mailto:luca@pca.it)
diff --git a/doc/users/Ramsey.mdwn b/doc/users/Ramsey.mdwn
new file mode 100644 (file)
index 0000000..696f00b
--- /dev/null
@@ -0,0 +1,3 @@
+Hi everyone, I'm Ramsey. I am a web developer/aerospace engineer in order of preference.
+
+I am using ikiwiki to create a [[blog|http://blog.coderfly.com]] and [[wiki|http://wiki.coderfly.com]]
diff --git a/doc/users/RickOwens.mdwn b/doc/users/RickOwens.mdwn
new file mode 100644 (file)
index 0000000..c619569
--- /dev/null
@@ -0,0 +1 @@
+I'm a Systems Analyst in Montana.  I use ikiwiki as a private notebook/journal/worklog/etc.
index 5273c6439f8d76894d7f389303902e47c3045341..acb2290ca550fc524aba3cafc54a4cb80bf4ae78 100644 (file)
@@ -2,14 +2,6 @@
 
 New ikiwiki user (well not really "new" anymore), long time wiki user. :-)
 
-<http://adam.shand.net/iki/>
+<http://adam.shand.net/>
 
 [[!map pages="link(AdamShand)"]]
-
-<!-- for map bug
-## Correct? (No extra ULs)
-\[[!map pages="setup*" show="title"]]
-
-## Bug? (Extra UL for each LI)
-\[[!map pages="tagged(done) and tagged(patch)" show="title"]]
--->
index d868d74934f0c5769da9a7e90420cfee75da4bbb..2bd50c76b9ec7888f1463d74316c5332089a09be 100644 (file)
@@ -1 +1,31 @@
 See <https://wiki.koumbit.net/TheAnarcat>
+
+[[!toc]]
+
+My todos
+========
+
+... or the ones I commented it, to be more precise.
+
+[[!inline pages="todo/* and !todo/done and !link(todo/done) and
+link(users/anarcat) and !todo/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+
+Done
+----
+
+[[!inline pages="todo/* and !todo/done and link(todo/done) and
+link(users/anarcat) and !todo/*/*" feeds=no actions=yes archive=yes show=0]]
+
+My bugs
+=======
+
+... same.
+
+[[!inline pages="bugs/* and !bugs/done and !link(bugs/done) and
+link(users/anarcat) and !bugs/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+
+Fixed
+-----
+
+[[!inline pages="bugs/* and !bugs/done and link(bugs/done) and
+link(users/anarcat) and !bugs/*/*" feeds=no actions=yes archive=yes show=0]]
index 15c065e45f6bbb9239477c3b27273bbc2c81b2d9..3214e15219ae3a7cf41864694b9aa4da55def628 100644 (file)
@@ -3,3 +3,4 @@ consider documenting them?  Perhaps we could turn the result into a
 [[tip|tips]]. -[[JoshTriplett]]
 > Well, certainly. Basically it's just inline + tag feature. I'm going to have more time in May for ikiwiki, I hope. 
 > > Any news about that ?
+> > > I am also interested if you do not mind to share with us. [[cstamas]]
index 9c558e357c41674e39880abb6c3209e539de42e2..acb2a0756d40c7d7ee9db7db50940be0811963e6 100644 (file)
@@ -1 +1,190 @@
+mathdesc-at-scourge.biz
 .
+## PROFILING slow render  : Case buggy [[plugins/filecheck]] ?
+
+Saving an article from ikiwiki editor is long ? 
+<tt>ikiwiki  --setup wiki.setup --rebuild</tt> is long ?
+
+Of course it depends the size of the wiki but if it's tiny and still take
+more that two minutes, it's boring. But if it takes a **dozen of minutes**, it's plain buggy.
+
+Actually one can with a verbose rebuild narrow down which page "lags" :
+
+<code>
+    private/admin.mdmn
+    tag/admin
+    tag/private
+</code>
+
+It's also possible to measure render time on one of these pages like this:
+
+<code>
+time ikiwiki  --setup wiki.setup --render private/admin.mdwn
+</code>
+
+Well indeed for such a simple page, something fishy is going on.
+
+Still for simple yet superficial but enough profiling test, it requires 
+a sub-level perl profiler.
+
+## Using SmallProf
+
+[[tips/optimising_ikiwiki/#index10h2]] proposed [[!cpan Devel::NYTProf]].
+
+Try it hard to make it spits realistic numbers or even a trend to point
+the bottleneck in the code. Bref -- nothing valuable nor coherent, it's way to sophisticated to be handy
+in my situation (virtual machine, SMP system, long runs, clock drifts, etc...)  
+
+[[!cpan Devel::SmallProf]] is simple and just works(c)
+
+<pre>
+export PERL5OPT=-d:SmallProf
+time ikiwiki  --setup wiki.setup --rebuild
+sort -k 2nr,2 -k 3nr,3  smallprof.out | head -n 6
+</pre>
+
+
+### Results : 6 top slowpits
+
+Total rebuild time:<br/>
+real   5m16.283s<br/>
+user   2m38.935s<br/>
+sys    2m32.704s<br/>
+
+
+Total rebuild time (under profiling) : <br/>
+real   19m21.633s<br/>
+user   14m47.831s<br/>
+sys    4m11.046s<br/>
+
+
+<pre>
+[num]  [walltime]      [cputime]       [line]: [code]
+3055   114.17165       15.34000        149:    $mimetype=<$file_h>;
+1626527        69.39272        101.4700    93:     read($fh, $line, $$ref[1]); # read max
+3055   50.62106        34.78000        148:    open(my $file_h, "-|", "file", "-bi",
+1626527  14.86525      48.50000         92:    seek($fh, $$ref[0], SEEK_SET); # seek
+1626527  13.95613      44.78000        102:    return undef unless $line =~ $$ref[3]; #
+3055           5.75528         5.81000         76:     for my $type (map @$_, @rules) {
+</pre>
+
+legend : 
+*num* is the number of times that the line was executed, *time* is the amount of "wall time" (time according the the clock on the wall vs. cpu time)
+spent executing it, *ctime* is the amount of cpu time expended on it and *line* and *code* are the line number and the actual text of the executed line 
+(read from the file).
+
+
+3 topmost issues are located in this file :
+
+<tt>/usr/lib/perl5/vendor_perl/5.12.3/IkiWiki/Plugin/filecheck.pm</tt>
+<pre>
+sub match_mimetype ($$;@) {                                         
+        my $page=shift;
+        my $wanted=shift;                       
+        
+        my %params=@_;
+        my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page});
+        if (! defined $file) {
+                return IkiWiki::ErrorReason->new("file does not exist");
+        }        
+        
+        # Get the mime type.
+        #
+        # First, try File::Mimeinfo. This is fast, but doesn't recognise
+        # all files.
+        eval q{use File::MimeInfo::Magic};                    
+        my $mimeinfo_ok=! $@;                                     
+        my $mimetype;
+        if ($mimeinfo_ok) {
+                my $mimetype=File::MimeInfo::Magic::magic($file);
+        }                                                         
+        
+        # Fall back to using file, which has a more complete
+        # magic database.
+        if (! defined $mimetype) {
+                open(my $file_h, "-|", "file", "-bi", $file); 
+                $mimetype=<$file_h>;                                 
+                chomp $mimetype;                            
+                close $file_h;                   
+        }
+        if (! defined $mimetype || $mimetype !~s /;.*//) {
+                # Fall back to default value.
+                $mimetype=File::MimeInfo::Magic::default($file)
+                        if $mimeinfo_ok; 
+                if (! defined $mimetype) {
+                        $mimetype="unknown";
+                }                                                  
+        }        
+        
+        my $regexp=IkiWiki::glob2re($wanted);
+        if ($mimetype!~$regexp) {
+                return IkiWiki::FailReason->new("file MIME type is $mimetype, not $wanted");
+        }
+        else {  
+                return IkiWiki::SuccessReason->new("file MIME type is $mimetype");
+        }
+}
+</pre>
+
+Next 3 in this file :
+
+<tt>/usr/lib/perl5/vendor_perl/5.12.3/File/MimeInfo/Magic.pm</tt>
+<pre>
+sub _check_rule {
+        my ($ref, $fh, $lev) = @_;
+        my $line;
+
+        # Read
+        if (ref $fh eq 'GLOB') {
+                seek($fh, $$ref[0], SEEK_SET);  # seek offset
+                read($fh, $line, $$ref[1]);     # read max length
+        }
+        else { # allowing for IO::Something
+                $fh->seek($$ref[0], SEEK_SET);  # seek offset
+                $fh->read($line, $$ref[1]);     # read max length
+        }
+
+        # Match regex
+        $line = unpack 'b*', $line if $$ref[2]; # unpack to bits if using mask
+        return undef unless $line =~ $$ref[3];  # match regex
+        print STDERR    '>', '>'x$lev, ' Value "', _escape_bytes($2),
+                        '" at offset ', $$ref[1]+length($1),
+                        " matches at $$ref[4]\n"
+                if $DEBUG;
+        return 1 unless $#$ref > 4;
+
+        # Check nested rules and recurs
+        for (5..$#$ref) {
+                return 1 if _check_rule($$ref[$_], $fh, $lev+1);
+        }
+        print STDERR "> Failed nested rules\n" if $DEBUG && ! $lev;
+        return 0;
+}
+</pre>
+
+*"It seems it's a unique cause, that snails it all"*
+
+## Conclusion 
+
+This describes an issue in the attachment filechecker with mime type detection.
+The smallprof out file reveals it always fall back to using file which is very time-consuming.
+
+So what the hell did I put as complex allowed file attachment ruining File::Mimeinfo fast yet sparse recon ? 
+Well, it was set in the config this way:
+
+<tt>allowed_attachments => 'mimetype(image/*) or maxsize(5000kb) or mimetype(text/plain) or mimetype(text/css) or mimetype(video/*)'</tt>
+
+Ok... maybe the wildcards induce ....hum whatever... let's try something , the simplest thing :
+
+<tt>allowed_attachments => 'mimetype(text/plain) or mimetype(text/css)'</tt>
+
+Same slowness : yek, File::Mimeinfo recons nothing ... not even simplest files.
+Disabling it is a temporary cure obviously but it only took **30 seconds** .
+
+<tt>disable_plugins => [qw{filecheck}]</tt>
+
+I tried also to upgrade [[!cpan File::MimeInfo]] to current 0.16, did not helped either. :/
+
+I opened a bug [[bugs/Slow_Filecheck_attachments___34__snails_it_all__34__]]
+
index fc7558b240a3b9228f6a937babe1afca9ec77a58..97fa1cbd66c11de7b5062f8cb78592249a09e0f4 100644 (file)
@@ -1,10 +1,32 @@
-[Amitai Schlair](http://www.schmonz.com/) finds himself using ikiwiki
-for all sorts of things. His attempts at contributing:
+[Amitai Schlair](http://www.schmonz.com/) has contributed code to ikiwiki...
 
 [[!map
-pages="!*/Discussion and ((link(users/schmonz) and plugins/*) or rcs/cvs)"
+pages="!*/Discussion and ((link(users/schmonz) and plugins/*) or rcs/cvs or todo/fancypodcast)"
 ]]
 
-He's also written a plugin for [WIND
-authentication](http://www.columbia.edu/acis/rad/authmethods/wind/), which
-may or may not be of general utility.
+...and uses ikiwiki for all sorts of things:
+
+## Public
+
+* [A major open-source project's wiki](http://wiki.netbsd.org) (with
+  the [[rcs/cvs]] plugin)
+* [An undergraduate group's university-provided-static-hosted
+  site](http://www.columbia.edu/cu/philo/) (with [[plugins/rsync]] and a [WIND
+  authentication](http://www.columbia.edu/acis/rad/authmethods/wind/) plugin)
+* [A small personal site](http://www.anglofish.net/) (happily hosted at
+  [Branchable](http://www.branchable.com/))
+
+## Non-public
+
+* At work, team documentation and project planning: product and sprint
+  backlogs, burndown charts, release plans/procedures/announcements,
+  aggregating feeds of shared interest, etc. (with the
+  [[plugins/contrib/dynamiccookies]] and [[plugins/contrib/proxies]] plugins)
+* On my laptop, personal to-do and scratch space
+* [A small personal site](http://podcast.schmonz.com/) (happily hosted at
+  [Branchable](http://www.branchable.com/))
+
+## Non-yet-ikiwiki
+
+* [My personal web site](http://www.schmonz.com/) (pending
+  [[todo/fancypodcast]] integration)
index 712a0d3e7d42d3ef27a264c48110faf477ece6e0..f7a88d125a573a780a016ad17905779a12c16a86 100644 (file)
@@ -1,4 +1,4 @@
 [[!meta title="Svend Sorensen"]]
 
-* [website](http://ciffer.net/~svend/)
-* [blog](http://ciffer.net/~svend/blog/)
+* [website](http://svend.ciffer.net)
+* [blog](http://svend.ciffer.net/blog)
diff --git a/doc/users/undx.mdwn b/doc/users/undx.mdwn
new file mode 100644 (file)
index 0000000..9b62209
--- /dev/null
@@ -0,0 +1,7 @@
+![undx](http://www.undx.net/images/site/undx_original.png)
+
+IRL, I'm Emmanuel GALLOIS.
+
+This is my temporary ikiwiki user's page.
+
+Ciao. 
diff --git a/doc/wishlist/watched_pages.mdwn b/doc/wishlist/watched_pages.mdwn
new file mode 100644 (file)
index 0000000..d943571
--- /dev/null
@@ -0,0 +1 @@
+Is there a way to mark pages I edit as "watched"? A way of doing this through git would be acceptable too. Right now I link to my homepage on every page I comment on, but this doesn't tell me if the pages were updated... --[[anarcat]]
index 1976f7ed1e3c3a65bc517abbb34aaafac103c147..56d6e07319094dcc77d8fea283bcdf4b0b0b734d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -t
 # Add a user to the system wide wikilist.
-# This script can safely be made suid.
+# This script can safely be made suid or put in /etc/sudoers.
 use warnings;
 use strict;
 use English;
index 596b465f8c1fc50d66e37f456222f5494e47bd28..9d799da3fc0a7ebd014ddb5e42fd00808231d45a 100644 (file)
@@ -1,5 +1,5 @@
 Name:           ikiwiki
-Version: 3.20120629
+Version: 3.20130518
 Release:        1%{?dist}
 Summary:        A wiki compiler
 
@@ -20,6 +20,7 @@ BuildRequires:  perl(HTML::Template)
 BuildRequires:  perl(CGI::FormBuilder)
 BuildRequires:  perl(CGI::Session)
 BuildRequires:  perl(File::MimeInfo)
+BuildRequires:  perl(YAML::XS)
 BuildRequires:  gettext
 BuildRequires:  po4a
 
old mode 100644 (file)
new mode 100755 (executable)
index c2e9bd6..41cc457
@@ -3,8 +3,10 @@
 #
 # proxy.py — helper for Python-based external (xml-rpc) ikiwiki plugins
 #
-# Copyright © martin f. krafft <madduck@madduck.net>
-# 
+# Copyright © 2008      martin f. krafft <madduck@madduck.net>
+#             2008-2011 Joey Hess <joey@kitenet.net>
+#             2012      W. Trevor King <wking@tremily.us>
+#
 #  Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
 # are met:
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
-# 
+#
 __name__ = 'proxy.py'
 __description__ = 'helper for Python-based external (xml-rpc) ikiwiki plugins'
-__version__ = '0.1'
+__version__ = '0.2'
 __author__ = 'martin f. krafft <madduck@madduck.net>'
 __copyright__ = 'Copyright © ' + __author__
 __licence__ = 'BSD-2-clause'
 
 import sys
 import time
-import xmlrpclib
 import xml.parsers.expat
-from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
+try:  # Python 3
+    import xmlrpc.client as _xmlrpc_client
+except ImportError:  # Python 2
+    import xmlrpclib as _xmlrpc_client
+try:  # Python 3
+    import xmlrpc.server as _xmlrpc_server
+except ImportError:  # Python 2
+    import SimpleXMLRPCServer as _xmlrpc_server
+
+
+class ParseError (Exception):
+    pass
+
+
+class PipeliningDetected (Exception):
+    pass
+
+
+class GoingDown (Exception):
+    pass
+
+
+class InvalidReturnValue (Exception):
+    pass
+
 
-class _IkiWikiExtPluginXMLRPCDispatcher(SimpleXMLRPCDispatcher):
+class AlreadyImported (Exception):
+    pass
+
+
+class _IkiWikiExtPluginXMLRPCDispatcher(_xmlrpc_server.SimpleXMLRPCDispatcher):
 
     def __init__(self, allow_none=False, encoding=None):
         try:
-            SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding)
+            _xmlrpc_server.SimpleXMLRPCDispatcher.__init__(
+                self, allow_none, encoding)
         except TypeError:
             # see http://bugs.debian.org/470645
             # python2.4 and before only took one argument
-            SimpleXMLRPCDispatcher.__init__(self)
+            _xmlrpc_server.SimpleXMLRPCDispatcher.__init__(self)
 
     def dispatch(self, method, params):
         return self._dispatch(method, params)
 
+
 class XMLStreamParser(object):
 
     def __init__(self):
@@ -74,14 +105,15 @@ class XMLStreamParser(object):
     def _pop_tag(self, tag):
         top = self._stack.pop()
         if top != tag:
-            raise ParseError, 'expected %s closing tag, got %s' % (top, tag)
+            raise ParseError(
+                'expected {0} closing tag, got {1}'.format(top, tag))
 
     def _request_complete(self):
         return self._first_tag_received and len(self._stack) == 0
 
     def _check_pipelining(self, *args):
         if self._first_tag_received:
-            raise PipeliningDetected, 'need a new line between XML documents'
+            raise PipeliningDetected('need a new line between XML documents')
 
     def parse(self, data):
         self._parser.Parse(data, False)
@@ -91,11 +123,6 @@ class XMLStreamParser(object):
             self._reset()
             return ret
 
-    class ParseError(Exception):
-        pass
-
-    class PipeliningDetected(Exception):
-        pass
 
 class _IkiWikiExtPluginXMLRPCHandler(object):
 
@@ -129,21 +156,26 @@ class _IkiWikiExtPluginXMLRPCHandler(object):
                 return ret
 
     def send_rpc(self, cmd, in_fd, out_fd, *args, **kwargs):
-        xml = xmlrpclib.dumps(sum(kwargs.iteritems(), args), cmd)
-        self._debug_fn("calling ikiwiki procedure `%s': [%s]" % (cmd, xml))
+        xml = _xmlrpc_client.dumps(sum(kwargs.items(), args), cmd)
+        self._debug_fn(
+            "calling ikiwiki procedure `{0}': [{1}]".format(cmd, xml))
         _IkiWikiExtPluginXMLRPCHandler._write(out_fd, xml)
 
         self._debug_fn('reading response from ikiwiki...')
 
         xml = _IkiWikiExtPluginXMLRPCHandler._read(in_fd)
-        self._debug_fn('read response to procedure %s from ikiwiki: [%s]' % (cmd, xml))
+        self._debug_fn(
+            'read response to procedure {0} from ikiwiki: [{1}]'.format(
+                cmd, xml))
         if xml is None:
             # ikiwiki is going down
             self._debug_fn('ikiwiki is going down, and so are we...')
-            raise _IkiWikiExtPluginXMLRPCHandler._GoingDown
+            raise GoingDown()
 
-        data = xmlrpclib.loads(xml)[0][0]
-        self._debug_fn('parsed data from response to procedure %s: [%s]' % (cmd, data))
+        data = _xmlrpc_client.loads(xml)[0][0]
+        self._debug_fn(
+            'parsed data from response to procedure {0}: [{1}]'.format(
+                cmd, data))
         return data
 
     def handle_rpc(self, in_fd, out_fd):
@@ -152,18 +184,18 @@ class _IkiWikiExtPluginXMLRPCHandler(object):
         if xml is None:
             # ikiwiki is going down
             self._debug_fn('ikiwiki is going down, and so are we...')
-            raise _IkiWikiExtPluginXMLRPCHandler._GoingDown
+            raise GoingDown()
 
-        self._debug_fn('received procedure call from ikiwiki: [%s]' % xml)
-        params, method = xmlrpclib.loads(xml)
+        self._debug_fn(
+            'received procedure call from ikiwiki: [{0}]'.format(xml))
+        params, method = _xmlrpc_client.loads(xml)
         ret = self._dispatcher.dispatch(method, params)
-        xml = xmlrpclib.dumps((ret,), methodresponse=True)
-        self._debug_fn('sending procedure response to ikiwiki: [%s]' % xml)
+        xml = _xmlrpc_client.dumps((ret,), methodresponse=True)
+        self._debug_fn(
+                'sending procedure response to ikiwiki: [{0}]'.format(xml))
         _IkiWikiExtPluginXMLRPCHandler._write(out_fd, xml)
         return ret
 
-    class _GoingDown:
-        pass
 
 class IkiWikiProcedureProxy(object):
 
@@ -196,7 +228,7 @@ class IkiWikiProcedureProxy(object):
                     yield i
 
         args = list(subst_none(args))
-        kwargs = dict(zip(kwargs.keys(), list(subst_none(kwargs.itervalues()))))
+        kwargs = dict(zip(kwargs.keys(), list(subst_none(kwargs.values()))))
         ret = self._xmlrpc_handler.send_rpc(cmd, self._in_fd, self._out_fd,
                                             *args, **kwargs)
         if ret == IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL:
@@ -205,7 +237,7 @@ class IkiWikiProcedureProxy(object):
 
     def hook(self, type, function, name=None, id=None, last=False):
         if self._imported:
-            raise IkiWikiProcedureProxy.AlreadyImported
+            raise AlreadyImported()
 
         if name is None:
             name = function.__name__
@@ -217,11 +249,12 @@ class IkiWikiProcedureProxy(object):
 #            curpage = args[0]
 #            kwargs = dict([args[i:i+2] for i in xrange(1, len(args), 2)])
             ret = function(self, *args)
-            self._debug_fn("%s hook `%s' returned: [%s]" % (type, name, ret))
+            self._debug_fn(
+                    "{0} hook `{1}' returned: [{2}]".format(type, name, ret))
             if ret == IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL:
-                raise IkiWikiProcedureProxy.InvalidReturnValue, \
-                        'hook functions are not allowed to return %s' \
-                        % IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
+                raise InvalidReturnValue(
+                    'hook functions are not allowed to return {0}'.format(
+                        IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL))
             if ret is None:
                 ret = IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
             return ret
@@ -231,7 +264,7 @@ class IkiWikiProcedureProxy(object):
 
     def inject(self, rname, function, name=None, memoize=True):
         if self._imported:
-            raise IkiWikiProcedureProxy.AlreadyImported
+            raise AlreadyImported()
 
         if name is None:
             name = function.__name__
@@ -263,7 +296,7 @@ class IkiWikiProcedureProxy(object):
     def error(self, msg):
         try:
             self.rpc('error', msg)
-        except IOError, e:
+        except IOError as e:
             if e.errno != 32:
                 raise
         import posix
@@ -272,30 +305,26 @@ class IkiWikiProcedureProxy(object):
     def run(self):
         try:
             while True:
-                ret = self._xmlrpc_handler.handle_rpc(self._in_fd, self._out_fd)
+                ret = self._xmlrpc_handler.handle_rpc(
+                    self._in_fd, self._out_fd)
                 time.sleep(IkiWikiProcedureProxy._LOOP_DELAY)
-        except _IkiWikiExtPluginXMLRPCHandler._GoingDown:
+        except GoingDown:
             return
 
-        except Exception, e:
+        except Exception as e:
             import traceback
-            self.error('uncaught exception: %s\n%s' \
-                       % (e, traceback.format_exc(sys.exc_info()[2])))
+            tb = traceback.format_exc()
+            self.error('uncaught exception: {0}\n{1}'.format(e, tb))
             return
 
     def _importme(self):
         self._debug_fn('importing...')
         for id, type, function, last in self._hooks:
-            self._debug_fn('hooking %s/%s into %s chain...' % (id, function, type))
+            self._debug_fn('hooking {0}/{1} into {2} chain...'.format(
+                    id, function, type))
             self.rpc('hook', id=id, type=type, call=function, last=last)
         for rname, function, memoize in self._functions:
-            self._debug_fn('injecting %s as %s...' % (function, rname))
+            self._debug_fn('injecting {0} as {1}...'.format(function, rname))
             self.rpc('inject', name=rname, call=function, memoize=memoize)
         self._imported = True
         return IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
-
-    class InvalidReturnValue(Exception):
-        pass
-
-    class AlreadyImported(Exception):
-        pass
index 0fe91c58b7e79636b9c5be528a10e07a4fbf20b8..ba0f543f9244a04a10bc8b35b926cc0f30743e19 100755 (executable)
@@ -5,8 +5,12 @@
 #
 # based a little bit on rst.pm by Sergio Talens-Oliag, but only a little bit. :)
 #
-# Copyright © martin f. krafft <madduck@madduck.net>
-# 
+# Copyright © 2007-2008 martin f. krafft <madduck@madduck.net>
+#             2007-2011 Joey Hess <joey@kitenet.net>
+#             2009      Ulrik Sverdrup <ulrik.sverdrup@gmail.com>
+#             2011      Simon McVittie <smcv@debian.org>
+#             2012      W. Trevor King <wking@tremily.us>
+#
 #  Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
 # are met:
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
-# 
+#
 __name__ = 'rst'
 __description__ = 'xml-rpc-based ikiwiki plugin to process RST files'
-__version__ = '0.3'
+__version__ = '0.4'
 __author__ = 'martin f. krafft <madduck@madduck.net>'
 __copyright__ = 'Copyright © ' + __author__
 __licence__ = 'BSD-2-clause'
 
+import sys as _sys
+
 from proxy import IkiWikiProcedureProxy
 
+
 publish_parts = None
 
+
 def rst2html(proxy, *args):
     # delayed import so docutils is only needed if you *use* rst -
     # http://bugs.debian.org/637604
@@ -47,9 +55,9 @@ def rst2html(proxy, *args):
     if publish_parts is None:
         try:
             from docutils.core import publish_parts
-        except ImportError, e:
-            proxy.error('cannot import docutils.core: %s: %s' %
-                        (e.__class__.__name__, e))
+        except ImportError as e:
+            proxy.error('cannot import docutils.core: {0}: {1}'.format(
+                    e.__class__.__name__, e))
             raise
 
     kwargs = _to_dict(args)
@@ -68,10 +76,9 @@ def _to_dict(args):
 def getsetup(proxy, *kwargs):
     return 'plugin', { 'safe' : 1, 'rebuild' : 1, 'section' : 'format' }
 
-import sys
 def debug(s):
-    sys.stderr.write(__name__ + ':DEBUG:%s\n' % s)
-    sys.stderr.flush()
+    _sys.stderr.write(__name__ + ':DEBUG:{0}\n'.format(s))
+    _sys.stderr.flush()
 
 proxy = IkiWikiProcedureProxy(__name__, debug_fn=None)
 proxy.hook('getsetup', getsetup)
index 0a946a1b817bee3aad865b782185ed2cf03203be..ace53ad3e6f3bfa43140f6a37bb637df4574e0b1 100644 (file)
--- 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: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2007-01-12 01:19+0200\n"
 "Last-Translator: Damyan Ivanov <dam@modsodtsys.com>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -52,7 +52,7 @@ msgstr "Предпочитанията са запазени."
 msgid "You are banned."
 msgstr "Достъпът ви е забранен."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Грешка"
 
@@ -64,73 +64,73 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "липсващ параметър „id” на шаблона"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "нов източник"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "съобщения"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "ново"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "премахване на „%s” (на %s дни)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "премахване на „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "проверка на източника „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "не е намерен източник на адрес „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 #, fuzzy
 msgid "feed not found"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "данните от източника предизвикаха грешка в модула XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "създаване на нова страницa „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "грешка при обработване на шаблона"
@@ -258,37 +258,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -298,7 +298,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -388,7 +388,7 @@ msgid "%s is an attachment, not a page."
 msgstr ""
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -561,15 +561,15 @@ msgstr "шаблонът „%s” не е намерен"
 msgid "redir cycle is not allowed"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Огледала"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Огледало"
 
@@ -764,11 +764,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "гласуване"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Общо гласове:"
 
@@ -872,7 +876,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1081,7 +1085,7 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr "грешка при запис на файла „%s”: %s"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1248,27 +1252,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "генериране на обвивки..."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "„%s” не е изпълним файл"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "не може да бъде създадена обвивка, която използва файл за настройки"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "не е указан файл на обвивката"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "крешка при компилиране на файла %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "успешно генериране на %s"
@@ -1297,60 +1305,60 @@ msgstr "обновяване на уики..."
 msgid "refreshing wiki.."
 msgstr "осъвременяване на уики..."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Дискусия"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "При използване на пареметъра „--cgi” е необходимо да се укаже и "
 "местоположението на уикито чрез параметъра „--url”"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, fuzzy, perl-format
 msgid "bad file name %s"
 msgstr "пропускане на невалидното име на файл „%s”"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "непознат вид сортиране „%s”"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "непознат вид сортиране „%s”"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "грешка при четене на „%s”: %s"
index 8f8f934a53a54cc75b1f6c9b216ac2a903e024ad..07489c8cf9ba65ce63f367f0158e064c55518e2b 100644 (file)
--- 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: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2009-09-11 20:23+0200\n"
 "Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
 "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -52,7 +52,7 @@ msgstr "Nastavení uloženo."
 msgid "You are banned."
 msgstr "Jste vyhoštěni."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Chyba"
 
@@ -64,72 +64,72 @@ msgstr "Agregace spuštěna přes web."
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Není třeba nic dělat, všechny kanály jsou aktuální!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "chybí parametr %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "nový kanál"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "příspěvky"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "nový"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "expiruji %s (stará %s dnů)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "expiruji %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "poslední kontrola %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "kontroluji kanál %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "nemohu najít kanál na %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "kanál nebyl nalezen"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(neplatné UTF-8 bylo z kanálu odstraněno)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(entity byly v kanálu zakódovány)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "kanál shodil XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "vytvářím novou stránku %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "nepodařilo se zpracovat:"
@@ -259,37 +259,37 @@ msgstr "stránka „%s“ neexistuje, takže nemůžete komentovat"
 msgid "comments on page '%s' are closed"
 msgstr "komentáře na stránce „%s“ jsou uzamčeny"
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr "komentář uložen pro schválení"
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr "Váš komentář bude zobrazen po schválení moderátorem"
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr "Přidán komentář"
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Přidán komentář: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr "nejste přihlášeni jako správce"
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr "Schvalování komentářů"
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr "schvalování komentářů"
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, fuzzy, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -299,7 +299,7 @@ msgstr[1] "Komentáře"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 #, fuzzy
 msgid "Comment"
 msgstr "Komentáře"
@@ -387,7 +387,7 @@ msgid "%s is an attachment, not a page."
 msgstr "%s není ani příloha, ani stránka."
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "nejste oprávněni měnit %s"
@@ -548,16 +548,16 @@ msgstr "stránka, na kterou vede přesměrování, nebyla nalezena"
 msgid "redir cycle is not allowed"
 msgstr "cykly nejsou v přesměrování povoleny"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "vyžaduje parametry „from“ a „to“"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Zrcadla"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Zrcadlo"
 
@@ -760,11 +760,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "hlasovat"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Celkem hlasů:"
 
@@ -867,7 +871,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr "potvrďte odstranění %s"
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr "(Diff oříznut)"
 
@@ -1065,7 +1069,7 @@ msgstr "chybí TeXový kód"
 msgid "failed to generate image from code"
 msgstr "z kódu se nepodařilo vygenerovat obrázek"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1239,27 +1243,31 @@ msgstr "** Deaktivuji modul %s, protože selhává s touto hláškou:"
 msgid "generating wrappers.."
 msgstr "generuji obaly..."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s není spustitelný soubor"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "nemohu vytvořit obal, který využívá soubor setup"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "jméno souboru s obalem nebylo zadáno"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "nelze zkompilovat %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s byl úspěšně vytvořen"
@@ -1289,58 +1297,58 @@ msgstr "znovusestavuji wiki..."
 msgid "refreshing wiki.."
 msgstr "obnovuji wiki..."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Diskuse"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Při použití --cgi musíte pomocí --url zadat url k wiki"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, fuzzy, perl-format
 msgid "unsupported umask setting %s"
 msgstr "nepodporovaný formát stránky %s"
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr "nelze použít několik rcs modulů"
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "nepodařilo se nahrát externí modul vyžadovaný modulem %s: %s"
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "Byla rozpoznána smyčka na %s v hloubce %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr "chybné jméno souboru %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "šablona %s nebyla nalezena"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr "ano"
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "neznámý typ řazení %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "neznámý typ řazení %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "nelze vybrat stránky: %s"
index c982c49b94eed0baa3e2de5807abfbd0ca2c4b1c..1b14c0b41986980630b7aeba0d60a6f188db223c 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.20110430\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2011-05-05 13:30+0200\n"
 "Last-Translator: Jonas Smedegaard <dr@jones.dk>\n"
 "Language-Team: None\n"
@@ -56,7 +56,7 @@ msgstr "Indstillinger gemt"
 msgid "You are banned."
 msgstr "Du er banlyst."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Fejl"
 
@@ -68,72 +68,72 @@ msgstr "Indsamling udløst via web."
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Intet at gøre lige nu, alle fødninger er tidssvarende!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "mangler parametren %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "ny fødning"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "indlæg"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "nyt"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "udløber %s (%s dage gammel)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "udløber %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "senest undersøgt %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "undersøger fødning %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "kunne ikke finde fødning ved %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "fødning ikke fundet"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(defekt UTF-8 fjernet fra fødning)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(fødningselementer omgået (escaped))"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "fødning fik XML::Feed til at bryde sammen!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "opretter ny side %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 msgid "failed to process template:"
 msgstr "behandling af skabelon mislykkedes:"
 
@@ -260,37 +260,37 @@ msgstr "siden '%s' eksisterer ikke, så du kan ikke kommentere"
 msgid "comments on page '%s' are closed"
 msgstr "kommentarer på side '%s' er lukket"
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr "kommentar gemt for moderering"
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr "Din kommentar vil blive tilføjet efter moderatorgenemsyn"
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr "Tilføjede en kommentar"
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Tilføjede en kommentar: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr "du er ikke logget på som en administrator"
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr "Kommentarmoderering"
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr "kommentarkoderering"
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -300,7 +300,7 @@ msgstr[1] "%i kommentarer"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr "Kommentér"
 
@@ -387,7 +387,7 @@ msgid "%s is an attachment, not a page."
 msgstr "%s er en vedhæftning, ikke en side."
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "Du har ikke lov til at ændre %s"
@@ -550,15 +550,15 @@ msgstr "henvisningsside ikke fundet"
 msgid "redir cycle is not allowed"
 msgstr "ring af henvisninger er ikke tilladt"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr "sort=meta kræver en parameter"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Spejle"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Spejl"
 
@@ -762,11 +762,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr "%s har forkert syntaks: skal bruge CODE|NAME"
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "stem"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Samlede stemmer:"
 
@@ -869,7 +873,7 @@ msgstr "Dette tilbagefører indlæg %s"
 msgid "confirm reversion of %s"
 msgstr "bekræft tilbageføring af %s"
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr "(Diff trunkeret)"
 
@@ -1067,7 +1071,7 @@ msgstr "manglende tex-kode"
 msgid "failed to generate image from code"
 msgstr "billedopbygning fra kode mislykkedes"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1241,27 +1245,31 @@ msgstr "** Deaktiverer udvidelse %s, da den fejler med denne besked:"
 msgid "generating wrappers.."
 msgstr "bygger wrappers.."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s ser ikke ud til at kunne afvikles"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "kan ikke oprette en wrapper som bruger en opsætningsfil"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "wrapper-navn ikke angivet"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "kompilering af %s mislykkedes"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "Korrekt bygget %s"
@@ -1290,59 +1298,59 @@ msgstr "genopbygger wiki..."
 msgid "refreshing wiki.."
 msgstr "genopfrisker wiki..."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Diskussion"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Skal angive url til wiki med --url når der bruges --cgi"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, fuzzy, perl-format
 msgid "unsupported umask setting %s"
 msgstr "Ikke-understøttet sideformat %s"
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr "kan ikke bruge flere samtidige RCS-udvidelser"
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 "indlæsning af ekstern udvidelse krævet af udvidelsen %s mislykkedes: %s"
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "forudberegningssløkke fundet på %s ved dybde %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr "dårligt filnavn %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "skabelon %s ikke fundet"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr "ja"
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, perl-format
 msgid "invalid sort type %s"
 msgstr "forkert sorteringstype %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "ukendt sorteringsform %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "kan ikke få sider til at passe sammen: %s"
index 2cce330b6e0a5229701ce44cbf0f30061686786e..bba40e79f39597d9f29a2508402c383c9b443793 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.14159\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2010-03-14 16:09+0530\n"
 "Last-Translator: Sebastian Kuhnert <mail@sebastian-kuhnert.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -53,7 +53,7 @@ msgstr "Einstellungen gespeichert."
 msgid "You are banned."
 msgstr "Sie sind ausgeschlossen worden."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Fehler"
 
@@ -65,72 +65,72 @@ msgstr "Das Web löst die Zusammenstellung aus"
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Es gibt nichts zu tun, alle Vorlagen (feeds) sind aktuell!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "Parameter %s fehlt"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "neue Vorlage (feed)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "Beiträge"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "neu"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "%s läuft aus (%s Tage alt)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "%s läuft aus"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "zuletzt geprüft %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "überprüfe Vorlage (feed) %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "konnte Vorlage (feed) unter %s nicht finden"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "Vorlage (feed) nicht gefunden"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(ungültiges UTF-8 wurde aus der Vorlage (feed) entfernt)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(Einträge in der Vorlage (feed) wurden maskiert)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "Vorlage (feed) führte zum Absturz von XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "erstelle neue Seite %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "Fehler beim Ablauf:"
@@ -262,37 +262,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr "Kommentare zur Seite %s sind gesperrt"
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr "Der Kommentar wurde zur Moderation gespeichert"
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr "Ihr Kommentar wird nach Moderation verschickt"
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr "Kommentar hinzugefügt"
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Kommentar hinzugefügt: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr "Sie sind nicht als Administrator angemeldet"
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr "Kommentar-Moderation"
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr "Kommentar-Moderation"
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -302,7 +302,7 @@ msgstr[1] "%i Kommentare"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr "Kommentieren"
 
@@ -389,7 +389,7 @@ msgid "%s is an attachment, not a page."
 msgstr "Seite %s ist ein Anhang und keine Seite."
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "Sie dürfen %s nicht verändern"
@@ -557,16 +557,16 @@ msgstr "Umleitungsseite nicht gefunden"
 msgid "redir cycle is not allowed"
 msgstr "Zyklische Umleitungen sind nicht erlaubt"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "erfordert die Parameter 'from' und 'to'"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Spiegel"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Spiegel"
 
@@ -772,11 +772,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "abstimmen"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Alle Stimmen:"
 
@@ -881,7 +885,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr "bestätigen Sie die Entfernung von %s"
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr "(Diff wurde gekürzt)"
 
@@ -1079,7 +1083,7 @@ msgstr "fehlender TeX-Code"
 msgid "failed to generate image from code"
 msgstr "konnte kein Bild aus dem Code erzeugen"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1259,27 +1263,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "erzeuge Wrapper.."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s scheint nicht ausführbar zu sein"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "Kann keinen Wrapper erzeugen, der eine Einrichtungsdatei verwendet"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "Dateiname des Wrappers nicht angegeben"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "erzeugen von %s fehlgeschlagen"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s wurde erfolgreich erstellt"
@@ -1309,61 +1317,61 @@ msgstr "erzeuge Wiki neu.."
 msgid "refreshing wiki.."
 msgstr "aktualisiere Wiki.."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Diskussion"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 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:605
+#: ../IkiWiki.pm:621
 #, fuzzy, perl-format
 msgid "unsupported umask setting %s"
 msgstr "nicht unterstütztes Seitenformat %s"
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 "Es können nicht mehrere Versionskontrollsystem-Erweiterungen verwandt werden"
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, 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:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "Präprozessorschleife auf %s in Tiefe %i erkannt"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr "fehlerhafter Dateiname %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "Vorlage %s nicht gefunden"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr "ja"
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "Unbekannter Sortierungstyp %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "Unbekannter Sortierungstyp %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "Kann die Seiten nicht zuordnen: %s"
index e6c442a113b0b9cc41316e7d9d8089067d55d7b8..917fc49be0f7f5d9f7c7094a4ea3bbe421689230 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2009-06-14 12:32+0200\n"
 "Last-Translator: Victor Moral <victor@taquiones.net>\n"
 "Language-Team:  <en@li.org>\n"
@@ -57,7 +57,7 @@ msgstr "Las preferencias se han guardado."
 msgid "You are banned."
 msgstr "Ha sido expulsado."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Error"
 
@@ -70,72 +70,72 @@ msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 "¡ No hay nada que hacer, todas las fuentes de noticias están actualizadas !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "falta el parámetro %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "nueva entrada"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "entradas"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "nuevo"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "%s caducada (%s días de antigüedad)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "%s caducada"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "última comprobación el %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "comprobando fuente de datos %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "no puedo encontrar la fuente de datos en %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "fuente de datos no encontrada"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, 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:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(los caracteres especiales de la fuente de datos están exceptuados)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "¡ la fuente de datos ha provocado un error fatal en XML::Feed !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "creando nueva página %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
@@ -268,37 +268,37 @@ 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"
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr "comentario guardado a la espera de aprobación"
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr "Su comentario será publicado después de que el moderador lo revise"
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr "Añadir un comentario"
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Comentario añadido: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr "No está registrado como un administrador"
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr "Aprobación de comentarios"
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr "aprobación de comentarios"
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, fuzzy, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -308,7 +308,7 @@ msgstr[1] "Comentarios"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 #, fuzzy
 msgid "Comment"
 msgstr "Comentarios"
@@ -397,7 +397,7 @@ msgid "%s is an attachment, not a page."
 msgstr "la página %s no es modificable"
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "No puede cambiar %s"
@@ -565,16 +565,16 @@ msgstr "falta la página a donde redirigir"
 msgid "redir cycle is not allowed"
 msgstr "ciclo de redirección no permitido"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "los parámetros 'from' y 'to' son obligatorios"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Réplicas"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Réplica"
 
@@ -775,11 +775,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "Votar"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Recuento de votos:"
 
@@ -882,7 +886,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr "confirme el borrado de %s"
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr "(Lista de diferencias truncada)"
 
@@ -1084,7 +1088,7 @@ msgstr "falta el código tex"
 msgid "failed to generate image from code"
 msgstr "no he podido crear la imagen desde el código"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1263,28 +1267,32 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "generando programas auxiliares.."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "el programa %s no parece ser ejecutable"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 "no puedo crear un programa envoltorio que utiliza un archivo de configuración"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "el programa envoltorio no ha sido especificado"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "ha fallado la compilación del programa %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "creado con éxito el programa envoltorio %s"
@@ -1314,62 +1322,62 @@ msgstr "reconstruyendo el wiki.."
 msgid "refreshing wiki.."
 msgstr "actualizando el wiki.."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Comentarios"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Es obligatorio especificar un url al wiki con el parámetro --url si se "
 "utiliza el parámetro --cgi"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, fuzzy, perl-format
 msgid "unsupported umask setting %s"
 msgstr "formato de página %s no soportado"
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr "no puedo emplear varios complementos rcs"
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "no he podido cargar el complemento externo %s necesario para %s"
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 "se ha detectado en la página %s un bucle de preprocesado en la iteración "
 "número %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr "el nombre de archivo %s es erróneo"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "no he encontrado la plantilla %s"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr "si"
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "no conozco este tipo de ordenación %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "no conozco este tipo de ordenación %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "no encuentro páginas coincidentes: %s"
index 788ae1550706ac6803a7a0838b89a00fa270fc7a..5e4d414b63ddc9fb558116ff58b40033c1ca6307 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.141\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2010-10-03 10:42+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -54,7 +54,7 @@ msgstr "Les préférences ont été enregistrées."
 msgid "You are banned."
 msgstr "Vous avez été banni."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Erreur"
 
@@ -66,72 +66,72 @@ msgstr "Agrégation déclenchée par le web"
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Rien à faire pour le moment, tous les flux sont à jour !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "Paramètre %s manquant"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "Nouveau flux"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "Articles"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "Nouveau"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "Fin de validité de %s (date de %s jours)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "Fin de validité de %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "dernière vérification : %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "Vérification du flux %s..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "Impossible de trouver de flux à %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "Flux introuvable "
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(chaîne UTF-8 non valable supprimée du flux)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(échappement des entités de flux)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "Plantage du flux XML::Feed !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "Création de la nouvelle page %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 msgid "failed to process template:"
 msgstr "Échec du traitementdu modèle :"
 
@@ -258,37 +258,37 @@ msgstr "La page '%s' n'existe pas, commentaire impossible."
 msgid "comments on page '%s' are closed"
 msgstr "Le commentaire pour la page '%s' est terminé."
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr "Le commentaire a été enregistré, en attente de « modération »"
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr "Votre commentaire sera publié après vérification par le modérateur"
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr "Commentaire ajouté"
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Commentaire ajouté : %s"
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr "Vous n'êtes pas authentifié comme administrateur"
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr "Modération du commentaire"
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr "modération du commentaire"
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -298,7 +298,7 @@ msgstr[1] "%i commentaires"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr "poster un commentaire"
 
@@ -385,7 +385,7 @@ msgid "%s is an attachment, not a page."
 msgstr "%s est une pièce jointe, pas une page."
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "Vous n'êtes pas autorisé à modifier %s"
@@ -551,15 +551,15 @@ msgstr "Page de redirection introuvable"
 msgid "redir cycle is not allowed"
 msgstr "Redirection cyclique non autorisée"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr "sort=meta demande un paramètre."
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Miroirs"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Miroir"
 
@@ -769,11 +769,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr "La syntaxe de %s n'est pas correcte : il faut utiliser CODE|NOM"
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "Voter"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Total des suffrages :"
 
@@ -878,7 +882,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr "Suppression de %s confirmée"
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr "(fichier de différences tronqué)"
 
@@ -1076,7 +1080,7 @@ msgstr "Il manque le code TeX"
 msgid "failed to generate image from code"
 msgstr "Échec de la création de l'image à partir du code"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1256,28 +1260,32 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "Création des fichiers CGI..."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s ne semble pas être exécutable"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 "Impossible de créer un fichier CGI utilisant un fichier de configuration"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "Le nom du fichier CGI n'a pas été indiqué"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "Échec de la compilation de %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s a été créé avec succès"
@@ -1306,59 +1314,59 @@ msgstr "Reconstruction du wiki..."
 msgid "refreshing wiki.."
 msgstr "Rafraîchissement du wiki..."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Discussion"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 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"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, fuzzy, perl-format
 msgid "unsupported umask setting %s"
 msgstr "Format de page non reconnu %s"
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr "Impossible d'utiliser plusieurs systèmes de contrôle des versions"
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, 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:1467
+#: ../IkiWiki.pm:1483
 #, 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:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr "Nom de fichier incorrect %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "Modèle de page %s introuvable"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr "oui"
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, perl-format
 msgid "invalid sort type %s"
 msgstr "Type de tri %s inconnu"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "Type de tri %s inconnu"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "Impossible de trouver les pages : %s"
index 0a6c9448719fcf8d2d626d9b37467db932181bd9..7a47746d4f2824a9ed389c966449ab2ff66a7d00 100644 (file)
--- 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: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2007-01-11 16:05+0530\n"
 "Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
 "Language-Team: Gujarati <team@utkarsh.org>\n"
@@ -51,7 +51,7 @@ msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ."
 msgid "You are banned."
 msgstr "તમારા પર પ્રતિબંધ છે."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "ક્ષતિ"
 
@@ -63,72 +63,72 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "ખોવાયેલ %s વિકલ્પ"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "નવું ફીડ"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "પોસ્ટ"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "નવું"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "જુનું કરે છે %s (%s દિવસો જુનું)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "જુનું કરે છે %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "ફીડ %s ચકાસે છે ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "%s પર ફીડ મળી શક્યું નહી"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "ફીડ મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, fuzzy, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "ફીડમાંથી અયોગ્ય રીતે UTF-8 નીકાળેલ છે"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "ફીડ ભાંગી ગયું XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "નવું પાનું %s બનાવે છે"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
@@ -257,37 +257,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -297,7 +297,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -387,7 +387,7 @@ msgid "%s is an attachment, not a page."
 msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -552,15 +552,15 @@ msgstr "ફીડ મળ્યું નહી"
 msgid "redir cycle is not allowed"
 msgstr "ફીડ મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "મિરરો"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "મિરર"
 
@@ -755,11 +755,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "મત"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "કુલ મત:"
 
@@ -864,7 +868,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1069,7 +1073,7 @@ msgstr "ખોવાયેલ કિંમતો"
 msgid "failed to generate image from code"
 msgstr "માપ બદલવામાં નિષ્ફળ: %s"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1236,27 +1240,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "આવરણ બનાવે છે.."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s એ ચલાવી શકાય તેમ લાગતું નથી"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "ગોઠવણ ફાઇલનો ઉપયોગ કરે છે તેનું આવરણ બનાવી શકાતું નથી"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "આવરણ ફાઇલનામ સ્પષ્ટ કરેલ નથી"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "સફળતાપૂર્વક પેદા કરેલ છે %s"
@@ -1285,58 +1293,58 @@ msgstr "વીકી ફરીથી બનાવે છે.."
 msgid "refreshing wiki.."
 msgstr "વીકીને તાજી કરે છે.."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "ચર્ચા"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "જ્યારે --cgi ઉપયોગ કરતાં હોય ત્યારે વીકીનું યુઆરએલ સ્પષ્ટ કરવું જ પડશે"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "%s પર શોધાયેલ લુપ  %s પર ચલાવે છે %i ઉંડાણ પર"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, fuzzy, perl-format
 msgid "bad file name %s"
 msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "ટેમ્પલેટ %s મળ્યું નહી"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "વાંચી શકાતી નથી %s: %s"
index 9f22d2146fcc36b18fd9cd0868c3492da8502041..3f2fac90b57d68b594c7e3f695d7d6c6661de7e7 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-06-29 10:17-0400\n"
+"POT-Creation-Date: 2013-05-18 16:34-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -52,7 +52,7 @@ msgstr ""
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr ""
 
@@ -64,72 +64,72 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 msgid "failed to process template:"
 msgstr ""
 
@@ -253,37 +253,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -293,7 +293,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -379,7 +379,7 @@ msgid "%s is an attachment, not a page."
 msgstr ""
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -425,7 +425,7 @@ msgstr ""
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:179
+#: ../IkiWiki/Plugin/highlight.pm:180
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
@@ -561,11 +561,11 @@ msgstr ""
 msgid "Cannot subscribe your email address without logging in."
 msgstr ""
 
-#: ../IkiWiki/Plugin/notifyemail.pm:135
+#: ../IkiWiki/Plugin/notifyemail.pm:136
 msgid "change notification:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/notifyemail.pm:137
+#: ../IkiWiki/Plugin/notifyemail.pm:138
 msgid "comment notification:"
 msgstr ""
 
@@ -737,11 +737,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr ""
 
@@ -844,7 +848,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1042,7 +1046,7 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1209,27 +1213,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr ""
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr ""
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr ""
@@ -1258,58 +1266,58 @@ msgstr ""
 msgid "refreshing wiki.."
 msgstr ""
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr ""
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, perl-format
 msgid "invalid sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr ""
index e6f43c18b090e91d6bd8129517f4c5870164f6d2..e5e25f39e2a40a29759ba06b1f800cc43829409f 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2009-08-16 11:01+0100\n"
 "Last-Translator: Luca Bruno <lucab@debian.org>\n"
 "Language-Team: Italian TP <tp@lists.linux.it>\n"
@@ -50,7 +50,7 @@ msgstr "Preferenze salvate."
 msgid "You are banned."
 msgstr "Avete ricevuto un ban."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Errore"
 
@@ -63,72 +63,72 @@ msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 "Nessuna azione da intraprendere, tutti i notiziari sono già aggiornati."
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "parametro %s mancante"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "nuovo notiziario"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "articoli"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "nuovo"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "in scadenza %s (vecchio di %s giorni)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "in scadenza %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "ultimo controllo %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "controllo notiziario %s..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "impossibile trovare il notiziario %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "notiziario non trovato"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(codifica UTF-8 non valida eliminata dal notiziario)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(entità del notiziario espanse con escape)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "il notiziario ha fatto andare in crash XML::Feed."
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "creazione nuova pagina %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "errore nell'elaborazione:"
@@ -258,37 +258,37 @@ msgstr "la pagina «%s» non esiste, impossibile commentarla"
 msgid "comments on page '%s' are closed"
 msgstr "i commenti per la pagina «%s» sono chiusi"
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr "commento trattenuto per moderazione"
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr "Il commento sarà pubblicato dopo la verifica del moderatore"
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr "Aggiunto commento"
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Aggiunto commento: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr "non siete autenticati come amministratore"
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr "Moderazione commenti"
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr "moderazione commento"
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, fuzzy, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -298,7 +298,7 @@ msgstr[1] "Commenti"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 #, fuzzy
 msgid "Comment"
 msgstr "Commenti"
@@ -386,7 +386,7 @@ msgid "%s is an attachment, not a page."
 msgstr "%s è un allegato, non una pagina."
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "non è permesso modificare %s"
@@ -551,16 +551,16 @@ msgstr "pagina di reindirizzamento non trovata"
 msgid "redir cycle is not allowed"
 msgstr "ciclo di reindirizzamento non ammesso"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "sono richiesti i parametri \"to\" e \"from\""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Mirror"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Mirror"
 
@@ -769,11 +769,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "voto"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Voti totali:"
 
@@ -878,7 +882,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr "conferma rimozione di %s"
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr "(Diff troncato)"
 
@@ -1076,7 +1080,7 @@ msgstr "codice tex mancante"
 msgid "failed to generate image from code"
 msgstr "impossibile generare l'immagine dal codice"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1251,27 +1255,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "generazione contenitori..."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s non sembra essere eseguibile"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "impossibile creare un contenitore che utilizzi un file di setup"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "nome del file del contenitore non specificato"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "errore nel compilare %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s generato con successo"
@@ -1301,58 +1309,58 @@ msgstr "ricostruzione wiki..."
 msgid "refreshing wiki.."
 msgstr "aggiornamento wiki..."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Discussione"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Occorre specificare l'url del wiki tramite --url quando si usa --cgi"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, fuzzy, perl-format
 msgid "unsupported umask setting %s"
 msgstr "formato pagina %s non supportato"
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr "impossibile usare più plugin rcs"
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "impossibile caricare il plugin esterno per il plugin %s: %s"
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "ciclo del preprocessore individuato su %s alla profondità %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr "nome file %s scorretto"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "modello %s non trovato"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr "sì"
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "ordinamento %s sconosciuto"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "ordinamento %s sconosciuto"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "impossibile trovare pagine corrispondenti: %s"
index e6350f53e69da7231db1e3d2f2f8b2f821c534b0..50a4dd219cb0e8bc76196ad7470c7011985691c0 100644 (file)
--- 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: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2007-04-27 22:05+0200\n"
 "Last-Translator: Pawel Tecza <ptecza@net.icm.edu.pl>\n"
 "Language-Team: Debian L10n Polish <debian-l10n-polish@lists.debian.org>\n"
@@ -54,7 +54,7 @@ msgstr "Preferencje zapisane."
 msgid "You are banned."
 msgstr "Twój dostęp został zabroniony przez administratora."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Błąd"
 
@@ -66,73 +66,73 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "brakujący parametr %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "nowy kanał RSS"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "wpisy"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "nowy wpis"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "wygasający wpis %s (ma już %s dni)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "wygasający wpis %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "sprawdzanie kanału RSS %s..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "nie znaleziono kanału RSS pod adresem %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 #, fuzzy
 msgid "feed not found"
 msgstr "nieznaleziony kanał RSS"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, fuzzy, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "Nieprawidłowe kodowanie UTF-8 usunięte z kanału RSS"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "awaria kanału RSS w module XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "tworzenie nowej strony %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "awaria w trakcie przetwarzania:"
@@ -261,37 +261,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -301,7 +301,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -391,7 +391,7 @@ msgid "%s is an attachment, not a page."
 msgstr "Strona %s nie może być edytowana"
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -565,15 +565,15 @@ msgstr "nieznaleziony kanał RSS"
 msgid "redir cycle is not allowed"
 msgstr "nieznaleziony kanał RSS"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Kopie lustrzane"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Kopia lustrzana"
 
@@ -768,11 +768,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "głosuj"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Oddane głosy:"
 
@@ -877,7 +881,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1090,7 +1094,7 @@ msgstr "brakujące wartości"
 msgid "failed to generate image from code"
 msgstr "awaria w trakcie zmiany rozmiaru: %s"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1257,27 +1261,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "tworzenie osłon..."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "osłona %s nie jest wykonywalna"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "awaria w trakcie tworzenia osłony używającej pliku konfiguracyjnego"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "nieokreślona nazwa pliku osłony"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "awaria w trakcie kompilowania %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "pomyślnie utworzono %s"
@@ -1306,60 +1314,60 @@ msgstr "przebudowywanie wiki..."
 msgid "refreshing wiki.."
 msgstr "odświeżanie wiki..."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Dyskusja"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Użycie parametru --cgi wymaga podania adresu URL do wiki za pomocą parametru "
 "--url"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "polecenie preprocesora %s wykryte w %s na głębokości %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, fuzzy, perl-format
 msgid "bad file name %s"
 msgstr "pomijanie nieprawidłowej nazwy pliku %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "nieznaleziony szablon %s"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "nieznany sposób sortowania %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "nieznany sposób sortowania %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "awaria w trakcie odczytu %s: %s"
index 1d866ddf8962f1a2f7339a6c0f4084b682d24e80..320eb99000680345a3bf875a1b924c026a43a670 100644 (file)
--- 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: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2007-01-10 23:47+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -51,7 +51,7 @@ msgstr "Inställningar sparades."
 msgid "You are banned."
 msgstr "Du är bannlyst."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Fel"
 
@@ -63,73 +63,73 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "mall saknar id-parameter"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "ny kanal"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "inlägg"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "ny"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "låter %s gå ut (%s dagar gammal)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "låter %s gå ut"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "kontrollerar kanalen %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "kunde inte hitta kanalen på %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 #, fuzzy
 msgid "feed not found"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "kanalen kraschade XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "skapar nya sidan %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "misslyckades med att behandla mall:"
@@ -257,37 +257,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -297,7 +297,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -387,7 +387,7 @@ msgid "%s is an attachment, not a page."
 msgstr ""
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -557,15 +557,15 @@ msgstr "mallen %s hittades inte"
 msgid "redir cycle is not allowed"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Speglar"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Spegel"
 
@@ -760,11 +760,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "röst"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Antal röster:"
 
@@ -868,7 +872,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1076,7 +1080,7 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr "misslyckades med att skriva %s: %s"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1243,27 +1247,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "genererar wrappers.."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s verkar inte vara körbar"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "kan inte skapa en wrapper som använder en konfigurationsfil"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "filnamn för wrapper har inte angivits"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "misslyckades med att kompilera %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "generering av %s lyckades"
@@ -1292,58 +1300,58 @@ msgstr "bygger om wiki.."
 msgid "refreshing wiki.."
 msgstr "uppdaterar wiki.."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Diskussion"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Måste ange url till wiki med --url när --cgi används"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "%s förbehandlingsslinga detekterades på %s, djup %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, fuzzy, perl-format
 msgid "bad file name %s"
 msgstr "hoppar över felaktigt filnamn %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "okänd sorteringstyp %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "okänd sorteringstyp %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "kan inte läsa %s: %s"
index 91f64af6179b78b1a5f5d4b1f4b0b68033c7a43b..ae1bf6ad4056705e75de883de67cac7dfefb4b8b 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.20091031\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2009-11-08 03:04+0200\n"
 "Last-Translator: Recai Oktaş <roktas@debian.org>\n"
 "Language-Team: Turkish <debian-l10n-turkish@lists.debian.org>\n"
@@ -48,7 +48,7 @@ msgstr "Tercihler kaydedildi."
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Hata"
 
@@ -60,72 +60,72 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, perl-format
 msgid "missing %s parameter"
 msgstr "%s parametresi eksik"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "yeni özet akışı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "gönderi"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "yeni"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "%s için zaman aşımı (%s gün eski)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "%s için zaman aşımı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr "son güncelleme: %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "%s özet akışı denetleniyor ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "%s özet akışı bulunamadı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 msgid "feed not found"
 msgstr "özet akışı bulunamadı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(geçersiz UTF-8 dizgisi özet akışından çıkarıldı)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(özet akışı girdileri işlendi)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "özet akışı XML::Feed'in çakılmasına yol açtı!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "%s için yeni sayfa oluşturuluyor"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 msgid "failed to process template:"
 msgstr ""
 
@@ -249,37 +249,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -289,7 +289,7 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -375,7 +375,7 @@ msgid "%s is an attachment, not a page."
 msgstr ""
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -534,15 +534,15 @@ msgstr ""
 msgid "redir cycle is not allowed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr ""
 
@@ -734,11 +734,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr ""
 
@@ -841,7 +845,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1039,7 +1043,7 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1207,27 +1211,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr ""
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr ""
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr ""
@@ -1256,58 +1264,58 @@ msgstr ""
 msgid "refreshing wiki.."
 msgstr ""
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, perl-format
 msgid "bad file name %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr ""
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, perl-format
 msgid "invalid sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr ""
index bd1ea843cf3b1f041b3be3bc2ec7a68bcb025b59..26fa35c9aa5a301a26040e20087533b8bc99a406 100644 (file)
--- 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: 2012-04-19 15:33-0400\n"
+"POT-Creation-Date: 2013-02-02 14:16-0500\n"
 "PO-Revision-Date: 2007-01-13 15:31+1030\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -52,7 +52,7 @@ msgstr "Tùy thích đã được lưu."
 msgid "You are banned."
 msgstr "Bạn bị cấm ra."
 
-#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1485
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
 msgid "Error"
 msgstr "Lỗi"
 
@@ -64,73 +64,73 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:237
+#: ../IkiWiki/Plugin/aggregate.pm:236
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "mẫu thiếu tham số id"
 
-#: ../IkiWiki/Plugin/aggregate.pm:272
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "new feed"
 msgstr "nguồn tin mới"
 
-#: ../IkiWiki/Plugin/aggregate.pm:286
+#: ../IkiWiki/Plugin/aggregate.pm:285
 msgid "posts"
 msgstr "bài"
 
-#: ../IkiWiki/Plugin/aggregate.pm:288
+#: ../IkiWiki/Plugin/aggregate.pm:287
 msgid "new"
 msgstr "mới"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:474
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "đang mãn hạn %s (cũ %s ngày)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:482
+#: ../IkiWiki/Plugin/aggregate.pm:481
 #, perl-format
 msgid "expiring %s"
 msgstr "đang mãn hạn %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:510
+#: ../IkiWiki/Plugin/aggregate.pm:509
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:513
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "đang kiểm tra nguồn tin %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:519
+#: ../IkiWiki/Plugin/aggregate.pm:518
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "không tìm thấy nguồn tin ở %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:542
+#: ../IkiWiki/Plugin/aggregate.pm:541
 #, fuzzy
 msgid "feed not found"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:553
+#: ../IkiWiki/Plugin/aggregate.pm:552
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:561
+#: ../IkiWiki/Plugin/aggregate.pm:560
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:569
+#: ../IkiWiki/Plugin/aggregate.pm:568
 msgid "feed crashed XML::Feed!"
 msgstr "nguồn tin đã gây ra XML::Feed sụp đổ."
 
-#: ../IkiWiki/Plugin/aggregate.pm:661
+#: ../IkiWiki/Plugin/aggregate.pm:660
 #, perl-format
 msgid "creating new page %s"
 msgstr "đang tạo trang mới %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:689 ../IkiWiki/Plugin/edittemplate.pm:135
+#: ../IkiWiki/Plugin/aggregate.pm:688 ../IkiWiki/Plugin/edittemplate.pm:135
 #, fuzzy
 msgid "failed to process template:"
 msgstr "mẫu không xử lý được:"
@@ -258,37 +258,37 @@ msgstr ""
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551
+#: ../IkiWiki/Plugin/comments.pm:548
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:553
+#: ../IkiWiki/Plugin/comments.pm:550
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:566
+#: ../IkiWiki/Plugin/comments.pm:563
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:570
+#: ../IkiWiki/Plugin/comments.pm:567
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640 ../IkiWiki/Plugin/userlist.pm:55
+#: ../IkiWiki/Plugin/comments.pm:637 ../IkiWiki/Plugin/userlist.pm:55
 #: ../IkiWiki/Plugin/websetup.pm:272
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:694
+#: ../IkiWiki/Plugin/comments.pm:691
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:735
+#: ../IkiWiki/Plugin/comments.pm:732
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:896
+#: ../IkiWiki/Plugin/comments.pm:893
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -297,7 +297,7 @@ msgstr[0] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:906
+#: ../IkiWiki/Plugin/comments.pm:903
 msgid "Comment"
 msgstr ""
 
@@ -387,7 +387,7 @@ msgid "%s is an attachment, not a page."
 msgstr ""
 
 #: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
-#: ../IkiWiki.pm:1705
+#: ../IkiWiki.pm:1721
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
@@ -557,15 +557,15 @@ msgstr "không tìm thấy mẫu %s"
 msgid "redir cycle is not allowed"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/meta.pm:433
+#: ../IkiWiki/Plugin/meta.pm:434
 msgid "sort=meta requires a parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirrors"
 msgstr "Nhân bản"
 
-#: ../IkiWiki/Plugin/mirrorlist.pm:44
+#: ../IkiWiki/Plugin/mirrorlist.pm:57
 msgid "Mirror"
 msgstr "Nhân bản"
 
@@ -760,11 +760,15 @@ msgstr ""
 msgid "%s has invalid syntax: must use CODE|NAME"
 msgstr ""
 
-#: ../IkiWiki/Plugin/poll.pm:70
+#: ../IkiWiki/Plugin/poll.pm:72 ../IkiWiki/Plugin/poll.pm:87
 msgid "vote"
 msgstr "bỏ phiếu"
 
-#: ../IkiWiki/Plugin/poll.pm:78
+#: ../IkiWiki/Plugin/poll.pm:86
+msgid "Write in"
+msgstr ""
+
+#: ../IkiWiki/Plugin/poll.pm:93
 msgid "Total votes:"
 msgstr "Tổng số phiếu :"
 
@@ -868,7 +872,7 @@ msgstr ""
 msgid "confirm reversion of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -1076,7 +1080,7 @@ msgstr ""
 msgid "failed to generate image from code"
 msgstr "lỗi ghi %s: %s"
 
-#: ../IkiWiki/Plugin/trail.pm:363
+#: ../IkiWiki/Plugin/trail.pm:393
 #, perl-format
 msgid "building %s, its previous or next page has changed"
 msgstr ""
@@ -1243,27 +1247,31 @@ msgstr ""
 msgid "generating wrappers.."
 msgstr "đang tạo ra các bộ bao bọc.."
 
-#: ../IkiWiki/Wrapper.pm:36
+#: ../IkiWiki/Wrapper.pm:37
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "có vẻ là %s không phải có khả năng thực hiện"
 
-#: ../IkiWiki/Wrapper.pm:40
+#: ../IkiWiki/Wrapper.pm:41
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "không thể tạo bộ bao bọc sử dụng tập tin thiết lập"
 
-#: ../IkiWiki/Wrapper.pm:44
+#: ../IkiWiki/Wrapper.pm:45
 msgid "wrapper filename not specified"
 msgstr "chưa xác định tên tập tin bộ bao bọc"
 
+#: ../IkiWiki/Wrapper.pm:109
+msgid "Please wait"
+msgstr ""
+
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:268
 #, perl-format
 msgid "failed to compile %s"
 msgstr "lỗi biên dịch %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:288
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s đã được tạo ra"
@@ -1292,59 +1300,59 @@ msgstr "đang xây dựng lại wiki.."
 msgid "refreshing wiki.."
 msgstr "đang làm tươi wiki.."
 
-#: ../IkiWiki.pm:232
+#: ../IkiWiki.pm:248
 msgid "Discussion"
 msgstr "Thảo luận"
 
-#: ../IkiWiki.pm:557
+#: ../IkiWiki.pm:573
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Cần phải xác định địa chỉ URL tới wiki với « --url » khi dùng « --cgi »"
 
-#: ../IkiWiki.pm:605
+#: ../IkiWiki.pm:621
 #, perl-format
 msgid "unsupported umask setting %s"
 msgstr ""
 
-#: ../IkiWiki.pm:645
+#: ../IkiWiki.pm:661
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:675
+#: ../IkiWiki.pm:691
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1467
+#: ../IkiWiki.pm:1483
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "vòng lặp tiền xử lý %s được phát hiện trên %s ở độ sâu %i"
 
-#: ../IkiWiki.pm:1661
+#: ../IkiWiki.pm:1677
 #, fuzzy, perl-format
 msgid "bad file name %s"
 msgstr "đang bỏ qua tên tập tin sai %s"
 
-#: ../IkiWiki.pm:1961
+#: ../IkiWiki.pm:1977
 #, perl-format
 msgid "template %s not found"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki.pm:2211
+#: ../IkiWiki.pm:2227
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2288
+#: ../IkiWiki.pm:2304
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "kiểu sắp xếp không rõ %s"
 
-#: ../IkiWiki.pm:2309
+#: ../IkiWiki.pm:2325
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "kiểu sắp xếp không rõ %s"
 
-#: ../IkiWiki.pm:2445
+#: ../IkiWiki.pm:2461
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "không thể đọc %s: %s"
diff --git a/t/cvs.t b/t/cvs.t
index 9afd5a7e9061767f8cc0f1f5ad08d97dcc335c98..cbac43252ecbe7ae4c1ef850cff83fe1187d1dde 100755 (executable)
--- a/t/cvs.t
+++ b/t/cvs.t
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 use warnings;
 use strict;
-use Test::More; my $total_tests = 42;
+use Test::More; my $total_tests = 72;
 use IkiWiki;
 
 my $default_test_methods = '^test_*';
@@ -26,14 +26,13 @@ sub test_web_comments {
        # - when the first comment for page.mdwn is added, and page/ is
        #   created to hold the comment, page/ isn't added to CVS control,
        #   so the comment isn't either
+       #   - can't reproduce after chmod g+s ikiwiki.cgi (20120204)
        # - side effect for moderated comments: after approval they
        #   show up normally AND are still pending, too
        # - comments.pm treats rcs_commit_staged() as returning conflicts?
 }
 
 sub test_chdir_magic {
-       # cvs.pm operations are always occurring inside $config{srcdir}
-       # other ikiwiki operations are occurring wherever, and are unaffected
        # when are we bothering with "local $CWD" and when aren't we?
 }
 
@@ -52,12 +51,14 @@ sub test_cvs_run_cvs {
        # steal from git.pm: safe_git(), run_or_{die,cry,non}
        # - open() instead of system()
        # always call cvs_run_cvs(), don't ever run 'cvs' directly
+       # - for cvs_info(), make it respect wantarray
 }
 
 sub test_cvs_run_cvsps {
        # parameterize command like run_cvs()
        # expose config vars for e.g. "--cvs-direct -z 30"
        # always pass -x (unless proven otherwise)
+       # - but diff doesn't! optimization alert
        # always pass -b HEAD (configurable like gitmaster_branch?)
 }
 
@@ -94,21 +95,43 @@ sub test_cvs_is_controlling {
 # TESTS FOR GENERAL PLUGIN API CALLS
 
 sub test_checkconfig {
-       # undef cvspath, expect "ikiwiki"
-       # define cvspath normally, get it back
-       # define cvspath in a subdir, get it back?
-       # define cvspath with extra slashes, get sanitized version back
-       # - yoink test_extra_path_slashes
-       # undef cvs_wrapper, expect $config{wrappers} same size as before
-
-       my $initial_cvspath = $config{cvspath};
-       $config{cvspath} = "/ikiwiki//";
+       my $default_cvspath = 'ikiwiki';
+
+       undef $config{cvspath}; IkiWiki::checkconfig();
+       is(
+               $config{cvspath}, $default_cvspath,
+               q{can provide default cvspath},
+       );
+
+       $config{cvspath} = "/$default_cvspath/"; IkiWiki::checkconfig();
+       is(
+               $config{cvspath}, $default_cvspath,
+               q{can set typical cvspath and strip well-meaning slashes},
+       );
+
+       $config{cvspath} = "/$default_cvspath//subdir"; IkiWiki::checkconfig();
+       is(
+               $config{cvspath}, "$default_cvspath/subdir",
+               q{can really sanitize cvspath as assumed by rcs_recentchanges},
+       );
+
+       my $default_num_wrappers = @{$config{wrappers}};
+       undef $config{cvs_wrapper}; IkiWiki::checkconfig();
+       is(
+               @{$config{wrappers}}, $default_num_wrappers,
+               q{can start with no wrappers configured},
+       );
+
+       $config{cvs_wrapper} = $config{cvsrepo} . "/CVSROOT/post-commit";
        IkiWiki::checkconfig();
        is(
-               $config{cvspath},
-               $initial_cvspath,
-               q{rcs_recentchanges assumes checkconfig has sanitized cvspath},
+               @{$config{wrappers}}, ++$default_num_wrappers,
+               q{can add cvs_wrapper},
        );
+
+       undef $config{cvs_wrapper};
+       $config{cvspath} = $default_cvspath;
+       IkiWiki::checkconfig();
 }
 
 sub test_getsetup {
@@ -132,6 +155,11 @@ sub test_rcs_prepedit {
        # for existing file, returns latest revision in repo
        # - what's this used for? should it return latest revision in checkout?
        # for new file, returns empty string
+
+       # netbsd web log says "could not open lock file"
+       # XXX does this work right?
+       # how about with un-added dirs in the srcdir?
+       # how about with cvsps.core lying around?
 }
 
 sub test_rcs_commit {
@@ -145,7 +173,8 @@ sub test_rcs_commit {
        # - else, revert + return content with the conflict markers in it
        # git.pm receives "session" param -- useful here?
        # web commits start with "web commit {by,from} "
-       # seeing File::chdir errors on commit?
+
+       # XXX commit can fail due to "could not open lock file"
 }
 
 sub test_rcs_commit_staged {
@@ -159,9 +188,21 @@ sub test_rcs_add {
 
        my $message = "add a top-level ASCII (non-UTF-8) page via VCS API";
        my $file = q{test0.mdwn};
-       add_and_commit($file, $message, q{* some plain ASCII text});
+       add_and_commit($file, $message, qq{# \$Id\$\n* some plain ASCII text});
        is_newly_added($file);
-       is_in_keyword_substitution_mode($file, undef);
+       is_in_keyword_substitution_mode($file, q{-kkv});
+       like(
+               readfile($config{srcdir} . "/$file"),
+               qr/^# \$Id: $file,v 1\.1 .+\$$/m,
+               q{can expand RCS Id keyword},
+       );
+       my $generated_file = $config{destdir} . q{/test0/index.html};
+       ok(-e $generated_file, q{post-commit hook generates content});
+       like(
+               readfile($generated_file),
+               qr/^<h1>\$Id: $file,v 1\.1 .+\$<\/h1>$/m,
+               q{can htmlize mdwn, including RCS Id},
+       );
        @changes = IkiWiki::rcs_recentchanges(3);
        is_total_number_of_changes(\@changes, 1);
        is_most_recent_change(\@changes, stripext($file), $message);
@@ -187,7 +228,7 @@ sub test_rcs_add {
        $file = q{test4/test5/test1.mdwn};
        add_and_commit($file, $message, readfile("t/test1.mdwn"));
        is_newly_added($file);
-       is_in_keyword_substitution_mode($file, undef);
+       is_in_keyword_substitution_mode($file, q{-kkv});
        @changes = IkiWiki::rcs_recentchanges(3);
        is_total_number_of_changes(\@changes, 2);
        is_most_recent_change(\@changes, stripext($file), $message);
@@ -218,14 +259,14 @@ sub test_rcs_add {
        $message = "add a UTF-8 and a binary file in different dirs";
        my $file1 = "test8/test9.mdwn";
        my $file2 = "test10/test11.ico";
-       can_mkdir(qw(test8 test10));
+       can_mkdir($_) for (qw(test8 test10));
        writefile($file1, $config{srcdir}, readfile('t/test2.mdwn'));
        writefile($file2, $config{srcdir}, $bindata_in, 1);
        IkiWiki::rcs_add($_) for ($file1, $file2);
        IkiWiki::rcs_commit_staged(message => $message);
        is_newly_added($_) for ($file1, $file2);
-       is_in_keyword_substitution_mode($file1, undef);
-       is_in_keyword_substitution_mode($file2, '-kb');
+       is_in_keyword_substitution_mode($file1, q{-kkv});
+       is_in_keyword_substitution_mode($file2, q{-kb});
        @changes = IkiWiki::rcs_recentchanges(3);
        is_total_number_of_changes(\@changes, 3);
        @changes = IkiWiki::rcs_recentchanges(4);
@@ -233,15 +274,39 @@ sub test_rcs_add {
        # XXX test for both files in the commit, and no other files
        is_most_recent_change(\@changes, $file2, $message);
 
+       $message = "remove the UTF-8 and binary files we just added";
+       IkiWiki::rcs_remove($_) for ($file1, $file2);
+       IkiWiki::rcs_commit_staged(message => $message);
+       ok(! -d "$config{srcdir}/test8", q{empty dir pruned by post-commit});
+       ok(! -d "$config{srcdir}/test10", q{empty dir pruned by post-commit});
+       @changes = IkiWiki::rcs_recentchanges(11);
+       is_total_number_of_changes(\@changes, 5);
+       # XXX test for both files in the commit, and no other files
+       is_most_recent_change(\@changes, $file2, $message);
+
+       $message = "re-add UTF-8 and binary files with names swapped";
+       writefile($file2, $config{srcdir}, readfile('t/test2.mdwn'));
+       writefile($file1, $config{srcdir}, $bindata_in, 1);
+       IkiWiki::rcs_add($_) for ($file1, $file2);
+       IkiWiki::rcs_commit_staged(message => $message);
+       isnt_newly_added($_) for ($file1, $file2);
+       is_in_keyword_substitution_mode($file2, q{-kkv});
+       is_in_keyword_substitution_mode($file1, q{-kb});
+       @changes = IkiWiki::rcs_recentchanges(11);
+       is_total_number_of_changes(\@changes, 6);
+       # XXX test for both files in the commit, and no other files
+       is_most_recent_change(\@changes, $file2, $message);
+
        # prevent web edits from attempting to create .../CVS/foo.mdwn
        # on case-insensitive filesystems, also prevent .../cvs/foo.mdwn
        # unless your "CVS" is something else and we've made it configurable
+       # also want a pre-commit hook for this?
 
-       # can it assume we're under CVS control? or must it check?
+       # pre-commit hook:
+       # - lcase filenames
+       # - ?
 
-       # extract method: filetype-guessing
-       # add a binary file, remove it, add a text file by same name, no -kb?
-       # add a text file, remove it, add a binary file by same name, -kb?
+       # can it assume we're under CVS control? or must it check?
 }
 
 sub test_rcs_remove {
@@ -304,9 +369,67 @@ sub test_rcs_recentchanges {
 }
 
 sub test_rcs_diff {
+       my @changes = IkiWiki::rcs_recentchanges(3);
+       is_total_number_of_changes(\@changes, 0);
+
+       my $message = "add a UTF-8 and an ASCII file in different dirs";
+       my $file1 = "rcsdiff1/utf8.mdwn";
+       my $file2 = "rcsdiff2/ascii.mdwn";
+       my $contents2 = ''; $contents2 .= "$_. foo\n" for (1..11);
+       can_mkdir($_) for (qw(rcsdiff1 rcsdiff2));
+       writefile($file1, $config{srcdir}, readfile('t/test2.mdwn'));
+       writefile($file2, $config{srcdir}, $contents2);
+       IkiWiki::rcs_add($_) for ($file1, $file2);
+       IkiWiki::rcs_commit_staged(message => $message);
+
+       # XXX we rely on rcs_recentchanges() to be called first!
+       # XXX or else for no cvsps cache to exist yet...
+       # XXX because rcs_diff() doesn't pass -x (as an optimization)
+       @changes = IkiWiki::rcs_recentchanges(3);
+       is_total_number_of_changes(\@changes, 1);
+
+       unlike(
+               $changes[0]->{pages}->[0]->{diffurl},
+               qr/%2F/m,
+               q{path separators are preserved when UTF-8scaping filename},
+       );
+
+       my $changeset = 1;
+
+       my $maxlines = undef;
+       my $scalar_diffs = IkiWiki::rcs_diff($changeset, $maxlines);
+       like(
+               $scalar_diffs,
+               qr/^\+11\. foo$/m,
+               q{unbounded scalar diffs go all the way to 11},
+       );
+       my @array_diffs = IkiWiki::rcs_diff($changeset, $maxlines);
+       is(
+               $array_diffs[$#array_diffs],
+               "+11. foo\n",
+               q{unbounded array diffs go all the way to 11},
+       );
+
+       $maxlines = 8;
+       $scalar_diffs = IkiWiki::rcs_diff($changeset, $maxlines);
+       unlike(
+               $scalar_diffs,
+               qr/^\+11\. foo$/m,
+               q{bounded scalar diffs don't go all the way to 11},
+       );
+       @array_diffs = IkiWiki::rcs_diff($changeset, $maxlines);
+       isnt(
+               $array_diffs[$#array_diffs],
+               "+11. foo\n",
+               q{bounded array diffs don't go all the way to 11},
+       );
+       is(
+               scalar @array_diffs,
+               $maxlines,
+               q{bounded array diffs contain expected maximum number of lines},
+       );
+
        # can it assume we're under CVS control? or must it check?
-       # in list context, return all lines (with \n), up to $maxlines if set
-       # in scalar context, return the whole diff, up to $maxlines if set
 }
 
 sub test_rcs_getctime {
@@ -415,6 +538,7 @@ sub list_module {
 sub _startup {
        my $can_plan = shift;
        _plan_for_test_more($can_plan);
+       hook(type => "genwrapper", id => "cvstest", call => \&_wrapper_paths);
        _generate_test_config();
 }
 
@@ -450,8 +574,12 @@ sub _generate_test_config {
        %config = IkiWiki::defaultconfig();
        $config{rcs} = "cvs";
        $config{srcdir} = "$dir/src";
+       $config{allow_symlinks_before_srcdir} = 1;
+       $config{destdir} = "$dir/dest";
        $config{cvsrepo} = "$dir/repo";
        $config{cvspath} = "ikiwiki";
+       use Cwd; $config{templatedir} = getcwd() . '/templates';
+       $config{diffurl} = "/nonexistent/cvsweb/[[file]]";
        IkiWiki::loadplugins();
        IkiWiki::checkconfig();
 }
@@ -462,12 +590,39 @@ sub _generate_test_repo {
 
        my $cvs = "cvs -d $config{cvsrepo}";
        my $dn = ">/dev/null";
+
        system "$cvs init $dn";
        system "mkdir $dir/$config{cvspath} $dn";
        system "cd $dir/$config{cvspath} && "
                . "$cvs import -m import $config{cvspath} VENDOR RELEASE $dn";
        system "rm -rf $dir/$config{cvspath} $dn";
        system "$cvs co -d $config{srcdir} $config{cvspath} $dn";
+
+       _generate_and_configure_post_commit_hook();
+}
+
+sub _generate_and_configure_post_commit_hook {
+       $config{cvs_wrapper} = $config{cvsrepo} . "/CVSROOT/test-post";
+       $config{wrapper} = $config{cvs_wrapper};
+
+       require IkiWiki::Wrapper;
+       {
+               no warnings 'once';
+               $IkiWiki::program_to_wrap = 'ikiwiki.out';
+               # XXX substitute its interpreter to Makefile's $(PERL)
+               # XXX best solution: do this to all scripts during build
+       }
+       IkiWiki::gen_wrapper();
+
+       my $cvs = "cvs -d $config{cvsrepo}";
+       my $dn = ">/dev/null";
+
+       system "mkdir $config{destdir} $dn";
+       system "cd $dir && $cvs co CVSROOT $dn && cd CVSROOT && " .
+               "echo 'DEFAULT $config{cvsrepo}/CVSROOT/test-post %{sVv} &' "
+               . " >> loginfo && "
+               . "$cvs commit -m 'test repo setup' $dn && "
+               . "cd .. && rm -rf CVSROOT";
 }
 
 sub add_and_commit {
@@ -489,18 +644,28 @@ sub can_mkdir {
        );
 }
 
-sub is_newly_added {
-       my $file = shift;
-       is(
+sub is_newly_added { _newly_added_or_not(shift, 1) }
+sub isnt_newly_added { _newly_added_or_not(shift, 0) }
+sub _newly_added_or_not {
+       my ($file, $expected_new) = @_;
+       my ($func, $word);
+       if ($expected_new) {
+               $func = \&Test::More::is;
+               $word = q{is};
+       }
+       else {
+               $func = \&Test::More::isnt;
+               $word = q{isn't};
+       }
+       $func->(
                IkiWiki::Plugin::cvs::cvs_info("Repository revision", $file),
                '1.1',
-               qq{$file is newly added to CVS},
+               qq{$file $word newly added to CVS},
        );
 }
 
 sub is_in_keyword_substitution_mode {
        my ($file, $mode) = @_;
-       $mode = '(none)' unless defined $mode;
        is(
                IkiWiki::Plugin::cvs::cvs_info("Sticky Options", $file),
                $mode,
@@ -537,3 +702,7 @@ sub stripext {
        $file =~ s|$extension$||g;
        return $file;
 }
+
+sub _wrapper_paths {
+       return qq{newenviron[i++]="PERL5LIB=$ENV{PERL5LIB}";};
+}
diff --git a/t/map.t b/t/map.t
new file mode 100755 (executable)
index 0000000..5d4713d
--- /dev/null
+++ b/t/map.t
@@ -0,0 +1,242 @@
+#!/usr/bin/perl
+package IkiWiki;
+
+use warnings;
+use strict;
+use Test::More;
+
+BEGIN {
+        unless (eval { require XML::Twig }) {
+                eval q{
+                        use Test::More skip_all => "XML::Twig is not available"
+                }
+        }
+}
+
+BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+BEGIN { use_ok("IkiWiki::Plugin::map"); }
+BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
+
+ok(! system("rm -rf t/tmp; mkdir t/tmp"));
+
+$config{verbose} = 1;
+$config{srcdir} = 't/tmp';
+$config{underlaydir} = 't/tmp';
+$config{underlaydirbase} = '.';
+$config{templatedir} = 'templates';
+$config{usedirs} = 1;
+$config{htmlext} = 'html';
+$config{wiki_file_chars} = "-[:alnum:]+/.:_";
+$config{userdir} = "users";
+$config{tagbase} = "tags";
+$config{default_pageext} = "mdwn";
+$config{wiki_file_prune_regexps} = [qr/^\./];
+$config{autoindex_commit} = 0;
+
+is(checkconfig(), 1);
+
+%oldrenderedfiles=%pagectime=();
+%pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
+%destsources=%renderedfiles=%pagecase=%pagestate=();
+
+my @pages = qw(
+alpha
+alpha/1
+alpha/1/i
+alpha/1/ii
+alpha/1/iii
+alpha/1/iv
+alpha/2
+alpha/2/a
+alpha/2/b
+alpha/3
+beta
+);
+
+foreach my $page (@pages) {
+       # we use a non-default extension for these, so they're distinguishable
+       # from programmatically-created pages
+       $pagesources{$page} = "$page.mdwn";
+       $destsources{$page} = "$page.mdwn";
+       $pagemtime{$page} = $pagectime{$page} = 1000000;
+       writefile("$page.mdwn", "t/tmp", "your ad here");
+}
+
+sub comment {
+       my $str = shift;
+       $str =~ s/^/# /gm;
+       print $str;
+}
+
+sub node {
+       my $name = shift;
+       my $kids = shift;
+       my %stuff = @_;
+
+       return { %stuff, name => $name, kids => $kids };
+}
+
+sub check_nodes {
+       my $ul = shift;
+       my $expected = shift;
+
+       is($ul->tag, 'ul');
+
+       # expected is a list of hashes
+       # ul is a list of li
+       foreach my $li ($ul->children) {
+               my @kids = $li->children;
+
+               is($li->tag, 'li');
+
+               my $expectation = shift @$expected;
+
+               is($kids[0]->tag, 'a');
+               my $a = $kids[0];
+
+               if ($expectation->{parent}) {
+                       is($a->att('class'), 'mapparent');
+               }
+               else {
+                       is($a->att('class'), 'mapitem');
+               }
+
+               is_deeply([$a->text], [$expectation->{name}]);
+
+               if (@{$expectation->{kids}}) {
+                       is(scalar @kids, 2);
+
+                       check_nodes($kids[1], $expectation->{kids});
+               }
+               else {
+                       is_deeply([@kids], [$a]);
+               }
+       }
+}
+
+sub check {
+       my $pagespec = shift;
+       my $expected = shift;
+       comment("*** $pagespec ***\n");
+
+       my $html = IkiWiki::Plugin::map::preprocess(pages => $pagespec,
+               page => 'map',
+               destpage => 'map');
+       comment($html);
+       my $tree = XML::Twig->new(pretty_print => 'indented');
+       eval {
+               $tree->parse($html);
+       };
+       if ($@) {
+               print "malformed XML: $@\n$html\n";
+               ok(0);
+       }
+       my $fragment = $tree->root;
+
+       is($fragment->tag, 'div');
+       is($fragment->att('class'), 'map');
+
+       if (@$expected) {
+               check_nodes(($fragment->children)[0], $expected);
+       }
+       else {
+               ok(! $fragment->children);
+       }
+
+       $tree->dispose;
+}
+
+check('doesnotexist', []);
+
+check('alpha', [node('alpha', [])]);
+
+check('alpha/*',
+       [
+               node('1', [
+                       node('i', []),
+                       node('ii', []),
+                       node('iii', []),
+                       node('iv', []),
+               ]),
+               node('2', [
+                       node('a', []),
+                       node('b', []),
+               ]),
+               node('3', []),
+       ]);
+
+check('alpha or alpha/*',
+       [
+               node('alpha', [
+                       node('1', [
+                               node('i', []),
+                               node('ii', []),
+                               node('iii', []),
+                               node('iv', []),
+                       ]),
+                       node('2', [
+                               node('a', []),
+                               node('b', []),
+                       ]),
+                       node('3', []),
+               ]),
+       ]);
+
+check('alpha or alpha/1 or beta',
+       [
+               node('alpha', [
+                       node('1', []),
+               ]),
+               node('beta', []),
+       ]);
+
+check('alpha/1 or beta',
+       [
+               node('alpha', [
+                       node('1', []),
+               ], parent => 1),
+               node('beta', []),
+       ]);
+
+check('alpha/1/i* or alpha/2/a or beta',
+       [
+               node('alpha', [
+                       node('1', [
+                               node('i', []),
+                               node('ii', []),
+                               node('iii', []),
+                               node('iv', []),
+                       ], parent => 1),
+                       node('2', [
+                               node('a', []),
+                       ], parent => 1),
+               ], parent => 1),
+               node('beta', []),
+       ]);
+
+check('alpha/1/i* or alpha/2/a',
+       [
+               node('1', [
+                       node('i', []),
+                       node('ii', []),
+                       node('iii', []),
+                       node('iv', []),
+               ], parent => 1),
+               node('2', [
+                       node('a', []),
+               ], parent => 1),
+       ]);
+
+check('alpha/1/i*',
+       [
+               node('i', []),
+               node('ii', []),
+               node('iii', []),
+               node('iv', []),
+       ]);
+
+ok(! system("rm -rf t/tmp"));
+done_testing;
+
+1;
index 81d4d18206e860f672f7689222ef45c526dcc0a5..36be984c56fd80aa88796d65bb98dee64f06fe23 100755 (executable)
@@ -3,6 +3,7 @@ use warnings;
 use strict;
 use Test::More 'no_plan';
 
+ok(! system("rm -rf t/tmp"));
 ok(! system("mkdir t/tmp"));
 ok(! system("make -s ikiwiki.out"));
 ok(! system("perl -I. ./ikiwiki.out -plugin inline -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates t/tinyblog t/tmp/out"));
index 2e4b9278d1a324875684324b114b324431c55df7..dce3b3c7e4df551984c30c6ed0a0cecac53631ed 100755 (executable)
--- a/t/trail.t
+++ b/t/trail.t
@@ -15,11 +15,11 @@ sub check_trail {
 
 sub check_no_trail {
        my $file=shift;
-       my $trailname=shift;
+       my $trailname=shift || qr/\w+/;
        my $blob=readfile("t/tmp/out/$file");
        my ($trailline)=$blob=~/^trail=$trailname\s+(.*)$/m;
        $trailline="" unless defined $trailline;
-       ok($trailline !~ /^trail=$trailname\s+/, "no $trailname in $file");
+       ok($trailline !~ /^trail=$trailname\s+/, "no trail $trailname in $file");
 }
 
 my $blob;
@@ -96,6 +96,18 @@ write_old_file("sorting.mdwn",
        '[[!trailitems pagenames="sorting/beginning sorting/middle sorting/end"]] ' .
        '[[!inline pages="sorting/old or sorting/ancient or sorting/new" trail="yes"]] ' .
        '[[!traillink linked2]]');
+write_old_file("limited/a.mdwn", "a");
+write_old_file("limited/b.mdwn", "b");
+write_old_file("limited/c.mdwn", "c");
+write_old_file("limited/d.mdwn", "d");
+write_old_file("limited.mdwn",
+       '[[!inline pages="limited/*" trail="yes" show=2 sort=title]]');
+write_old_file("untrail/a.mdwn", "a");
+write_old_file("untrail/b.mdwn", "b");
+write_old_file("untrail.mdwn", "[[!traillink a]] [[!traillink b]]");
+write_old_file("retitled/a.mdwn", "a");
+write_old_file("retitled.mdwn",
+       '[[!meta title="the old title"]][[!traillink a]]');
 
 write_old_file("meme.mdwn", <<EOF
 [[!trail]]
@@ -178,6 +190,24 @@ check_trail("sorting/old.html", "n=sorting/ancient p=sorting/new");
 check_trail("sorting/ancient.html", "n=sorting/linked2 p=sorting/old");
 check_trail("sorting/linked2.html", "n= p=sorting/ancient");
 
+# If the inline has a limited number of pages, the trail still contains
+# everything.
+$blob = readfile("t/tmp/out/limited.html");
+ok($blob =~ /<a href="(\.\/)?limited\/a.html">a<\/a>/m);
+ok($blob =~ /<a href="(\.\/)?limited\/b.html">b<\/a>/m);
+ok($blob !~ /<a href="(\.\/)?limited\/c.html">/m);
+ok($blob !~ /<a href="(\.\/)?limited\/d.html">/m);
+check_trail("limited/a.html", "n=limited/b p=");
+check_trail("limited/b.html", "n=limited/c p=limited/a");
+check_trail("limited/c.html", "n=limited/d p=limited/b");
+check_trail("limited/d.html", "n= p=limited/c");
+
+check_trail("untrail/a.html", "n=untrail/b p=");
+check_trail("untrail/b.html", "n= p=untrail/a");
+
+$blob = readfile("t/tmp/out/retitled/a.html");
+ok($blob =~ /\^ the old title \^/m);
+
 # Make some changes and refresh. These writefile calls don't set an
 # old mtime, so they're strictly newer than the "old" files.
 
@@ -192,6 +222,16 @@ writefile("sorting.mdwn", "t/tmp/in",
        readfile("t/tmp/in/sorting.mdwn") .
        '[[!trailoptions sort="title" reverse="yes"]]'); 
 
+writefile("retitled.mdwn", "t/tmp/in",
+       '[[!meta title="the new title"]][[!traillink a]]');
+
+# If the inline has a limited number of pages, the trail still depends on
+# everything.
+writefile("limited.html", "t/tmp/out", "[this gets rebuilt]");
+writefile("limited/c.mdwn", "t/tmp/in", '[[!meta title="New C page"]]c');
+
+writefile("untrail.mdwn", "t/tmp/in", "no longer a trail");
+
 ok(! system("$command -refresh"));
 
 check_trail("add/a.html", "n=add/b p=");
@@ -218,4 +258,35 @@ check_trail("sorting/a/b.html", "n=sorting/ancient p=sorting/beginning");
 check_trail("sorting/ancient.html", "n=sorting/z/a p=sorting/a/b");
 check_trail("sorting/z/a.html", "n= p=sorting/ancient");
 
+# If the inline has a limited number of pages, the trail still depends on
+# everything, so it gets rebuilt even though it doesn't strictly need it.
+# This means we could use it as a way to recompute the order of members
+# and the contents of their trail navbars, allowing us to fix the regression
+# described in [[bugs/trail excess dependencies]] without a full content
+# dependency.
+$blob = readfile("t/tmp/out/limited.html");
+ok($blob =~ /<a href="(\.\/)?limited\/a.html">a<\/a>/m);
+ok($blob =~ /<a href="(\.\/)?limited\/b.html">b<\/a>/m);
+ok($blob !~ /<a href="(\.\/)?limited\/c.html">/m);
+ok($blob !~ /<a href="(\.\/)?limited\/d.html">/m);
+check_trail("limited/a.html", "n=limited/b p=");
+check_trail("limited/b.html", "n=limited/c p=limited/a");
+check_trail("limited/c.html", "n=limited/d p=limited/b");
+check_trail("limited/d.html", "n= p=limited/c");
+# Also, b and d should pick up the change to c. This regressed with the
+# change to using a presence dependency.
+$blob = readfile("t/tmp/out/limited/b.html");
+ok($blob =~ /New C page &gt;/m);
+$blob = readfile("t/tmp/out/limited/d.html");
+ok($blob =~ /&lt; New C page/m);
+
+# Members of a retitled trail should pick up that change.
+# This regressed with the change to using a presence dependency.
+$blob = readfile("t/tmp/out/retitled/a.html");
+ok($blob =~ /\^ the new title \^/m);
+
+# untrail is no longer a trail, so these are no longer in it.
+check_no_trail("untrail/a.html");
+check_no_trail("untrail/b.html");
+
 ok(! system("rm -rf t/tmp"));
index 93bdd9ce0e50135eec16dd4b7b6a9c5c5969a190..3e0bd9bc20c2d228ce2958ca2d80496c8aec5190 100644 (file)
@@ -1,10 +1,10 @@
-<p>
+<div class="archivepage">
 <TMPL_IF PERMALINK>
 <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a><br />
 <TMPL_ELSE>
 <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a><br />
 </TMPL_IF>
-<i>
+<span class="archivepagedate">
 Posted <TMPL_VAR CTIME>
 <TMPL_IF AUTHOR>
 by <span class="author">
@@ -15,5 +15,5 @@ by <span class="author">
 </TMPL_IF>
 </span>
 </TMPL_IF>
-</i>
-</p>
+</span>
+</div>
index d7ec9087534af331eb53ee1c4f9ab6f786a76e6f..cb022220e9510ab81ec2896d0ae5a396f71b9232 100644 (file)
@@ -9,6 +9,11 @@
 <div id="change-<TMPL_VAR REV>" class="metadata">
 <span class="desc"><br />Changed pages:</span>
 <span class="pagelinks">
+<TMPL_UNLESS HAS_DIFFURL>
+<TMPL_IF DIFF>
+<a href="#diff-<TMPL_VAR REV>" class="toggle" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a>
+</TMPL_IF>
+</TMPL_UNLESS>
 <TMPL_LOOP PAGES>
 <TMPL_IF DIFFURL><a href="<TMPL_VAR DIFFURL>" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a><TMPL_VAR LINK>
 <TMPL_ELSE><TMPL_VAR LINK></TMPL_IF>
 </TMPL_LOOP>
 </div>
 <TMPL_IF DIFF>
+<TMPL_IF HAS_DIFFURL>
 <div class="diff">
+<TMPL_ELSE>
+<div class="toggleable" id="diff-<TMPL_VAR REV>">
+</TMPL_IF>
 <pre>
 <TMPL_VAR DIFF>
 </pre>
diff --git a/themes/monochrome/gradient.png b/themes/monochrome/gradient.png
new file mode 100644 (file)
index 0000000..7363185
Binary files /dev/null and b/themes/monochrome/gradient.png differ
diff --git a/themes/monochrome/style.css b/themes/monochrome/style.css
new file mode 100644 (file)
index 0000000..41a3a44
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * monochrome - ikiwiki theme © Jon Dowland 2012
+ * based on ikiwiki style.css and bits from jmtd.net at the time
+ * License: GPL-2+
+ */
+
+@import url(http://fonts.googleapis.com/css?family=Lato&v2);
+
+body {
+       margin-left: auto;
+       margin-right: auto;
+       width: 48em;
+
+       background: url(gradient.png) repeat-x white 0px -16px;
+       margin-top: 48px; /* height of gradient.png that we want to see */
+
+       color: #555;
+       font-family: 'Lato', sans-serif;
+}
+
+.header {
+       margin-bottom: 0.5em;
+}
+.pageheader .actions ul {
+       border-bottom: 2px solid #c00040;
+}
+
+#pageinfo {
+       border-top: 2px solid #c00040;
+       text-align: center;
+       color: #aaa;
+}
+
+/*
+ * css3 external links stuff
+ * thanks to <http://www.kryogenix.org/days/2002/08/30/external>
+ */
+#content a[href^="http:"]:after,
+#content a[href^="https:"]:after {
+  content: "↗";
+}
+/* you will want to replicate this for your own domain in local.css */
+#content a[href^="http://localhost"]:after,
+#content a[href^="http://ikiwiki.info"]:after {
+  content: none;
+}
+
+/* colouring */
+a:link    { color: #c00040; font-weight: bold; text-decoration: none; }
+a:hover   { color: #f01070; text-decoration: underline;}
+a:active  { color: #c00040; }
+a:visited { color: #c08080; font-weight: normal; font-style: italic; }
+hr { border: none; border-top: 2px solid #c00040; clear: both; }
index d7e3d53f42e7c832423d21ea6b82b1305ddec22d..37e588f7b5bba4c1125052f82c358359a3459705 100644 (file)
@@ -34,15 +34,50 @@ function mapsetup(divname, options) {
                        new OpenLayers.Control.Permalink(permalink)
                ],
                displayProjection: new OpenLayers.Projection("EPSG:4326"),
-               numZoomLevels: 18
+               maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
+               projection: "EPSG:900913",
+               units: "m",
+               maxResolution: 156543.0339,
+               numZoomLevels: 19
        });
 
+       for (x in options.layers) {
+               layer = options.layers[x];
+               console.log("setting up layer: " + layer);
+               if (layer.indexOf("Google") >= 0) {
+                       if (options.google_apikey && options.google_apikey != 'null') {
+                               var gtype = G_NORMAL_MAP;
+                               if (layer.indexOf("Satellite") >= 0) {
+                                       gtype = G_SATELLITE_MAP;
+                               } else if (layer.indexOf("Hybrid") >= 0) {
+                                       gtype = G_HYBRID_MAP // the normal map overlaying the satellite photographs
+                               } else if (layer.indexOf("Physical") >= 0) {
+                                       gtype = G_PHYSICAL_MAP // terrain information
+                               }
+                               // this nightmare is possible through http://docs.openlayers.org/library/spherical_mercator.html
+                               googleLayer = new OpenLayers.Layer.Google(
+                                       layer,
+                                       {type: gtype,
+                                        'sphericalMercator': true,
+                                        'maxExtent': new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
+                                        projection: new OpenLayers.Projection("EPSG:3857")}
+                               );
+                               map.addLayer(googleLayer);
+                       } else {
+                               console.log("no API key defined for Google layer, skipping");
+                       }
+               } else if (layer == 'OSM') { // OSM default layer
+                       map.addLayer(new OpenLayers.Layer.OSM("OSM (Mapnik)"));
+               } else { // assumed to be a URL
+                       text = layer.match(/([^.\/]*\.[^.\/]*(\/[^\$]*)?)\/.*$/i) // take the first two parts of the FQDN and everything before the first $
+                       map.addLayer(new OpenLayers.Layer.OSM("OSM (" + text[1]  + ")", layer));
+               }
+       }
 
-       map.addLayer(new OpenLayers.Layer.OSM());
        if (options.format == 'CSV') {
                pois = new OpenLayers.Layer.Text( "CSV",
                        { location: options.csvurl,
-                         projection: map.displayProjection
+                         projection: new OpenLayers.Projection("EPSG:4326")
                        });
        } else if (options.format == 'GeoJSON') {
                pois = new OpenLayers.Layer.Vector("GeoJSON", {
@@ -50,7 +85,8 @@ function mapsetup(divname, options) {
                                url: options.jsonurl,
                                format: new OpenLayers.Format.GeoJSON()
                        }),
-                       strategies: [new OpenLayers.Strategy.Fixed()]
+                       strategies: [new OpenLayers.Strategy.Fixed()],
+                       projection: new OpenLayers.Projection("EPSG:4326")
                });
        } else {
                pois = new OpenLayers.Layer.Vector("KML", {
@@ -61,7 +97,9 @@ function mapsetup(divname, options) {
                                        extractAttributes: true
                                })
                        }),
-               strategies: [new OpenLayers.Strategy.Fixed()]});
+                       strategies: [new OpenLayers.Strategy.Fixed()],
+                       projection: new OpenLayers.Projection("EPSG:4326")
+                });
        }
        map.addLayer(pois);
        select = new OpenLayers.Control.SelectFeature(pois);
@@ -98,7 +136,7 @@ function mapsetup(divname, options) {
 
        if (options.fullscreen) {
                map.addControl(new OpenLayers.Control.PanZoomBar());
-               map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
+               map.addControl(new OpenLayers.Control.LayerSwitcher());
                map.addControl(new OpenLayers.Control.MousePosition());
                map.addControl(new OpenLayers.Control.KeyboardDefaults());
        } else {