aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmitai Schlair <schmonz-web-ikiwiki@schmonz.com>2013-01-25 08:47:17 -0500
committerAmitai Schlair <schmonz-web-ikiwiki@schmonz.com>2013-01-25 08:47:17 -0500
commit64370885cca3a37ee1f4a9e96673aca7ba5daae4 (patch)
tree70cbd95c9b9cfc684c0fc2bfa70af296df411dfb
parent9faa0f3c6560be7b5e3aea0f8ca12e04a8c85a32 (diff)
parentea21db6b71f02ebf9b7105452326142f1e1b84b0 (diff)
downloadikiwiki-64370885cca3a37ee1f4a9e96673aca7ba5daae4.tar
ikiwiki-64370885cca3a37ee1f4a9e96673aca7ba5daae4.tar.gz
Merge branch 'master' into cvs
-rw-r--r--.gitignore1
-rw-r--r--Bundle/IkiWiki/Extras.pm1
-rw-r--r--IkiWiki.pm21
-rw-r--r--IkiWiki/CGI.pm2
-rw-r--r--IkiWiki/Plugin/aggregate.pm5
-rw-r--r--IkiWiki/Plugin/amazon_s3.pm5
-rw-r--r--IkiWiki/Plugin/attachment.pm4
-rw-r--r--IkiWiki/Plugin/bzr.pm5
-rw-r--r--IkiWiki/Plugin/calendar.pm2
-rw-r--r--IkiWiki/Plugin/comments.pm48
-rw-r--r--IkiWiki/Plugin/conditional.pm1
-rw-r--r--IkiWiki/Plugin/cvs.pm4
-rw-r--r--IkiWiki/Plugin/darcs.pm4
-rw-r--r--IkiWiki/Plugin/editpage.pm22
-rw-r--r--IkiWiki/Plugin/edittemplate.pm2
-rw-r--r--IkiWiki/Plugin/filecheck.pm3
-rw-r--r--IkiWiki/Plugin/git.pm15
-rw-r--r--IkiWiki/Plugin/graphviz.pm1
-rw-r--r--IkiWiki/Plugin/htmlscrubber.pm1
-rw-r--r--IkiWiki/Plugin/httpauth.pm14
-rw-r--r--IkiWiki/Plugin/inline.pm27
-rw-r--r--IkiWiki/Plugin/link.pm15
-rw-r--r--IkiWiki/Plugin/mercurial.pm4
-rw-r--r--IkiWiki/Plugin/meta.pm21
-rw-r--r--IkiWiki/Plugin/mirrorlist.pm17
-rw-r--r--IkiWiki/Plugin/monotone.pm4
-rw-r--r--IkiWiki/Plugin/notifyemail.pm168
-rw-r--r--IkiWiki/Plugin/opendiscussion.pm2
-rw-r--r--IkiWiki/Plugin/openid.pm7
-rw-r--r--IkiWiki/Plugin/osm.pm594
-rw-r--r--IkiWiki/Plugin/passwordauth.pm97
-rw-r--r--IkiWiki/Plugin/pinger.pm2
-rw-r--r--IkiWiki/Plugin/po.pm7
-rw-r--r--IkiWiki/Plugin/poll.pm28
-rw-r--r--IkiWiki/Plugin/recentchanges.pm6
-rw-r--r--IkiWiki/Plugin/recentchangesdiff.pm22
-rw-r--r--IkiWiki/Plugin/remove.pm62
-rw-r--r--IkiWiki/Plugin/rename.pm32
-rw-r--r--IkiWiki/Plugin/rsync.pm2
-rw-r--r--IkiWiki/Plugin/shortcut.pm18
-rw-r--r--IkiWiki/Plugin/skeleton.pm.example14
-rw-r--r--IkiWiki/Plugin/svn.pm4
-rw-r--r--IkiWiki/Plugin/tla.pm4
-rw-r--r--IkiWiki/Plugin/trail.pm467
-rw-r--r--IkiWiki/Plugin/transient.pm6
-rw-r--r--IkiWiki/Render.pm26
-rw-r--r--IkiWiki/Wrapper.pm59
-rwxr-xr-xMakefile.PL2
-rw-r--r--auto-blog.setup2
-rw-r--r--debian/changelog135
-rw-r--r--debian/compat2
-rw-r--r--debian/control6
-rw-r--r--debian/copyright14
-rw-r--r--doc/anchor.mdwn8
-rw-r--r--doc/basewiki/sandbox.mdwn2
-rw-r--r--doc/branches.mdwn2
-rw-r--r--doc/bugs/CGI_wrapper_doesn__39__t_store_PERL5LIB_environment_variable.mdwn28
-rw-r--r--doc/bugs/CamelCase_and_Recent_Changes_create_spurious_Links.mdwn11
-rw-r--r--doc/bugs/Existing_Discussion_pages_appear_as_non-existing.mdwn5
-rw-r--r--doc/bugs/Linkmap_doesn__39__t_support_multiple_linkmaps_on_a_single_page.mdwn3
-rw-r--r--doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn11
-rw-r--r--doc/bugs/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn13
-rw-r--r--doc/bugs/Remove_redirect_pages_from_inline_pages.mdwn15
-rw-r--r--doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn47
-rw-r--r--doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn141
-rw-r--r--doc/bugs/Underscores_in_links_don__39__t_appear.mdwn18
-rw-r--r--doc/bugs/W3MMode_still_uses_http:__47____47__localhost__63__.mdwn10
-rw-r--r--doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn11
-rw-r--r--doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8/discussion.mdwn (renamed from doc/bugs/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8/discussion.mdwn)0
-rw-r--r--doc/bugs/bug_in_cgiurl_port.mdwn15
-rw-r--r--doc/bugs/cannot_clone_documented_git_repo.mdwn16
-rw-r--r--doc/bugs/conditional_preprocess_during_scan.mdwn2
-rw-r--r--doc/bugs/definition_lists_should_be_bold.mdwn27
-rw-r--r--doc/bugs/feeds_get_removed_in_strange_conditions.mdwn57
-rw-r--r--doc/bugs/find_gnuism.mdwn2
-rw-r--r--doc/bugs/graphviz_demo_generates_empty_graph.mdwn15
-rw-r--r--doc/bugs/ipv6_address_in_comments.mdwn19
-rw-r--r--doc/bugs/jquery-ui.min.css_missing_some_image_files.mdwn14
-rw-r--r--doc/bugs/linkmap_displays_underscore_escapes.mdwn18
-rw-r--r--doc/bugs/linkmap_displays_underscore_escapes/the_patch.pl68
-rw-r--r--doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn34
-rw-r--r--doc/bugs/must_save_before_uploading_more_than_one_attachment.mdwn14
-rw-r--r--doc/bugs/nonexistent_pages_in_inline_pagenames_do_not_add_a_dependency.mdwn44
-rw-r--r--doc/bugs/opendiscussion_should_respect_the_discussion_option.mdwn5
-rw-r--r--doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn26
-rw-r--r--doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn14
-rw-r--r--doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn32
-rw-r--r--doc/bugs/osm_linkto__40____41___usage_breaks_map_rendering.mdwn23
-rw-r--r--doc/bugs/osm_sometimes_looses_some_nodes.mdwn5
-rw-r--r--doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn8
-rw-r--r--doc/bugs/removal_of_transient_pages.mdwn46
-rw-r--r--doc/bugs/renaming_a_page_destroyed_some_links.mdwn12
-rw-r--r--doc/bugs/toc_displays_headings_from_sidebar.mdwn3
-rw-r--r--doc/bugs/trail_excess_dependencies.mdwn95
-rw-r--r--doc/bugs/trail_shows_on_cgi_pages.mdwn3
-rw-r--r--doc/bugs/trail_test_suite_failures.mdwn97
-rw-r--r--doc/bugs/transient_autocreated_tagbase_is_not_transient_autoindexed.mdwn26
-rw-r--r--doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn18
-rw-r--r--doc/bugs/wrong_link_in_recentchanges_when_reverting_an_ikiwiki_outside_git_root.mdwn5
-rw-r--r--doc/bugs/yaml:xs_codependency_not_listed.mdwn13
-rw-r--r--doc/contact.mdwn2
-rw-r--r--doc/convert.mdwn4
-rw-r--r--doc/css_market.mdwn4
-rw-r--r--doc/examples/blog/posts.mdwn2
-rw-r--r--doc/examples/softwaresite/bugs/hghg.mdwn1
-rw-r--r--doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__.mdwn3
-rw-r--r--doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_1_8a5acbb6234104b607c8c4cf16124ae4._comment8
-rw-r--r--doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_2_155e5823860a91989647ede8b5c9224a._comment16
-rw-r--r--doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_3_317f1202a3da1bfc845d4becbac4bba8._comment10
-rw-r--r--doc/forum/Attachment_and_sub-directory.mdwn5
-rw-r--r--doc/forum/Background_picture_and_css.mdwn8
-rw-r--r--doc/forum/CGI_script_and_HTTPS.mdwn29
-rw-r--r--doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment43
-rw-r--r--doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn4
-rw-r--r--doc/forum/Calendar:_listing_multiple_entries_per_day/comment_4_4be39c2043821848d4b25d0bf946a718._comment15
-rw-r--r--doc/forum/Calendar:_listing_multiple_entries_per_day/comment_5_de545ebb6376066674ef2aaae4757b9c._comment97
-rw-r--r--doc/forum/Can_I_have_different_favicons_for_each_folder__63__/comment_2_b8ccd3c29249eca73766f567bce12569._comment8
-rw-r--r--doc/forum/Can_not_advance_past_first_page_of_results_using_search_plugin.mdwn26
-rw-r--r--doc/forum/Commiting_all_moderated_comments_into_special_branch__63__.mdwn8
-rw-r--r--doc/forum/Commiting_all_moderated_comments_into_special_branch__63__/comment_1_8403e8ff9c5c8dddb6d744632322f7bc._comment12
-rw-r--r--doc/forum/Empty_sha1sum_messages.mdwn11
-rw-r--r--doc/forum/Empty_sha1sum_messages/comment_1_b260b5e6b4c4f4c203b01183fee9fd69._comment10
-rw-r--r--doc/forum/Empty_sha1sum_messages/comment_2_d6a47838a3c81d0a75e6fc22e786c976._comment10
-rw-r--r--doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name.mdwn11
-rw-r--r--doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_1_66c321b9eb618d20872cee7d6ca9e44c._comment8
-rw-r--r--doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_2_80296d67c7f1dd75b56b85c14f5efa3b._comment12
-rw-r--r--doc/forum/Error:___34__do__34___parameter_missing.mdwn13
-rw-r--r--doc/forum/Error:___34__do__34___parameter_missing/comment_1_3a51c303ba1670f1567f323349b53837._comment16
-rw-r--r--doc/forum/Error:___34__do__34___parameter_missing/comment_2_c5f24a8c4d2de0267cf0de1908480e82._comment12
-rw-r--r--doc/forum/Everyone_can_remove_comments.mdwn1
-rw-r--r--doc/forum/Google_searches_of_ikiwiki.info_are_broken._:__40__.mdwn14
-rw-r--r--doc/forum/How_to_add_a_mouse-over_pop-up_label_for_a_text__63__.mdwn8
-rw-r--r--doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn3
-rw-r--r--doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment8
-rw-r--r--doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn14
-rw-r--r--doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment23
-rw-r--r--doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment23
-rw-r--r--doc/forum/How_to_change_registration_page/comment_2_8176ef231cf901802fc60b6d414018e6._comment8
-rw-r--r--doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__.mdwn26
-rw-r--r--doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__/comment_1_d20ee1d8d7a3e77a445f8b887e807119._comment11
-rw-r--r--doc/forum/How_to_format___91____91__foobar__93____93___in_code_blocks__63__/comment_1_ad000d39fd1dc05aa8ef6eb19d8d999b._comment8
-rw-r--r--doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn26
-rw-r--r--doc/forum/How_to_inline_a_page_from_another_git_repository.mdwn5
-rw-r--r--doc/forum/How_to_set_the_meta_author_field_from_user_name__63__.mdwn3
-rw-r--r--doc/forum/How_to_set_the_meta_author_field_from_user_name__63__/comment_1_0906e1f3eb8b826a7730233b95cb5ddd._comment10
-rw-r--r--doc/forum/How_to_set_up_git_repository_hook___63__.mdwn19
-rw-r--r--doc/forum/How_to_show_recent_changes_for_individual_pages__63__.mdwn1
-rw-r--r--doc/forum/How_to_show_recent_changes_for_individual_pages__63__/comment_1_cd34affc6883f4e4bc5e7e7b711cc8ba._comment10
-rw-r--r--doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn13
-rw-r--r--doc/forum/Include_attachment_in_a_page.mdwn9
-rw-r--r--doc/forum/Include_attachment_in_a_page/comment_1_275aad6ca3b2972749b7f6636b130035._comment12
-rw-r--r--doc/forum/Multiple_urls.mdwn8
-rw-r--r--doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment22
-rw-r--r--doc/forum/Need_something_more_powerful_than_Exclude/comment_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment9
-rw-r--r--doc/forum/Need_something_more_powerful_than_Exclude/comment_6_1dccdfebad31446200213a2cae25f0e2._comment10
-rw-r--r--doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_3_f581afcdb4481ea5d65bcc33bdbab99a._comment25
-rw-r--r--doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_4_b0d39d30852bca1525ab9612a7532670._comment8
-rw-r--r--doc/forum/Parent_Links_all_link_to_root.mdwn18
-rw-r--r--doc/forum/Parent_Links_all_link_to_root/comment_1_4b5ed25cceb7740f64ee08aba00a1d91._comment8
-rw-r--r--doc/forum/Problem_with_gitweb.mdwn3
-rw-r--r--doc/forum/Problem_with_gitweb/comment_2_23cc0d87448d3cbdac20a005e9191589._comment10
-rw-r--r--doc/forum/Problem_with_gitweb/comment_3_697c6038009249e6a49d9e458a5ba271._comment47
-rw-r--r--doc/forum/Problem_with_gitweb/comment_3_6a5b96f7e0d6b169c090e3df7281d938._comment8
-rw-r--r--doc/forum/Problem_with_gitweb/comment_5_8a79b879205bd265d54e30f0eee2ac63._comment8
-rw-r--r--doc/forum/Problem_with_local_git_commit.mdwn42
-rw-r--r--doc/forum/See_rendered_old_revisions_via_pagehistory.mdwn1
-rw-r--r--doc/forum/Setting_http__95__proxy.mdwn22
-rw-r--r--doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment20
-rw-r--r--doc/forum/Slow_ikiwiki_after_first_run.mdwn1
-rw-r--r--doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment10
-rw-r--r--doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment8
-rw-r--r--doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn9
-rw-r--r--doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment49
-rw-r--r--doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__.mdwn6
-rw-r--r--doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__/comment_1_cd5ea3aac8a59793ece5bf01a6190b53._comment9
-rw-r--r--doc/forum/access_restrictions:_for_extranet.mdwn8
-rw-r--r--doc/forum/access_restrictions:_for_extranet/comment_1_a0666c3c15661fb0fff70f313cd0d47d._comment29
-rw-r--r--doc/forum/access_restrictions:_for_extranet/comment_2_563040aa099c9366dc5701eb4bc9c10d._comment20
-rw-r--r--doc/forum/attachments_fail_to_upload.mdwn8
-rw-r--r--doc/forum/attachments_fail_to_upload/comment_1_577adde1dfa49463dfa8e169c462fc42._comment10
-rw-r--r--doc/forum/attachments_fail_to_upload/comment_2_473f38c6d523496fac8dad13ac6d20c3._comment12
-rw-r--r--doc/forum/attachments_fail_to_upload/comment_3_799a2f1b7b259157e97fd31ec76fb845._comment10
-rw-r--r--doc/forum/attachments_fail_to_upload/comment_4_e37d1497acafd3fda547462f000636e3._comment8
-rw-r--r--doc/forum/attachments_fail_to_upload/comment_5_da03f9c4917cb1ef52de984b8ba86b68._comment11
-rw-r--r--doc/forum/attachments_fail_to_upload/comment_6_04498946a300ddb652dec73c2950f48f._comment19
-rw-r--r--doc/forum/build_error:_Cannot_decode_string_with_wide_characters.mdwn12
-rw-r--r--doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_1_83fbb415dd3ae6a19ed5ea5f82065c28._comment8
-rw-r--r--doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_2_d258536c98538d4744f66eb3132439a9._comment20
-rw-r--r--doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_3_d62173d0ae220ab7b063631952856587._comment10
-rw-r--r--doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_4_d5d0174e09a94359c23fd9c006a22bbc._comment50
-rw-r--r--doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment8
-rw-r--r--doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn3
-rw-r--r--doc/forum/how_to_login_as_admin/comment_1_295e130c6400a2d7336758e82bcd5647._comment10
-rw-r--r--doc/forum/howto_install_the_pagedown_plugin.mdwn1
-rw-r--r--doc/forum/howto_install_the_pagedown_plugin/comment_1_158fbcef24d20920c40968da8f10442a._comment8
-rw-r--r--doc/forum/ikiwiki_--setup_creates_tmp__47___directory_in_destdir.mdwn10
-rw-r--r--doc/forum/ikiwiki_and_big_files/comment_1_df8a9f4249af435cc335f77768a3278d._comment8
-rw-r--r--doc/forum/ikiwiki_and_big_files/comment_2_2d996f1124aedc10f345139c3d8b11df._comment19
-rw-r--r--doc/forum/ikiwiki_and_big_files/comment_3_dfbd38e2b457ea3c4f70266dbf8fbeab._comment8
-rw-r--r--doc/forum/links_to_diff_on_recentchanges__63__.mdwn1
-rw-r--r--doc/forum/links_to_diff_on_recentchanges__63__/comment_1_1dbc723cc2794f6d45de9cbd2fc2e0fd._comment8
-rw-r--r--doc/forum/links_to_diff_on_recentchanges__63__/comment_2_4349c85d92cf9c1acf2e7678371ab12a._comment10
-rw-r--r--doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment44
-rw-r--r--doc/forum/po_plugin_doesn__39__t_create_po_files___40__only_pot__41__..mdwn11
-rw-r--r--doc/forum/possible_utf-8_problem__63__.mdwn26
-rw-r--r--doc/forum/problem_with_git_after_a_commit_of_ikiwiki.mdwn4
-rw-r--r--doc/forum/problem_with_git_after_a_commit_of_ikiwiki/comment_1_2b9986717769419a8ae0f730c36b7e65._comment22
-rw-r--r--doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__.mdwn4
-rw-r--r--doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment7
-rw-r--r--doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment8
-rw-r--r--doc/git.mdwn10
-rw-r--r--doc/ikiwiki-calendar.mdwn2
-rw-r--r--doc/ikiwiki-calendar/discussion.mdwn36
-rw-r--r--doc/ikiwiki-makerepo.mdwn2
-rw-r--r--doc/ikiwiki-update-wikilist.mdwn7
-rw-r--r--doc/ikiwiki/directive/edittemplate.mdwn16
-rw-r--r--doc/ikiwiki/directive/graph.mdwn4
-rw-r--r--doc/ikiwiki/directive/graph/discussion.mdwn27
-rw-r--r--doc/ikiwiki/directive/img/discussion.mdwn4
-rw-r--r--doc/ikiwiki/directive/inline.mdwn13
-rw-r--r--doc/ikiwiki/directive/map/discussion.mdwn2
-rw-r--r--doc/ikiwiki/directive/meta.mdwn13
-rw-r--r--doc/ikiwiki/directive/meta/discussion.mdwn69
-rw-r--r--doc/ikiwiki/directive/osm.mdwn69
-rw-r--r--doc/ikiwiki/directive/osm/discussion.mdwn13
-rw-r--r--doc/ikiwiki/directive/poll.mdwn2
-rw-r--r--doc/ikiwiki/directive/sidebar/discussion.mdwn10
-rw-r--r--doc/ikiwiki/directive/table.mdwn5
-rw-r--r--doc/ikiwiki/directive/trailitem.mdwn (renamed from doc/plugins/contrib/ikiwiki/directive/trailitem.mdwn)2
-rw-r--r--doc/ikiwiki/directive/trailitems.mdwn (renamed from doc/plugins/contrib/ikiwiki/directive/trailitems.mdwn)9
-rw-r--r--doc/ikiwiki/directive/traillink.mdwn (renamed from doc/plugins/contrib/ikiwiki/directive/traillink.mdwn)2
-rw-r--r--doc/ikiwiki/directive/trailoptions.mdwn (renamed from doc/plugins/contrib/ikiwiki/directive/trailoptions.mdwn)2
-rw-r--r--doc/ikiwiki/directive/waypoint.mdwn6
-rw-r--r--doc/ikiwikiusers.mdwn21
-rw-r--r--doc/install.mdwn5
-rw-r--r--doc/news/cia.mdwn4
-rw-r--r--doc/news/openid.mdwn2
-rw-r--r--doc/news/version_3.20111107.mdwn12
-rw-r--r--doc/news/version_3.20111229.mdwn7
-rw-r--r--doc/news/version_3.20120109.mdwn9
-rw-r--r--doc/news/version_3.20120115.mdwn5
-rw-r--r--doc/news/version_3.20120202.mdwn11
-rw-r--r--doc/news/version_3.20120629.mdwn4
-rw-r--r--doc/news/version_3.20120725.mdwn13
-rw-r--r--doc/news/version_3.20121016.mdwn17
-rw-r--r--doc/news/version_3.20121017.mdwn3
-rw-r--r--doc/news/version_3.20121212.mdwn6
-rw-r--r--doc/plugins/anonok.mdwn2
-rw-r--r--doc/plugins/blogspam.mdwn2
-rw-r--r--doc/plugins/camelcase.mdwn3
-rw-r--r--doc/plugins/comments.mdwn2
-rw-r--r--doc/plugins/comments/discussion.mdwn13
-rw-r--r--doc/plugins/contrib/album.mdwn26
-rw-r--r--doc/plugins/contrib/asymptote.mdwn141
-rw-r--r--doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn27
-rw-r--r--doc/plugins/contrib/created_in_future.mdwn18
-rw-r--r--doc/plugins/contrib/getfield/discussion.mdwn47
-rw-r--r--doc/plugins/contrib/googlemaps.mdwn2
-rw-r--r--doc/plugins/contrib/ikiwiki/directive/trailinline.mdwn11
-rw-r--r--doc/plugins/contrib/ikiwiki/directive/ymlfront/discussion.mdwn37
-rw-r--r--doc/plugins/contrib/jscalendar.mdwn45
-rw-r--r--doc/plugins/contrib/localfavicon.mdwn7
-rw-r--r--doc/plugins/contrib/monthcalendar.mdwn23
-rw-r--r--doc/plugins/contrib/report/discussion.mdwn5
-rw-r--r--doc/plugins/contrib/syntax.mdwn2
-rw-r--r--doc/plugins/contrib/trail.mdwn133
-rw-r--r--doc/plugins/google.mdwn2
-rw-r--r--doc/plugins/headinganchors/discussion.mdwn16
-rw-r--r--doc/plugins/highlight/discussion.mdwn2
-rw-r--r--doc/plugins/httpauth.mdwn4
-rw-r--r--doc/plugins/lockedit.mdwn2
-rw-r--r--doc/plugins/mirrorlist.mdwn15
-rw-r--r--doc/plugins/moderatedcomments.mdwn2
-rw-r--r--doc/plugins/notifyemail.mdwn14
-rw-r--r--doc/plugins/notifyemail/discussion.mdwn5
-rw-r--r--doc/plugins/osm.mdwn31
-rw-r--r--doc/plugins/po.mdwn18
-rw-r--r--doc/plugins/poll/discussion.mdwn1
-rw-r--r--doc/plugins/recentchangesdiff.mdwn8
-rw-r--r--doc/plugins/recentchangesdiff/Discussion.mdwn20
-rw-r--r--doc/plugins/search.mdwn2
-rw-r--r--doc/plugins/sidebar/discussion.mdwn7
-rw-r--r--doc/plugins/teximg.mdwn3
-rw-r--r--doc/plugins/theme.mdwn4
-rw-r--r--doc/plugins/trail.mdwn76
-rw-r--r--doc/plugins/trail/discussion.mdwn105
-rw-r--r--doc/plugins/type/comments.mdwn1
-rw-r--r--doc/plugins/websetup.mdwn2
-rw-r--r--doc/plugins/wmd.mdwn2
-rw-r--r--doc/plugins/write.mdwn151
-rw-r--r--doc/plugins/write/tutorial.mdwn20
-rw-r--r--doc/plugins/write/tutorial/discussion.mdwn20
-rw-r--r--doc/rcs/git.mdwn35
-rw-r--r--doc/roadmap.mdwn10
-rw-r--r--doc/sandbox.mdwn111
-rw-r--r--doc/sandbox/Fantasia.mdwn10
-rw-r--r--doc/sandbox/Hey__33__.mdwn1
-rw-r--r--doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn1
-rw-r--r--doc/sandbox/Mooooo.mdwn1
-rw-r--r--doc/sandbox/NewPage.mdwn1
-rw-r--r--doc/sandbox/Nur_so..mdwn1
-rw-r--r--doc/sandbox/Test_it.mdwn1
-rw-r--r--doc/sandbox/Testing_blog_entry.mdwn7
-rw-r--r--doc/sandbox/adding_a_new_post.mdwn3
-rw-r--r--doc/sandbox/ainvyu.mdwn14
-rw-r--r--doc/sandbox/bullet_list_and_code_test.mdwn12
-rw-r--r--doc/sandbox/danc.mdwn1
-rw-r--r--doc/sandbox/dateenumeration.mdwn4
-rw-r--r--doc/sandbox/hey.mdwn1
-rw-r--r--doc/sandbox/plop.mdwn1
-rw-r--r--doc/sandbox/revert_me.mdwn1
-rw-r--r--doc/sandbox/sandbocen.mdwn5
-rw-r--r--doc/sandbox/sidebar.mdwn1
-rw-r--r--doc/security.mdwn21
-rw-r--r--doc/setup.mdwn7
-rw-r--r--doc/shortcuts.mdwn12
-rw-r--r--doc/soc/application.mdwn2
-rw-r--r--doc/style.css47
-rw-r--r--doc/templates.mdwn5
-rw-r--r--doc/theme_market.mdwn11
-rw-r--r--doc/themes.mdwn5
-rw-r--r--doc/themes/discussion.mdwn2
-rw-r--r--doc/themes/monochrome_small.pngbin0 -> 21054 bytes
-rw-r--r--doc/tipjar.mdwn1
-rw-r--r--doc/tips/Adding_Disqus_to_your_wiki.mdwn4
-rw-r--r--doc/tips/Importing_posts_from_Wordpress/discussion.mdwn15
-rw-r--r--doc/tips/JavaScript_to_add_index.html_to_file:_links/discussion.mdwn2
-rw-r--r--doc/tips/Make_calendar_start_week_on_Monday/discussion.mdwn1
-rw-r--r--doc/tips/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn3
-rw-r--r--doc/tips/convert_blogger_blogs_to_ikiwiki.mdwn2
-rw-r--r--doc/tips/convert_moinmoin_to_ikiwiki.mdwn109
-rw-r--r--doc/tips/convert_moinmoin_to_ikiwiki/discussion.mdwn5
-rw-r--r--doc/tips/dot_cgi.mdwn43
-rw-r--r--doc/tips/dot_cgi/discussion.mdwn5
-rw-r--r--doc/tips/ikiwiki_as_a_requirements_management_tool/discussion.mdwn3
-rw-r--r--doc/tips/ikiwiki_via_gopher/discussion.mdwn8
-rw-r--r--doc/todo/Add_basename_in_edittemplate.mdwn8
-rw-r--r--doc/todo/Add_space_before_slash_in_parent_links.mdwn73
-rw-r--r--doc/todo/BrowserID.mdwn25
-rw-r--r--doc/todo/Calendar:_listing_multiple_entries_per_day_.mdwn92
-rw-r--r--doc/todo/FormattingHelp_should_open_new_window.mdwn1
-rw-r--r--doc/todo/Render_multiple_destinations_from_one_source.mdwn35
-rw-r--r--doc/todo/Restrict_page_viewing.mdwn3
-rw-r--r--doc/todo/Set_templates_for_whole_sections_of_the_site.mdwn2
-rw-r--r--doc/todo/Track_Markdown_Standardisation_Efforts.mdwn7
-rw-r--r--doc/todo/Using_page_titles_in_internal_links.mdwn3
-rw-r--r--doc/todo/Zoned_ikiwiki.mdwn64
-rw-r--r--doc/todo/ad-hoc_plugins.mdwn66
-rw-r--r--doc/todo/allow_TMPL__95__LOOP_in_template_directives.mdwn278
-rw-r--r--doc/todo/allow_banning_a_user_when_moderating_a_comment.mdwn1
-rw-r--r--doc/todo/anti-spam_protection.mdwn2
-rw-r--r--doc/todo/avatar/discussion.mdwn1
-rw-r--r--doc/todo/be_more_selective_about_running_hooks.mdwn68
-rw-r--r--doc/todo/break_up_page_template_into_subfiles.mdwn36
-rw-r--r--doc/todo/custom_location_for_openlayers.mdwn17
-rw-r--r--doc/todo/do_not_make_links_backwards.mdwn95
-rw-r--r--doc/todo/ease_archivepage_styling.mdwn59
-rw-r--r--doc/todo/etherpad_support.mdwn22
-rw-r--r--doc/todo/fastcgi_or_modperl_installation_instructions.mdwn6
-rw-r--r--doc/todo/feed_enhancements_for_inline_pages.mdwn2
-rw-r--r--doc/todo/headless_git_branches.mdwn14
-rw-r--r--doc/todo/improved_mediawiki_support.mdwn9
-rw-r--r--doc/todo/inline_directive_should_support_pagination.mdwn8
-rw-r--r--doc/todo/internal_definition_list_support.mdwn54
-rw-r--r--doc/todo/linkbase.mdwn16
-rw-r--r--doc/todo/lucene_search_engine.mdwn1
-rw-r--r--doc/todo/mdwn_preview.mdwn34
-rw-r--r--doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn7
-rw-r--r--doc/todo/monochrome_theme.mdwn48
-rw-r--r--doc/todo/org_mode.mdwn5
-rw-r--r--doc/todo/osm__95__optimisations__95__and__95__fixes.mdwn27
-rw-r--r--doc/todo/osm_arbitrary_layers.mdwn43
-rw-r--r--doc/todo/pdf_output.mdwn2
-rw-r--r--doc/todo/per_page_ACLs.mdwn18
-rw-r--r--doc/todo/please_add_some_table_styles.mdwn8
-rw-r--r--doc/todo/provide_inline_diffs_in_recentchanges.mdwn23
-rw-r--r--doc/todo/publishing_in_the_future.mdwn127
-rw-r--r--doc/todo/recentchanges_feed_with_comment.mdwn5
-rw-r--r--doc/todo/recommend_libtext-markdown-discount_instead_of_depending.mdwn10
-rw-r--r--doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn4
-rw-r--r--doc/todo/sort_parameter_for_map_plugin_and_directive.mdwn46
-rw-r--r--doc/todo/sort_parameter_for_map_plugin_and_directive/incomplete_patch.pl.pl77
-rw-r--r--doc/todo/sort_parameter_for_map_plugin_and_directive/python_algorithms.py86
-rw-r--r--doc/todo/usedirs__95__redir_proposed_additional_module.mdwn8
-rw-r--r--doc/todo/wikiwyg.mdwn7
-rw-r--r--doc/todo/wikiwyg/discussion.mdwn3
-rw-r--r--doc/usage.mdwn6
-rw-r--r--doc/users/GiuseppeBilotta.mdwn6
-rw-r--r--doc/users/LucaCapello.mdwn5
-rw-r--r--doc/users/Olea.mdwn4
-rw-r--r--doc/users/OscarMorante.mdwn3
-rw-r--r--doc/users/RickOwens.mdwn1
-rw-r--r--doc/users/acathur.mdwn3
-rw-r--r--doc/users/adamshand.mdwn10
-rw-r--r--doc/users/anarcat.mdwn30
-rw-r--r--doc/users/chrismgray.mdwn4
-rw-r--r--doc/users/hb/discussion.mdwn1
-rw-r--r--doc/users/iustin.mdwn1
-rw-r--r--doc/users/joshtriplett/discussion.mdwn2
-rw-r--r--doc/users/mathdesc.mdwn190
-rw-r--r--doc/users/pdurbin.mdwn1
-rw-r--r--doc/users/tbm.mdwn3
-rw-r--r--doc/users/ttw.mdwn1
-rw-r--r--doc/users/undx.mdwn7
-rw-r--r--doc/users/wiebel.mdwn5
-rwxr-xr-xikiwiki-update-wikilist2
-rw-r--r--ikiwiki.spec3
-rwxr-xr-x[-rw-r--r--]plugins/proxy.py129
-rwxr-xr-xplugins/rst27
-rw-r--r--po/Makefile17
-rw-r--r--po/bg.po275
-rw-r--r--po/cs.po278
-rw-r--r--po/da.po278
-rw-r--r--po/de.po278
-rw-r--r--po/es.po278
-rw-r--r--po/fr.po278
-rw-r--r--po/gu.po275
-rw-r--r--po/ikiwiki.pot247
-rw-r--r--po/it.po278
-rw-r--r--po/pl.po275
-rw-r--r--po/sv.po275
-rw-r--r--po/tr.po275
-rw-r--r--po/vi.po275
-rwxr-xr-xt/prune.t23
-rwxr-xr-xt/syntax.t5
-rwxr-xr-xt/trail.t292
-rw-r--r--templates/archivepage.tmpl8
-rw-r--r--templates/atompage.tmpl2
-rw-r--r--templates/change.tmpl9
-rw-r--r--templates/editcomment.tmpl6
-rw-r--r--templates/editpage.tmpl5
-rw-r--r--templates/notifyemail.tmpl9
-rw-r--r--templates/page.tmpl13
-rw-r--r--templates/trails.tmpl23
-rw-r--r--themes/actiontabs/style.css5
-rw-r--r--themes/blueview/style.css5
-rw-r--r--themes/monochrome/gradient.pngbin0 -> 2466 bytes
-rw-r--r--themes/monochrome/style.css53
-rw-r--r--underlays/attachment/ikiwiki/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 180 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-bg_glass_55_fbf9ee_1x400.pngbin0 -> 120 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 105 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-bg_glass_75_dadada_1x400.pngbin0 -> 111 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-bg_glass_95_fef1ec_1x400.pngbin0 -> 119 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-icons_2e83ff_256x240.pngbin0 -> 4369 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-icons_454545_256x240.pngbin0 -> 4369 bytes
-rw-r--r--underlays/attachment/ikiwiki/images/ui-icons_cd0a0a_256x240.pngbin0 -> 4369 bytes
-rw-r--r--underlays/openid-selector/ikiwiki/openid/openid-jquery.js2
-rw-r--r--underlays/osm/ikiwiki/images/osm.pngbin0 -> 2982 bytes
-rw-r--r--underlays/osm/ikiwiki/osm.js166
449 files changed, 10639 insertions, 2344 deletions
diff --git a/.gitignore b/.gitignore
index fe1c3d441..f8991a63d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ ikiwiki.out
ikiwiki-transition.out
ikiwiki-calendar.out
pm_to_blib
+/MYMETA.yml
*.man
/po/cover_db
po/po2wiki_stamp
diff --git a/Bundle/IkiWiki/Extras.pm b/Bundle/IkiWiki/Extras.pm
index d01d52e5b..0a7cd3ae3 100644
--- a/Bundle/IkiWiki/Extras.pm
+++ b/Bundle/IkiWiki/Extras.pm
@@ -35,6 +35,7 @@ HTML::Tree
Sort::Naturally
Gravatar::URL
Net::INET6Glue
+XML::Writer
=head1 AUTHOR
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 2a83777e6..52da3c112 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -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 => '',
@@ -1092,6 +1108,11 @@ sub cgiurl (@) {
join("&amp;", map $_."=".uri_escape_utf8($params{$_}), keys %params);
}
+sub cgiurl_abs (@) {
+ eval q{use URI};
+ URI->new_abs(cgiurl(@_), $config{cgiurl});
+}
+
sub baseurl (;$) {
my $page=shift;
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 62383b6fd..5baa6c179 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -131,7 +131,7 @@ sub needsignin ($$) {
if (! defined $session->param("name") ||
! userinfo_get($session->param("name"), "regdate")) {
- $session->param(postsignin => $ENV{QUERY_STRING});
+ $session->param(postsignin => $q->query_string);
cgi_signin($q, $session);
cgi_savesession($session);
exit;
diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 5e22609c9..89da5c453 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -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
@@ -201,7 +200,7 @@ sub migrate_to_internal {
if (-e $oldoutput) {
require IkiWiki::Render;
debug("removing output file $oldoutput");
- IkiWiki::prune($oldoutput);
+ IkiWiki::prune($oldoutput, $config{destdir});
}
}
diff --git a/IkiWiki/Plugin/amazon_s3.pm b/IkiWiki/Plugin/amazon_s3.pm
index cfd8cd347..a9da6bf12 100644
--- a/IkiWiki/Plugin/amazon_s3.pm
+++ b/IkiWiki/Plugin/amazon_s3.pm
@@ -232,8 +232,9 @@ sub writefile ($$$;$$) {
}
# This is a wrapper around the real prune.
-sub prune ($) {
+sub prune ($;$) {
my $file=shift;
+ my $up_to=shift;
my @keys=IkiWiki::Plugin::amazon_s3::file2keys($file);
@@ -250,7 +251,7 @@ sub prune ($) {
}
}
- return $IkiWiki::Plugin::amazon_s3::subs{'IkiWiki::prune'}->($file);
+ return $IkiWiki::Plugin::amazon_s3::subs{'IkiWiki::prune'}->($file, $up_to);
}
1
diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm
index 5a180cd5c..aea70429d 100644
--- a/IkiWiki/Plugin/attachment.pm
+++ b/IkiWiki/Plugin/attachment.pm
@@ -148,7 +148,7 @@ sub formbuilder (@) {
$f=Encode::decode_utf8($f);
$f=~s/^$page\///;
if (IkiWiki::isinlinableimage($f) &&
- UNIVERSAL::can("IkiWiki::Plugin::img", "import")) {
+ IkiWiki::Plugin::img->can("import")) {
$add.='[[!img '.$f.' align="right" size="" alt=""]]';
}
else {
@@ -286,7 +286,7 @@ sub attachments_save {
}
return unless @attachments;
require IkiWiki::Render;
- IkiWiki::prune($dir);
+ IkiWiki::prune($dir, $config{wikistatedir}."/attachments");
# Check the attachments in and trigger a wiki refresh.
if ($config{rcs}) {
diff --git a/IkiWiki/Plugin/bzr.pm b/IkiWiki/Plugin/bzr.pm
index 3bc4ea8dd..72552abcc 100644
--- a/IkiWiki/Plugin/bzr.pm
+++ b/IkiWiki/Plugin/bzr.pm
@@ -5,6 +5,7 @@ use warnings;
use strict;
use IkiWiki;
use Encode;
+use URI::Escape q{uri_escape_utf8};
use open qw{:utf8 :std};
sub import {
@@ -242,8 +243,10 @@ sub rcs_recentchanges ($) {
# Skip source name in renames
$filename =~ s/^.* => //;
+ my $efilename = uri_escape_utf8($filename);
+
my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : "";
- $diffurl =~ s/\[\[file\]\]/$filename/go;
+ $diffurl =~ s/\[\[file\]\]/$efilename/go;
$diffurl =~ s/\[\[file-id\]\]/$fileid/go;
$diffurl =~ s/\[\[r2\]\]/$info->{revno}/go;
diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
index fc497b3c7..d443198f6 100644
--- a/IkiWiki/Plugin/calendar.pm
+++ b/IkiWiki/Plugin/calendar.pm
@@ -13,7 +13,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
require 5.002;
package IkiWiki::Plugin::calendar;
diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm
index 91a482ed6..c00bf5275 100644
--- a/IkiWiki/Plugin/comments.pm
+++ b/IkiWiki/Plugin/comments.pm
@@ -301,7 +301,8 @@ sub editcomment ($$) {
my @buttons = (POST_COMMENT, PREVIEW, CANCEL);
my $form = CGI::FormBuilder->new(
- fields => [qw{do sid page subject editcontent type author url}],
+ fields => [qw{do sid page subject editcontent type author
+ email url subscribe anonsubscribe}],
charset => 'utf-8',
method => 'POST',
required => [qw{editcontent}],
@@ -346,18 +347,35 @@ sub editcomment ($$) {
$form->field(name => "type", value => $type, force => 1,
type => 'select', options => \@page_types);
- $form->tmpl_param(username => $session->param('name'));
+ my $username=$session->param('name');
+ $form->tmpl_param(username => $username);
+
+ $form->field(name => "subscribe", type => 'hidden');
+ $form->field(name => "anonsubscribe", type => 'hidden');
+ if (IkiWiki::Plugin::notifyemail->can("subscribe")) {
+ if (defined $username) {
+ $form->field(name => "subscribe", type => "checkbox",
+ options => [gettext("email replies to me")]);
+ }
+ elsif (IkiWiki::Plugin::passwordauth->can("anonuser")) {
+ $form->field(name => "anonsubscribe", type => "checkbox",
+ options => [gettext("email replies to me")]);
+ }
+ }
if ($config{comments_allowauthor} and
! defined $session->param('name')) {
$form->tmpl_param(allowauthor => 1);
$form->field(name => 'author', type => 'text', size => '40');
+ $form->field(name => 'email', type => 'text', size => '40');
$form->field(name => 'url', type => 'text', size => '40');
}
else {
$form->tmpl_param(allowauthor => 0);
$form->field(name => 'author', type => 'hidden', value => '',
force => 1);
+ $form->field(name => 'email', type => 'hidden', value => '',
+ force => 1);
$form->field(name => 'url', type => 'hidden', value => '',
force => 1);
}
@@ -425,10 +443,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}) {
@@ -490,6 +505,20 @@ sub editcomment ($$) {
if ($form->submitted eq POST_COMMENT && $form->validate) {
IkiWiki::checksessionexpiry($cgi, $session);
+
+ if (IkiWiki::Plugin::notifyemail->can("subscribe")) {
+ my $subspec="comment($page)";
+ if (defined $username &&
+ length $form->field("subscribe")) {
+ IkiWiki::Plugin::notifyemail::subscribe(
+ $username, $subspec);
+ }
+ elsif (length $form->field("email") &&
+ length $form->field("anonsubscribe")) {
+ IkiWiki::Plugin::notifyemail::anonsubscribe(
+ $form->field("email"), $subspec);
+ }
+ }
$postcomment=1;
my $ok=IkiWiki::check_content(content => $form->field('editcontent'),
@@ -575,7 +604,8 @@ sub editcomment ($$) {
sub getavatar ($) {
my $user=shift;
-
+ return undef unless defined $user;
+
my $avatar;
eval q{use Libravatar::URL};
if (! $@) {
@@ -632,9 +662,11 @@ sub commentmoderation ($$) {
my $page=IkiWiki::dirname($f);
my $file="$config{srcdir}/$f";
+ my $filedir=$config{srcdir};
if (! -e $file) {
# old location
$file="$config{wikistatedir}/comments_pending/".$f;
+ $filedir="$config{wikistatedir}/comments_pending";
}
if ($action eq 'Accept') {
@@ -649,7 +681,7 @@ sub commentmoderation ($$) {
}
require IkiWiki::Render;
- IkiWiki::prune($file);
+ IkiWiki::prune($file, $filedir);
}
}
diff --git a/IkiWiki/Plugin/conditional.pm b/IkiWiki/Plugin/conditional.pm
index 026078b3c..0a3d7fb4c 100644
--- a/IkiWiki/Plugin/conditional.pm
+++ b/IkiWiki/Plugin/conditional.pm
@@ -4,7 +4,6 @@ package IkiWiki::Plugin::conditional;
use warnings;
use strict;
use IkiWiki 3.00;
-use UNIVERSAL;
sub import {
hook(type => "getsetup", id => "conditional", call => \&getsetup);
diff --git a/IkiWiki/Plugin/cvs.pm b/IkiWiki/Plugin/cvs.pm
index 42812ddef..759ea1c23 100644
--- a/IkiWiki/Plugin/cvs.pm
+++ b/IkiWiki/Plugin/cvs.pm
@@ -33,6 +33,7 @@ use warnings;
use strict;
use IkiWiki;
+use URI::Escape q{uri_escape_utf8};
use File::chdir;
@@ -313,7 +314,8 @@ sub rcs_recentchanges ($) {
$oldrev =~ s/INITIAL/0/;
$newrev =~ s/\(DEAD\)//;
my $diffurl = defined $config{diffurl} ? $config{diffurl} : "";
- $diffurl=~s/\[\[file\]\]/$page/g;
+ my $epage = uri_escape_utf8($page);
+ $diffurl=~s/\[\[file\]\]/$epage/g;
$diffurl=~s/\[\[r1\]\]/$oldrev/g;
$diffurl=~s/\[\[r2\]\]/$newrev/g;
unshift @pages, {
diff --git a/IkiWiki/Plugin/darcs.pm b/IkiWiki/Plugin/darcs.pm
index 1313041e7..646f65df1 100644
--- a/IkiWiki/Plugin/darcs.pm
+++ b/IkiWiki/Plugin/darcs.pm
@@ -3,6 +3,7 @@ package IkiWiki::Plugin::darcs;
use warnings;
use strict;
+use URI::Escape q{uri_escape_utf8};
use IkiWiki;
sub import {
@@ -336,7 +337,8 @@ sub rcs_recentchanges ($) {
foreach my $f (@files) {
my $d = defined $config{'diffurl'} ? $config{'diffurl'} : "";
- $d =~ s/\[\[file\]\]/$f/go;
+ my $ef = uri_escape_utf8($f);
+ $d =~ s/\[\[file\]\]/$ef/go;
$d =~ s/\[\[hash\]\]/$hash/go;
push @pg, {
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index 54051c58c..d15607990 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -39,7 +39,7 @@ sub refresh () {
}
if ($delete) {
debug(sprintf(gettext("removing old preview %s"), $file));
- IkiWiki::prune("$config{destdir}/$file");
+ IkiWiki::prune("$config{destdir}/$file", $config{destdir});
}
}
elsif (defined $mtime) {
@@ -64,7 +64,8 @@ sub cgi_editpage ($$) {
decode_cgi_utf8($q);
- my @fields=qw(do rcsinfo subpage from page type editcontent editmessage);
+ my @fields=qw(do rcsinfo subpage from page type editcontent
+ editmessage subscribe);
my @buttons=("Save Page", "Preview", "Cancel");
eval q{use CGI::FormBuilder};
error($@) if $@;
@@ -157,6 +158,17 @@ sub cgi_editpage ($$) {
noimageinline => 1,
linktext => "FormattingHelp"));
+ my $cansubscribe=IkiWiki::Plugin::notifyemail->can("subscribe")
+ && IkiWiki::Plugin::comments->can("import")
+ && defined $session->param('name');
+ if ($cansubscribe) {
+ $form->field(name => "subscribe", type => "checkbox",
+ options => [gettext("email comments to me")]);
+ }
+ else {
+ $form->field(name => "subscribe", type => 'hidden');
+ }
+
my $previewing=0;
if ($form->submitted eq "Cancel") {
if ($form->field("do") eq "create" && defined $from) {
@@ -448,6 +460,12 @@ sub cgi_editpage ($$) {
# caches and get the most recent version of the page.
redirect($q, $baseurl."?updated");
}
+
+ if ($cansubscribe && length $form->field("subscribe")) {
+ my $subspec="comment($page)";
+ IkiWiki::Plugin::notifyemail::subscribe(
+ $session->param('name'), $subspec);
+ }
}
exit;
diff --git a/IkiWiki/Plugin/edittemplate.pm b/IkiWiki/Plugin/edittemplate.pm
index 061242fd8..c7f1e4fa7 100644
--- a/IkiWiki/Plugin/edittemplate.pm
+++ b/IkiWiki/Plugin/edittemplate.pm
@@ -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);
diff --git a/IkiWiki/Plugin/filecheck.pm b/IkiWiki/Plugin/filecheck.pm
index 4f4e67489..cdea5c706 100644
--- a/IkiWiki/Plugin/filecheck.pm
+++ b/IkiWiki/Plugin/filecheck.pm
@@ -48,7 +48,6 @@ sub getsetup () {
plugin => {
safe => 1,
rebuild => undef,
- section => "misc",
},
}
@@ -140,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
diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
index 3dd910cd5..3879abeae 100644
--- a/IkiWiki/Plugin/git.pm
+++ b/IkiWiki/Plugin/git.pm
@@ -5,6 +5,7 @@ use warnings;
use strict;
use IkiWiki;
use Encode;
+use URI::Escape q{uri_escape_utf8};
use open qw{:utf8 :std};
my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums
@@ -340,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.
@@ -468,13 +469,10 @@ sub git_sha1 (;$) {
# Ignore error since a non-existing file might be given.
my ($sha1) = run_or_non('git', 'rev-list', '--max-count=1', 'HEAD',
'--', $file);
- if ($sha1) {
+ if (defined $sha1) {
($sha1) = $sha1 =~ m/($sha1_pattern)/; # sha1 is untainted now
}
- else {
- debug("Empty sha1sum for '$file'.");
- }
- return defined $sha1 ? $sha1 : q{};
+ return defined $sha1 ? $sha1 : '';
}
sub rcs_update () {
@@ -617,9 +615,10 @@ sub rcs_recentchanges ($) {
my @pages;
foreach my $detail (@{ $ci->{'details'} }) {
my $file = $detail->{'file'};
+ my $efile = uri_escape_utf8($file);
my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : "";
- $diffurl =~ s/\[\[file\]\]/$file/go;
+ $diffurl =~ s/\[\[file\]\]/$efile/go;
$diffurl =~ s/\[\[sha1_parent\]\]/$ci->{'parent'}/go;
$diffurl =~ s/\[\[sha1_from\]\]/$detail->{'sha1_from'}/go;
$diffurl =~ s/\[\[sha1_to\]\]/$detail->{'sha1_to'}/go;
diff --git a/IkiWiki/Plugin/graphviz.pm b/IkiWiki/Plugin/graphviz.pm
index b9f997e04..d4018edaa 100644
--- a/IkiWiki/Plugin/graphviz.pm
+++ b/IkiWiki/Plugin/graphviz.pm
@@ -132,6 +132,7 @@ sub graph (@) {
}, "text");
$p->parse($src);
$p->eof;
+ $s=~s/\[ href= \]//g; # handle self-links
$params{src}=$s;
}
else {
diff --git a/IkiWiki/Plugin/htmlscrubber.pm b/IkiWiki/Plugin/htmlscrubber.pm
index a58a27d52..36c012c73 100644
--- a/IkiWiki/Plugin/htmlscrubber.pm
+++ b/IkiWiki/Plugin/htmlscrubber.pm
@@ -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.
diff --git a/IkiWiki/Plugin/httpauth.pm b/IkiWiki/Plugin/httpauth.pm
index cb488449d..76d574b2a 100644
--- a/IkiWiki/Plugin/httpauth.pm
+++ b/IkiWiki/Plugin/httpauth.pm
@@ -7,6 +7,7 @@ use strict;
use IkiWiki 3.00;
sub import {
+ hook(type => "checkconfig", id => "httpauth", call => \&checkconfig);
hook(type => "getsetup", id => "httpauth", call => \&getsetup);
hook(type => "auth", id => "httpauth", call => \&auth);
hook(type => "formbuilder_setup", id => "httpauth",
@@ -37,6 +38,19 @@ sub getsetup () {
rebuild => 0,
},
}
+
+sub checkconfig () {
+ if ($config{cgi} && defined $config{cgiauthurl} &&
+ keys %{$IkiWiki::hooks{auth}} < 2) {
+ # There are no other auth hooks registered, so avoid
+ # the normal signin form, and jump right to httpauth.
+ require IkiWiki::CGI;
+ inject(name => "IkiWiki::cgi_signin", call => sub ($$) {
+ my $cgi=shift;
+ redir_cgiauthurl($cgi, $cgi->query_string());
+ });
+ }
+}
sub redir_cgiauthurl ($;@) {
my $cgi=shift;
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 159cc5def..8eb033951 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -19,14 +19,14 @@ sub import {
hook(type => "checkconfig", id => "inline", call => \&checkconfig);
hook(type => "sessioncgi", id => "inline", call => \&sessioncgi);
hook(type => "preprocess", id => "inline",
- call => \&IkiWiki::preprocess_inline);
+ call => \&IkiWiki::preprocess_inline, scan => 1);
hook(type => "pagetemplate", id => "inline",
call => \&IkiWiki::pagetemplate_inline);
hook(type => "format", id => "inline", call => \&format, first => 1);
# Hook to change to do pinging since it's called late.
# This ensures each page only pings once and prevents slow
# pings interrupting page builds.
- hook(type => "change", id => "inline", call => \&IkiWiki::pingurl);
+ hook(type => "rendered", id => "inline", call => \&IkiWiki::pingurl);
}
sub getopt () {
@@ -155,6 +155,23 @@ sub preprocess_inline (@) {
if (! exists $params{pages} && ! exists $params{pagenames}) {
error gettext("missing pages parameter");
}
+
+ if (! defined wantarray) {
+ # Running in scan mode: only do the essentials
+
+ if (yesno($params{trail}) && IkiWiki::Plugin::trail->can("preprocess_trailitems")) {
+ # default to sorting age, the same as inline itself,
+ # but let the params override that
+ IkiWiki::Plugin::trail::preprocess_trailitems(sort => 'age', %params);
+ }
+
+ return;
+ }
+
+ if (yesno($params{trail}) && IkiWiki::Plugin::trail->can("preprocess_trailitems")) {
+ scalar IkiWiki::Plugin::trail::preprocess_trailitems(sort => 'age', %params);
+ }
+
my $raw=yesno($params{raw});
my $archive=yesno($params{archive});
my $rss=(($config{rss} || $config{allowrss}) && exists $params{rss}) ? yesno($params{rss}) : $config{rss};
@@ -194,8 +211,7 @@ sub preprocess_inline (@) {
}
}
- @list = map { bestlink($params{page}, $_) }
- split ' ', $params{pagenames};
+ @list = split ' ', $params{pagenames};
if (yesno($params{reverse})) {
@list=reverse(@list);
@@ -204,6 +220,8 @@ sub preprocess_inline (@) {
foreach my $p (@list) {
add_depends($params{page}, $p, deptype($quick ? "presence" : "content"));
}
+
+ @list = grep { exists $pagesources{$_} } @list;
}
else {
my $num=0;
@@ -677,7 +695,6 @@ sub genfeed ($$$$$@) {
guid => $guid,
feeddate => date_3339($lasttime),
feedurl => $feedurl,
- version => $IkiWiki::version,
);
run_hooks(pagetemplate => sub {
shift->(page => $page, destpage => $page,
diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm
index ef01f1107..1ba28eafd 100644
--- a/IkiWiki/Plugin/link.pm
+++ b/IkiWiki/Plugin/link.pm
@@ -144,9 +144,9 @@ sub renamepage (@) {
my $old=$params{oldpage};
my $new=$params{newpage};
- $params{content} =~ s{(?<!\\)$link_regexp}{
- if (! is_externallink($page, $2, $3)) {
- my $linktext=$2;
+ $params{content} =~ s{(?<!\\)($link_regexp)}{
+ if (! is_externallink($page, $3, $4)) {
+ my $linktext=$3;
my $link=$linktext;
if (bestlink($page, linkpage($linktext)) eq $old) {
$link=pagetitle($new, 1);
@@ -161,9 +161,12 @@ sub renamepage (@) {
$link="/$link";
}
}
- defined $1
- ? ( "[[$1|$link".($3 ? "#$3" : "")."]]" )
- : ( "[[$link". ($3 ? "#$3" : "")."]]" )
+ defined $2
+ ? ( "[[$2|$link".($4 ? "#$4" : "")."]]" )
+ : ( "[[$link". ($4 ? "#$4" : "")."]]" )
+ }
+ else {
+ $1
}
}eg;
diff --git a/IkiWiki/Plugin/mercurial.pm b/IkiWiki/Plugin/mercurial.pm
index b7fe01485..8da4ceb07 100644
--- a/IkiWiki/Plugin/mercurial.pm
+++ b/IkiWiki/Plugin/mercurial.pm
@@ -5,6 +5,7 @@ use warnings;
use strict;
use IkiWiki;
use Encode;
+use URI::Escape q{uri_escape_utf8};
use open qw{:utf8 :std};
sub import {
@@ -265,7 +266,8 @@ sub rcs_recentchanges ($) {
foreach my $file (split / /,$info->{files}) {
my $diffurl = defined $config{diffurl} ? $config{'diffurl'} : "";
- $diffurl =~ s/\[\[file\]\]/$file/go;
+ my $efile = uri_escape_utf8($file);
+ $diffurl =~ s/\[\[file\]\]/$efile/go;
$diffurl =~ s/\[\[r2\]\]/$info->{changeset}/go;
push @pages, {
diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
index 220fff9dc..421f1dc86 100644
--- a/IkiWiki/Plugin/meta.pm
+++ b/IkiWiki/Plugin/meta.pm
@@ -275,17 +275,23 @@ sub preprocess (@) {
push @{$metaheaders{$page}}, '<meta name="robots"'.
' content="'.encode_entities($value).'" />';
}
- elsif ($key eq 'description') {
- push @{$metaheaders{$page}}, '<meta name="'.
- encode_entities($key).
+ elsif ($key eq 'description' || $key eq 'author') {
+ push @{$metaheaders{$page}}, '<meta name="'.$key.
'" content="'.encode_entities($value).'" />';
}
elsif ($key eq 'name') {
- push @{$metaheaders{$page}}, scrub('<meta '.$key.'="'.
+ push @{$metaheaders{$page}}, scrub('<meta name="'.
encode_entities($value).
join(' ', map { "$_=\"$params{$_}\"" } keys %params).
' />', $page, $destpage);
}
+ elsif ($key eq 'keywords') {
+ # Make sure the keyword string is safe: only allow alphanumeric
+ # characters, space and comma and strip the rest.
+ $value =~ s/[^[:alnum:], ]+//g;
+ push @{$metaheaders{$page}}, '<meta name="keywords"'.
+ ' content="'.encode_entities($value).'" />';
+ }
else {
push @{$metaheaders{$page}}, scrub('<meta name="'.
encode_entities($key).'" content="'.
@@ -312,8 +318,9 @@ sub pagetemplate (@) {
$template->param(title_overridden => 1);
}
- foreach my $field (qw{author authorurl}) {
- $template->param($field => $pagestate{$page}{meta}{$field})
+ foreach my $field (qw{authorurl}) {
+ eval q{use HTML::Entities};
+ $template->param($field => HTML::Entities::encode_entities($pagestate{$page}{meta}{$field}))
if exists $pagestate{$page}{meta}{$field} && $template->query(name => $field);
}
@@ -324,7 +331,7 @@ sub pagetemplate (@) {
}
}
- foreach my $field (qw{description}) {
+ foreach my $field (qw{description author}) {
eval q{use HTML::Entities};
$template->param($field => HTML::Entities::encode_numeric($pagestate{$page}{meta}{$field}))
if exists $pagestate{$page}{meta}{$field} && $template->query(name => $field);
diff --git a/IkiWiki/Plugin/mirrorlist.pm b/IkiWiki/Plugin/mirrorlist.pm
index f54d94ad5..b7e532485 100644
--- a/IkiWiki/Plugin/mirrorlist.pm
+++ b/IkiWiki/Plugin/mirrorlist.pm
@@ -24,6 +24,19 @@ sub getsetup () {
safe => 1,
rebuild => 1,
},
+ mirrorlist_use_cgi => {
+ type => 'boolean',
+ example => 1,
+ description => "generate links that point to the mirrors' ikiwiki CGI",
+ safe => 1,
+ rebuild => 1,
+ },
+}
+
+sub checkconfig () {
+ if (! defined $config{mirrorlist_use_cgi}) {
+ $config{mirrorlist_use_cgi}=0;
+ }
}
sub pagetemplate (@) {
@@ -46,7 +59,9 @@ sub mirrorlist ($) {
join(", ",
map {
qq{<a href="}.
- $config{mirrorlist}->{$_}."/".urlto($page, "").
+ ( $config{mirrorlist_use_cgi} ?
+ $config{mirrorlist}->{$_}."?do=goto&page=$page" :
+ $config{mirrorlist}->{$_}."/".urlto($page, "") ).
qq{">$_</a>}
} keys %{$config{mirrorlist}}
).
diff --git a/IkiWiki/Plugin/monotone.pm b/IkiWiki/Plugin/monotone.pm
index 1d89e3f6b..105627814 100644
--- a/IkiWiki/Plugin/monotone.pm
+++ b/IkiWiki/Plugin/monotone.pm
@@ -7,6 +7,7 @@ use IkiWiki;
use Monotone;
use Date::Parse qw(str2time);
use Date::Format qw(time2str);
+use URI::Escape q{uri_escape_utf8};
my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate sha1sums
my $mtn_version = undef;
@@ -593,7 +594,8 @@ sub rcs_recentchanges ($) {
my $diffurl=$config{diffurl};
$diffurl=~s/\[\[r1\]\]/$parent/g;
$diffurl=~s/\[\[r2\]\]/$rev/g;
- $diffurl=~s/\[\[file\]\]/$file/g;
+ my $efile = uri_escape_utf8($file);
+ $diffurl=~s/\[\[file\]\]/$efile/g;
push @pages, {
page => pagename($file),
diffurl => $diffurl,
diff --git a/IkiWiki/Plugin/notifyemail.pm b/IkiWiki/Plugin/notifyemail.pm
new file mode 100644
index 000000000..2c1775f2e
--- /dev/null
+++ b/IkiWiki/Plugin/notifyemail.pm
@@ -0,0 +1,168 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::notifyemail;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+ hook(type => "formbuilder", id => "notifyemail", call => \&formbuilder);
+ hook(type => "getsetup", id => "notifyemail", call => \&getsetup);
+ hook(type => "changes", id => "notifyemail", call => \&notify);
+}
+
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => 0,
+ },
+}
+
+sub formbuilder (@) {
+ my %params=@_;
+ my $form=$params{form};
+ return unless $form->title eq "preferences";
+ my $session=$params{session};
+ my $username=$session->param("name");
+ $form->field(name => "subscriptions", size => 50,
+ fieldset => "preferences",
+ comment => "(".htmllink("", "", "ikiwiki/PageSpec", noimageinline => 1).")");
+ if (! $form->submitted) {
+ $form->field(name => "subscriptions", force => 1,
+ value => getsubscriptions($username));
+ }
+ elsif ($form->submitted eq "Save Preferences" && $form->validate &&
+ defined $form->field("subscriptions")) {
+ setsubscriptions($username, $form->field('subscriptions'));
+ }
+}
+
+sub getsubscriptions ($) {
+ my $user=shift;
+ eval q{use IkiWiki::UserInfo};
+ error $@ if $@;
+ IkiWiki::userinfo_get($user, "subscriptions");
+}
+
+sub setsubscriptions ($$) {
+ my $user=shift;
+ my $subscriptions=shift;
+ eval q{use IkiWiki::UserInfo};
+ error $@ if $@;
+ IkiWiki::userinfo_set($user, "subscriptions", $subscriptions);
+}
+
+# Called by other plugins to subscribe the user to a pagespec.
+sub subscribe ($$) {
+ my $user=shift;
+ my $addpagespec=shift;
+ my $pagespec=getsubscriptions($user);
+ setsubscriptions($user,
+ length $pagespec ? $pagespec." or ".$addpagespec : $addpagespec);
+}
+
+# Called by other plugins to subscribe an email to a pagespec.
+sub anonsubscribe ($$) {
+ my $email=shift;
+ my $addpagespec=shift;
+ if (IkiWiki::Plugin::passwordauth->can("anonuser")) {
+ my $user=IkiWiki::Plugin::passwordauth::anonuser($email);
+ if (! defined $user) {
+ error(gettext("Cannot subscribe your email address without logging in."));
+ }
+ subscribe($user, $addpagespec);
+ }
+}
+
+sub notify (@) {
+ my @files=@_;
+ return unless @files;
+
+ eval q{use Mail::Sendmail};
+ error $@ if $@;
+ eval q{use IkiWiki::UserInfo};
+ error $@ if $@;
+ eval q{use URI};
+ error($@) if $@;
+
+ # Daemonize, in case the mail sending takes a while.
+ defined(my $pid = fork) or error("Can't fork: $!");
+ return if $pid; # parent
+ chdir '/';
+ open STDIN, '/dev/null';
+ open STDOUT, '>/dev/null';
+ POSIX::setsid() or error("Can't start a new session: $!");
+ open STDERR, '>&STDOUT' or error("Can't dup stdout: $!");
+
+ # Don't need to keep a lock on the wiki as a daemon.
+ IkiWiki::unlockwiki();
+
+ my $userinfo=IkiWiki::userinfo_retrieve();
+ exit 0 unless defined $userinfo;
+
+ foreach my $user (keys %$userinfo) {
+ my $pagespec=$userinfo->{$user}->{"subscriptions"};
+ next unless defined $pagespec && length $pagespec;
+ my $email=$userinfo->{$user}->{email};
+ next unless defined $email && length $email;
+
+ foreach my $file (@files) {
+ my $page=pagename($file);
+ next unless pagespec_match($page, $pagespec);
+ my $content="";
+ my $showcontent=defined pagetype($file);
+ if ($showcontent) {
+ $content=eval { readfile(srcfile($file)) };
+ $showcontent=0 if $@;
+ }
+ my $url;
+ if (! IkiWiki::isinternal($page)) {
+ $url=urlto($page, undef, 1);
+ }
+ elsif (defined $pagestate{$page}{meta}{permalink}) {
+ # need to use permalink for an internal page
+ $url=URI->new_abs($pagestate{$page}{meta}{permalink}, $config{url});
+ }
+ else {
+ $url=$config{url}; # crummy fallback url
+ }
+ my $pagedesc=$page;
+ if (defined $pagestate{$page}{meta}{title} &&
+ length $pagestate{$page}{meta}{title}) {
+ $pagedesc=qq{"$pagestate{$page}{meta}{title}"};
+ }
+ my $subject=gettext("change notification:")." ".$pagedesc;
+ if (pagetype($file) eq '_comment') {
+ $subject=gettext("comment notification:")." ".$pagedesc;
+ }
+ my $prefsurl=IkiWiki::cgiurl_abs(do => 'prefs');
+ if (IkiWiki::Plugin::passwordauth->can("anonusertoken")) {
+ my $token=IkiWiki::Plugin::passwordauth::anonusertoken($userinfo->{$user});
+ $prefsurl=IkiWiki::cgiurl_abs(
+ do => 'tokenauth',
+ name => $user,
+ token => $token,
+ ) if defined $token;
+ }
+ my $template=template("notifyemail.tmpl");
+ $template->param(
+ wikiname => $config{wikiname},
+ url => $url,
+ prefsurl => $prefsurl,
+ showcontent => $showcontent,
+ content => $content,
+ );
+ sendmail(
+ To => $email,
+ From => "$config{wikiname} <$config{adminemail}>",
+ Subject => $subject,
+ Message => $template->output,
+ );
+ }
+ }
+
+ exit 0; # daemon child
+}
+
+1
diff --git a/IkiWiki/Plugin/opendiscussion.pm b/IkiWiki/Plugin/opendiscussion.pm
index 2805f60ef..808d3cd2b 100644
--- a/IkiWiki/Plugin/opendiscussion.pm
+++ b/IkiWiki/Plugin/opendiscussion.pm
@@ -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;
}
diff --git a/IkiWiki/Plugin/openid.pm b/IkiWiki/Plugin/openid.pm
index b6642619a..40a956849 100644
--- a/IkiWiki/Plugin/openid.pm
+++ b/IkiWiki/Plugin/openid.pm
@@ -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");
}
}
diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm
new file mode 100644
index 000000000..a7baa5f2b
--- /dev/null
+++ b/IkiWiki/Plugin/osm.pm
@@ -0,0 +1,594 @@
+#!/usr/bin/perl
+# Copyright 2011 Blars Blarson
+# Released under GPL version 2
+
+package IkiWiki::Plugin::osm;
+use utf8;
+use strict;
+use warnings;
+use IkiWiki 3.0;
+
+sub import {
+ add_underlay("osm");
+ hook(type => "getsetup", id => "osm", call => \&getsetup);
+ hook(type => "format", id => "osm", call => \&format);
+ hook(type => "preprocess", id => "osm", call => \&preprocess);
+ hook(type => "preprocess", id => "waypoint", call => \&process_waypoint);
+ hook(type => "savestate", id => "waypoint", call => \&savestate);
+ hook(type => "cgi", id => "osm", call => \&cgi);
+}
+
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => 1,
+ section => "special-purpose",
+ },
+ osm_default_zoom => {
+ type => "integer",
+ example => "15",
+ description => "the default zoom when you click on the map link",
+ safe => 1,
+ rebuild => 1,
+ },
+ osm_default_icon => {
+ type => "string",
+ example => "ikiwiki/images/osm.png",
+ description => "the icon shown on links and on the main map",
+ safe => 0,
+ rebuild => 1,
+ },
+ osm_alt => {
+ type => "string",
+ example => "",
+ description => "the alt tag of links, defaults to empty",
+ safe => 0,
+ rebuild => 1,
+ },
+ osm_format => {
+ type => "string",
+ example => "KML",
+ description => "the output format for waypoints, can be KML, GeoJSON or CSV (one or many, comma-separated)",
+ safe => 1,
+ rebuild => 1,
+ },
+ osm_tag_default_icon => {
+ type => "string",
+ example => "icon.png",
+ description => "the icon attached to a tag, displayed on the map for tagged pages",
+ 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 {
+ my %params=@_;
+ my $page = $params{page};
+ my $dest = $params{destpage};
+ my $loc = $params{loc}; # sanitized below
+ my $lat = $params{lat}; # sanitized below
+ my $lon = $params{lon}; # sanitized below
+ my $href = $params{href};
+
+ my ($width, $height, $float);
+ $height = scrub($params{'height'} || "300px", $page, $dest); # sanitized here
+ $width = scrub($params{'width'} || "500px", $page, $dest); # sanitized here
+ $float = (defined($params{'right'}) && 'right') || (defined($params{'left'}) && 'left'); # sanitized here
+
+ my $zoom = scrub($params{'zoom'} // $config{'osm_default_zoom'} // 15, $page, $dest); # sanitized below
+ my $map;
+ $map = $params{'map'} || 'map';
+
+ $map = scrub($map, $page, $dest); # sanitized here
+ my $name = scrub($params{'name'} || $map, $page, $dest);
+
+ if (defined($lon) || defined($lat) || defined($loc)) {
+ ($lon, $lat) = scrub_lonlat($loc, $lon, $lat);
+ }
+
+ if ($zoom !~ /^\d\d?$/ || $zoom < 2 || $zoom > 18) {
+ error("Bad zoom");
+ }
+
+ if (! defined $href || ! length $href) {
+ $href=IkiWiki::cgiurl(
+ do => "osm",
+ map => $map,
+ );
+ }
+
+ register_rendered_files($map, $page, $dest);
+
+ $pagestate{$page}{'osm'}{$map}{'displays'}{$name} = {
+ height => $height,
+ width => $width,
+ float => $float,
+ zoom => $zoom,
+ fullscreen => 0,
+ editable => defined($params{'editable'}),
+ lat => $lat,
+ lon => $lon,
+ href => $href,
+ google_apikey => $config{'osm_google_apikey'},
+ };
+ return "<div id=\"mapdiv-$name\"></div>";
+}
+
+sub process_waypoint {
+ my %params=@_;
+ my $loc = $params{'loc'}; # sanitized below
+ my $lat = $params{'lat'}; # sanitized below
+ my $lon = $params{'lon'}; # sanitized below
+ my $page = $params{'page'}; # not sanitized?
+ my $dest = $params{'destpage'}; # not sanitized?
+ my $hidden = defined($params{'hidden'}); # sanitized here
+ my ($p) = $page =~ /(?:^|\/)([^\/]+)\/?$/; # shorter page name
+ my $name = scrub($params{'name'} || $p, $page, $dest); # sanitized here
+ my $desc = scrub($params{'desc'} || '', $page, $dest); # sanitized here
+ my $zoom = scrub($params{'zoom'} // $config{'osm_default_zoom'} // 15, $page, $dest); # sanitized below
+ my $icon = $config{'osm_default_icon'} || "ikiwiki/images/osm.png"; # sanitized: we trust $config
+ my $map = scrub($params{'map'} || 'map', $page, $dest); # sanitized here
+ my $alt = $config{'osm_alt'} ? "alt=\"$config{'osm_alt'}\"" : ''; # sanitized: we trust $config
+ if ($zoom !~ /^\d\d?$/ || $zoom < 2 || $zoom > 18) {
+ error("Bad zoom");
+ }
+
+ ($lon, $lat) = scrub_lonlat($loc, $lon, $lat);
+ if (!defined($lat) || !defined($lon)) {
+ error("Must specify lat and lon");
+ }
+
+ my $tag = $params{'tag'};
+ foreach my $t (keys %{$typedlinks{$page}{'tag'}}) {
+ if ($icon = get_tag_icon($t)) {
+ $tag = $t;
+ last;
+ }
+ $t =~ s!/$config{'tagbase'}/!!;
+ if ($icon = get_tag_icon($t)) {
+ $tag = $t;
+ last;
+ }
+ }
+ $icon = urlto($icon, $dest, 1);
+ $tag = '' unless $tag;
+ register_rendered_files($map, $page, $dest);
+ $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name} = {
+ page => $page,
+ desc => $desc,
+ icon => $icon,
+ tag => $tag,
+ lat => $lat,
+ lon => $lon,
+ # How to link back to the page from the map, not to be
+ # confused with the URL of the map itself sent to the
+ # embeded map below. Note: used in generated KML etc file,
+ # so must be absolute.
+ href => urlto($page),
+ };
+
+ my $mapurl = IkiWiki::cgiurl(
+ do => "osm",
+ map => $map,
+ lat => $lat,
+ lon => $lon,
+ zoom => $zoom,
+ );
+ my $output = '';
+ if (defined($params{'embed'})) {
+ $output .= preprocess(%params,
+ href => $mapurl,
+ );
+ }
+ if (!$hidden) {
+ $output .= "<a href=\"$mapurl\"><img class=\"img\" src=\"$icon\" $alt /></a>";
+ }
+ return $output;
+}
+
+# get the icon from the given tag
+sub get_tag_icon($) {
+ my $tag = shift;
+ # look for an icon attached to the tag
+ my $attached = $tag . '/' . $config{'osm_tag_default_icon'};
+ if (srcfile($attached)) {
+ return $attached;
+ }
+ else {
+ return undef;
+ }
+}
+
+sub scrub_lonlat($$$) {
+ my ($loc, $lon, $lat) = @_;
+ if ($loc) {
+ if ($loc =~ /^\s*(\-?\d+(?:\.\d*°?|(?:°?|\s)\s*\d+(?:\.\d*\'?|(?:\'|\s)\s*\d+(?:\.\d*)?\"?|\'?)°?)[NS]?)\s*\,?\;?\s*(\-?\d+(?:\.\d*°?|(?:°?|\s)\s*\d+(?:\.\d*\'?|(?:\'|\s)\s*\d+(?:\.\d*)?\"?|\'?)°?)[EW]?)\s*$/) {
+ $lat = $1;
+ $lon = $2;
+ }
+ else {
+ error("Bad loc");
+ }
+ }
+ if (defined($lat)) {
+ if ($lat =~ /^(\-?)(\d+)(?:(\.\d*)°?|(?:°|\s)\s*(\d+)(?:(\.\d*)\'?|(?:\'|\s)\s*(\d+(?:\.\d*)?\"?)|\'?)|°?)\s*([NS])?\s*$/) {
+ $lat = $2 + ($3//0) + ((($4//0) + (($5//0) + (($6//0)/60.)))/60.);
+ if (($1 eq '-') || (($7//'') eq 'S')) {
+ $lat = - $lat;
+ }
+ }
+ else {
+ error("Bad lat");
+ }
+ }
+ if (defined($lon)) {
+ if ($lon =~ /^(\-?)(\d+)(?:(\.\d*)°?|(?:°|\s)\s*(\d+)(?:(\.\d*)\'?|(?:\'|\s)\s*(\d+(?:\.\d*)?\"?)|\'?)|°?)\s*([EW])?$/) {
+ $lon = $2 + ($3//0) + ((($4//0) + (($5//0) + (($6//0)/60.)))/60.);
+ if (($1 eq '-') || (($7//'') eq 'W')) {
+ $lon = - $lon;
+ }
+ }
+ else {
+ error("Bad lon");
+ }
+ }
+ if ($lat < -90 || $lat > 90 || $lon < -180 || $lon > 180) {
+ error("Location out of range");
+ }
+ return ($lon, $lat);
+}
+
+sub savestate {
+ my %waypoints = ();
+ my %linestrings = ();
+
+ foreach my $page (keys %pagestate) {
+ if (exists $pagestate{$page}{'osm'}) {
+ foreach my $map (keys %{$pagestate{$page}{'osm'}}) {
+ foreach my $name (keys %{$pagestate{$page}{'osm'}{$map}{'waypoints'}}) {
+ debug("found waypoint $name");
+ $waypoints{$map}{$name} = $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name};
+ }
+ }
+ }
+ }
+
+ foreach my $page (keys %pagestate) {
+ if (exists $pagestate{$page}{'osm'}) {
+ foreach my $map (keys %{$pagestate{$page}{'osm'}}) {
+ # examine the links on this page
+ foreach my $name (keys %{$pagestate{$page}{'osm'}{$map}{'waypoints'}}) {
+ if (exists $links{$page}) {
+ foreach my $otherpage (@{$links{$page}}) {
+ if (exists $waypoints{$map}{$otherpage}) {
+ push(@{$linestrings{$map}}, [
+ [ $waypoints{$map}{$name}{'lon'}, $waypoints{$map}{$name}{'lat'} ],
+ [ $waypoints{$map}{$otherpage}{'lon'}, $waypoints{$map}{$otherpage}{'lat'} ]
+ ]);
+ }
+ }
+ }
+ }
+ }
+ # clear the state, it will be regenerated on the next parse
+ # the idea here is to clear up removed waypoints...
+ $pagestate{$page}{'osm'} = ();
+ }
+ }
+
+ my %formats = get_formats();
+ if ($formats{'GeoJSON'}) {
+ writejson(\%waypoints, \%linestrings);
+ }
+ if ($formats{'CSV'}) {
+ writecsvs(\%waypoints, \%linestrings);
+ }
+ if ($formats{'KML'}) {
+ writekml(\%waypoints, \%linestrings);
+ }
+}
+
+sub writejson($;$) {
+ my %waypoints = %{$_[0]};
+ my %linestrings = %{$_[1]};
+ eval q{use JSON};
+ error $@ if $@;
+ foreach my $map (keys %waypoints) {
+ my %geojson = ( "type" => "FeatureCollection", "features" => []);
+ foreach my $name (keys %{$waypoints{$map}}) {
+ my %marker = ( "type" => "Feature",
+ "geometry" => { "type" => "Point", "coordinates" => [ $waypoints{$map}{$name}{'lon'}, $waypoints{$map}{$name}{'lat'} ] },
+ "properties" => $waypoints{$map}{$name} );
+ push @{$geojson{'features'}}, \%marker;
+ }
+ foreach my $linestring (@{$linestrings{$map}}) {
+ my %json = ( "type" => "Feature",
+ "geometry" => { "type" => "LineString", "coordinates" => $linestring });
+ push @{$geojson{'features'}}, \%json;
+ }
+ writefile("pois.json", $config{destdir} . "/$map", to_json(\%geojson));
+ }
+}
+
+sub writekml($;$) {
+ my %waypoints = %{$_[0]};
+ my %linestrings = %{$_[1]};
+ eval q{use XML::Writer};
+ error $@ if $@;
+ foreach my $map (keys %waypoints) {
+ my $output;
+ my $writer = XML::Writer->new( OUTPUT => \$output,
+ 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}};
+ 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}}) {
+ my %options = %{$waypoints{$map}{$name}};
+ $writer->startTag("Placemark");
+ $writer->startTag("name");
+ $writer->characters($name);
+ $writer->endTag();
+ $writer->startTag("styleUrl");
+ $writer->characters('#' . $options{tag});
+ $writer->endTag();
+ #$writer->emptyTag('atom:link', href => $options{href});
+ # to make it easier for us as the atom:link parameter is
+ # hard to access from javascript
+ $writer->startTag('href');
+ $writer->characters($options{href});
+ $writer->endTag();
+ $writer->startTag("description");
+ $writer->characters($options{desc});
+ $writer->endTag();
+ $writer->startTag("Point");
+ $writer->startTag("coordinates");
+ $writer->characters($options{lon} . "," . $options{lat});
+ $writer->endTag();
+ $writer->endTag();
+ $writer->endTag();
+ }
+
+ my $i = 0;
+ foreach my $linestring (@{$linestrings{$map}}) {
+ $writer->startTag("Placemark");
+ $writer->startTag("name");
+ $writer->characters("linestring " . $i++);
+ $writer->endTag();
+ $writer->startTag("LineString");
+ $writer->startTag("coordinates");
+ my $str = '';
+ foreach my $coord (@{$linestring}) {
+ $str .= join(',', @{$coord}) . " \n";
+ }
+ $writer->characters($str);
+ $writer->endTag();
+ $writer->endTag();
+ $writer->endTag();
+ }
+ $writer->endTag();
+ $writer->endTag();
+ $writer->end();
+
+ writefile("pois.kml", $config{destdir} . "/$map", $output);
+ }
+}
+
+sub writecsvs($;$) {
+ my %waypoints = %{$_[0]};
+ foreach my $map (keys %waypoints) {
+ my $poisf = "lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n";
+ foreach my $name (keys %{$waypoints{$map}}) {
+ my %options = %{$waypoints{$map}{$name}};
+ my $line =
+ $options{'lat'} . "\t" .
+ $options{'lon'} . "\t" .
+ $name . "\t" .
+ $options{'desc'} . '<br /><a href="' . $options{'page'} . '">' . $name . "</a>\t" .
+ $options{'icon'} . "\n";
+ $poisf .= $line;
+ }
+ writefile("pois.txt", $config{destdir} . "/$map", $poisf);
+ }
+}
+
+# pipe some data through the HTML scrubber
+#
+# code taken from the meta.pm plugin
+sub scrub($$$) {
+ if (IkiWiki::Plugin::htmlscrubber->can("sanitize")) {
+ return IkiWiki::Plugin::htmlscrubber::sanitize(
+ content => shift, page => shift, destpage => shift);
+ }
+ else {
+ return shift;
+ }
+}
+
+# taken from toggle.pm
+sub format (@) {
+ my %params=@_;
+
+ if ($params{content}=~m!<div[^>]*id="mapdiv-[^"]*"[^>]*>!g) {
+ if (! ($params{content}=~s!</body>!include_javascript($params{page})."</body>"!em)) {
+ # no <body> tag, probably in preview mode
+ $params{content}=$params{content} . include_javascript($params{page});
+ }
+ }
+ return $params{content};
+}
+
+sub preferred_format() {
+ if (!defined($config{'osm_format'}) || !$config{'osm_format'}) {
+ $config{'osm_format'} = 'KML';
+ }
+ my @spl = split(/, */, $config{'osm_format'});
+ return shift @spl;
+}
+
+sub get_formats() {
+ if (!defined($config{'osm_format'}) || !$config{'osm_format'}) {
+ $config{'osm_format'} = 'KML';
+ }
+ map { $_ => 1 } split(/, */, $config{'osm_format'});
+}
+
+sub include_javascript ($) {
+ my $page=shift;
+ my $loader;
+
+ if (exists $pagestate{$page}{'osm'}) {
+ foreach my $map (keys %{$pagestate{$page}{'osm'}}) {
+ foreach my $name (keys %{$pagestate{$page}{'osm'}{$map}{'displays'}}) {
+ $loader .= map_setup_code($map, $name, %{$pagestate{$page}{'osm'}{$map}{'displays'}{$name}});
+ }
+ }
+ }
+ if ($loader) {
+ return embed_map_code($page) . "<script type=\"text/javascript\" charset=\"utf-8\">$loader</script>";
+ }
+ else {
+ return '';
+ }
+}
+
+sub cgi($) {
+ my $cgi=shift;
+
+ return unless defined $cgi->param('do') &&
+ $cgi->param("do") eq "osm";
+
+ IkiWiki::loadindex();
+
+ IkiWiki::decode_cgi_utf8($cgi);
+
+ my $map = $cgi->param('map');
+ if (!defined $map || $map !~ /^[a-z]*$/) {
+ error("invalid map parameter");
+ }
+
+ print "Content-Type: text/html\r\n";
+ print ("\r\n");
+ print "<html><body>";
+ print "<div id=\"mapdiv-$map\"></div>";
+ print embed_map_code();
+ print "<script type=\"text/javascript\" charset=\"utf-8\">";
+ print map_setup_code($map, $map,
+ lat => "urlParams['lat']",
+ lon => "urlParams['lon']",
+ zoom => "urlParams['zoom']",
+ fullscreen => 1,
+ editable => 1,
+ google_apikey => $config{'osm_google_apikey'},
+ );
+ print "</script>";
+ print "</body></html>";
+
+ exit 0;
+}
+
+sub embed_map_code(;$) {
+ my $page=shift;
+ 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($;@) {
+ my $map=shift;
+ my $name=shift;
+ my %options=@_;
+
+ my $mapurl = $config{osm_map_url};
+
+ eval q{use JSON};
+ error $@ if $@;
+
+ $options{'format'} = preferred_format();
+
+ my %formats = get_formats();
+ if ($formats{'GeoJSON'}) {
+ $options{'jsonurl'} = urlto($map."/pois.json");
+ }
+ if ($formats{'CSV'}) {
+ $options{'csvurl'} = urlto($map."/pois.txt");
+ }
+ if ($formats{'KML'}) {
+ $options{'kmlurl'} = urlto($map."/pois.kml");
+ }
+
+ if ($mapurl) {
+ $options{'mapurl'} = $mapurl;
+ }
+ $options{'layers'} = $config{osm_layers};
+
+ return "mapsetup('mapdiv-$name', " . to_json(\%options) . ");";
+}
+
+1;
diff --git a/IkiWiki/Plugin/passwordauth.pm b/IkiWiki/Plugin/passwordauth.pm
index 35ebd961f..0cf2a26ea 100644
--- a/IkiWiki/Plugin/passwordauth.pm
+++ b/IkiWiki/Plugin/passwordauth.pm
@@ -96,6 +96,72 @@ sub setpassword ($$;$) {
else {
IkiWiki::userinfo_set($user, $field, $password);
}
+
+ # Setting the password clears any passwordless login token.
+ if ($field ne 'passwordless') {
+ IkiWiki::userinfo_set($user, "passwordless", "");
+ }
+}
+
+# Generates a token that can be used to log the user in.
+# This needs to be hard to guess. Generating a cgi session id will
+# make it as hard to guess as any cgi session.
+sub gentoken ($$;$) {
+ my $user=shift;
+ my $tokenfield=shift;
+ my $reversable=shift;
+
+ eval q{use CGI::Session};
+ error($@) if $@;
+ my $token = CGI::Session->new->id;
+ if (! $reversable) {
+ setpassword($user, $token, $tokenfield);
+ }
+ else {
+ IkiWiki::userinfo_set($user, $tokenfield, $token);
+ }
+ return $token;
+}
+
+# An anonymous user has no normal password, only a passwordless login
+# token. Given an email address, this sets up such a user for that email,
+# unless one already exists, and returns the username.
+sub anonuser ($) {
+ my $email=shift;
+
+ # Want a username for this email that won't overlap with any other.
+ my $user=$email;
+ $user=~s/@/_/g;
+
+ my $userinfo=IkiWiki::userinfo_retrieve();
+ if (! exists $userinfo->{$user} || ! ref $userinfo->{$user}) {
+ if (IkiWiki::userinfo_setall($user, {
+ 'email' => $email,
+ 'regdate' => time})) {
+ gentoken($user, "passwordless", 1);
+ return $user;
+ }
+ else {
+ error(gettext("Error creating account."));
+ }
+ }
+ elsif (defined anonusertoken($userinfo->{$user})) {
+ return $user;
+ }
+ else {
+ return undef;
+ }
+}
+
+sub anonusertoken ($) {
+ my $userhash=shift;
+ if (exists $userhash->{passwordless} &&
+ length $userhash->{passwordless}) {
+ return $userhash->{passwordless};
+ }
+ else {
+ return undef;
+ }
}
sub formbuilder_setup (@) {
@@ -277,20 +343,13 @@ sub formbuilder (@) {
if (! length $email) {
error(gettext("No email address, so cannot email password reset instructions."));
}
-
- # Store a token that can be used once
- # to log the user in. This needs to be hard
- # to guess. Generating a cgi session id will
- # make it as hard to guess as any cgi session.
- eval q{use CGI::Session};
- error($@) if $@;
- my $token = CGI::Session->new->id;
- setpassword($user_name, $token, "resettoken");
+
+ my $token=gentoken($user_name, "resettoken");
my $template=template("passwordmail.tmpl");
$template->param(
user_name => $user_name,
- passwordurl => IkiWiki::cgiurl(
+ passwordurl => IkiWiki::cgiurl_abs(
'do' => "reset",
'name' => $user_name,
'token' => $token,
@@ -329,7 +388,7 @@ sub formbuilder (@) {
elsif ($form->title eq "preferences") {
if ($form->submitted eq "Save Preferences" && $form->validate) {
my $user_name=$form->field('name');
- if ($form->field("password") && length $form->field("password")) {
+ if (defined $form->field("password") && length $form->field("password")) {
setpassword($user_name, $form->field('password'));
}
}
@@ -356,6 +415,22 @@ sub sessioncgi ($$) {
IkiWiki::cgi_prefs($q, $session);
exit;
}
+ elsif ($q->param('do') eq 'tokenauth') {
+ my $name=$q->param("name");
+ my $token=$q->param("token");
+
+ if (! defined $name || ! defined $token ||
+ ! length $name || ! length $token) {
+ error(gettext("incorrect url"));
+ }
+ if (! checkpassword($name, $token, "passwordless")) {
+ error(gettext("access denied"));
+ }
+
+ $session->param("name", $name);
+ IkiWiki::cgi_prefs($q, $session);
+ exit;
+ }
elsif ($q->param("do") eq "register") {
# After registration, need to go somewhere, so show prefs page.
$session->param(postsignin => "do=prefs");
diff --git a/IkiWiki/Plugin/pinger.pm b/IkiWiki/Plugin/pinger.pm
index ea4f3e0dc..588f7a42a 100644
--- a/IkiWiki/Plugin/pinger.pm
+++ b/IkiWiki/Plugin/pinger.pm
@@ -13,7 +13,7 @@ sub import {
hook(type => "needsbuild", id => "pinger", call => \&needsbuild);
hook(type => "preprocess", id => "ping", call => \&preprocess);
hook(type => "delete", id => "pinger", call => \&ping);
- hook(type => "change", id => "pinger", call => \&ping);
+ hook(type => "rendered", id => "pinger", call => \&ping);
}
sub getsetup () {
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 6410a1c66..53e6af92f 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -23,7 +23,6 @@ use File::Copy;
use File::Spec;
use File::Temp;
use Memoize;
-use UNIVERSAL;
my ($master_language_code, $master_language_name);
my %translations;
@@ -48,7 +47,7 @@ sub import {
hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
hook(type => "rename", id => "po", call => \&renamepages, first => 1);
hook(type => "delete", id => "po", call => \&mydelete);
- hook(type => "change", id => "po", call => \&change);
+ hook(type => "rendered", id => "po", call => \&rendered);
hook(type => "checkcontent", id => "po", call => \&checkcontent);
hook(type => "canremove", id => "po", call => \&canremove);
hook(type => "canrename", id => "po", call => \&canrename);
@@ -428,7 +427,7 @@ sub mydelete (@) {
map { deletetranslations($_) } grep istranslatablefile($_), @deleted;
}
-sub change (@) {
+sub rendered (@) {
my @rendered=@_;
my $updated_po_files=0;
@@ -1103,7 +1102,7 @@ sub deletetranslations ($) {
IkiWiki::rcs_remove($_);
}
else {
- IkiWiki::prune("$config{srcdir}/$_");
+ IkiWiki::prune("$config{srcdir}/$_", $config{srcdir});
}
} @todelete;
diff --git a/IkiWiki/Plugin/poll.pm b/IkiWiki/Plugin/poll.pm
index 2773486a6..32756a571 100644
--- a/IkiWiki/Plugin/poll.pm
+++ b/IkiWiki/Plugin/poll.pm
@@ -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;
}
diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm
index 8ce9474be..4c1863255 100644
--- a/IkiWiki/Plugin/recentchanges.pm
+++ b/IkiWiki/Plugin/recentchanges.pm
@@ -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}) {
+ $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};
diff --git a/IkiWiki/Plugin/recentchangesdiff.pm b/IkiWiki/Plugin/recentchangesdiff.pm
index 418822793..eb358be67 100644
--- a/IkiWiki/Plugin/recentchangesdiff.pm
+++ b/IkiWiki/Plugin/recentchangesdiff.pm
@@ -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
diff --git a/IkiWiki/Plugin/remove.pm b/IkiWiki/Plugin/remove.pm
index 14ac01c9b..d48b28f95 100644
--- a/IkiWiki/Plugin/remove.pm
+++ b/IkiWiki/Plugin/remove.pm
@@ -22,6 +22,13 @@ sub getsetup () {
},
}
+sub allowed_dirs {
+ return grep { defined $_ } (
+ $config{srcdir},
+ $IkiWiki::Plugin::transient::transientdir,
+ );
+}
+
sub check_canremove ($$$) {
my $page=shift;
my $q=shift;
@@ -33,12 +40,22 @@ sub check_canremove ($$$) {
htmllink("", "", $page, noimageinline => 1)));
}
- # Must exist on disk, and be a regular file.
+ # Must exist in either the srcdir or a suitable underlay (e.g.
+ # transient underlay), and be a regular file.
my $file=$pagesources{$page};
- if (! -e "$config{srcdir}/$file") {
+ my $dir;
+
+ foreach my $srcdir (allowed_dirs()) {
+ if (-e "$srcdir/$file") {
+ $dir = $srcdir;
+ last;
+ }
+ }
+
+ if (! defined $dir) {
error(sprintf(gettext("%s is not in the srcdir, so it cannot be deleted"), $file));
}
- elsif (-l "$config{srcdir}/$file" && ! -f _) {
+ elsif (-l "$dir/$file" && ! -f _) {
error(sprintf(gettext("%s is not a file"), $file));
}
@@ -46,7 +63,7 @@ sub check_canremove ($$$) {
# This is sorta overkill, but better safe than sorry.
if (! defined pagetype($pagesources{$page})) {
if (IkiWiki::Plugin::attachment->can("check_canattach")) {
- IkiWiki::Plugin::attachment::check_canattach($session, $page, "$config{srcdir}/$file");
+ IkiWiki::Plugin::attachment::check_canattach($session, $page, "$dir/$file");
}
else {
error("removal of attachments is not allowed");
@@ -124,7 +141,7 @@ sub removal_confirm ($$@) {
my $f=IkiWiki::Plugin::attachment::is_held_attachment($page);
if (defined $f) {
require IkiWiki::Render;
- IkiWiki::prune($f);
+ IkiWiki::prune($f, "$config{wikistatedir}/attachments");
}
}
}
@@ -223,21 +240,34 @@ sub sessioncgi ($$) {
require IkiWiki::Render;
if ($config{rcs}) {
IkiWiki::disable_commit_hook();
- foreach my $file (@files) {
- IkiWiki::rcs_remove($file);
+ }
+ my $rcs_removed = 1;
+
+ foreach my $file (@files) {
+ foreach my $srcdir (allowed_dirs()) {
+ if (-e "$srcdir/$file") {
+ if ($srcdir eq $config{srcdir} && $config{rcs}) {
+ IkiWiki::rcs_remove($file);
+ $rcs_removed = 1;
+ }
+ else {
+ IkiWiki::prune("$srcdir/$file", $srcdir);
+ }
+ }
}
- IkiWiki::rcs_commit_staged(
- message => gettext("removed"),
- session => $session,
- );
- IkiWiki::enable_commit_hook();
- IkiWiki::rcs_update();
}
- else {
- foreach my $file (@files) {
- IkiWiki::prune("$config{srcdir}/$file");
+
+ if ($config{rcs}) {
+ if ($rcs_removed) {
+ IkiWiki::rcs_commit_staged(
+ message => gettext("removed"),
+ session => $session,
+ );
}
+ IkiWiki::enable_commit_hook();
+ IkiWiki::rcs_update();
}
+
IkiWiki::refresh();
IkiWiki::saveindex();
diff --git a/IkiWiki/Plugin/rename.pm b/IkiWiki/Plugin/rename.pm
index 8e32d41ae..8387a1e32 100644
--- a/IkiWiki/Plugin/rename.pm
+++ b/IkiWiki/Plugin/rename.pm
@@ -206,14 +206,22 @@ sub rename_start ($$$$) {
exit 0;
}
-sub postrename ($;$$$) {
+sub postrename ($$$;$$) {
+ my $cgi=shift;
my $session=shift;
my $src=shift;
my $dest=shift;
my $attachment=shift;
- # Load saved form state and return to edit page.
- my $postrename=CGI->new($session->param("postrename"));
+ # Load saved form state and return to edit page, using stored old
+ # cgi state. Or, if the rename was not started on the edit page,
+ # return to the renamed page.
+ my $postrename=$session->param("postrename");
+ if (! defined $postrename) {
+ IkiWiki::redirect($cgi, urlto(defined $dest ? $dest : $src));
+ exit;
+ }
+ my $oldcgi=CGI->new($postrename);
$session->clear("postrename");
IkiWiki::cgi_savesession($session);
@@ -222,21 +230,21 @@ sub postrename ($;$$$) {
# They renamed the page they were editing. This requires
# fixups to the edit form state.
# Tweak the edit form to be editing the new page.
- $postrename->param("page", $dest);
+ $oldcgi->param("page", $dest);
}
# Update edit form content to fix any links present
# on it.
- $postrename->param("editcontent",
+ $oldcgi->param("editcontent",
renamepage_hook($dest, $src, $dest,
- $postrename->param("editcontent")));
+ $oldcgi->param("editcontent")));
# Get a new edit token; old was likely invalidated.
- $postrename->param("rcsinfo",
+ $oldcgi->param("rcsinfo",
IkiWiki::rcs_prepedit($pagesources{$dest}));
}
- IkiWiki::cgi_editpage($postrename, $session);
+ IkiWiki::cgi_editpage($oldcgi, $session);
}
sub formbuilder (@) {
@@ -291,16 +299,16 @@ sub sessioncgi ($$) {
my $session=shift;
my ($form, $buttons)=rename_form($q, $session, Encode::decode_utf8($q->param("page")));
IkiWiki::decode_form_utf8($form);
+ my $src=$form->field("page");
if ($form->submitted eq 'Cancel') {
- postrename($session);
+ postrename($q, $session, $src);
}
elsif ($form->submitted eq 'Rename' && $form->validate) {
IkiWiki::checksessionexpiry($q, $session, $q->param('sid'));
# These untaints are safe because of the checks
# performed in check_canrename later.
- my $src=$form->field("page");
my $srcfile=IkiWiki::possibly_foolish_untaint($pagesources{$src})
if exists $pagesources{$src};
my $dest=IkiWiki::possibly_foolish_untaint(titlepage($form->field("new_name")));
@@ -324,7 +332,7 @@ sub sessioncgi ($$) {
IkiWiki::Plugin::attachment::is_held_attachment($src);
if ($held) {
rename($held, IkiWiki::Plugin::attachment::attachment_holding_location($dest));
- postrename($session, $src, $dest, $q->param("attachment"))
+ postrename($q, $session, $src, $dest, $q->param("attachment"))
unless defined $srcfile;
}
@@ -430,7 +438,7 @@ sub sessioncgi ($$) {
$renamesummary.=$template->output;
}
- postrename($session, $src, $dest, $q->param("attachment"));
+ postrename($q, $session, $src, $dest, $q->param("attachment"));
}
else {
IkiWiki::showform($form, $buttons, $session, $q);
diff --git a/IkiWiki/Plugin/rsync.pm b/IkiWiki/Plugin/rsync.pm
index e38801e4a..1b85ea000 100644
--- a/IkiWiki/Plugin/rsync.pm
+++ b/IkiWiki/Plugin/rsync.pm
@@ -7,7 +7,7 @@ use IkiWiki 3.00;
sub import {
hook(type => "getsetup", id => "rsync", call => \&getsetup);
- hook(type => "change", id => "rsync", call => \&postrefresh);
+ hook(type => "rendered", id => "rsync", call => \&postrefresh);
hook(type => "delete", id => "rsync", call => \&postrefresh);
}
diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm
index 0cedbe447..98df143ab 100644
--- a/IkiWiki/Plugin/shortcut.pm
+++ b/IkiWiki/Plugin/shortcut.pm
@@ -73,11 +73,21 @@ sub shortcut_expand ($$@) {
add_depends($params{destpage}, "shortcuts");
my $text=join(" ", @params);
- my $encoded_text=$text;
- $encoded_text=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
- $url=~s{\%([sS])}{
- $1 eq 's' ? $encoded_text : $text
+ $url=~s{\%([sSW])}{
+ if ($1 eq 's') {
+ my $t=$text;
+ $t=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
+ $t;
+ }
+ elsif ($1 eq 'S') {
+ $text;
+ }
+ elsif ($1 eq 'W') {
+ my $t=Encode::encode_utf8($text);
+ $t=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
+ $t;
+ }
}eg;
$text=~s/_/ /g;
diff --git a/IkiWiki/Plugin/skeleton.pm.example b/IkiWiki/Plugin/skeleton.pm.example
index 7974d5e53..f9caef40c 100644
--- a/IkiWiki/Plugin/skeleton.pm.example
+++ b/IkiWiki/Plugin/skeleton.pm.example
@@ -26,7 +26,8 @@ sub import {
hook(type => "templatefile", id => "skeleton", call => \&templatefile);
hook(type => "pageactions", id => "skeleton", call => \&pageactions);
hook(type => "delete", id => "skeleton", call => \&delete);
- hook(type => "change", id => "skeleton", call => \&change);
+ hook(type => "rendered", id => "skeleton", call => \&rendered);
+ hook(type => "changes", id => "skeleton", call => \&changes);
hook(type => "cgi", id => "skeleton", call => \&cgi);
hook(type => "auth", id => "skeleton", call => \&auth);
hook(type => "sessioncgi", id => "skeleton", call => \&sessioncgi);
@@ -53,7 +54,6 @@ sub getsetup () {
plugin => {
safe => 1,
rebuild => undef,
- section => "misc",
},
skeleton => {
type => "boolean",
@@ -167,10 +167,16 @@ sub delete (@) {
debug("skeleton plugin told that files were deleted: @files");
}
-sub change (@) {
+sub rendered (@) {
my @files=@_;
- debug("skeleton plugin told that changed files were rendered: @files");
+ debug("skeleton plugin told that files were rendered: @files");
+}
+
+sub changes (@) {
+ my @files=@_;
+
+ debug("skeleton plugin told that files were changed: @files");
}
sub cgi ($) {
diff --git a/IkiWiki/Plugin/svn.pm b/IkiWiki/Plugin/svn.pm
index 8824a6ce0..fd11f2c63 100644
--- a/IkiWiki/Plugin/svn.pm
+++ b/IkiWiki/Plugin/svn.pm
@@ -5,6 +5,7 @@ use warnings;
use strict;
use IkiWiki;
use POSIX qw(setlocale LC_CTYPE);
+use URI::Escape q{uri_escape_utf8};
sub import {
hook(type => "checkconfig", id => "svn", call => \&checkconfig);
@@ -292,7 +293,8 @@ sub rcs_recentchanges ($) {
}
my $diffurl=defined $config{diffurl} ? $config{diffurl} : "";
- $diffurl=~s/\[\[file\]\]/$file/g;
+ my $efile = uri_escape_utf8($file);
+ $diffurl=~s/\[\[file\]\]/$efile/g;
$diffurl=~s/\[\[r1\]\]/$rev - 1/eg;
$diffurl=~s/\[\[r2\]\]/$rev/g;
diff --git a/IkiWiki/Plugin/tla.pm b/IkiWiki/Plugin/tla.pm
index da4385446..11be248e8 100644
--- a/IkiWiki/Plugin/tla.pm
+++ b/IkiWiki/Plugin/tla.pm
@@ -4,6 +4,7 @@ package IkiWiki::Plugin::tla;
use warnings;
use strict;
use IkiWiki;
+use URI::Escape q{uri_escape_utf8};
sub import {
hook(type => "checkconfig", id => "tla", call => \&checkconfig);
@@ -224,7 +225,8 @@ sub rcs_recentchanges ($) {
foreach my $file (@paths) {
my $diffurl=defined $config{diffurl} ? $config{diffurl} : "";
- $diffurl=~s/\[\[file\]\]/$file/g;
+ my $efile = uri_escape_utf8($file);
+ $diffurl=~s/\[\[file\]\]/$efile/g;
$diffurl=~s/\[\[rev\]\]/$change/g;
push @pages, {
page => pagename($file),
diff --git a/IkiWiki/Plugin/trail.pm b/IkiWiki/Plugin/trail.pm
new file mode 100644
index 000000000..d5fb2b5d6
--- /dev/null
+++ b/IkiWiki/Plugin/trail.pm
@@ -0,0 +1,467 @@
+#!/usr/bin/perl
+# Copyright © 2008-2011 Joey Hess
+# Copyright © 2009-2012 Simon McVittie <http://smcv.pseudorandom.co.uk/>
+# Licensed under the GNU GPL, version 2, or any later version published by the
+# Free Software Foundation
+package IkiWiki::Plugin::trail;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+ hook(type => "getsetup", id => "trail", call => \&getsetup);
+ hook(type => "needsbuild", id => "trail", call => \&needsbuild);
+ hook(type => "preprocess", id => "trailoptions", call => \&preprocess_trailoptions, scan => 1);
+ hook(type => "preprocess", id => "trailitem", call => \&preprocess_trailitem, scan => 1);
+ hook(type => "preprocess", id => "trailitems", call => \&preprocess_trailitems, scan => 1);
+ hook(type => "preprocess", id => "traillink", call => \&preprocess_traillink, scan => 1);
+ hook(type => "pagetemplate", id => "trail", call => \&pagetemplate);
+ hook(type => "build_affected", id => "trail", call => \&build_affected);
+}
+
+# Page state
+#
+# If a page $T is a trail, then it can have
+#
+# * $pagestate{$T}{trail}{contents}
+# Reference to an array of lists each containing either:
+# - [pagenames => "page1", "page2"]
+# Those literal pages
+# - [link => "link"]
+# A link specification, pointing to the same page that [[link]]
+# would select
+# - [pagespec => "posts/*", "age", 0]
+# A match by pagespec; the third array element is the sort order
+# and the fourth is whether to reverse sorting
+#
+# * $pagestate{$T}{trail}{sort}
+# A sorting order; if absent or undef, the trail is in the order given
+# by the links that form it
+#
+# * $pagestate{$T}{trail}{circular}
+# True if this trail is circular (i.e. going "next" from the last item is
+# allowed, and takes you back to the first)
+#
+# * $pagestate{$T}{trail}{reverse}
+# True if C<sort> is to be reversed.
+#
+# If a page $M is a member of a trail $T, then it has
+#
+# * $pagestate{$M}{trail}{item}{$T}[0]
+# The page before this one in C<$T> at the last rebuild, or undef.
+#
+# * $pagestate{$M}{trail}{item}{$T}[1]
+# The page after this one in C<$T> at the last refresh, or undef.
+
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => undef,
+ },
+}
+
+# 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
+ # only thing that's added for items, not
+ # trails, and it's harmless to delete that -
+ # the item is being rebuilt anyway.
+ delete $pagestate{$page}{trail};
+ }
+ }
+ }
+
+ return $needsbuild;
+}
+
+my $scanned = 0;
+
+sub preprocess_trailoptions (@) {
+ my %params = @_;
+
+ if (exists $params{circular}) {
+ $pagestate{$params{page}}{trail}{circular} =
+ IkiWiki::yesno($params{circular});
+ }
+
+ if (exists $params{sort}) {
+ $pagestate{$params{page}}{trail}{sort} = $params{sort};
+ }
+
+ if (exists $params{reverse}) {
+ $pagestate{$params{page}}{trail}{reverse} = $params{reverse};
+ }
+
+ return "";
+}
+
+sub preprocess_trailitem (@) {
+ my $link = shift;
+ shift;
+
+ # avoid collecting everything in the preprocess stage if we already
+ # did in the scan stage
+ if (defined wantarray) {
+ return "" if $scanned;
+ }
+ else {
+ $scanned = 1;
+ }
+
+ my %params = @_;
+ my $trail = $params{page};
+
+ $link = linkpage($link);
+
+ add_link($params{page}, $link, 'trail');
+ push @{$pagestate{$params{page}}{trail}{contents}}, [link => $link];
+
+ return "";
+}
+
+sub preprocess_trailitems (@) {
+ my %params = @_;
+
+ # avoid collecting everything in the preprocess stage if we already
+ # did in the scan stage
+ if (defined wantarray) {
+ return "" if $scanned;
+ }
+ else {
+ $scanned = 1;
+ }
+
+ # trail members from a pagespec ought to be in some sort of order,
+ # and path is a nice obvious default
+ $params{sort} = 'path' unless exists $params{sort};
+ $params{reverse} = 'no' unless exists $params{reverse};
+
+ if (exists $params{pages}) {
+ push @{$pagestate{$params{page}}{trail}{contents}},
+ ["pagespec" => $params{pages}, $params{sort},
+ IkiWiki::yesno($params{reverse})];
+ }
+
+ if (exists $params{pagenames}) {
+ push @{$pagestate{$params{page}}{trail}{contents}},
+ [pagenames => (split ' ', $params{pagenames})];
+ }
+
+ return "";
+}
+
+sub preprocess_traillink (@) {
+ my $link = shift;
+ shift;
+
+ my %params = @_;
+ my $trail = $params{page};
+
+ $link =~ qr{
+ (?:
+ ([^\|]+) # 1: link text
+ \| # followed by |
+ )? # optional
+
+ (.+) # 2: page to link to
+ }x;
+
+ my $linktext = $1;
+ $link = linkpage($2);
+
+ add_link($params{page}, $link, 'trail');
+
+ # avoid collecting everything in the preprocess stage if we already
+ # did in the scan stage
+ my $already;
+ if (defined wantarray) {
+ $already = $scanned;
+ }
+ else {
+ $scanned = 1;
+ }
+
+ push @{$pagestate{$params{page}}{trail}{contents}}, [link => $link] unless $already;
+
+ if (defined $linktext) {
+ $linktext = pagetitle($linktext);
+ }
+
+ if (exists $params{text}) {
+ $linktext = $params{text};
+ }
+
+ if (defined $linktext) {
+ return htmllink($trail, $params{destpage},
+ $link, linktext => $linktext);
+ }
+
+ return htmllink($trail, $params{destpage}, $link);
+}
+
+# trail => [member1, member2]
+my %trail_to_members;
+# member => { trail => [prev, next] }
+# e.g. if %trail_to_members = (
+# trail1 => ["member1", "member2"],
+# trail2 => ["member0", "member1"],
+# )
+#
+# then $member_to_trails{member1} = {
+# trail1 => [undef, "member2"],
+# trail2 => ["member0", undef],
+# }
+my %member_to_trails;
+
+# member => 1
+my %rebuild_trail_members;
+
+sub trails_differ {
+ my ($old, $new) = @_;
+
+ foreach my $trail (keys %$old) {
+ 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;
+ $old_n = "" unless defined $old_n;
+ $new_p = "" unless defined $new_p;
+ $new_n = "" unless defined $new_n;
+ 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) {
+ if (! exists $old->{$trail}) {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+my $done_prerender = 0;
+
+sub prerender {
+ return if $done_prerender;
+
+ %trail_to_members = ();
+ %member_to_trails = ();
+
+ foreach my $trail (keys %pagestate) {
+ next unless exists $pagestate{$trail}{trail}{contents};
+
+ my $members = [];
+ my @contents = @{$pagestate{$trail}{trail}{contents}};
+
+ foreach my $c (@contents) {
+ if ($c->[0] eq 'pagespec') {
+ push @$members, pagespec_match_list($trail,
+ $c->[1], sort => $c->[2],
+ reverse => $c->[3]);
+ }
+ elsif ($c->[0] eq 'pagenames') {
+ my @pagenames = @$c;
+ shift @pagenames;
+ foreach my $page (@pagenames) {
+ if (exists $pagesources{$page}) {
+ push @$members, $page;
+ }
+ else {
+ # rebuild trail if it turns up
+ add_depends($trail, $page, deptype("presence"));
+ }
+ }
+ }
+ elsif ($c->[0] eq 'link') {
+ my $best = bestlink($trail, $c->[1]);
+ push @$members, $best if length $best;
+ }
+ }
+
+ if (defined $pagestate{$trail}{trail}{sort}) {
+ # re-sort
+ @$members = pagespec_match_list($trail, 'internal(*)',
+ list => $members,
+ sort => $pagestate{$trail}{trail}{sort});
+ }
+
+ if (IkiWiki::yesno $pagestate{$trail}{trail}{reverse}) {
+ @$members = reverse @$members;
+ }
+
+ # uniquify
+ my %seen;
+ my @tmp;
+ foreach my $member (@$members) {
+ push @tmp, $member unless $seen{$member};
+ $seen{$member} = 1;
+ }
+ $members = [@tmp];
+
+ for (my $i = 0; $i <= $#$members; $i++) {
+ my $member = $members->[$i];
+ my $prev;
+ $prev = $members->[$i - 1] if $i > 0;
+ my $next = $members->[$i + 1];
+
+ $member_to_trails{$member}{$trail} = [$prev, $next];
+ }
+
+ if ((scalar @$members) > 1 && $pagestate{$trail}{trail}{circular}) {
+ $member_to_trails{$members->[0]}{$trail}[0] = $members->[$#$members];
+ $member_to_trails{$members->[$#$members]}{$trail}[1] = $members->[0];
+ }
+
+ $trail_to_members{$trail} = $members;
+ }
+
+ foreach my $member (keys %pagestate) {
+ if (exists $pagestate{$member}{trail}{item} &&
+ ! exists $member_to_trails{$member}) {
+ $rebuild_trail_members{$member} = 1;
+ delete $pagestate{$member}{trail}{item};
+ }
+ }
+
+ foreach my $member (keys %member_to_trails) {
+ if (! exists $pagestate{$member}{trail}{item}) {
+ $rebuild_trail_members{$member} = 1;
+ }
+ else {
+ if (trails_differ($pagestate{$member}{trail}{item},
+ $member_to_trails{$member})) {
+ $rebuild_trail_members{$member} = 1;
+ }
+ }
+
+ $pagestate{$member}{trail}{item} = $member_to_trails{$member};
+ }
+
+ $done_prerender = 1;
+}
+
+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);
+ }
+
+ return %affected;
+}
+
+sub title_of ($) {
+ my $page = shift;
+ if (defined ($pagestate{$page}{meta}{title})) {
+ return $pagestate{$page}{meta}{title};
+ }
+ return pagetitle(IkiWiki::basename($page));
+}
+
+my $recursive = 0;
+
+sub pagetemplate (@) {
+ my %params = @_;
+ my $page = $params{page};
+ my $template = $params{template};
+
+ return unless length $page;
+
+ if ($template->query(name => 'trails') && ! $recursive) {
+ prerender();
+
+ $recursive = 1;
+ my $inner = template("trails.tmpl", blind_cache => 1);
+ IkiWiki::run_hooks(pagetemplate => sub {
+ shift->(%params, template => $inner)
+ });
+ $template->param(trails => $inner->output);
+ $recursive = 0;
+ }
+
+ if ($template->query(name => 'trailloop')) {
+ prerender();
+
+ my @trails;
+
+ # sort backlinks by page name to have a consistent order
+ foreach my $trail (sort keys %{$member_to_trails{$page}}) {
+
+ my $members = $trail_to_members{$trail};
+ my ($prev, $next) = @{$member_to_trails{$page}{$trail}};
+ my ($prevurl, $nexturl, $prevtitle, $nexttitle);
+
+ if (defined $prev) {
+ $prevurl = urlto($prev, $page);
+ $prevtitle = title_of($prev);
+ }
+
+ if (defined $next) {
+ $nexturl = urlto($next, $page);
+ $nexttitle = title_of($next);
+ }
+
+ push @trails, {
+ prevpage => $prev,
+ prevtitle => $prevtitle,
+ prevurl => $prevurl,
+ nextpage => $next,
+ nexttitle => $nexttitle,
+ nexturl => $nexturl,
+ trailpage => $trail,
+ trailtitle => title_of($trail),
+ trailurl => urlto($trail, $page),
+ };
+ }
+
+ $template->param(trailloop => \@trails);
+ }
+}
+
+1;
diff --git a/IkiWiki/Plugin/transient.pm b/IkiWiki/Plugin/transient.pm
index c0ad5fc11..d4eb005ea 100644
--- a/IkiWiki/Plugin/transient.pm
+++ b/IkiWiki/Plugin/transient.pm
@@ -8,7 +8,7 @@ use IkiWiki 3.00;
sub import {
hook(type => "getsetup", id => "transient", call => \&getsetup);
hook(type => "checkconfig", id => "transient", call => \&checkconfig);
- hook(type => "change", id => "transient", call => \&change);
+ hook(type => "rendered", id => "transient", call => \&rendered);
}
sub getsetup () {
@@ -33,7 +33,7 @@ sub checkconfig () {
}
}
-sub change (@) {
+sub rendered (@) {
foreach my $file (@_) {
# If the corresponding file exists in the transient underlay
# and isn't actually being used, we can get rid of it.
@@ -43,7 +43,7 @@ sub change (@) {
my $casualty = "$transientdir/$file";
if (srcfile($file) ne $casualty && -e $casualty) {
debug(sprintf(gettext("removing transient version of %s"), $file));
- IkiWiki::prune($casualty);
+ IkiWiki::prune($casualty, $transientdir);
}
}
}
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 05132a8a8..a90d202ee 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -262,12 +262,13 @@ sub render ($$) {
}
}
-sub prune ($) {
+sub prune ($;$) {
my $file=shift;
+ my $up_to=shift;
unlink($file);
my $dir=dirname($file);
- while (rmdir($dir)) {
+ while ((! defined $up_to || $dir =~ m{^\Q$up_to\E\/}) && rmdir($dir)) {
$dir=dirname($dir);
}
}
@@ -447,7 +448,7 @@ sub remove_del (@) {
}
foreach my $old (@{$oldrenderedfiles{$page}}) {
- prune($config{destdir}."/".$old);
+ prune($config{destdir}."/".$old, $config{destdir});
}
foreach my $source (keys %destsources) {
@@ -537,7 +538,7 @@ sub remove_unrendered () {
foreach my $file (@{$oldrenderedfiles{$page}}) {
if (! grep { $_ eq $file } @{$renderedfiles{$page}}) {
debug(sprintf(gettext("removing %s, no longer built by %s"), $file, $page));
- prune($config{destdir}."/".$file);
+ prune($config{destdir}."/".$file, $config{destdir});
}
}
}
@@ -800,6 +801,14 @@ sub refresh () {
derender_internal($file);
}
+ run_hooks(build_affected => sub {
+ my %affected = shift->();
+ while (my ($page, $message) = each %affected) {
+ next unless exists $pagesources{$page};
+ render($pagesources{$page}, $message);
+ }
+ });
+
my ($backlinkchanged, $linkchangers)=calculate_changed_links($changed,
$del, $oldlink_targets);
@@ -821,8 +830,13 @@ sub refresh () {
run_hooks(delete => sub { shift->(@$del, @$internal_del) });
}
if (%rendered) {
- run_hooks(change => sub { shift->(keys %rendered) });
+ run_hooks(rendered => sub { shift->(keys %rendered) });
+ run_hooks(change => sub { shift->(keys %rendered) }); # back-compat
}
+ my %all_changed = map { $_ => 1 }
+ @$new, @$changed, @$del,
+ @$internal_new, @$internal_changed, @$internal_del;
+ run_hooks(changes => sub { shift->(keys %all_changed) });
}
sub clean_rendered {
@@ -831,7 +845,7 @@ sub clean_rendered {
remove_unrendered();
foreach my $page (keys %oldrenderedfiles) {
foreach my $file (@{$oldrenderedfiles{$page}}) {
- prune($config{destdir}."/".$file);
+ prune($config{destdir}."/".$file, $config{destdir});
}
}
}
diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm
index c39aa2ef7..06be36dfc 100644
--- a/IkiWiki/Wrapper.pm
+++ b/IkiWiki/Wrapper.pm
@@ -93,12 +93,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 +181,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 +261,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"));
diff --git a/Makefile.PL b/Makefile.PL
index 69ba5e5ef..ef29a950c 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -75,7 +75,7 @@ underlay_install:
install -d $(DESTDIR)$(PREFIX)/share/ikiwiki
for dir in `cd underlays && $(FIND) . -follow -type d`; do \
install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
- for file in `$(FIND) underlays/$$dir -follow -maxdepth 1 -type f -not -name \\*.full.js -not -name \\*.full.css`; do \
+ for file in `$(FIND) underlays/$$dir -follow -maxdepth 1 -type f ! -name \\*.full.js ! -name \\*.full.css`; do \
cp -pRL $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir 2>/dev/null || \
install -m 644 $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
done; \
diff --git a/auto-blog.setup b/auto-blog.setup
index 0eb83ded6..5617daf9e 100644
--- a/auto-blog.setup
+++ b/auto-blog.setup
@@ -36,7 +36,7 @@ IkiWiki::Setup::Automator->import(
cgiurl => "http://$domain/~$ENV{USER}/$wikiname_short/ikiwiki.cgi",
cgi_wrapper => "$ENV{HOME}/public_html/$wikiname_short/ikiwiki.cgi",
adminemail => "$ENV{USER}\@$domain",
- add_plugins => [qw{goodstuff websetup comments blogspam calendar sidebar}],
+ add_plugins => [qw{goodstuff websetup comments blogspam calendar sidebar trail}],
disable_plugins => [qw{}],
libdir => "$ENV{HOME}/.ikiwiki",
rss => 1,
diff --git a/debian/changelog b/debian/changelog
index c8db76966..d1d132e1e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,138 @@
+ikiwiki (3.20121213) UNRELEASED; 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.
+
+ -- Joey Hess <joeyh@debian.org> Sat, 22 Dec 2012 16:15:24 -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
+ other config differences by linking to the mirror's CGI. (intrigeri)
+
+ -- Joey Hess <joeyh@debian.org> Fri, 29 Jun 2012 10:16:08 -0400
+
+ikiwiki (3.20120516) unstable; urgency=high
+
+ * meta: Security fix; add missing sanitization of author and authorurl.
+ CVE-2012-0220 Thanks, Raúl Benencia
+
+ -- Joey Hess <joeyh@debian.org> Wed, 16 May 2012 19:51:27 -0400
+
+ikiwiki (3.20120419) unstable; urgency=low
+
+ * Remove dead link from plugins/teximg. Closes: #664885
+ * inline: When the pagenames list includes pages that do not exist, skip
+ them.
+ * meta: Export author information in html <meta> tag. Closes: #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
+ 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)
+
+ -- Joey Hess <joeyh@debian.org> Thu, 19 Apr 2012 15:32:07 -0400
+
+ikiwiki (3.20120319) unstable; urgency=low
+
+ * 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
+ * openid-jquery.js: Update URL of Wordpress favicon. Closes: #660549
+ * Drop the version attribute on the generator tag in Atom feeds
+ to make builds more reproducible. Closes: #661569 (Paul Wise)
+ * shortcut: Support Wikipedia's form of url-encoding for unicode
+ characters, which involves mojibake. Closes: #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.
+
+ -- Joey Hess <joeyh@debian.org> Mon, 19 Mar 2012 14:24:43 -0400
+
ikiwiki (3.20120202) unstable; urgency=low
* mdwn: Added nodiscount setting, which can be used to avoid using the
diff --git a/debian/compat b/debian/compat
index 7f8f011eb..ec635144f 100644
--- a/debian/compat
+++ b/debian/compat
@@ -1 +1 @@
-7
+9
diff --git a/debian/control b/debian/control
index 9403dfb44..9c6ab7ad9 100644
--- a/debian/control
+++ b/debian/control
@@ -1,7 +1,7 @@
Source: ikiwiki
Section: web
Priority: optional
-Build-Depends: perl, debhelper (>= 7.0.50)
+Build-Depends: perl, debhelper (>= 9)
Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl,
libtext-markdown-discount-perl,
libtimedate-perl, libhtml-template-perl,
@@ -10,7 +10,7 @@ Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl,
libfile-chdir-perl, libyaml-libyaml-perl, python-support
Maintainer: Joey Hess <joeyh@debian.org>
Uploaders: Josh Triplett <josh@freedesktop.org>
-Standards-Version: 3.9.2
+Standards-Version: 3.9.3
Homepage: http://ikiwiki.info/
Vcs-Git: git://git.ikiwiki.info/
@@ -38,7 +38,7 @@ Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl,
libsparkline-php, texlive, dvipng, libtext-wikicreole-perl,
libsort-naturally-perl, libtext-textile-perl, libhighlight-perl,
po4a (>= 0.35-1), gettext, libnet-inet6glue-perl,
- libtext-multimarkdown-perl
+ libtext-multimarkdown-perl, libxml-writer-perl
Conflicts: ikiwiki-plugin-table
Replaces: ikiwiki-plugin-table
Provides: ikiwiki-plugin-table
diff --git a/debian/copyright b/debian/copyright
index 74418281d..e1a81932b 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -1,4 +1,4 @@
-Format: http://dep.debian.net/deps/dep5/
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: native package
Files: *
@@ -153,6 +153,14 @@ Files: IkiWiki/Plugin/rsync.pm
Copyright: © 2009 Amitai Schlair
License: BSD-2-clause
+Files: IkiWiki/Plugin/osm.pm
+Copyright: © 2011 Blars Blarson, Antoine Beaupré
+License: GPL-2
+
+Files: IkiWiki/Plugin/trail.pm
+Copyright: 2009-2012 Simon McVittie <http://smcv.pseudorandom.co.uk/>
+License: GPL-2+
+
Files: doc/logo/*
Copyright: © 2006 Recai Oktaş <roktas@debian.org>
License: GPL-2+
@@ -240,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
diff --git a/doc/anchor.mdwn b/doc/anchor.mdwn
index 012e52fa0..12d193fe9 100644
--- a/doc/anchor.mdwn
+++ b/doc/anchor.mdwn
@@ -1,3 +1,11 @@
ikiwiki works with anchors in various situations.
+You can insert anchors directly in the body of a page and it will be used on the resulting HTML, for example:
+
+ <a name="anchor"></a>
+
+... will make the link [[anchor#anchor]] work..
+
+<a name="anchor"></a>
+
This page accumulates links to the concept of anchors.
diff --git a/doc/basewiki/sandbox.mdwn b/doc/basewiki/sandbox.mdwn
index c66534fc2..e76bdb8d1 100644
--- a/doc/basewiki/sandbox.mdwn
+++ b/doc/basewiki/sandbox.mdwn
@@ -30,3 +30,5 @@ Bulleted list
* item
[[ikiwiki/WikiLink]]
+
+[[!calendar type="month" pages="blog/*"]]
diff --git a/doc/branches.mdwn b/doc/branches.mdwn
index b7b9164ac..232f2ce6a 100644
--- a/doc/branches.mdwn
+++ b/doc/branches.mdwn
@@ -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
diff --git a/doc/bugs/CGI_wrapper_doesn__39__t_store_PERL5LIB_environment_variable.mdwn b/doc/bugs/CGI_wrapper_doesn__39__t_store_PERL5LIB_environment_variable.mdwn
new file mode 100644
index 000000000..81a5abf28
--- /dev/null
+++ b/doc/bugs/CGI_wrapper_doesn__39__t_store_PERL5LIB_environment_variable.mdwn
@@ -0,0 +1,28 @@
+If you wish to install ikiwiki in your home directory (for example because you don't have root access), you need to set environment variables (such as PATH and PERL5LIB) to point to these directories that contain your personal copy of IkiWiki.
+
+The CGI wrapper remembers PATH, but not the environment variable PERL5LIB. Consequently, it will look for plugins and so on in the usual system directories, not in your personal copy. This is particularly insidious if you have a system copy of a different version installed, as your CGI wrapper may then load in code from this version.
+
+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
index 000000000..de95fb7d3
--- /dev/null
+++ b/doc/bugs/CamelCase_and_Recent_Changes_create_spurious_Links.mdwn
@@ -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.
diff --git a/doc/bugs/Existing_Discussion_pages_appear_as_non-existing.mdwn b/doc/bugs/Existing_Discussion_pages_appear_as_non-existing.mdwn
new file mode 100644
index 000000000..9ba4ede6e
--- /dev/null
+++ b/doc/bugs/Existing_Discussion_pages_appear_as_non-existing.mdwn
@@ -0,0 +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
index 000000000..a0645477e
--- /dev/null
+++ b/doc/bugs/Linkmap_doesn__39__t_support_multiple_linkmaps_on_a_single_page.mdwn
@@ -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
index 000000000..4c7b12e8c
--- /dev/null
+++ b/doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn
@@ -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/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn b/doc/bugs/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn
deleted file mode 100644
index ab4dc8953..000000000
--- a/doc/bugs/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn
+++ /dev/null
@@ -1,13 +0,0 @@
-I'm writing [pykipandoc plugin](https://github.com/temmen/pykipandoc/blob/master/pykipandoc), that work at least as pandoc-iki.
-
-It works in compile mode, editing pages in web mode however results in
-
- pandoc: : hGetContents: invalid argument (Invalid or incomplete multibyte or wide character)
-
-I think that is because HTTP POST request building editpage doesn't correctly manage utf-8 contents: see strange chars in this form-data name="editcontent"?
-
- This principle has guided pandoc’s decisions in finding syntax for tables, footnotes, and other extensions.
-
-Please, any advice can be sent to [GitHub pykipandoc](https://github.com/temmen/pykipandoc) (some other info there on the [README](https://github.com/temmen/pykipandoc/blob/master/README.md)) and to [temmenel(at)gmail(dot)com](mailto:temmenel@gmail.com).
-
-¡Thank you all!
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
index 000000000..a43bd408f
--- /dev/null
+++ b/doc/bugs/Remove_redirect_pages_from_inline_pages.mdwn
@@ -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
index 000000000..e93f4e546
--- /dev/null
+++ b/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn
@@ -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
index 000000000..629aba71e
--- /dev/null
+++ b/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn
@@ -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/Underscores_in_links_don__39__t_appear.mdwn b/doc/bugs/Underscores_in_links_don__39__t_appear.mdwn
new file mode 100644
index 000000000..b25dfb7fe
--- /dev/null
+++ b/doc/bugs/Underscores_in_links_don__39__t_appear.mdwn
@@ -0,0 +1,18 @@
+Observed behavior:
+
+When I create a link like \[[cmd_test]] , the link appears as 'cmd test'.
+
+Expected behavior:
+
+I would like to be able to create links with underscores. I realize this is a feature, and I searched for ways to escape the underscore so it would appear, but I didn't find any.
+
+> as a workaround, you can use \[[cmd\_\_95\_\_test|cmd_test]] (which will link to a page named "cmd test" at the url location "cmd\_test") or \[[cmd\_\_95\_\_test]] (which will link to a page named "cmd\_test" at the url location "cmd\_\_95\_\_test"). i would, from my limited understanding of ikiwiki internals, consider the bug valid, and suggest that
+>
+> * explicit link text be not subject to de-escaping (why should it; this would be the short term solution)
+> * escaped page names never be used in user visible parts of ikiwiki (in my opinion, a user should not need to know about those internals, especially as they are configuration dependant (wiki_file_regexp))
+>
+> note that in [[ikiwiki/wikilink]], that very behavior is documented; it says that "\[[foo\_bar|Sandbox]]" will show as "foo bar". (although you can't tell that apart from "foo\_bar" easily because it's a hyperlink).
+>
+> i assume that this behavior stems from times when wikilinks and [[ikiwiki/directive]]s were not distinguished by \[[ vs \[[! but by the use of whitespace in directives, so whitespace had to be avoided in wikilinks.
+>
+> --[[chrysn]]
diff --git a/doc/bugs/W3MMode_still_uses_http:__47____47__localhost__63__.mdwn b/doc/bugs/W3MMode_still_uses_http:__47____47__localhost__63__.mdwn
index 3c28e379b..34eecef8c 100644
--- a/doc/bugs/W3MMode_still_uses_http:__47____47__localhost__63__.mdwn
+++ b/doc/bugs/W3MMode_still_uses_http:__47____47__localhost__63__.mdwn
@@ -22,3 +22,13 @@ Of course, the next time I rerun ikiwiki --setup, it will overwrite my wrapper-w
I made a logfile of all the args, env, and stdin/stdout to/from my wrapper. If you're interested, I'll email it to you. I wasn't able to attach it here.
-- [[terry|tjgolubi]]
+
+I confirm that the supplied w3mmode setup appears not to work. When I try to edit a page and save it, w3m tries to access an URL beginning http://localhost/ . The HTML source of the edit page contains a BASE URL beginning with http://localhost. It should not. Maybe this is a result of changes a while back, where use of absolute URLs was enforced in various places in Ikiwiki.
+
+-- Martin
+
+The problem is that IkiWiki::CGI::cgitemplate() and IkiWiki::CGI::redirect() use Perl's CGI::url() to determine the absolute URL of the CGI script when it is being executed. url() generates an URL beginning http://localhost. As w3m's serverless CGI mode is rather unusual, presumably there's no provision for the URL of a CGI script beginning file:///, even if there's a way to specify that.
+
+A quick workaround might be to force the use of $config{url} instead of $cgi->url as a base for URLs when w3mmode is set.
+
+-- Martin
diff --git a/doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn b/doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn
new file mode 100644
index 000000000..7282a71b8
--- /dev/null
+++ b/doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8.mdwn
@@ -0,0 +1,11 @@
+import os
+os.environment['LANG'] = 'it_IT.utf-8'
+
+Suona plausibile?
+
+[GitHub pykipandoc](https://github.com/temmen/pykipandoc) -- Temmen
+
+> The place to put contrib plugins is in [[plugins/contrib]].
+>
+> Closing this bug report as whatever it is that was fixed is apparently not an ikiwiki
+> bug.. I guess. [[done]] --[[Joey]]
diff --git a/doc/bugs/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8/discussion.mdwn b/doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8/discussion.mdwn
index 9cdc9e746..9cdc9e746 100644
--- a/doc/bugs/Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8/discussion.mdwn
+++ b/doc/bugs/__91__SOLVED__93___Pandoc_plugin_and_UTF-8:_IkiWiki_and_UTF-8/discussion.mdwn
diff --git a/doc/bugs/bug_in_cgiurl_port.mdwn b/doc/bugs/bug_in_cgiurl_port.mdwn
new file mode 100644
index 000000000..373657814
--- /dev/null
+++ b/doc/bugs/bug_in_cgiurl_port.mdwn
@@ -0,0 +1,15 @@
+I think there's a bug in the code that determines if the cgiurl is relative
+to the url. If one has a different port than the other, they're not
+relative, and I hear Fil encountered an issue where the wrong port was then
+used. --[[Joey]]
+
+> I tested, setting cgiurl to a nonstandard port. After rebuilding,
+> pages used the full url. So I don't see a bug here, or am missing
+> something from my memory of the report (which was done the bad way, on
+> IRC). [[done]] --[[Joey]]
+
+> > Sorry about wittering on IRC instead of reporting proper bugs.
+> >
+> > The setup I have is nginx in front of apache, so that nginx is listening on port 80, apache is on port 81, and ikiwiki is being served by apache. After upgrading to 3.20120203 (backported to squeeze) I found that the URLs in the edit page all have the port set as :81 ... but now that I look at it more closely, that is the case for several ikiwiki-hosting controlled sites, but not for a few other sites that are also on the same machine, so it must be some difference between the settings for the sites, either in ikiwiki, or apache, or perhaps even nginx. Anyway, on the affected sites, explicitly including a port :80 in the cgiurl fixes the problem.
+
+> > So, for the moment, this bug report is a bit useless, until I find out what is causing the ikiwiki-hosting sites to be beffuddled, so it should probably stay closed -[[fil]]
diff --git a/doc/bugs/cannot_clone_documented_git_repo.mdwn b/doc/bugs/cannot_clone_documented_git_repo.mdwn
new file mode 100644
index 000000000..4f2ec66f3
--- /dev/null
+++ b/doc/bugs/cannot_clone_documented_git_repo.mdwn
@@ -0,0 +1,16 @@
+ smcv@vasks:~$ git clone git://git.ikiwiki.info/
+ Cloning into git.ikiwiki.info...
+ fatal: read error: Connection reset by peer
+
+I tried this from a UK consumer ISP, my virtual server in the
+UK, and vasks (aka alioth.debian.org) in the Netherlands,
+with the same results. I can't update my clone from `origin`
+either; for the moment I'm using the github mirror instead.
+--[[smcv]]
+
+> Strange.. The git-daemon was not running, but one child was running
+> waiting on an upload-pack, but not accepting new connections. Nothing
+> in the logs about what happened to the parent. The monitor that checks
+> services are running was satisfied with the child.. I've made it
+> restart if the parent pid is no longer running, which should avoid
+> this problem in the future. --[[Joey]] [[done]]
diff --git a/doc/bugs/conditional_preprocess_during_scan.mdwn b/doc/bugs/conditional_preprocess_during_scan.mdwn
index 23b9fd2cc..1ba142331 100644
--- a/doc/bugs/conditional_preprocess_during_scan.mdwn
+++ b/doc/bugs/conditional_preprocess_during_scan.mdwn
@@ -1,4 +1,4 @@
-[[!template id=gitbranch branch=GiuseppeBilotta/scanif author="Giuseppe Bilotta"]]
+[[!template id=gitbranch branch=GiuseppeBilotta/scanif author="[[GiuseppeBilotta]]"]]
When a directive that should be run during scan preprocessing is inside
an if directive, it doesn't get called because the if preprocessing does
diff --git a/doc/bugs/definition_lists_should_be_bold.mdwn b/doc/bugs/definition_lists_should_be_bold.mdwn
new file mode 100644
index 000000000..a72206b8c
--- /dev/null
+++ b/doc/bugs/definition_lists_should_be_bold.mdwn
@@ -0,0 +1,27 @@
+Definition lists do not look great here...
+
+Here is an example.
+
+<dl>
+<dt>this is a term</dt>
+<dd>and this is its definition.</dd>
+</dl>
+
+(This wiki doesn't support Markdown's extended definition lists, but still, this is valid markup.)
+
+I believe `<dt>` should be made bold. I have added this to my `local.css`, and I would hate to add this all the time forever:
+
+ /* definition lists look better with the term in bold */
+ dt
+ {
+ font-weight: bold;
+ }
+
+:) How does that look? I can provide a patch for the base wiki if you guys really want... ;) -- [[anarcat]]
+
+> What you dislike seems to be the default rendering of definition lists by
+> browsers. I don't think it's ikiwiki's place to override browser defaults
+> for standard markup in the document body, at least not in the default
+> antitheme. --[[Joey]]
+
+> > How about in the actiontab theme then? :)
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
index 000000000..deec208ba
--- /dev/null
+++ b/doc/bugs/feeds_get_removed_in_strange_conditions.mdwn
@@ -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]]
diff --git a/doc/bugs/find_gnuism.mdwn b/doc/bugs/find_gnuism.mdwn
index 89eee7816..65ee10657 100644
--- a/doc/bugs/find_gnuism.mdwn
+++ b/doc/bugs/find_gnuism.mdwn
@@ -3,3 +3,5 @@
Whoops, somehow missed a spot on the last incarnation of this branch.
`find -not` doesn't work on NetBSD and `find !` runs equivalently
for me. Fixed in 9659272e25fac37f896991dab01a05b4f4c85ccb.
+
+> [[done]] --[[Joey]]
diff --git a/doc/bugs/graphviz_demo_generates_empty_graph.mdwn b/doc/bugs/graphviz_demo_generates_empty_graph.mdwn
new file mode 100644
index 000000000..5b96f148e
--- /dev/null
+++ b/doc/bugs/graphviz_demo_generates_empty_graph.mdwn
@@ -0,0 +1,15 @@
+The following code in our sandbox generates an empty graph:
+
+ [[!graph src=""""
+ google [ href="http://google.com/" ]
+ sandbox [ href=\[[SandBox]] ]
+ help [ href=\[[ikiwiki/formatting]] ]
+ newpage [ href=\[[NewPage]] ]
+
+ google -> sandbox -> help -> newpage -> help -> google;
+ """"]]
+
+It is the exact same thing that on the [[ikiwiki/directive/graph/]] directive documentation, from the [[plugins/graphviz]] plugin. This is ikiwiki 3.20120203 on Debian wheezy and graphviz is installed (2.26.3-10). Note that the first demo actually works. See <http://mesh.openisp.ca/sandbox> --[[anarcat]]
+
+> Looking at the example shows too many double quoted. [[fixed|done]]
+> --[[Joey]]
diff --git a/doc/bugs/ipv6_address_in_comments.mdwn b/doc/bugs/ipv6_address_in_comments.mdwn
new file mode 100644
index 000000000..90391650a
--- /dev/null
+++ b/doc/bugs/ipv6_address_in_comments.mdwn
@@ -0,0 +1,19 @@
+If I make a comment from an ipv4 address
+I see the commenter's ipv4 address logged in the comment file.
+
+If I make a comment from an ipv6 address
+I see nothing.
+
+There is a sanity check in /usr/share/perl5/IkiWiki/Plugin/comments.pm
+line 447 (according to today's version) there is an ipv4 specific regexp.
+
+I removed the regexp and used the value without this added check and it fixed
+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/jquery-ui.min.css_missing_some_image_files.mdwn b/doc/bugs/jquery-ui.min.css_missing_some_image_files.mdwn
new file mode 100644
index 000000000..dd026f4ec
--- /dev/null
+++ b/doc/bugs/jquery-ui.min.css_missing_some_image_files.mdwn
@@ -0,0 +1,14 @@
+This is very minor. Noticed in nginx's logs that jquery-ui.min.css (the attachment plugin uses this) keeps referencing some png files that are not available in public_html/mywiki/ikiwiki/images/ These should be included in underlays/attachment/ikiwiki/images/ in the source repo and seem to be copied from /usr/local/share/ikiwiki/attachment/ikiwiki/images/ when I compile a new wiki. The complete list of images jquery-ui.min.css is looking for can be found here. https://github.com/jquery/jquery-ui/tree/1.8.14/themes/base/images
+
+> Do you have a list of files that are *actually* used when ikiwiki is
+> running? I don't want to include a lot of files that jquery only
+> uses in other situations. The currently included files are exactly those
+> that I see it try to use. --[[Joey]]
+
+Fair enough. These 3 files are the only ones that appear consistently in nginx error logs.
+ui-bg_glass_75_dadada_1x400.png
+ui-icons_454545_256x240.png
+ui-bg_glass_95_fef1ec_1x400.png
+
+> Hmm, that's most of the missing ones. I just added them all. [[done]]
+> --[[Joey]]
diff --git a/doc/bugs/linkmap_displays_underscore_escapes.mdwn b/doc/bugs/linkmap_displays_underscore_escapes.mdwn
new file mode 100644
index 000000000..f74ca5119
--- /dev/null
+++ b/doc/bugs/linkmap_displays_underscore_escapes.mdwn
@@ -0,0 +1,18 @@
+[[ikiwiki/directive/linkmap]]s display the file name instead of the pagetitle, showing unsightly underscore escapes and underscores instead of blanks to users.
+
+the attached [[!taglink patch]] fixes this; from its commit message:
+
+ display the pagetitle() in linkmaps
+
+ without this patch, linkmaps display underscores and underscore escape
+ sequences in the rendered output.
+
+ this introduces a pageescape function, which invoces pagetitle() to get
+ rid of underscore escapes and wraps the resulting utf8 string
+ appropriately for inclusion in a dot file (using dot's html encoding
+ because it can represent the '\"' dyad properly, and because it doesn't
+ need special-casing of newlines).
+
+the output will look much better (at least in my wikis) with the "[[bugs/pagetitle function does not respect meta titles]]" issue fixed.
+
+the patch is stored in [[the patch.pl]] as created by git-format-patch. (btw, what's the preferred way to send patches, apart from creating a git branch somewhere?)
diff --git a/doc/bugs/linkmap_displays_underscore_escapes/the_patch.pl b/doc/bugs/linkmap_displays_underscore_escapes/the_patch.pl
new file mode 100644
index 000000000..6b56c553e
--- /dev/null
+++ b/doc/bugs/linkmap_displays_underscore_escapes/the_patch.pl
@@ -0,0 +1,68 @@
+From efbb1121ffdc146f5c9a481a51f23ad151b9f240 Mon Sep 17 00:00:00 2001
+From: chrysn <chrysn@fsfe.org>
+Date: Thu, 15 Mar 2012 14:38:42 +0100
+Subject: [PATCH] display the pagetitle() in linkmaps
+
+without this patch, linkmaps display underscores and underscore escape
+sequences in the rendered output.
+
+this introduces a pageescape function, which invoces pagetitle() to get
+rid of underscore escapes and wraps the resulting utf8 string
+appropriately for inclusion in a dot file (using dot's html encoding
+because it can represent the '\"' dyad properly, and because it doesn't
+need special-casing of newlines).
+---
+ IkiWiki/Plugin/linkmap.pm | 17 +++++++++++++++--
+ 1 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/IkiWiki/Plugin/linkmap.pm b/IkiWiki/Plugin/linkmap.pm
+index ac26e07..b5ef1a1 100644
+--- a/IkiWiki/Plugin/linkmap.pm
++++ b/IkiWiki/Plugin/linkmap.pm
+@@ -5,6 +5,7 @@ use warnings;
+ use strict;
+ use IkiWiki 3.00;
+ use IPC::Open2;
++use HTML::Entities;
+
+ sub import {
+ hook(type => "getsetup", id => "linkmap", call => \&getsetup);
+@@ -22,6 +23,18 @@ sub getsetup () {
+
+ my $mapnum=0;
+
++sub pageescape {
++ my $item = shift;
++ # encoding explicitly in case ikiwiki is configured to accept <> or &
++ # in file names
++ my $title = pagetitle($item, 1);
++ # it would not be necessary to encode *all* the html entities (<> would
++ # be sufficient, &" probably a good idea), as dot accepts utf8, but it
++ # isn't bad either
++ $title = encode_entities($title);
++ return("<$title>");
++}
++
+ sub preprocess (@) {
+ my %params=@_;
+
+@@ -63,7 +76,7 @@ sub preprocess (@) {
+ my $show=sub {
+ my $item=shift;
+ if (! $shown{$item}) {
+- print OUT "\"$item\" [shape=box,href=\"$mapitems{$item}\"];\n";
++ print OUT pageescape($item)." [shape=box,href=\"$mapitems{$item}\"];\n";
+ $shown{$item}=1;
+ }
+ };
+@@ -74,7 +87,7 @@ sub preprocess (@) {
+ foreach my $endpoint ($item, $link) {
+ $show->($endpoint);
+ }
+- print OUT "\"$item\" -> \"$link\";\n";
++ print OUT pageescape($item)." -> ".pageescape($link).";\n";
+ }
+ }
+ print OUT "}\n";
+--
+1.7.9.1
diff --git a/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn b/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn
new file mode 100644
index 000000000..26945ee07
--- /dev/null
+++ b/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn
@@ -0,0 +1,34 @@
+The [[ikiwiki/directive/listdirectives]]` directive doesn't register a link between the page and the subpages. This is a problem because then the [[ikiwiki/directive/orphans]] directive then marks the directives as orphans... Maybe it is a but with the orphans directive however... A simple workaround is to exclude those files from the orphans call... --[[anarcat]]
+
+> There's a distinction between wikilinks (matched by `link()`,
+> `backlink()` etc.) and other constructs that produce a
+> hyperlink. Some directives count as a wikilink (like `tag`)
+> but many don't (notably `inline`, `map`, `listdirectives`,
+> and `orphans` itself). As documented in
+> [[ikiwiki/directive/orphans]], orphans will tend to list
+> pages that are only matched by inlines/maps, too.
+>
+> The rule of thumb seems to be that a link to a particular
+> page counts as a wikilink, but a directive that lists
+> pages matching some pattern does not; so I think
+> `listdirectives` is working as intended here.
+> `orphans` itself obviously shouldn't count as a wikilink,
+> because that would defeat the point of it :-)
+>
+> Anything that uses a [[ikiwiki/pagespec]] to generate links,
+> like `inline` and `map`, can't generate wikilinks, because
+> wikilinks are gathered during the scan phase, and pagespecs
+> can't be matched until after the scan phase has finished
+> (otherwise, it'd be non-deterministic whether all wikilinks
+> had been seen yet, and `link()` in pagespecs wouldn't work
+> predictably).
+>
+> I suggest just using something like:
+>
+> \[[!orphans pages="* and !blog/* and !ikiwiki/directive/*"]]
+>
+> This wiki's example of listing [[plugins/orphans]] has a
+> more elaborate pagespec, which avoids bugs, todo items etc.
+> as well.
+>
+> --[[smcv]]
diff --git a/doc/bugs/must_save_before_uploading_more_than_one_attachment.mdwn b/doc/bugs/must_save_before_uploading_more_than_one_attachment.mdwn
index 20d5dc8e6..bd5ddc6d5 100644
--- a/doc/bugs/must_save_before_uploading_more_than_one_attachment.mdwn
+++ b/doc/bugs/must_save_before_uploading_more_than_one_attachment.mdwn
@@ -26,7 +26,19 @@ Is this a problem on my site or does anyone else see this?
>>> The right fix would probably be for `do=create` to allow replacing a page
>>> in the transient underlay without complaining (like the behaviour that
->>> `do=edit` normally has). That wouldn't help you unless [[plugins/autoindex]]
+>>> `do=edit` normally has).
+
+>>>> ... which it turns out it already does. --[[smcv]]
+
+>>> That wouldn't help you unless [[plugins/autoindex]]
>>> defaulted to making transient pages (`autoindex_commit => 0`), but if we
>>> can fix [[removal_of_transient_pages]] then maybe that default can change?
>>> --[[smcv]]
+
+>>>> It turns out that with `autoindex_commit => 0`, the failure mode is
+>>>> different. The transient map is created when you attach the
+>>>> attachment. When you save the page, it's written into the srcdir,
+>>>> the map is deleted from the transientdir, and the ctime/mtime
+>>>> in the indexdb are those of the file in the srcdir, but for some
+>>>> reason the HTML output isn't re-generated (despite a refresh
+>>>> happening). --[[smcv]]
diff --git a/doc/bugs/nonexistent_pages_in_inline_pagenames_do_not_add_a_dependency.mdwn b/doc/bugs/nonexistent_pages_in_inline_pagenames_do_not_add_a_dependency.mdwn
new file mode 100644
index 000000000..486be0363
--- /dev/null
+++ b/doc/bugs/nonexistent_pages_in_inline_pagenames_do_not_add_a_dependency.mdwn
@@ -0,0 +1,44 @@
+In commit aaa72a3a8, Joey noted:
+
+> bestlink returns '' if no existing page matches a link. This propigated
+> through inline and other plugins, causing uninitialized value warnings, and
+> in some cases (when filecheck was enabled) making the whole directive fail.
+>
+> Skipping the empty results fixes that, but this is papering over another
+> problem: If the missing page is later added, there is not dependency
+> information to know that the inline needs to be updated. Perhaps smcv will
+> fix that later.
+
+Potential ways this could be addressed:
+
+* Add a presence dependency on everything the reference could match:
+ so if the `inline` is on `a/b/c` and the missing page is `m`,
+ add a `$depends_simple` `$DEPEND_PRESENCE` dependency on `a/b/c/m`,
+ `a/b/m`, `a/m`, `m` and (if configured) `$config{userdir}/m`
+
+* Make the page names in `\[[!inline pagenames=...]]` count as wikilinks,
+ changing the behaviour of `link()` and backlinks, but causing appropriate
+ rebuilds via the special cases in `IkiWiki::Render`
+
+* Extend the special cases in `IkiWiki::Render` to consider a superset of
+ wikilinks, to which `pagenames` would add its named pages, without
+ affecting `link()` and backlinks
+
+(Note that `\[[!inline pages=...]]` cannot count as wikilinks, because
+pagespecs can contain `link()`, so can't be evaluated until we know what
+wikilinks exist, at which point it's too late to add more wikilinks.)
+
+I think the presence dependency is probably the cleanest approach?
+--[[smcv]]
+
+> I think it was possibly a mistake to use wikilink style lookup for
+> `pagenames`. --[[Joey]]
+
+[[!tag patch]] [[!template id=gitbranch branch=smcv/literal-pagenames author="[[smcv]]"]]
+>> I used the linking rules to make references to
+>> "nearby" pages convenient, but if you'd prefer "absolute"
+>> semantics, my `ready/literal-pagenames` branch does that. For
+>> my main use-case for `pagenames` ([[plugins/contrib/album]])
+>> it's fine either way. --[[smcv]]
+
+>>> Ok, [[merged|done]]. I think it's more consistent this way. --[[Joey]]
diff --git a/doc/bugs/opendiscussion_should_respect_the_discussion_option.mdwn b/doc/bugs/opendiscussion_should_respect_the_discussion_option.mdwn
index e4bc736e3..cacd2b73b 100644
--- a/doc/bugs/opendiscussion_should_respect_the_discussion_option.mdwn
+++ b/doc/bugs/opendiscussion_should_respect_the_discussion_option.mdwn
@@ -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
index 000000000..a5c951671
--- /dev/null
+++ b/doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn
@@ -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
index 000000000..2b20240c4
--- /dev/null
+++ b/doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn
@@ -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
index 000000000..0677d0e74
--- /dev/null
+++ b/doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn
@@ -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]]
diff --git a/doc/bugs/osm_linkto__40____41___usage_breaks_map_rendering.mdwn b/doc/bugs/osm_linkto__40____41___usage_breaks_map_rendering.mdwn
new file mode 100644
index 000000000..89c08b73c
--- /dev/null
+++ b/doc/bugs/osm_linkto__40____41___usage_breaks_map_rendering.mdwn
@@ -0,0 +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]]
diff --git a/doc/bugs/osm_sometimes_looses_some_nodes.mdwn b/doc/bugs/osm_sometimes_looses_some_nodes.mdwn
new file mode 100644
index 000000000..9de1b4e23
--- /dev/null
+++ b/doc/bugs/osm_sometimes_looses_some_nodes.mdwn
@@ -0,0 +1,5 @@
+I have heard repeated reports on <http://mesh.openisp.ca/> that editing a page that has a waypoint in it will sometimes make that waypoint disappear from the main map. I have yet to understand why that happens or how, but multiple users have reported that.
+
+A workaround is to rebuild the whole wiki, although sometimes re-editing the same page will bring the waypoint back on the map.
+
+I have been able to reproduce this by simply creating a new node. It will not show up on the map until the wiki is rebuilt or the node is resaved. -- [[anarcat]]
diff --git a/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn b/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn
index c6e3cd4fd..15d28f989 100644
--- a/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn
+++ b/doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn
@@ -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/removal_of_transient_pages.mdwn b/doc/bugs/removal_of_transient_pages.mdwn
index 2667a2b83..4843b5900 100644
--- a/doc/bugs/removal_of_transient_pages.mdwn
+++ b/doc/bugs/removal_of_transient_pages.mdwn
@@ -25,3 +25,49 @@ pages, until this is fixed. --[[Joey]]
>>>> to affect by web edits. The `-f` check seems rather redundant,
>>>> surely if it's in `%pagesources` ikiwiki has already verified it's
>>>> safe. --[[Joey]]
+
+----
+
+[[!template id=gitbranch branch=smcv/ready/transient-rm author="[[Simon McVittie|smcv]]"]]
+
+Here's a branch. It special-cases the `$transientdir`, but in such a way
+that the special case could easily be extended to other locations where
+deletion should be allowed.
+
+It also changes `IkiWiki::prune()` to optionally stop pruning empty
+parent directories at the point where you'd expect it to (for instance,
+previously it would remove the `$transientdir` itself, if it turns out
+to be empty), and updates callers.
+
+The new `prune` API looks like this:
+
+ IkiWiki::prune("$config{srcdir}/$file", $config{srcdir});
+
+with the second argument optional. I wonder whether it ought to look
+more like `writefile`:
+
+ IkiWiki::prune($config{srcdir}, $file);
+
+although that would be either an incompatible change to internal API
+(forcing all callers to update to 2-argument), or being a bit
+inconsistent between the one-and two-argument forms. Thoughts?
+
+--[[smcv]]
+
+> I've applied the branch as-is, so this bug is [[done]].
+> `prune` is not an exported API so changing it would be ok..
+> I think required 2-argument would be better, but have not checked
+> all the call sites to see if the `$file` is available split out
+> as that would need. --[[Joey]]
+
+[[!template id=gitbranch branch=smcv/ready/prune author="[[Simon McVittie|smcv]]"]]
+
+>> Try this, then? I had to make some changes to `attachment`
+>> to make the split versions available. I suggest reviewing
+>> patch-by-patch.
+>>
+>> 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
+>> change, the held attachment is committed to the `srcdir` when you
+>> rename it, which doesn't seem to be the intention either? --[[smcv]]
diff --git a/doc/bugs/renaming_a_page_destroyed_some_links.mdwn b/doc/bugs/renaming_a_page_destroyed_some_links.mdwn
new file mode 100644
index 000000000..fd7a80bd4
--- /dev/null
+++ b/doc/bugs/renaming_a_page_destroyed_some_links.mdwn
@@ -0,0 +1,12 @@
+When renaming a page here, ikiwiki destroyed unrelated links from unrelated pages. You can see the effect [here](http://mesh.openisp.ca/recentchanges/#diff-dc8dfa96efd3a4d649f571c3aa776f20b3ce0131), or by checking out the git tree (`git://mesh.openisp.ca/
+`) and looking at commit `dc8dfa96efd3a4d649f571c3aa776f20b3ce0131`.
+
+The renamed page was `configuration/bat-hosts` to `configuration/batman/bat-hosts` and the deleted links were ``\[[AUR | https://aur.archlinux.org/]]` and `\[[CHANGELOG|http://svn.dd-wrt.com:8000/browser/src/router/batman-adv/CHANGELOG]]`. --[[anarcat]]
+
+> <del>Nevermind that, that commit was unrelated to the rename and probably an operator error.</del> - No, actually, I just reproduced this again - see [another example](http://mesh.openisp.ca/recentchanges/#diff-d67dc2f0fdc149b13122fd6cba887a01c693e949).
+
+>> Looks like these all involve the wacky wikilink form that includes an
+>> external url in the link. Fixed rename code to know about those.
+>> [[done]] --[[Joey]]
+
+>>> Phew!!! Thanks a *lot* for that one, it was really annoying! :) --[[anarcat]]
diff --git a/doc/bugs/toc_displays_headings_from_sidebar.mdwn b/doc/bugs/toc_displays_headings_from_sidebar.mdwn
new file mode 100644
index 000000000..469ca8a33
--- /dev/null
+++ b/doc/bugs/toc_displays_headings_from_sidebar.mdwn
@@ -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
index 000000000..f806a62eb
--- /dev/null
+++ b/doc/bugs/trail_excess_dependencies.mdwn
@@ -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/trail_shows_on_cgi_pages.mdwn b/doc/bugs/trail_shows_on_cgi_pages.mdwn
new file mode 100644
index 000000000..74f329fbc
--- /dev/null
+++ b/doc/bugs/trail_shows_on_cgi_pages.mdwn
@@ -0,0 +1,3 @@
+When commenting on, or I think editing, a page that uses the trail
+plugin, the trail is displayed across the top of the page. This should not
+happen, probably. --[[Joey]]
diff --git a/doc/bugs/trail_test_suite_failures.mdwn b/doc/bugs/trail_test_suite_failures.mdwn
new file mode 100644
index 000000000..a3b7159ec
--- /dev/null
+++ b/doc/bugs/trail_test_suite_failures.mdwn
@@ -0,0 +1,97 @@
+[[!template id=gitbranch branch=smcv/trail author=smcv]] [[!tag patch]]
+
+`t/trail.t` has some test suite failures. This is after applying
+[[smcv]]'s patch that fixed some races that caused it to fail
+sometimes. These remaining failures may also be intermittant,
+although I can get them reliably on my laptop. I've added some debugging
+output, which seems to point to an actual bug in the plugin AFAICS. --[[Joey]]
+
+> I can reproduce this reliably at 0a23666ddd but not 3.20120203. Bisecting
+> indicates that it regressed in aaa72a3a80f, "inline: When the pagenames list
+> includes pages that do not exist, skip them".
+>
+> I don't think this is the bug noted in the commit message - the inline
+> containing `sorting/new` uses `pages`, not `pagenames`. --[[smcv]]
+
+>> It seems you removed `trail` support from `inline` in that commit.
+>> Assuming that wasn't intentional, this is fixed in `smcv/trail`.
+>> --[[smcv]]
+
+>>> Looks like a bad merge of some kind. pulled, [[done]] --[[Joey]]
+
+<pre>
+ok 71 - expected n=sorting/end p=sorting/beginning in sorting/middle.html
+not ok 72 - expected n=sorting/new p=sorting/middle in sorting/end.html
+# Failed test 'expected n=sorting/new p=sorting/middle in sorting/end.html'
+# at t/trail.t line 13.
+# got: 'n=sorting/linked2 p=sorting/middle'
+# expected: 'n=sorting/new p=sorting/middle'
+not ok 73 - expected n=sorting/old p=sorting/end in sorting/new.html
+# Failed test 'expected n=sorting/old p=sorting/end in sorting/new.html'
+# at t/trail.t line 13.
+# got: undef
+# expected: 'n=sorting/old p=sorting/end'
+not ok 74 - expected n=sorting/ancient p=sorting/new in sorting/old.html
+# Failed test 'expected n=sorting/ancient p=sorting/new in sorting/old.html'
+# at t/trail.t line 13.
+# got: undef
+# expected: 'n=sorting/ancient p=sorting/new'
+not ok 75 - expected n=sorting/linked2 p=sorting/old in sorting/ancient.html
+# Failed test 'expected n=sorting/linked2 p=sorting/old in sorting/ancient.html'
+# at t/trail.t line 13.
+# got: undef
+# expected: 'n=sorting/linked2 p=sorting/old'
+not ok 76 - expected n= p=sorting/ancient in sorting/linked2.html
+# Failed test 'expected n= p=sorting/ancient in sorting/linked2.html'
+# at t/trail.t line 13.
+# got: 'n= p=sorting/end'
+# expected: 'n= p=sorting/ancient'
+ok 77
+</pre>
+
+Here, the "new" page does not seem to be included into the trail as expected.
+Looking at the rendered page, there is no trail directive output on it either.
+--[[Joey]]
+
+<pre>
+ok 90
+not ok 91 - expected n=sorting/new p= in sorting/old.html
+# Failed test 'expected n=sorting/new p= in sorting/old.html'
+# at t/trail.t line 13.
+# got: undef
+# expected: 'n=sorting/new p='
+not ok 92 - expected n=sorting/middle p=sorting/old in sorting/new.html
+# Failed test 'expected n=sorting/middle p=sorting/old in sorting/new.html'
+# at t/trail.t line 13.
+# got: undef
+# expected: 'n=sorting/middle p=sorting/old'
+not ok 93 - expected n=sorting/linked2 p=sorting/new in sorting/middle.html
+# Failed test 'expected n=sorting/linked2 p=sorting/new in sorting/middle.html'
+# at t/trail.t line 13.
+# got: 'n=sorting/linked2 p='
+# expected: 'n=sorting/linked2 p=sorting/new'
+ok 94 - expected n=sorting/linked p=sorting/middle in sorting/linked2.html
+ok 95 - expected n=sorting/end p=sorting/linked2 in sorting/linked.html
+ok 96 - expected n=sorting/a/c p=sorting/linked in sorting/end.html
+ok 97 - expected n=sorting/beginning p=sorting/end in sorting/a/c.html
+ok 98 - expected n=sorting/a/b p=sorting/a/c in sorting/beginning.html
+not ok 99 - expected n=sorting/ancient p=sorting/beginning in sorting/a/b.html
+# Failed test 'expected n=sorting/ancient p=sorting/beginning in sorting/a/b.html'
+# at t/trail.t line 13.
+# got: 'n=sorting/z/a p=sorting/beginning'
+# expected: 'n=sorting/ancient p=sorting/beginning'
+not ok 100 - expected n=sorting/z/a p=sorting/a/b in sorting/ancient.html
+# Failed test 'expected n=sorting/z/a p=sorting/a/b in sorting/ancient.html'
+# at t/trail.t line 13.
+# got: undef
+# expected: 'n=sorting/z/a p=sorting/a/b'
+not ok 101 - expected n= p=sorting/ancient in sorting/z/a.html
+# Failed test 'expected n= p=sorting/ancient in sorting/z/a.html'
+# at t/trail.t line 13.
+# got: 'n= p=sorting/a/b'
+# expected: 'n= p=sorting/ancient'
+ok 102
+</pre>
+
+Haven't investigated, but looks like the same sort of problem, a
+page expected to be in the trail isn't. --[[Joey]]
diff --git a/doc/bugs/transient_autocreated_tagbase_is_not_transient_autoindexed.mdwn b/doc/bugs/transient_autocreated_tagbase_is_not_transient_autoindexed.mdwn
index 3eb1542d3..702608831 100644
--- a/doc/bugs/transient_autocreated_tagbase_is_not_transient_autoindexed.mdwn
+++ b/doc/bugs/transient_autocreated_tagbase_is_not_transient_autoindexed.mdwn
@@ -1,7 +1,31 @@
mkdir -p ikiwiki-tag-test/raw/a_dir/ ikiwiki-tag-test/rendered/
- echo '[[!taglink a_tag]]' > ikiwiki-tag-test/raw/a_dir/a_page.mdwn
+ echo '\[[!taglink a_tag]]' > ikiwiki-tag-test/raw/a_dir/a_page.mdwn
ikiwiki --verbose --plugin tag --plugin autoindex --plugin mdwn --set autoindex_commit=0 --set tagbase=tag --set tag_autocreate=1 --set tag_autocreate_commit=0 ikiwiki-tag-test/raw/ ikiwiki-tag-test/rendered/
ls -al ikiwiki-tag-test/raw/.ikiwiki/transient/
ls -al ikiwiki-tag-test/rendered/tag/
Shouldn't `ikiwiki-tag-test/raw/.ikiwiki/transient/tag.mdwn` and `ikiwiki-tag-test/rendered/tag/index.html` exist?
+
+[[!tag patch]]
+[[!template id=gitbranch branch=smcv/ready/autoindex author=smcv]]
+[[!template id=gitbranch branch=smcv/ready/autoindex-more-often author=smcv]]
+
+> To have a starting point to (maybe) change this, my `ready/autoindex`
+> branch adds a regression test for the current behaviour, both with
+> and without `autoindex_commit` enabled. It also fixes an unnecessary
+> and potentially harmful special case for the transient directory.
+>
+> The fact that files in underlays (including transient files) don't
+> trigger autoindexing is deliberate. However, this is the second
+> request to change this behaviour: the first was
+> [[!debbug 611068]], which has a patch from Tuomas Jormola.
+> On that bug report, Joey explains why it's undesirable
+> for the original behaviour of autoindex (when the
+> index isn't transient).
+>
+> I'm not sure whether the same reasoning still applies when the
+> index is transient, though (`autoindex_commit => 0`),
+> because the index pages won't be cluttering up people's
+> git repositories any more? My `autoindex-more` branch changes
+> the logic so it will do what you want in the `autoindex_commit => 0`
+> case, and amends the appropriate regression test. --[[smcv]]
diff --git a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
index b2a8b0632..9f0a1d102 100644
--- a/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
+++ b/doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
@@ -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/wrong_link_in_recentchanges_when_reverting_an_ikiwiki_outside_git_root.mdwn b/doc/bugs/wrong_link_in_recentchanges_when_reverting_an_ikiwiki_outside_git_root.mdwn
index bf311c198..5f7450b79 100644
--- a/doc/bugs/wrong_link_in_recentchanges_when_reverting_an_ikiwiki_outside_git_root.mdwn
+++ b/doc/bugs/wrong_link_in_recentchanges_when_reverting_an_ikiwiki_outside_git_root.mdwn
@@ -1,3 +1,8 @@
in ikiwiki instances that don't reside in the git root directory (the only ones i know of are ikiwiki itself), reverts show the wrong link in the recentchanges (for example, in the ikiwiki main repository's 4530430 and its revert, the main index page was edited, but the revert shows doc/index as a link).
the expected behavior is to compensate for the modified root directory (i.e., show index instead of doc/index).
+
+> This seems to work OK now - commit 84c4ca33 and its reversion both
+> appear correctly in [[recentchanges]]. Looking at git history,
+> Joey [[fixed this|done]] in commit 1b6c1895 before 3.20120203.
+> --[[smcv]]
diff --git a/doc/bugs/yaml:xs_codependency_not_listed.mdwn b/doc/bugs/yaml:xs_codependency_not_listed.mdwn
new file mode 100644
index 000000000..f136d8b12
--- /dev/null
+++ b/doc/bugs/yaml:xs_codependency_not_listed.mdwn
@@ -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]]
diff --git a/doc/contact.mdwn b/doc/contact.mdwn
index 486a4d186..7d31ddf10 100644
--- a/doc/contact.mdwn
+++ b/doc/contact.mdwn
@@ -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/convert.mdwn b/doc/convert.mdwn
index 871cd31fe..fd4fbeac3 100644
--- a/doc/convert.mdwn
+++ b/doc/convert.mdwn
@@ -3,5 +3,7 @@ to convert it to ikiwiki? Various tools and techniques have been developed
to handle such conversions.
* [[tips/convert_mediawiki_to_ikiwiki]]
-* [[tips/convert_MoinMoin_and_TWiki_to_ikiwiki]]
+* [[tips/convert_moinmoin_to_ikiwiki]]
* [[tips/convert_blogger_blogs_to_ikiwiki]]
+
+In addition, [[JoshTriplett]] has written scripts to convert Twiki sites, see [his page](/users/JoshTriplett) for more information.
diff --git a/doc/css_market.mdwn b/doc/css_market.mdwn
index 3f5627028..c9c6694e7 100644
--- a/doc/css_market.mdwn
+++ b/doc/css_market.mdwn
@@ -10,6 +10,10 @@ included in ikiwiki for easy use.
Feel free to add your own stylesheets here. (Upload as wiki pages; wiki
gnomes will convert them to css files..)
+* **[lessish.css](https://raw.github.com/spiffin/ikiwiki_lessish/master/lessish.css)**, contributed by [[Spiffin]],
+ A responsive stylesheet based on the [Less CSS Framework](http://lessframework.com).
+ Links: [PNG preview](https://github.com/spiffin/ikiwiki_lessish/blob/master/lessish_preview.png) and [GitHub repo](https://github.com/spiffin/ikiwiki_lessish).
+
* **[[css_market/zack.css]]**, contributed by [[StefanoZacchiroli]],
customized mostly for *blogging purposes*, can be seen in action on
[zack's blog](http://upsilon.cc/~zack/blog/)
diff --git a/doc/examples/blog/posts.mdwn b/doc/examples/blog/posts.mdwn
index 08e014838..2bd0f1d6f 100644
--- a/doc/examples/blog/posts.mdwn
+++ b/doc/examples/blog/posts.mdwn
@@ -1,3 +1,3 @@
Here is a full list of posts to the [[blog|index]].
-[[!inline pages="page(./posts/*) and !*/Discussion" archive=yes feedshow=10 quick=yes]]
+[[!inline pages="page(./posts/*) and !*/Discussion" archive=yes feedshow=10 quick=yes trail=yes]]
diff --git a/doc/examples/softwaresite/bugs/hghg.mdwn b/doc/examples/softwaresite/bugs/hghg.mdwn
new file mode 100644
index 000000000..cece64126
--- /dev/null
+++ b/doc/examples/softwaresite/bugs/hghg.mdwn
@@ -0,0 +1 @@
+hghg
diff --git a/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__.mdwn b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__.mdwn
new file mode 100644
index 000000000..c0b896515
--- /dev/null
+++ b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__.mdwn
@@ -0,0 +1,3 @@
+Is anyone successfull mirroring feeds from ikiwiki to identi.ca (or another status.net instance)? How did you set up your feed?
+
+When I try to, identi.ca presents me with an error about no "author ID URI" being found in the feed. Indeed the ikiwiki-generated atom feed only has got a global "author" - I presume identi.ca requires author information in each entry. Is it possible to set up ikiwiki's feed that way?
diff --git a/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_1_8a5acbb6234104b607c8c4cf16124ae4._comment b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_1_8a5acbb6234104b607c8c4cf16124ae4._comment
new file mode 100644
index 000000000..1d710d153
--- /dev/null
+++ b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_1_8a5acbb6234104b607c8c4cf16124ae4._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Franek"
+ ip="188.99.178.40"
+ subject="[[!meta author=&quot;..."
+ date="2012-05-19T14:51:42Z"
+ content="""
+Adding [[!meta author=\"me\"]] to the entries and/or the feedpage does not help.
+"""]]
diff --git a/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_2_155e5823860a91989647ede8b5c9224a._comment b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_2_155e5823860a91989647ede8b5c9224a._comment
new file mode 100644
index 000000000..6c709b3f0
--- /dev/null
+++ b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_2_155e5823860a91989647ede8b5c9224a._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="Franek"
+ ip="188.99.178.40"
+ subject="Further enquiries"
+ date="2012-05-20T10:46:07Z"
+ content="""
+I did some more experiments setting not only \"[[!meta author=...\", but also \"authorurl\" globally and per-entry in various combinations, with no success. As far as I could see, \"authorurl\" had no effect on the atom feed whatsoever.
+
+It seems that identi.ca wants a feed to have an <author> field with a <uri> subfield, as described here: [[http://www.atomenabled.org/developers/syndication/#person]] . Is there a way to achieve this with ikiwiki inline-feeds?
+
+I also found two old and unresolved status.net bugreports on the matter:
+
+[[http://status.net/open-source/issues/2840]]
+
+[[http://status.net/open-source/issues/2839]]
+"""]]
diff --git a/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_3_317f1202a3da1bfc845d4becbac4bba8._comment b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_3_317f1202a3da1bfc845d4becbac4bba8._comment
new file mode 100644
index 000000000..6bda93433
--- /dev/null
+++ b/doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_3_317f1202a3da1bfc845d4becbac4bba8._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="Franek"
+ ip="92.74.26.119"
+ subject="kind of solved, but another problem comes up"
+ date="2012-05-26T19:31:19Z"
+ content="""
+The templates atompage.tmpl and/or atomitem.tmpl appear to be what would have to be altered to satisfy identi.ca. I did that on my system, just hard-coding a <uri> element into <author> for testing. In one respect, it worked: identi.ca does not complain about the missing author uri any more. In another, it did not, another error comes up now: \"Internal server error\" and something like \"could not add feed\".
+
+I do not know where to go from this very unspecific error message. I guess I am going to try something like twitterfeed.com, for now.
+"""]]
diff --git a/doc/forum/Attachment_and_sub-directory.mdwn b/doc/forum/Attachment_and_sub-directory.mdwn
new file mode 100644
index 000000000..91d7aee27
--- /dev/null
+++ b/doc/forum/Attachment_and_sub-directory.mdwn
@@ -0,0 +1,5 @@
+Hi.
+
+If I create a page and attach a file to the page, ikiwiki creates a sub-directory with the page name and places the attachment in the sub-directory regardless of usedirs setup. Is there any setup not to create the sub-directory and to place the attachment in the same directory where the page is, so that I can edit and properly *preview* at a local machine using third-party markdown editors?
+
+Thanks in advance.
diff --git a/doc/forum/Background_picture_and_css.mdwn b/doc/forum/Background_picture_and_css.mdwn
new file mode 100644
index 000000000..827100984
--- /dev/null
+++ b/doc/forum/Background_picture_and_css.mdwn
@@ -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
index 000000000..2f255002d
--- /dev/null
+++ b/doc/forum/CGI_script_and_HTTPS.mdwn
@@ -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
index 000000000..03f1032e9
--- /dev/null
+++ b/doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment
@@ -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.
+"""]]
diff --git a/doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn b/doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn
index 51c320067..251cd6d9f 100644
--- a/doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn
+++ b/doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn
@@ -4,7 +4,7 @@ I'd very much like to be able to list my blog posts on a daily basis (used for l
There was some effort to do this as detailed here.
-[[http://ikiwiki.info/todo/Set_arbitrary_date_to_be_used_by_calendar_plugin/]]
+[[todo/Set_arbitrary_date_to_be_used_by_calendar_plugin]]
I had a quick go at doing something similar on Debian Stable (Ikiwiki 3.0) but alas my Ikiwiki fu is not strong enough.
@@ -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/Calendar:_listing_multiple_entries_per_day/comment_4_4be39c2043821848d4b25d0bf946a718._comment b/doc/forum/Calendar:_listing_multiple_entries_per_day/comment_4_4be39c2043821848d4b25d0bf946a718._comment
new file mode 100644
index 000000000..a71276d6b
--- /dev/null
+++ b/doc/forum/Calendar:_listing_multiple_entries_per_day/comment_4_4be39c2043821848d4b25d0bf946a718._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 4"
+ date="2012-02-21T17:23:00Z"
+ content="""
+To be clear, this patch creates a `yyyy/mm/dd` file for each day, listing the posts for that day, so the calendar can link to it rather than a random single post.
+
+While a valid solution certainly, that's a lot of added pages! Especially a high overhead for such a minor UI point as this.
+
+Surely something interesting could be done with javascript or some other form of UI to make clicking on a day in a calendar that has multiple posts present a list of them? That would have essentially no overhead, since the calendar plugin already has a list of the posts made on a given day.
+
+Ikiwiki already does something similar to deal with the case where a page has a great many backlinks.. It makes a UI element that, if hovered over, pops up a display of all the rest. This is done quite simply in the `page.tmpl`
+using the popup and balloon CSS classes. Calendar could also use this.
+"""]]
diff --git a/doc/forum/Calendar:_listing_multiple_entries_per_day/comment_5_de545ebb6376066674ef2aaae4757b9c._comment b/doc/forum/Calendar:_listing_multiple_entries_per_day/comment_5_de545ebb6376066674ef2aaae4757b9c._comment
new file mode 100644
index 000000000..fef852066
--- /dev/null
+++ b/doc/forum/Calendar:_listing_multiple_entries_per_day/comment_5_de545ebb6376066674ef2aaae4757b9c._comment
@@ -0,0 +1,97 @@
+[[!comment format=mdwn
+ username="spalax"
+ subject="Popup listing multiple entries per day"
+ date="2012-06-08T00:56:06Z"
+ content="""
+[[!tag patch]]
+
+Hello,
+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 6e2afce..4149229
+ --- a/doc/style.css
+ +++ b/doc/style.css
+ @@ -316,6 +316,7 @@ div.progress-done {
+ .popup .paren,
+ .popup .expand {
+ display: none;
+ + text-align: left;
+ }
+ .popup:hover .balloon,
+ .popup:focus .balloon {
+
+"""]]
diff --git a/doc/forum/Can_I_have_different_favicons_for_each_folder__63__/comment_2_b8ccd3c29249eca73766f567bce12569._comment b/doc/forum/Can_I_have_different_favicons_for_each_folder__63__/comment_2_b8ccd3c29249eca73766f567bce12569._comment
new file mode 100644
index 000000000..0c8ca3bce
--- /dev/null
+++ b/doc/forum/Can_I_have_different_favicons_for_each_folder__63__/comment_2_b8ccd3c29249eca73766f567bce12569._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="Franek"
+ ip="178.7.43.64"
+ subject="comment 2"
+ date="2012-06-25T09:58:03Z"
+ content="""
+I did as you suggested (finally) and created a simple modification of the [[plugins/favicon]] plugin: [[plugins/contrib/localfavicon]]. It checks for the \"localfavicon\" option, and if it is set, it uses bestlink() to determine which favicon to use for each page; if not, it behaves just like the original favicon plugin.
+"""]]
diff --git a/doc/forum/Can_not_advance_past_first_page_of_results_using_search_plugin.mdwn b/doc/forum/Can_not_advance_past_first_page_of_results_using_search_plugin.mdwn
new file mode 100644
index 000000000..1a9391e48
--- /dev/null
+++ b/doc/forum/Can_not_advance_past_first_page_of_results_using_search_plugin.mdwn
@@ -0,0 +1,26 @@
+I'm using the [[/plugins/search/]] plugin and it correctly displays the first page of results, but the "Next" button doesn't work.
+
+If I search for "linux", for example, I see "1-10 of exactly 65 matches" and this in my browser's address bar: https://example.com/ikiwiki.cgi?P=linux
+
+Then, I scroll down and click "Next" and I see. . .
+
+> Although this page is encrypted, the information you have entered is to be sent over an unencrypted connection and could easily be read by a third party.
+>
+> Are you sure you want to continue sending this information?
+
+. . . then I click "Continue" but I'm stuck on the first page of search results (it still says "1-10 of exactly 65 matches") and I have the following in my browser's address bar:
+
+https://example.com/ikiwiki.cgi?P=linux&DEFAULTOP=or&%253E=Next&DB=default&FMT=query&xP=Zlinux&xDB=default&xFILTERS=--O
+
+I noticed that if I change what's in the address bar to the following, I **can** advance to page 2 (it shows "11-20 of exactly 65 matches"). That is to say, I'm removing "25" from "%253E" as a work around:
+
+https://example.com/ikiwiki.cgi?P=linux&DEFAULTOP=or&%3E=Next&DB=default&FMT=query&xP=Zlinux&xDB=default&xFILTERS=--O
+
+Based on this output, I might need to make a change to "searchquery.tmpl", which is under [[/templates]]. . .
+
+ [wikiuser@ikiwiki1 ~]$ grep -r DEFAULTOP /usr/share/ikiwiki
+ /usr/share/ikiwiki/templates/searchquery.tmpl:<SELECT NAME=DEFAULTOP>
+ [wikiuser@ikiwiki1 ~]$ rpm -qf /usr/share/ikiwiki/templates/searchquery.tmpl
+ ikiwiki-3.20120202-1.el6.noarch
+
+. . . but I would appreciate any guidance on what the fix might be.
diff --git a/doc/forum/Commiting_all_moderated_comments_into_special_branch__63__.mdwn b/doc/forum/Commiting_all_moderated_comments_into_special_branch__63__.mdwn
new file mode 100644
index 000000000..e45069c63
--- /dev/null
+++ b/doc/forum/Commiting_all_moderated_comments_into_special_branch__63__.mdwn
@@ -0,0 +1,8 @@
+I only interact with ikiwiki via cli & git; thus I would love to be able to moderate comments via git from all remote checkouts without being forced to ssh to my server and do that locally.
+
+Is anyone aware of a way to check all comments into a special branch, possibly called "moderation", and with a normal suffix, not "_comment_pending"? That would allow me to cherry-pick from that branch without having to remember to rename and simply delete all spam etc from the branch.
+
+Every now and then, I could delete the whole branch, thus cleaning out crud. As the approved comments live in master, that would not be a problem.
+
+
+RichiH
diff --git a/doc/forum/Commiting_all_moderated_comments_into_special_branch__63__/comment_1_8403e8ff9c5c8dddb6d744632322f7bc._comment b/doc/forum/Commiting_all_moderated_comments_into_special_branch__63__/comment_1_8403e8ff9c5c8dddb6d744632322f7bc._comment
new file mode 100644
index 000000000..5aa5af039
--- /dev/null
+++ b/doc/forum/Commiting_all_moderated_comments_into_special_branch__63__/comment_1_8403e8ff9c5c8dddb6d744632322f7bc._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-03-22T16:56:39Z"
+ content="""
+A branch makes sense if it's used in a way that never ties its history with mainline, so all the spam can eventually be dropped out of git, by deleting the branch. Though this is clearly an expert user level option.
+
+Probably the easiest way to get there would be to keep the branch, checked out, in `.ikiwiki/comments_pending/`. The old code that used that directory is still in ikiwiki for backwards compatability, so it should be easy to get comments written into that location. Then a minimum of vcs-specific code would be needed to set up the branch and commit pending comments to it.
+
+But there's a wrinkle -- if you just cherry pick from that branch, the comments_pending directory will retain all the old spam, growing without bounds. And the web moderation interface will show them all. I suppose you could check out the branch and revert or delete spammy comments too, but this is feeling like a lot of work the user needs to do in order to use git to moderate spammy comments. I have to think most users would prefer, as I do, to occasionally flailing at a web form in this case.
+"""]]
diff --git a/doc/forum/Empty_sha1sum_messages.mdwn b/doc/forum/Empty_sha1sum_messages.mdwn
new file mode 100644
index 000000000..f464232c4
--- /dev/null
+++ b/doc/forum/Empty_sha1sum_messages.mdwn
@@ -0,0 +1,11 @@
+Hi,
+
+running ikiwiki from squeeze backports I see frequently in the logs:
+
+> Empty sha1sum for 'ikiwiki/pagespec.mdwn'.
+
+The page varies. What are these messages about? The code that emits this
+comes from the git plugin, and this page is indeed not in git. So is
+this just noise? Or rather, why does ikiwiki need to look at these?
+
+thanks in advance!
diff --git a/doc/forum/Empty_sha1sum_messages/comment_1_b260b5e6b4c4f4c203b01183fee9fd69._comment b/doc/forum/Empty_sha1sum_messages/comment_1_b260b5e6b4c4f4c203b01183fee9fd69._comment
new file mode 100644
index 000000000..7ad6f2815
--- /dev/null
+++ b/doc/forum/Empty_sha1sum_messages/comment_1_b260b5e6b4c4f4c203b01183fee9fd69._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-03-22T17:06:05Z"
+ content="""
+Hmm, this is a debug message, so only printed or logged if verbose mode is enabled. As far as I can see, in normal operation this could only happen if you use the web interface to edit a page that's coming originally from ikiwiki's underlay -- such as `ikiwiki/pagespec.mdwn`, or a page in the srcdir whose file is indeed not checked into git for some reason.
+
+Doesn't seem useful, so I've nuked the message.
+"""]]
diff --git a/doc/forum/Empty_sha1sum_messages/comment_2_d6a47838a3c81d0a75e6fc22e786c976._comment b/doc/forum/Empty_sha1sum_messages/comment_2_d6a47838a3c81d0a75e6fc22e786c976._comment
new file mode 100644
index 000000000..452fc946a
--- /dev/null
+++ b/doc/forum/Empty_sha1sum_messages/comment_2_d6a47838a3c81d0a75e6fc22e786c976._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://k1024.org/~iusty/"
+ nickname="Iustin Pop"
+ subject="Re: comment 1"
+ date="2012-03-22T19:34:55Z"
+ content="""
+Hmm, I see this 2-3 times a day on a internet exposed ikiwiki. There shouldn't be any editing of such files, especially not of files from the underlay - the only editing permissions are for blog comments.
+
+I'll have to check what's going on better, thanks for the reply!
+"""]]
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
index 000000000..ad52c0091
--- /dev/null
+++ b/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name.mdwn
@@ -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
index 000000000..fb499004e
--- /dev/null
+++ b/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_1_66c321b9eb618d20872cee7d6ca9e44c._comment
@@ -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
index 000000000..e7659413e
--- /dev/null
+++ b/doc/forum/Error:_CGI::tmpFileName_failed_to_return_the_uploaded_file_name/comment_2_80296d67c7f1dd75b56b85c14f5efa3b._comment
@@ -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/Error:___34__do__34___parameter_missing.mdwn b/doc/forum/Error:___34__do__34___parameter_missing.mdwn
new file mode 100644
index 000000000..402217e82
--- /dev/null
+++ b/doc/forum/Error:___34__do__34___parameter_missing.mdwn
@@ -0,0 +1,13 @@
+Hi
+
+I'm stuck with a «Error: "do" parameter missing» message I can't fix.
+
+I'm using ikiwiki 3.20100815.7 on a debian 6.0.4 system.
+
+Error redirection is obvisously configured, also the dot cgi thing.
+
+You can test it at http://wikimix.cc/thisuridoesntexist
+
+The procedure of creating a reference to a new page gives the same error.
+
+Any clue?
diff --git a/doc/forum/Error:___34__do__34___parameter_missing/comment_1_3a51c303ba1670f1567f323349b53837._comment b/doc/forum/Error:___34__do__34___parameter_missing/comment_1_3a51c303ba1670f1567f323349b53837._comment
new file mode 100644
index 000000000..a01a33468
--- /dev/null
+++ b/doc/forum/Error:___34__do__34___parameter_missing/comment_1_3a51c303ba1670f1567f323349b53837._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-05-22T13:46:20Z"
+ content="""
+Did you enable the [[plugins/404]] plugin?
+
+Which web server? That plugin is meant to work with Apache 2; in
+principle it should be possible to make it work with other web servers,
+but it'll need some setup.
+
+The 404 plugin relies on your web server giving IkiWiki some extra
+information about 404s; lighttpd doesn't currently provide enough
+information for IkiWiki to detect 404s reliably, for instance.
+"""]]
diff --git a/doc/forum/Error:___34__do__34___parameter_missing/comment_2_c5f24a8c4d2de0267cf0de1908480e82._comment b/doc/forum/Error:___34__do__34___parameter_missing/comment_2_c5f24a8c4d2de0267cf0de1908480e82._comment
new file mode 100644
index 000000000..dd2fdb248
--- /dev/null
+++ b/doc/forum/Error:___34__do__34___parameter_missing/comment_2_c5f24a8c4d2de0267cf0de1908480e82._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://ismael.olea.org/"
+ ip="150.214.94.198"
+ subject="comment 2"
+ date="2012-05-22T21:24:37Z"
+ content="""
+Gosh, that was it.
+
+Grrr. Sorry for being too rookie O:-)
+
+Thanks!
+"""]]
diff --git a/doc/forum/Everyone_can_remove_comments.mdwn b/doc/forum/Everyone_can_remove_comments.mdwn
new file mode 100644
index 000000000..5e30b08ed
--- /dev/null
+++ b/doc/forum/Everyone_can_remove_comments.mdwn
@@ -0,0 +1 @@
+Having enabled anonok and leads to the undesirable situation, that everybody is able to remove every comment. Is there an easy workaround, or am I missing something? --[[wiebel]]
diff --git a/doc/forum/Google_searches_of_ikiwiki.info_are_broken._:__40__.mdwn b/doc/forum/Google_searches_of_ikiwiki.info_are_broken._:__40__.mdwn
new file mode 100644
index 000000000..3716a1475
--- /dev/null
+++ b/doc/forum/Google_searches_of_ikiwiki.info_are_broken._:__40__.mdwn
@@ -0,0 +1,14 @@
+I know that these pages exist on ikiwiki.info:
+
+* http://ikiwiki.info/ikiwiki/formatting/
+* http://ikiwiki.info/ikiwiki/subpage/
+
+But I can't get either to show up in Google search results. I have even tried:
+> site:ikiwiki.info inurl:formatting
+
+and
+
+> site:ikiwiki.info inurl:formatting -inurl:discussion
+
+...Is this some robots.txt problem?
+
diff --git a/doc/forum/How_to_add_a_mouse-over_pop-up_label_for_a_text__63__.mdwn b/doc/forum/How_to_add_a_mouse-over_pop-up_label_for_a_text__63__.mdwn
new file mode 100644
index 000000000..cf9245404
--- /dev/null
+++ b/doc/forum/How_to_add_a_mouse-over_pop-up_label_for_a_text__63__.mdwn
@@ -0,0 +1,8 @@
+How to add a mouse-over pop-up label for a text?
+
+I'd like to have the following effect:
+
+when a user move the mouse arrow on top of the text, a small window will show up at the upper right of the text and the window contains some additional information about the text.
+
+Any idea how to achieve this?
+
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
index 000000000..537ba6161
--- /dev/null
+++ b/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn
@@ -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
index 000000000..1bb3fa7cb
--- /dev/null
+++ b/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment
@@ -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
index 000000000..3f771e777
--- /dev/null
+++ b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn
@@ -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
index 000000000..ce99b8475
--- /dev/null
+++ b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment
@@ -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
index 000000000..5546c4789
--- /dev/null
+++ b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment
@@ -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_change_registration_page/comment_2_8176ef231cf901802fc60b6d414018e6._comment b/doc/forum/How_to_change_registration_page/comment_2_8176ef231cf901802fc60b6d414018e6._comment
new file mode 100644
index 000000000..8e67162e1
--- /dev/null
+++ b/doc/forum/How_to_change_registration_page/comment_2_8176ef231cf901802fc60b6d414018e6._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawndsaC4GaIBw49WNdbk2Faqfm_mrtQgul8"
+ nickname="Christian"
+ subject="comment 2"
+ date="2012-02-29T06:58:26Z"
+ content="""
+thanks!
+"""]]
diff --git a/doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__.mdwn b/doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__.mdwn
new file mode 100644
index 000000000..75d98fea1
--- /dev/null
+++ b/doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__.mdwn
@@ -0,0 +1,26 @@
+How to create a WikiLink to a page in a subdirectory?
+
+I have a page I want to create Wikilink to in
+
+
+ website/subdir/page.mdwn
+
+
+And the wikilink I want to create should be in a page in the website root directory:
+
+
+ website/index.mdwn
+
+
+If I just write
+
+ \[[page]]
+
+it seems it will assume the page should be found at
+
+
+ website/page.mdwn
+
+and adds a question mark ? in front of the link in the generated HTML file.
+
+How to make such a Wikilink?
diff --git a/doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__/comment_1_d20ee1d8d7a3e77a445f8b887e807119._comment b/doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__/comment_1_d20ee1d8d7a3e77a445f8b887e807119._comment
new file mode 100644
index 000000000..524852fad
--- /dev/null
+++ b/doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__/comment_1_d20ee1d8d7a3e77a445f8b887e807119._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-06-27T07:31:30Z"
+ content="""
+`\[[subdir/page]]`.
+
+IkiWiki terminology is that a page in a subdirectory is a \"subpage\".
+See [[ikiwiki/SubPage]] and [[ikiwiki/subpage/LinkingRules]] for more details.
+"""]]
diff --git a/doc/forum/How_to_format___91____91__foobar__93____93___in_code_blocks__63__/comment_1_ad000d39fd1dc05aa8ef6eb19d8d999b._comment b/doc/forum/How_to_format___91____91__foobar__93____93___in_code_blocks__63__/comment_1_ad000d39fd1dc05aa8ef6eb19d8d999b._comment
new file mode 100644
index 000000000..aa26b086b
--- /dev/null
+++ b/doc/forum/How_to_format___91____91__foobar__93____93___in_code_blocks__63__/comment_1_ad000d39fd1dc05aa8ef6eb19d8d999b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://acathur.myopenid.com/"
+ ip="31.56.6.65"
+ subject="comment 1"
+ date="2012-02-26T08:08:15Z"
+ content="""
+doing `\\[[foobar]]` works for me
+"""]]
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
index 000000000..e4901d78b
--- /dev/null
+++ b/doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn
@@ -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_inline_a_page_from_another_git_repository.mdwn b/doc/forum/How_to_inline_a_page_from_another_git_repository.mdwn
new file mode 100644
index 000000000..528a48b6e
--- /dev/null
+++ b/doc/forum/How_to_inline_a_page_from_another_git_repository.mdwn
@@ -0,0 +1,5 @@
+I am migrating a dev site which was previously using Trac.
+
+Some of the wiki pages include RST documents from the code repository. What would be the best way to do this using ikiwiki? I would prefer not to include the full code repository in ikiwiki src as there are many source files I do not want to be processed by ikiwiki.
+
+A possible solution would be something like underlay, but for which only explicitly named files would be processed by ikiwiki.
diff --git a/doc/forum/How_to_set_the_meta_author_field_from_user_name__63__.mdwn b/doc/forum/How_to_set_the_meta_author_field_from_user_name__63__.mdwn
new file mode 100644
index 000000000..e0d6829fc
--- /dev/null
+++ b/doc/forum/How_to_set_the_meta_author_field_from_user_name__63__.mdwn
@@ -0,0 +1,3 @@
+Several users will post to the same blog. I would like the meta "author" field to be set to their ikiwiki username automatically and attached to their posts such that they can not alter it. I imagine one could use the \<TMPL_VAR USER> variable in the "inlinepage" template, but this variable does not seem to be set. How can I accomplish that?
+
+Related question: is there a way to see all the variables which are set and their value?
diff --git a/doc/forum/How_to_set_the_meta_author_field_from_user_name__63__/comment_1_0906e1f3eb8b826a7730233b95cb5ddd._comment b/doc/forum/How_to_set_the_meta_author_field_from_user_name__63__/comment_1_0906e1f3eb8b826a7730233b95cb5ddd._comment
new file mode 100644
index 000000000..2d7c02a8e
--- /dev/null
+++ b/doc/forum/How_to_set_the_meta_author_field_from_user_name__63__/comment_1_0906e1f3eb8b826a7730233b95cb5ddd._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnNqLKszWk9EoD4CDCqNXJRIklKFBCN1Ao"
+ nickname="maurizio"
+ subject="comment 1"
+ date="2012-06-22T20:33:59Z"
+ content="""
+This does not seem to be possible directly according to the discussion here: [[Possible to use meta variables in templates?]].
+
+The solution I chose in the end was to set up a template which prepares the meta and suggests the author to fill it in with his user name. Maybe the best way would be to create actually one blog per author, define a template for each author (based on the pagespec and on the lockedpages to constrain authors to write only on their blog) and then an inline page which includes all the individual blogs.
+"""]]
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
index 000000000..34bc4ace2
--- /dev/null
+++ b/doc/forum/How_to_set_up_git_repository_hook___63__.mdwn
@@ -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_show_recent_changes_for_individual_pages__63__.mdwn b/doc/forum/How_to_show_recent_changes_for_individual_pages__63__.mdwn
new file mode 100644
index 000000000..890f24a33
--- /dev/null
+++ b/doc/forum/How_to_show_recent_changes_for_individual_pages__63__.mdwn
@@ -0,0 +1 @@
+The "RecentChanges" shown under page titles on a individual is linked to the revision history page for the whole site where change to every file in the wiki is listed. Is there a way to get that for individual pages?
diff --git a/doc/forum/How_to_show_recent_changes_for_individual_pages__63__/comment_1_cd34affc6883f4e4bc5e7e7b711cc8ba._comment b/doc/forum/How_to_show_recent_changes_for_individual_pages__63__/comment_1_cd34affc6883f4e4bc5e7e7b711cc8ba._comment
new file mode 100644
index 000000000..8ed341c09
--- /dev/null
+++ b/doc/forum/How_to_show_recent_changes_for_individual_pages__63__/comment_1_cd34affc6883f4e4bc5e7e7b711cc8ba._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-03-03T15:01:34Z"
+ content="""
+The RecentChanges page is a wiki page like any other, containing a special inline directive. You can copy that, and modify the inline's [[ikiwiki/PageSpec]] to match pages changed by a specific author, or with a specific title.
+
+If you want separate change logs for *every* page, install gitweb and configure historyurl. There will then be a \"History\" link going to the gitweb for each page.
+"""]]
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
index 000000000..09cf01435
--- /dev/null
+++ b/doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn
@@ -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/Include_attachment_in_a_page.mdwn b/doc/forum/Include_attachment_in_a_page.mdwn
new file mode 100644
index 000000000..e4a5a53ec
--- /dev/null
+++ b/doc/forum/Include_attachment_in_a_page.mdwn
@@ -0,0 +1,9 @@
+Is there any way of embedding an attachment in a page - like, when I upload a picture, I would like to have it showing on a page.... I tried the Markdown image syntax like this:
+
+ ![Alt text](/path/to/img.jpg "Optional title")
+
+But if you upload a PDF, f.ex., there will be a "broken URL/no image" thumbnail, although the link to the uploaded file works correctly, if entered correctly.
+
+So if it's just an image I want to embed, then I would want to use HTML syntax directly, I guess. (Like stated [[here|http://daringfireball.net/projects/markdown/syntax#img]].) But in case it's some other type of attachment it would be nice to be able to have some specific include syntax or the like.
+
+Probably a feature for the "attachment" plugin's wishlist!?
diff --git a/doc/forum/Include_attachment_in_a_page/comment_1_275aad6ca3b2972749b7f6636b130035._comment b/doc/forum/Include_attachment_in_a_page/comment_1_275aad6ca3b2972749b7f6636b130035._comment
new file mode 100644
index 000000000..a6f995626
--- /dev/null
+++ b/doc/forum/Include_attachment_in_a_page/comment_1_275aad6ca3b2972749b7f6636b130035._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://jmtd.net/"
+ nickname="Jon Dowland"
+ subject="comment 1"
+ date="2012-04-02T12:51:33Z"
+ content="""
+Forgive me if I don't fully understand the question, but:
+
+ * the attachment functionality includes a button \"Insert Links\" which, on the edit form for a page, inserts the correct markup to link to the attachment, which addresses the general case
+
+ * For images which you want inline, you could convert the basic wikilink e.g. `\[[foo.png]]` into a call to the [[plugins/img]] plugin e.g. `\[[!img foo.png]]`
+"""]]
diff --git a/doc/forum/Multiple_urls.mdwn b/doc/forum/Multiple_urls.mdwn
new file mode 100644
index 000000000..03125d27c
--- /dev/null
+++ b/doc/forum/Multiple_urls.mdwn
@@ -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
index 000000000..9806f5376
--- /dev/null
+++ b/doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment
@@ -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_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment
new file mode 100644
index 000000000..17228b891
--- /dev/null
+++ b/doc/forum/Need_something_more_powerful_than_Exclude/comment_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://tbm.myopenid.com/"
+ ip="188.222.45.200"
+ subject="Still there?"
+ date="2012-03-20T18:35:41Z"
+ content="""
+Joey, I believe I see the same problem with 3.20120202. I add foo.mdwn, run ikiwiki --setup ikiwiki.setup, add \"exclude: foo\", run --setup again and it still says \"building foo.mdwn\".
+
+"""]]
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
index 000000000..d93684d10
--- /dev/null
+++ b/doc/forum/Need_something_more_powerful_than_Exclude/comment_6_1dccdfebad31446200213a2cae25f0e2._comment
@@ -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/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_3_f581afcdb4481ea5d65bcc33bdbab99a._comment b/doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_3_f581afcdb4481ea5d65bcc33bdbab99a._comment
new file mode 100644
index 000000000..1ac15d74c
--- /dev/null
+++ b/doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_3_f581afcdb4481ea5d65bcc33bdbab99a._comment
@@ -0,0 +1,25 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnp4lzWSX1pvSpwAoboehP3SSbmbQESe80"
+ nickname="Felipe Augusto"
+ subject="I'm trying to use OpenID without success"
+ date="2012-02-08T04:54:22Z"
+ content="""
+I'm using ikiwiki package from Debian squeeze and I can't seem
+to be able to make OpenID work. It's a blog and when I try to
+add a comment and click on SignIn, I'm redirected to
+
+>http://my.site/ikiwiki.cgi?do=commentsignin
+
+
+Once I click on Google logo/icon, it takes a while before showing
+
+>no_identity_server: The provided URL doesn't declare its OpenID identity server.
+
+
+It's not clear for me what's wrong or if I should add meta openid in some page.
+This is the version of libnet-openid-consumer-perl: 1.03-1. It also fails for
+Yahoo! and other providers, we never get redirected to Google/Yahoo! or other
+verification page.
+
+Thank you in advance!
+"""]]
diff --git a/doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_4_b0d39d30852bca1525ab9612a7532670._comment b/doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_4_b0d39d30852bca1525ab9612a7532670._comment
new file mode 100644
index 000000000..ce3cf2156
--- /dev/null
+++ b/doc/forum/OpenID_not_working___47___where_to_define_wiki__39__s_ID__63__/comment_4_b0d39d30852bca1525ab9612a7532670._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawndsaC4GaIBw49WNdbk2Faqfm_mrtQgul8"
+ nickname="Christian"
+ subject="comment 4"
+ date="2012-02-29T06:59:21Z"
+ content="""
+I had the error with squeeze, too. Have now moved to passwordauth, at least for now...
+"""]]
diff --git a/doc/forum/Parent_Links_all_link_to_root.mdwn b/doc/forum/Parent_Links_all_link_to_root.mdwn
new file mode 100644
index 000000000..b9c4c8e1a
--- /dev/null
+++ b/doc/forum/Parent_Links_all_link_to_root.mdwn
@@ -0,0 +1,18 @@
+My parent links all link to the root instead of to the appropriate index.mdwn. Is this a sign of a broken link pre-compile? Is there some setting that controls this?
+
+<code>
+\<span class="parentlinks">
+
+\<a href="../../../">root\</a>/
+
+\<a href="../../../">level1\</a>/
+
+\<a href="../../../">level2\</a>/
+
+\</span>
+</code>
+
+Thanks,
+Sean
+
+ikiwiki version 3.20100722 - Pretty plain Jane install
diff --git a/doc/forum/Parent_Links_all_link_to_root/comment_1_4b5ed25cceb7740f64ee08aba00a1d91._comment b/doc/forum/Parent_Links_all_link_to_root/comment_1_4b5ed25cceb7740f64ee08aba00a1d91._comment
new file mode 100644
index 000000000..656cc0f56
--- /dev/null
+++ b/doc/forum/Parent_Links_all_link_to_root/comment_1_4b5ed25cceb7740f64ee08aba00a1d91._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.154.4.117"
+ subject="comment 1"
+ date="2012-06-03T17:11:11Z"
+ content="""
+All I can think is that you must have modified the `page.tmpl` template and broken the url inside the parenlinks loop somehow.
+"""]]
diff --git a/doc/forum/Problem_with_gitweb.mdwn b/doc/forum/Problem_with_gitweb.mdwn
new file mode 100644
index 000000000..98a7f39a3
--- /dev/null
+++ b/doc/forum/Problem_with_gitweb.mdwn
@@ -0,0 +1,3 @@
+I use gitweb to display the pagehistories of my local ikiwiki. However since a few weeks it doesn't work anymore and displays just: 404 - No such project. I don't remember that I changed something with my wiki. Any ideas how to fix this? I guess that it could be a permission problem, however I don't really know which permissions are important in this case.
+
+
diff --git a/doc/forum/Problem_with_gitweb/comment_2_23cc0d87448d3cbdac20a005e9191589._comment b/doc/forum/Problem_with_gitweb/comment_2_23cc0d87448d3cbdac20a005e9191589._comment
new file mode 100644
index 000000000..f80bd38d8
--- /dev/null
+++ b/doc/forum/Problem_with_gitweb/comment_2_23cc0d87448d3cbdac20a005e9191589._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 2"
+ date="2012-03-05T21:08:45Z"
+ content="""
+This seems entirely a gitweb configuration problem, so look at `/etc/gitweb.conf`
+
+Or, if you are able to navigate to a gitweb url that does show your wiki's source, fix up ikiwiki's `historyurl` to use the url that works.
+"""]]
diff --git a/doc/forum/Problem_with_gitweb/comment_3_697c6038009249e6a49d9e458a5ba271._comment b/doc/forum/Problem_with_gitweb/comment_3_697c6038009249e6a49d9e458a5ba271._comment
new file mode 100644
index 000000000..72eeda124
--- /dev/null
+++ b/doc/forum/Problem_with_gitweb/comment_3_697c6038009249e6a49d9e458a5ba271._comment
@@ -0,0 +1,47 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk_MMtLPS7osC5MjX00q2ATjvvXPWqm0ik"
+ nickname="micheal"
+ subject="comment 3"
+ date="2012-03-06T09:50:53Z"
+ content="""
+I don't know how to navigate to a gitweb url that does show my wiki's source.
+
+My gitweb.conf looks like this:
+
+ cat /etc/gitweb.conf
+ # path to git projects (<project>.git)
+ #$projectroot = \"/var/cache/git\";
+ $projectroot = \"/home/myuser/myiki\";
+
+ # directory to use for temp files
+ $git_temp = \"/tmp\";
+
+ # Change This
+ $site_name = \"myiki\";
+
+ # target of the home link on top of all pages
+ #$home_link = $my_uri || \"/\";
+
+ # html text to include at home page
+ #$home_text = \"indextext.html\";
+
+ # file with project list; by default, simply scan the projectroot dir.
+ #$projects_list = $projectroot;
+
+ # stylesheet to use
+ #@stylesheets = (\"static/gitweb.css\");
+
+ # javascript code for gitweb
+ #$javascript = \"static/gitweb.js\";
+
+ # logo to use
+ #$logo = \"static/git-logo.png\";
+
+ # the 'favicon'
+ #$favicon = \"static/git-favicon.png\";
+
+ # git-diff-tree(1) options to use for generated patches
+ #@diff_opts = (\"-M\");
+ @diff_opts = ();
+
+"""]]
diff --git a/doc/forum/Problem_with_gitweb/comment_3_6a5b96f7e0d6b169c090e3df7281d938._comment b/doc/forum/Problem_with_gitweb/comment_3_6a5b96f7e0d6b169c090e3df7281d938._comment
new file mode 100644
index 000000000..c8bbe9ba1
--- /dev/null
+++ b/doc/forum/Problem_with_gitweb/comment_3_6a5b96f7e0d6b169c090e3df7281d938._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk_MMtLPS7osC5MjX00q2ATjvvXPWqm0ik"
+ nickname="micheal"
+ subject="comment 3"
+ date="2012-03-27T17:35:49Z"
+ content="""
+Any ideas???
+"""]]
diff --git a/doc/forum/Problem_with_gitweb/comment_5_8a79b879205bd265d54e30f0eee2ac63._comment b/doc/forum/Problem_with_gitweb/comment_5_8a79b879205bd265d54e30f0eee2ac63._comment
new file mode 100644
index 000000000..242ce8928
--- /dev/null
+++ b/doc/forum/Problem_with_gitweb/comment_5_8a79b879205bd265d54e30f0eee2ac63._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk_MMtLPS7osC5MjX00q2ATjvvXPWqm0ik"
+ nickname="micheal"
+ subject="comment 5"
+ date="2012-03-29T18:55:37Z"
+ content="""
+Solved by `sudo chmod a+x /home/myuser`
+"""]]
diff --git a/doc/forum/Problem_with_local_git_commit.mdwn b/doc/forum/Problem_with_local_git_commit.mdwn
new file mode 100644
index 000000000..e9dfdb417
--- /dev/null
+++ b/doc/forum/Problem_with_local_git_commit.mdwn
@@ -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/See_rendered_old_revisions_via_pagehistory.mdwn b/doc/forum/See_rendered_old_revisions_via_pagehistory.mdwn
new file mode 100644
index 000000000..465746ef9
--- /dev/null
+++ b/doc/forum/See_rendered_old_revisions_via_pagehistory.mdwn
@@ -0,0 +1 @@
+Via `historyurl` and `gitweb` I can view the markdown source of old revisions of a page (by clicking on `blob` in `gitweb`). Is it also possible to see the rendered versions of this old revisions directly (i.e. such they would be rendered by ikiwiki, not only the markdown source)?
diff --git a/doc/forum/Setting_http__95__proxy.mdwn b/doc/forum/Setting_http__95__proxy.mdwn
new file mode 100644
index 000000000..3bf8a76bc
--- /dev/null
+++ b/doc/forum/Setting_http__95__proxy.mdwn
@@ -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
index 000000000..3623652ab
--- /dev/null
+++ b/doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment
@@ -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
index 000000000..db07f6dc3
--- /dev/null
+++ b/doc/forum/Slow_ikiwiki_after_first_run.mdwn
@@ -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
index 000000000..ff0d79dbd
--- /dev/null
+++ b/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment
@@ -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
index 000000000..53c44d14f
--- /dev/null
+++ b/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment
@@ -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/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
index 000000000..4fee07db4
--- /dev/null
+++ b/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn
@@ -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
index 000000000..239444516
--- /dev/null
+++ b/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment
@@ -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/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__.mdwn b/doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__.mdwn
new file mode 100644
index 000000000..42f470a8b
--- /dev/null
+++ b/doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__.mdwn
@@ -0,0 +1,6 @@
+Hello,
+
+For example the page [[plugins/tag|plugins/tag]] here is tagged type/link and type/tags, what gets listed exactly so below the page's content. However, when I use tags like concept/getopt or lang/Perl on my private wiki, it gets only listed as getopt and Perl. Is this behavior configurable or is it implemented firstly in a version later than 3.20100815~bpo50+1 (for which I'm stuck ATM.)?
+
+Greetings,
+ Mike Dornberger
diff --git a/doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__/comment_1_cd5ea3aac8a59793ece5bf01a6190b53._comment b/doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__/comment_1_cd5ea3aac8a59793ece5bf01a6190b53._comment
new file mode 100644
index 000000000..953a7141b
--- /dev/null
+++ b/doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__/comment_1_cd5ea3aac8a59793ece5bf01a6190b53._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-04-19T17:32:18Z"
+ content="""
+I think this change was made in 2011, in commit a17469e3882f55bee93863c6e265b96b80ec9fef.
+
+"""]]
diff --git a/doc/forum/access_restrictions:_for_extranet.mdwn b/doc/forum/access_restrictions:_for_extranet.mdwn
new file mode 100644
index 000000000..66f0f7fea
--- /dev/null
+++ b/doc/forum/access_restrictions:_for_extranet.mdwn
@@ -0,0 +1,8 @@
+Hi folks,
+
+are there any plugins or best-ways to create a kind of extranet. Just a few pages or namespaces with access restrictions?
+
+There is a [htaccess solution](http://www.branchable.com/forum/Read_access_restrictions/). Would be fine, but only if there are other solutions.
+
+greetz
+klml
diff --git a/doc/forum/access_restrictions:_for_extranet/comment_1_a0666c3c15661fb0fff70f313cd0d47d._comment b/doc/forum/access_restrictions:_for_extranet/comment_1_a0666c3c15661fb0fff70f313cd0d47d._comment
new file mode 100644
index 000000000..767fb7c03
--- /dev/null
+++ b/doc/forum/access_restrictions:_for_extranet/comment_1_a0666c3c15661fb0fff70f313cd0d47d._comment
@@ -0,0 +1,29 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-04-15T20:53:44Z"
+ content="""
+Read/view access and write/edit access are rather different.
+You can limit write access via wiki configuration, and even
+configure it over the web with [[plugins/websetup]].
+
+The only way to limit read access is to restrict access to the
+ entire wiki via `.htaccess` or other web server configuration,
+preferably combined with use of `https`.
+IkiWiki can't limit read access to pages on its own[*],
+because it's a wiki compiler: when a page is viewed, the web
+server serves the compiled HTML without IkiWiki being involved.
+
+The best way to integrate access control into IkiWiki would
+probably be to have a CGI user interface for `.htaccess` or
+equivalent - but you'd still have to be careful, because,
+for instance, if a user can edit public pages, then they
+can insert a `\[[!include]]` directive to make the content
+of a private page public. As a result, the safest way to
+use it is to keep public and private information in
+separate wikis.
+
+[\*] strictly speaking, it *could* via a new plugin, but
+that would defeat many of its advantages
+"""]]
diff --git a/doc/forum/access_restrictions:_for_extranet/comment_2_563040aa099c9366dc5701eb4bc9c10d._comment b/doc/forum/access_restrictions:_for_extranet/comment_2_563040aa099c9366dc5701eb4bc9c10d._comment
new file mode 100644
index 000000000..75b9d49bc
--- /dev/null
+++ b/doc/forum/access_restrictions:_for_extranet/comment_2_563040aa099c9366dc5701eb4bc9c10d._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="klml"
+ ip="188.174.93.195"
+ subject="comment 2"
+ date="2012-04-16T19:57:20Z"
+ content="""
+hi smcv,
+
+> when a page is viewed, the web server serves the compiled HTML without IkiWiki being involved.
+
+yes you are right, but I still think its a feature ;)
+
+> The best way to integrate access control into IkiWiki would probably be to have a CGI user interface for .htaccess or equivalent - but you'd still have to be careful, because, for instance, if a user can edit public pages, then they can insert a \[[!include]] directive to make the content of a private page public.
+
+My usecase is a website with an small internal area, its just for not \"so public\" files, no private files. And I only have some trusted users.
+
+thx
+klml
+
+"""]]
diff --git a/doc/forum/attachments_fail_to_upload.mdwn b/doc/forum/attachments_fail_to_upload.mdwn
new file mode 100644
index 000000000..62e363a16
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload.mdwn
@@ -0,0 +1,8 @@
+I am having a problem with ikiwiki on an armel processor based machine running 32 bit debian squeeze.
+I first installed the ikiwiki deb from the repos and realized there was a problem uploading images.
+I downloaded the latest version of ikiwiki from the git repo and made sure I had all of the necessary dependencies and libraries.
+Make doesn't seem to complain about anything being missing and make test passes fine. I can create a new wiki and edit pages but anytime I try to upload an image it fails.
+I have the attachment plugin activated.And I added mimetype(image/*) and maxsize(5000kb) to the PageSpec field but that made no difference.
+I am able to successully add images to the appropriate folders manually via the command line and the commit them to git but I'd liekt o make it work through the web interface. Is there anything that I may have missed?
+
+Edit: I just noticed that if I save the page anyway after the the javascript ui reports that the upload has failed, the file has in fact uploaded.
diff --git a/doc/forum/attachments_fail_to_upload/comment_1_577adde1dfa49463dfa8e169c462fc42._comment b/doc/forum/attachments_fail_to_upload/comment_1_577adde1dfa49463dfa8e169c462fc42._comment
new file mode 100644
index 000000000..7d2d66c14
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload/comment_1_577adde1dfa49463dfa8e169c462fc42._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-03-01T16:11:09Z"
+ content="""
+Saying \"it fails\" is not going to get the best help. If you can look in your web server's error.log file, or get a error message from somewhere else, you might get somewhere.
+
+You might also check if the machine is running out of memory. It's quite likely that a POSTed attachment is all buffered in the web server's memory before ikiwiki gets ahold of it.
+"""]]
diff --git a/doc/forum/attachments_fail_to_upload/comment_2_473f38c6d523496fac8dad13ac6d20c3._comment b/doc/forum/attachments_fail_to_upload/comment_2_473f38c6d523496fac8dad13ac6d20c3._comment
new file mode 100644
index 000000000..f491a9b71
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload/comment_2_473f38c6d523496fac8dad13ac6d20c3._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="jaime"
+ ip="201.141.41.68"
+ subject="comment 2"
+ date="2012-03-01T20:08:47Z"
+ content="""
+Sorry, \"failed\" is just the message ikwiki's web interface returns. Nginx's error logs don't seem to register anything when the \"failure\" occurs. I am not sure how to properly monitor what is happening with the web server's memory at the time of uploading but just watching htop I can see that the ikiwiki begins to use 100% if the cpu until the process stops but there doesn't seem to be much impact on the overall memory usage, seems to remain about half of available memory.
+I'm sorry if that is not helpful. If you can give me some pointers on where to look for more detailed information I can follow instructions.
+
+
+
+"""]]
diff --git a/doc/forum/attachments_fail_to_upload/comment_3_799a2f1b7b259157e97fd31ec76fb845._comment b/doc/forum/attachments_fail_to_upload/comment_3_799a2f1b7b259157e97fd31ec76fb845._comment
new file mode 100644
index 000000000..ebf2756a4
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload/comment_3_799a2f1b7b259157e97fd31ec76fb845._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 3"
+ date="2012-03-03T14:54:10Z"
+ content="""
+What version are you running on squeeze? The version shipped with Debian stable does not have the javascript uploader.
+
+There was a recent problem involving filenames with unicode characters that broke the javascript uploader as you describe, which was fixed in a recent release.
+"""]]
diff --git a/doc/forum/attachments_fail_to_upload/comment_4_e37d1497acafd3fda547462f000636e3._comment b/doc/forum/attachments_fail_to_upload/comment_4_e37d1497acafd3fda547462f000636e3._comment
new file mode 100644
index 000000000..148c7b799
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload/comment_4_e37d1497acafd3fda547462f000636e3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jaime"
+ ip="201.141.91.196"
+ subject="ikiwiki version 3.20120203"
+ date="2012-03-05T19:52:02Z"
+ content="""
+I installed ikiwiki version 3.20120203 from source. Should I pull more recent changes from the repo?
+"""]]
diff --git a/doc/forum/attachments_fail_to_upload/comment_5_da03f9c4917cb1ef52de984b8ba86b68._comment b/doc/forum/attachments_fail_to_upload/comment_5_da03f9c4917cb1ef52de984b8ba86b68._comment
new file mode 100644
index 000000000..dbe0d6574
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload/comment_5_da03f9c4917cb1ef52de984b8ba86b68._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 5"
+ date="2012-03-05T20:48:50Z"
+ content="""
+Your version already contains the unicode fix, which was commit 1572c3c376df36ea09e27a1ea437e3a75cdf0f84.
+
+I think it's possible that the javascript file upload widget is timing out waiting for a response from ikiwiki when uploading the file. Since this is a slow CPU, it might exceed some limit in that code. At this point all I know is that the javascript file upload widget is setting an error flag, which is displayed as \"failed!\" in red. The next step is probably to get a http protocol analizer like firebug and see what if anything is being returned by the ikiwiki.cgi when the attachment is uploaded to it -- it should return some JSON with a `stored_msg` field.
+
+"""]]
diff --git a/doc/forum/attachments_fail_to_upload/comment_6_04498946a300ddb652dec73c2950f48f._comment b/doc/forum/attachments_fail_to_upload/comment_6_04498946a300ddb652dec73c2950f48f._comment
new file mode 100644
index 000000000..877050eb5
--- /dev/null
+++ b/doc/forum/attachments_fail_to_upload/comment_6_04498946a300ddb652dec73c2950f48f._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="jaime"
+ ip="201.141.54.196"
+ subject="comment 6"
+ date="2012-03-08T01:34:57Z"
+ content="""
+Ok... figured out how to use firebug, started the profile, and tried uploading an image. POST http://myserver/ikiwiki.cgi immediately turns red with a little X as I get the javascript \"failed\" message in the ui. In the post tab of firebug, halfway through the binary content of the png I can see the message \"... Firebug request size limit has been reached by Firebug. ... \"
+
+So next I try uploading a tiny 3k image. This time the post completes and I can see \"Error: Can't locate JSON.pm in @INC\" in the output. A bit of googling tells me I need to install the libjson-perl package. Done.
+
+I try and upload the tiny 3k image again. This time it works. :)
+I try and upload a 9k image and the POST just dies just like before with the \"... Firebug request size limit has been reached by Firebug. ... \" in the post tab.
+
+So I tried changing the extensions.firebug.netDisplayedPostBodyLimit variable in firefox to see if that would me to get more info. Now the I don't get the request size limit message but the post still doesn't get anything back.
+
+I decided to try some other http protocal analyzers. Firefox 10 internal webdeveloper tools don't give me any more info.
+Next I tried HttpFox and the only thing I get back is this...
+Error loading content (NS_ERROR_DOCUMENT_NOT_CACHED)
+"""]]
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters.mdwn b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters.mdwn
new file mode 100644
index 000000000..2e5ac7e6e
--- /dev/null
+++ b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters.mdwn
@@ -0,0 +1,12 @@
+ $ ikiwiki -setup mywiki.setup
+ generating wrappers..
+ rebuilding wiki..
+ Cannot decode string with wide characters at /opt/local/lib/perl5/5.12.3/darwin-multi-2level/Encode.pm line 175.
+
+I am running Mac OS X 10.6.8
+
+ $ ikiwiki --version
+ ikiwiki version 3.20110608
+ $ perl --version
+
+ This is perl 5, version 12, subversion 3 (v5.12.3) built for darwin-multi-2level
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_1_83fbb415dd3ae6a19ed5ea5f82065c28._comment b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_1_83fbb415dd3ae6a19ed5ea5f82065c28._comment
new file mode 100644
index 000000000..d1b555b2a
--- /dev/null
+++ b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_1_83fbb415dd3ae6a19ed5ea5f82065c28._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-03-13T03:57:42Z"
+ content="""
+The problem could be your system's locale setting. Perhaps LANG is not set to a utf-8 capable locale.
+"""]]
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_2_d258536c98538d4744f66eb3132439a9._comment b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_2_d258536c98538d4744f66eb3132439a9._comment
new file mode 100644
index 000000000..28222618d
--- /dev/null
+++ b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_2_d258536c98538d4744f66eb3132439a9._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmKyeW2G4jjSdnL1m6kPPtAiGFUBsnYCfY"
+ nickname="FName"
+ subject="comment 2"
+ date="2012-03-13T04:43:25Z"
+ content="""
+ $ locale
+ LANG=\"en_US.UTF-8\"
+ LC_COLLATE=\"en_US.UTF-8\"
+ LC_CTYPE=\"en_US.UTF-8\"
+ LC_MESSAGES=\"en_US.UTF-8\"
+ LC_MONETARY=\"en_US.UTF-8\"
+ LC_NUMERIC=\"en_US.UTF-8\"
+ LC_TIME=\"en_US.UTF-8\"
+ LC_ALL=
+ $ uname -a
+ Darwin x4430 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
+
+Does it look OK?
+"""]]
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_3_d62173d0ae220ab7b063631952856587._comment b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_3_d62173d0ae220ab7b063631952856587._comment
new file mode 100644
index 000000000..8dc2f9851
--- /dev/null
+++ b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_3_d62173d0ae220ab7b063631952856587._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 3"
+ date="2012-03-16T20:33:20Z"
+ content="""
+The locale settings look ok.
+
+I'd try upgrading your perl. 5.12.3 is rather old, and the code that is failing is part of perl.
+"""]]
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
index 000000000..57c99bee9
--- /dev/null
+++ b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_4_d5d0174e09a94359c23fd9c006a22bbc._comment
@@ -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
index 000000000..08bde8c85
--- /dev/null
+++ b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment
@@ -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.
+"""]]
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
index 000000000..d82a419a3
--- /dev/null
+++ b/doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn
@@ -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/how_to_login_as_admin/comment_1_295e130c6400a2d7336758e82bcd5647._comment b/doc/forum/how_to_login_as_admin/comment_1_295e130c6400a2d7336758e82bcd5647._comment
new file mode 100644
index 000000000..bceecf8e8
--- /dev/null
+++ b/doc/forum/how_to_login_as_admin/comment_1_295e130c6400a2d7336758e82bcd5647._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://ismael.olea.org/"
+ ip="150.214.94.198"
+ subject="comment 1"
+ date="2012-05-22T23:31:09Z"
+ content="""
+Can be adminuser an OpenID address?
+
+Because I can't get the websetup link at my preferences (plugin is set). I deactivated passwordauth plugin.
+"""]]
diff --git a/doc/forum/howto_install_the_pagedown_plugin.mdwn b/doc/forum/howto_install_the_pagedown_plugin.mdwn
new file mode 100644
index 000000000..51b0a554b
--- /dev/null
+++ b/doc/forum/howto_install_the_pagedown_plugin.mdwn
@@ -0,0 +1 @@
+How can I install the [[todo/pagedown_plugin]] on an existing ikiwiki? What are the detailed steps to do so?
diff --git a/doc/forum/howto_install_the_pagedown_plugin/comment_1_158fbcef24d20920c40968da8f10442a._comment b/doc/forum/howto_install_the_pagedown_plugin/comment_1_158fbcef24d20920c40968da8f10442a._comment
new file mode 100644
index 000000000..3985a797d
--- /dev/null
+++ b/doc/forum/howto_install_the_pagedown_plugin/comment_1_158fbcef24d20920c40968da8f10442a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-04-05T18:35:25Z"
+ content="""
+See [[plugins/install]]
+"""]]
diff --git a/doc/forum/ikiwiki_--setup_creates_tmp__47___directory_in_destdir.mdwn b/doc/forum/ikiwiki_--setup_creates_tmp__47___directory_in_destdir.mdwn
new file mode 100644
index 000000000..dab883632
--- /dev/null
+++ b/doc/forum/ikiwiki_--setup_creates_tmp__47___directory_in_destdir.mdwn
@@ -0,0 +1,10 @@
+Hi,
+
+I just recently migrated my pyblosxom installation to ikiwiki (see <http://blog.well-adjusted.de/posts/>). Should have done that years ago!
+
+Anyway, so far my only problem is that `ikiwiki --setup mysite.setup` creates a directory named `tmp` in the directory containing my postings, together with an empty index.html. It happens every time if I do a complete rebuild. It does not happen every time with `--refresh`. For example, editing only `local.css` does not trigger the behaviour. Editing any posting will do, but that triggers a complete rebuild anyway due to my sidebar with the tag cloud.
+
+Do you have any idea what might cause this or how I should proceed to find it out? I am a programmer but know next to nothing about Perl.
+
+Thanks,
+Jochen.
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
index 000000000..4ab5b52ee
--- /dev/null
+++ b/doc/forum/ikiwiki_and_big_files/comment_1_df8a9f4249af435cc335f77768a3278d._comment
@@ -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
index 000000000..6a11d9ae2
--- /dev/null
+++ b/doc/forum/ikiwiki_and_big_files/comment_2_2d996f1124aedc10f345139c3d8b11df._comment
@@ -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
index 000000000..6aae6dbd7
--- /dev/null
+++ b/doc/forum/ikiwiki_and_big_files/comment_3_dfbd38e2b457ea3c4f70266dbf8fbeab._comment
@@ -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/links_to_diff_on_recentchanges__63__.mdwn b/doc/forum/links_to_diff_on_recentchanges__63__.mdwn
new file mode 100644
index 000000000..9a8db62b9
--- /dev/null
+++ b/doc/forum/links_to_diff_on_recentchanges__63__.mdwn
@@ -0,0 +1 @@
+How can I get the little glasses-icon with a link to the diff on Recentchanges, please? I have git integration working nicely, and recentchangesdiff is producing diffs in the RSS feed, but I'd really like a link on the RecentChanges like you have here.
diff --git a/doc/forum/links_to_diff_on_recentchanges__63__/comment_1_1dbc723cc2794f6d45de9cbd2fc2e0fd._comment b/doc/forum/links_to_diff_on_recentchanges__63__/comment_1_1dbc723cc2794f6d45de9cbd2fc2e0fd._comment
new file mode 100644
index 000000000..a09b410b3
--- /dev/null
+++ b/doc/forum/links_to_diff_on_recentchanges__63__/comment_1_1dbc723cc2794f6d45de9cbd2fc2e0fd._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2012-02-23T20:20:17Z"
+ content="""
+Set up gitweb and configure the `diffurl` in ikiwiki and the glasses will appear.
+"""]]
diff --git a/doc/forum/links_to_diff_on_recentchanges__63__/comment_2_4349c85d92cf9c1acf2e7678371ab12a._comment b/doc/forum/links_to_diff_on_recentchanges__63__/comment_2_4349c85d92cf9c1acf2e7678371ab12a._comment
new file mode 100644
index 000000000..b98172bfd
--- /dev/null
+++ b/doc/forum/links_to_diff_on_recentchanges__63__/comment_2_4349c85d92cf9c1acf2e7678371ab12a._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="bob"
+ ip="137.205.152.60"
+ subject="comment 2"
+ date="2012-02-24T09:30:50Z"
+ content="""
+Thanks, that was just the ticket :). My ikiwiki.setup file didn't even have a commented out diffurl in it - is there a handy list of configuration-variables somewhere? I thought the theory was that ikiwiki.setup was generated with (commented out) nearly all the config variables already mentioned?
+
+[FWIW, I'm using the version in Debian stable]
+"""]]
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
index 000000000..eac5dc165
--- /dev/null
+++ b/doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment
@@ -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
index 000000000..95cb62d29
--- /dev/null
+++ b/doc/forum/po_plugin_doesn__39__t_create_po_files___40__only_pot__41__..mdwn
@@ -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
index 000000000..fb87fadd1
--- /dev/null
+++ b/doc/forum/possible_utf-8_problem__63__.mdwn
@@ -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.
diff --git a/doc/forum/problem_with_git_after_a_commit_of_ikiwiki.mdwn b/doc/forum/problem_with_git_after_a_commit_of_ikiwiki.mdwn
new file mode 100644
index 000000000..3fb892933
--- /dev/null
+++ b/doc/forum/problem_with_git_after_a_commit_of_ikiwiki.mdwn
@@ -0,0 +1,4 @@
+after adding a comment on ikiwiki i have this error when im updating ikiwiki from gitolite with git push or using ikiwiki --setup alicewiki.setup
+http://paste.debian.net/160953
+
+and i can't update new post or everythings other
diff --git a/doc/forum/problem_with_git_after_a_commit_of_ikiwiki/comment_1_2b9986717769419a8ae0f730c36b7e65._comment b/doc/forum/problem_with_git_after_a_commit_of_ikiwiki/comment_1_2b9986717769419a8ae0f730c36b7e65._comment
new file mode 100644
index 000000000..ecdc20bc1
--- /dev/null
+++ b/doc/forum/problem_with_git_after_a_commit_of_ikiwiki/comment_1_2b9986717769419a8ae0f730c36b7e65._comment
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-03-26T08:22:37Z"
+ content="""
+The problem is visible in what you pasted:
+
+ fatal: empty ident <git@r36457.ovh.net
+ > not allowed
+
+and so is the solution:
+
+ *** Please tell me who you are.
+
+ Run
+
+ git config --global user.email \"you@example.com\"
+ git config --global user.name \"Your Name\"
+
+ to set your account's default identity.
+"""]]
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
index 000000000..6c5ee4301
--- /dev/null
+++ b/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__.mdwn
@@ -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
index 000000000..21b5e7d2f
--- /dev/null
+++ b/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment
@@ -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
index 000000000..cc8c9ac43
--- /dev/null
+++ b/doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment
@@ -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?
+"""]]
diff --git a/doc/git.mdwn b/doc/git.mdwn
index 2e58c6992..2f61f38a0 100644
--- a/doc/git.mdwn
+++ b/doc/git.mdwn
@@ -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
@@ -74,8 +72,10 @@ think about merging them. This is recommended. :-)
* nezmer `git://gitorious.org/ikiwiki-nezmer/ikiwiki-nezmer.git`
* [[yds]] `git://github.com/yds/ikiwiki.git`
* [[pelle]] `git://github.com/hemmop/ikiwiki.git`
+* [[chrismgray]] `git://github.com/chrismgray/ikiwiki.git`
+* [[ttw]] `git://github.com/ttw/ikiwiki.git`
+* [[anarcat]] `git://src.anarcat.ath.cx/ikiwiki`
## branches
Current branches of ikiwiki are listed on [[branches]].
-
diff --git a/doc/ikiwiki-calendar.mdwn b/doc/ikiwiki-calendar.mdwn
index 03cbdd86c..d311a1859 100644
--- a/doc/ikiwiki-calendar.mdwn
+++ b/doc/ikiwiki-calendar.mdwn
@@ -39,7 +39,7 @@ the calendars to highlight the current day.
An example crontab:
- 0 0 * * * ikiwiki-calendar ~/ikiwiki.setup "posts/* and !*/Discussion"
+ 0 0 * * * ikiwiki-calendar ~/ikiwiki.setup 'posts/* and !*/Discussion'
# TEMPLATES
diff --git a/doc/ikiwiki-calendar/discussion.mdwn b/doc/ikiwiki-calendar/discussion.mdwn
new file mode 100644
index 000000000..b64321008
--- /dev/null
+++ b/doc/ikiwiki-calendar/discussion.mdwn
@@ -0,0 +1,36 @@
+Suggestion to change
+
+ 0 0 * * * ikiwiki-calendar ~/ikiwiki.setup "posts/* and !*/Discussion"
+
+to
+
+ 0 0 * * * ikiwiki-calendar ~/ikiwiki.setup 'posts/* and !*/Discussion'
+
+I ran into (for me) unexpected behaviour with double quotes, since when I tried it in the interactive shell, the "!" made it fail ([history expansion](http://mywiki.wooledge.org/BashPitfalls#echo_.22Hello_World.21.22)). I thought "aha, it should be escaped!", did so, and did not get any error messages, but it no longer functioned as intended (as per the earlier linked page).
+
+The latter line will work everywhere, not just in environments without history expansion. I think trying a command manually before putting it into crontab is common, and this would avoid the possible user issue I ran into.
+
+----
+
+I wonder what this program (ikiwiki-calendar) is useful for. Would not it be simpler to have the [[calendar|ikiwiki/directive/calendar]] directive generate the `archive_base/year/month.mdwn` files on the fly, as are the tag pages generated by the [[tag|plugins/tag]] plugin? This solution would have the advantage of automatically generating the right calendar pages, instead of having to tell ikiwiki-calendar which years to take into account.
+
+Using this solution would mean to have the pagespec stored somewhere in the configuration. But this is already the case, as the pagespec used by [[ikiwiki-calendar]] is either set in the configuration file of the wiki, or in the crontab or whatever script used to call ikiwiki-calendar.
+
+Having done this, the only purpose of ikiwiki-calendar would be to re-generate the wiki on a daily (or whatever frequency) basis, which can be done using ikiwiki instead of ikiwiki-calendar.
+
+Did I miss something? If I am right, I offer to write the necessary patch, copied and adapted from the tag plugin, to generate the pages `archive_base/year/month.mdwn` on the fly.
+
+-- Spalax
+
+> Good spotting, `ikiwiki-calendar` predates the `add_autofile` API used to
+> autocreate tag pages and was bolted in as an easy way to create calendar
+> pages.
+>
+> It would be possible to do that inside the caneldar plugin now. Although
+> some command would still need to be run on a daily (or weekly, or
+> monthly, or yearly..) basis to have it wake up and make the new calendar
+> pages and update the displayed current day from calendar directives.
+>
+> That last is, arguably, the real point of running ikiwiki-calendar in
+> a cron job. Of course all it really does is run `ikiwiki -setup foo
+> -refresh`. --[[Joey]]
diff --git a/doc/ikiwiki-makerepo.mdwn b/doc/ikiwiki-makerepo.mdwn
index eccfb692a..928440f99 100644
--- a/doc/ikiwiki-makerepo.mdwn
+++ b/doc/ikiwiki-makerepo.mdwn
@@ -12,7 +12,7 @@ ikiwiki-makerepo bzr|mercurial srcdir
`ikiwiki-makerepo` injects an existing `srcdir` directory, containing
sources for an ikiwiki wiki, into revision control. It is rarely
-run directly; consider using `ikiwiki -setup /etc/ikiwiki/wiki.setup` instead
+run directly; consider using `ikiwiki --setup /etc/ikiwiki/wiki.setup` instead
to set up a wiki.
For git, the `repo` is created as a bare git repository, and the srcdir is
diff --git a/doc/ikiwiki-update-wikilist.mdwn b/doc/ikiwiki-update-wikilist.mdwn
index e5ea72e36..b6330c5e5 100644
--- a/doc/ikiwiki-update-wikilist.mdwn
+++ b/doc/ikiwiki-update-wikilist.mdwn
@@ -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.
diff --git a/doc/ikiwiki/directive/edittemplate.mdwn b/doc/ikiwiki/directive/edittemplate.mdwn
index c486e821b..569c2818f 100644
--- a/doc/ikiwiki/directive/edittemplate.mdwn
+++ b/doc/ikiwiki/directive/edittemplate.mdwn
@@ -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/graph.mdwn b/doc/ikiwiki/directive/graph.mdwn
index 8b066c2f2..7021e47fb 100644
--- a/doc/ikiwiki/directive/graph.mdwn
+++ b/doc/ikiwiki/directive/graph.mdwn
@@ -9,14 +9,14 @@ Nodes on the graph can link to external urls using regular graphviz syntax,
and a clickable imagemap will be created. As a special extension for
ikiwiki, [[WikiLinks|ikiwiki/wikilink]] can also be used. For example:
- \[[!graph src=""""
+ \[[!graph src="""
google [ href="http://google.com/" ]
sandbox [ href=\[[SandBox]] ]
help [ href=\[[ikiwiki/formatting]] ]
newpage [ href=\[[NewPage]] ]
google -> sandbox -> help -> newpage -> help -> google;
- """"]]
+ """]]
The `graph` directive supports the following parameters:
diff --git a/doc/ikiwiki/directive/graph/discussion.mdwn b/doc/ikiwiki/directive/graph/discussion.mdwn
new file mode 100644
index 000000000..f88da7261
--- /dev/null
+++ b/doc/ikiwiki/directive/graph/discussion.mdwn
@@ -0,0 +1,27 @@
+How to align this?
+==================
+
+I have found this patch to be the only way I can float graphs to the right:
+
+[[!format diff """
+--- Plugin/graphviz.pm.orig 2012-04-25 10:26:59.531525247 -0400
++++ Plugin/graphviz.pm 2012-04-25 10:26:01.282922144 -0400
+@@ -87,8 +87,10 @@
+ error gettext("failed to run graphviz") if ($sigpipe || $?);
+ }
+
++ my $class = '';
++ $class = 'class="' . $params{class} if $params{class};
+ return "<img src=\"".urlto($dest, $params{destpage}).
+- "\" usemap=\"#graph$sha\" />\n".
++ "\" usemap=\"#graph$sha\" $class />\n".
+ $map;
+ }
+"""]]
+
+Then I can use `[[!graph class="align-right" ...]]`.. --[[anarcat]]
+
+> You can already use `<div class="align-right">[[!graph ...]]</div>`,
+> doesn't that have the same practical effect? --[[smcv]]
+
+> > It does! I didn't think of that, thanks! I am not used to plain HTML in wikis, and the [[plugins/contrib/osm]] plugin has "right" and "left" directives... --[[anarcat]]
diff --git a/doc/ikiwiki/directive/img/discussion.mdwn b/doc/ikiwiki/directive/img/discussion.mdwn
index 74b735eae..6fc28e75e 100644
--- a/doc/ikiwiki/directive/img/discussion.mdwn
+++ b/doc/ikiwiki/directive/img/discussion.mdwn
@@ -28,3 +28,7 @@ It does show a clickable question mark for ikiwiki.cgi?page=utah-2006-100-180.pn
>
> To display an image that is really legitimately not part of the wiki,
> you can't use a directive, but you can insert `<img>` html if you really want to. --[[Joey]]
+
+I have a local copy of the [[rcs/Git]] page. After installing the `imagemagick-perl` package some of the elements display and others are missing including the page outlines with turned corners and all of the yellow folders. Ideas?
+
+-- [[RonParker]]
diff --git a/doc/ikiwiki/directive/inline.mdwn b/doc/ikiwiki/directive/inline.mdwn
index 22c18d9a1..a9c241afc 100644
--- a/doc/ikiwiki/directive/inline.mdwn
+++ b/doc/ikiwiki/directive/inline.mdwn
@@ -113,9 +113,14 @@ Here are some less often needed parameters:
and/or `page/feed.rss`. This option is not supported if the wiki is
configured not to use `usedirs`.
* `pagenames` - If given instead of `pages`, this is interpreted as a
- space-separated list of links to pages (with the same
- [[SubPage/LinkingRules]] as in a [[ikiwiki/WikiLink]]), and they are inlined
- in exactly the order given: the `sort` and `pages` parameters cannot be used
- in conjunction with this one.
+ space-separated list of absolute page names ([[SubPage/LinkingRules]] are
+ not taken into account), and they are inlined in exactly the order given:
+ the `sort` and `pages` parameters cannot be used in conjunction with
+ this one.
+* `trail` - If set to "yes" and the [[!iki plugins/trail desc=trail]] plugin
+ is enabled, turn the inlined pages into a trail with next/previous links,
+ by passing the same options to [[ikiwiki/directive/trailitems]]. The `skip`
+ and `show` options are ignored by the trail, so the next/previous links
+ traverse through all matching pages.
[[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/map/discussion.mdwn b/doc/ikiwiki/directive/map/discussion.mdwn
index b7ac17b1a..6c2e6f1c2 100644
--- a/doc/ikiwiki/directive/map/discussion.mdwn
+++ b/doc/ikiwiki/directive/map/discussion.mdwn
@@ -23,6 +23,8 @@ Is that possible?
--Peter
+> the map directive could be made to use templates as the [[inline directive|ikiwiki/directive/inline]] does. (for the ambitious, the map functionality might even be special-cased into the inline plugin, i think) --[[chrysn]]
+
----
The site I'm trying to set up right now (not really a wiki - no public editing) is divided into topics. Topics are pages that have `\[[!meta link="/topic"]]`. Topic pages contain an index of their subpages (done with `\[[!inline]]`); the subpages are the real content. I want a map in the sidebar that lists:
diff --git a/doc/ikiwiki/directive/meta.mdwn b/doc/ikiwiki/directive/meta.mdwn
index 72cfc6f56..984f68540 100644
--- a/doc/ikiwiki/directive/meta.mdwn
+++ b/doc/ikiwiki/directive/meta.mdwn
@@ -59,6 +59,15 @@ 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.
+* keywords
+
+ Specifies keywords summarizing the contents of the page. This
+ information will be put in the html header. Only letters,
+ numbers, spaces and commas are allowed in this string; other
+ characters are stripped. Note that the majority of search
+ engines, including Google, do not use information from the
+ keywords header.
+
* permalink
Specifies a permanent link to the page, if different than the page
@@ -133,8 +142,8 @@ Supported fields:
\[[!meta redir=otherpage]]
- Optionally, a delay (in seconds) can be specified. The default is to
- redirect without delay.
+ The default is to redirect without delay.
+ Optionally, a delay (in seconds) can be specified: "delay=10"
It can also be used to redirect to an external url. For example:
diff --git a/doc/ikiwiki/directive/meta/discussion.mdwn b/doc/ikiwiki/directive/meta/discussion.mdwn
new file mode 100644
index 000000000..a0aefe081
--- /dev/null
+++ b/doc/ikiwiki/directive/meta/discussion.mdwn
@@ -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]]
diff --git a/doc/ikiwiki/directive/osm.mdwn b/doc/ikiwiki/directive/osm.mdwn
new file mode 100644
index 000000000..6807a8198
--- /dev/null
+++ b/doc/ikiwiki/directive/osm.mdwn
@@ -0,0 +1,69 @@
+The `osm` directive is supplied by the [[!iki plugins/osm desc=osm]] plugin.
+
+This directive inserts an OpenStreetMap map onto a page.
+It is typically combined with the [[waypoint]] directive
+to add points to the map.
+
+## examples
+
+ \[[!osm]]
+ \[[!waypoint lat="45°30N" lon="73°40W" name="My city" tag="city"]]
+
+The osm directive will display the actual map, while the waypoint
+directive adds waypoints to the map.
+
+The above can also be shortened as:
+
+ \[[!waypoint lat="45°30N" lon="73°40W" name="My city" tag="city" embed]]
+
+The tag is also taken from the tags elsewhere in the page, so the
+above is equivalent to:
+
+ \[[!waypoint lat="45°30N" lon="73°40W" name="My city" embed]]
+ \[[!tag city]]
+
+The icon is also taken from the tag if attached to the tag page as
+icon.png (default, modifiable)..
+
+## map display
+
+ * `map` - map to display, defaults to "map"
+ * `zoom` - the level to zoom to on the OSM map
+ * `loc` - lattitude and longitude of the map center
+ * `lat` - lattitude
+ * `lon` - longitude
+ * `editable` - add edit controls in a separate layer
+ * `right` - float the map right
+ * `left` - float the map left (default)
+ * `width` - width of the map
+ * `height` - height of the map
+
+## waypoints
+
+Waypoints can be added to any page. By default the waypoint takes the
+name of the page, which allows you to easily tag pages and make them
+appear on the central map.
+
+Waypoints, by default, show up as a image (the `icon` parameter) link
+to the main map (or the `map` parameter provided). That markup can be
+hidden with the `hidden` parameter.
+
+ * `name` - the name of this point, defaults to the page name (!) must
+ be unique, otherwise later incantation will overwrite previous
+ ones.
+ * `map` - the map to add the point to (defaults to "map")
+ * `desc` - description to embed in the map
+ * `loc` - lattitude and longitude
+ * `lat` - lattitude
+ * `lon` - longitude
+ * `tag` - the type of points, maps to an icon in the osm_types array
+ * `hidden` - do not display the link to the map (will not affect `embed`)
+ * `icon` - URL to the icon to show in the link to the map and within
+ the map
+ * `embed` - embed the map display alongside the point, in which case
+ the regular arguments to the map display can be used
+
+## Links
+
+If two pages with waypoints have a link between them, that link will
+magically show up on the map. Now how awesome is that?
diff --git a/doc/ikiwiki/directive/osm/discussion.mdwn b/doc/ikiwiki/directive/osm/discussion.mdwn
new file mode 100644
index 000000000..d9eb56951
--- /dev/null
+++ b/doc/ikiwiki/directive/osm/discussion.mdwn
@@ -0,0 +1,13 @@
+For some reason this stopped working after the 20120203 upgrade:
+
+ Suppression de /home/a-mesh/public_html/map/pois.kml, qui n'est plus rendu par nodes/anarcat
+ Suppression de /home/a-mesh/public_html/map/pois.txt, qui n'est plus rendu par nodes/anarcat
+ Suppression de /home/a-mesh/public_html/map/pois.json, qui n'est plus rendu par nodes/anarcat
+
+The map ceased to be generated, basically. --[[anarcat]]
+
+> Weird. This went away after adding debugging. No clue what happened here. But note that this following debugging code was quite useful in the output of --rebuild:
+
+ debug("writing pois file pois.kml in " . $config{destdir} . "/$map");
+
+The `width` and `height` parameters of the `[[!osm]]` directive stopped working after that upgrade too. The map doesn't show at all when they are added to the directive. --[[anarcat]]
diff --git a/doc/ikiwiki/directive/poll.mdwn b/doc/ikiwiki/directive/poll.mdwn
index 6aa3d2cea..0b47a2167 100644
--- a/doc/ikiwiki/directive/poll.mdwn
+++ b/doc/ikiwiki/directive/poll.mdwn
@@ -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".
diff --git a/doc/ikiwiki/directive/sidebar/discussion.mdwn b/doc/ikiwiki/directive/sidebar/discussion.mdwn
new file mode 100644
index 000000000..17c50ace6
--- /dev/null
+++ b/doc/ikiwiki/directive/sidebar/discussion.mdwn
@@ -0,0 +1,10 @@
+Things can get messy if you have enabled the global sidebar setting and you browse the `ikiwiki/directive/*` pages. You will get the content of `ikiwiki/directive/sidebar` as a sidebar to all the directives page... I have emptied the sidebar.mdwn page on our wiki to work around that, but isn't this a bug? --[[anarcat]]
+
+> Another reason to dislike the global sidebar option and wish it didn't
+> exist, as if I didn't have a dozen already. However, renaming this page
+> does not seem like an appropriate fix; adding cruft to every directive/
+> page to force the sidebar off does not seem like an appropriate fix;
+> this leaves only special casing the plugin to not treat this page as a
+> sidebar, but that's disgusting. --[[Joey]]
+
+>> Yep, this all sounds wrong... Maybe we could add a global "sidebar exclusion" pattern? Or reverse, allow customizing what name the global sidebar functionality is looking for? For example, we could look for `globalsidebar.mdwn` page instead of just `sidebar.mdwn`? --[[anarcat]]
diff --git a/doc/ikiwiki/directive/table.mdwn b/doc/ikiwiki/directive/table.mdwn
index a6692f92c..3e7917789 100644
--- a/doc/ikiwiki/directive/table.mdwn
+++ b/doc/ikiwiki/directive/table.mdwn
@@ -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/plugins/contrib/ikiwiki/directive/trailitem.mdwn b/doc/ikiwiki/directive/trailitem.mdwn
index 73b1985a5..59626b5a1 100644
--- a/doc/plugins/contrib/ikiwiki/directive/trailitem.mdwn
+++ b/doc/ikiwiki/directive/trailitem.mdwn
@@ -1,5 +1,5 @@
The `trailitem` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]] plugin. It is used like this:
+[[!iki plugins/trail desc=trail]] plugin. It is used like this:
\[[!trailitem some_other_page]]
diff --git a/doc/plugins/contrib/ikiwiki/directive/trailitems.mdwn b/doc/ikiwiki/directive/trailitems.mdwn
index 4106ed33b..387b403b9 100644
--- a/doc/plugins/contrib/ikiwiki/directive/trailitems.mdwn
+++ b/doc/ikiwiki/directive/trailitems.mdwn
@@ -1,5 +1,5 @@
The `trailitems` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]] plugin. It adds pages
+[[!iki plugins/trail desc=trail]] plugin. It adds pages
to the trail represented by the current page, without producing any output
on that page.
@@ -12,9 +12,10 @@ Options are similar to [[!iki ikiwiki/directive/inline desc=inline]]:
* `pages`: adds pages that match a [[ikiwiki/PageSpec]] to the trail
(cannot be used with `pagenames`)
-* `pagenames`: adds a space-separated list of pages to the trail,
- with the same [[ikiwiki/SubPage/LinkingRules]] as for a [[ikiwiki/WikiLink]]
- (cannot be used with `pages`)
+* `pagenames`: if used instead of `pages`, this is interpreted as a
+ space-separated list of absolute page names
+ ([[SubPage/LinkingRules]] are not taken into account)
+ to add to the trail
* `sort`: add the pages matched by `pages` to the trail in this
[[ikiwiki/pagespec/sorting]] order (cannot be used with `pagenames`)
diff --git a/doc/plugins/contrib/ikiwiki/directive/traillink.mdwn b/doc/ikiwiki/directive/traillink.mdwn
index 0e40e2411..090e2538d 100644
--- a/doc/plugins/contrib/ikiwiki/directive/traillink.mdwn
+++ b/doc/ikiwiki/directive/traillink.mdwn
@@ -1,5 +1,5 @@
The `traillink` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]]
+[[!iki plugins/trail desc=trail]]
plugin. It generates a visible [[ikiwiki/WikiLink]], and also adds the
linked page to the trail represented by the page containing the directive.
diff --git a/doc/plugins/contrib/ikiwiki/directive/trailoptions.mdwn b/doc/ikiwiki/directive/trailoptions.mdwn
index e1603f11b..d83f444c0 100644
--- a/doc/plugins/contrib/ikiwiki/directive/trailoptions.mdwn
+++ b/doc/ikiwiki/directive/trailoptions.mdwn
@@ -1,5 +1,5 @@
The `trailoptions` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]] plugin. It sets options for the
+[[!iki plugins/trail desc=trail]] plugin. It sets options for the
trail represented by this page.
\[[!trailoptions sort="meta(title)" circular="no"]]
diff --git a/doc/ikiwiki/directive/waypoint.mdwn b/doc/ikiwiki/directive/waypoint.mdwn
new file mode 100644
index 000000000..e301f8573
--- /dev/null
+++ b/doc/ikiwiki/directive/waypoint.mdwn
@@ -0,0 +1,6 @@
+The `waypoint` directive is supplied by the [[!iki plugins/osm desc=osm]] plugin.
+
+This directive adds a waypoint ot an OpenStreetMap map displayed
+by the [[osm]] directive. See the [[osm]] directive for examples
+and options.
+
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 96b94a163..bb94242bb 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -79,6 +79,14 @@ Projects & Organizations
* [Oxford Computer Society](http://www.ox.compsoc.net/)
* [Russian OpenBSD Community wiki](http://wiki.openbsd.ru/)
* [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)
Personal sites and blogs
========================
@@ -156,7 +164,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/).
@@ -169,6 +177,13 @@ 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)
-* various sub-domains at kisikew.org ([example](https://portal.kisikew.org/))
* [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.
+* [Kafe-in.net](https://www.kafe-in.net/) Ugly personnal blog.
+* [Anton Berezin's blog](http://blog.tobez.org/)
+* [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/]]
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 9c5d5939b..82fd299e3 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -13,8 +13,9 @@ wrappers.
Ikiwiki requires the [[!cpan Text::Markdown::Discount]] (or
[[!cpan Text::Markdown]]), [[!cpan URI]],
-[[!cpan HTML::Parser]], [[!cpan HTML::Template]], and [[!cpan HTML::Scrubber]]
-perl modules be installed. It can also use a lot of other perl modules, if
+[[!cpan HTML::Parser]], [[!cpan HTML::Template]], [[!cpan YAML::XS]] and [[!cpan HTML::Scrubber]]
+perl modules be installed.
+It can also use a lot of other perl modules, if
they are available.
Various [[plugins]] use other perl modules and utilities; see their individual
diff --git a/doc/news/cia.mdwn b/doc/news/cia.mdwn
deleted file mode 100644
index 3e22be945..000000000
--- a/doc/news/cia.mdwn
+++ /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.
diff --git a/doc/news/openid.mdwn b/doc/news/openid.mdwn
index b1695c385..b13e82146 100644
--- a/doc/news/openid.mdwn
+++ b/doc/news/openid.mdwn
@@ -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 69 "Accept only OpenID for logins" 21 "Accept only password logins" 44 "Accept both"]]
diff --git a/doc/news/version_3.20111107.mdwn b/doc/news/version_3.20111107.mdwn
deleted file mode 100644
index 5af8ae647..000000000
--- a/doc/news/version_3.20111107.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-ikiwiki 3.20111107 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * img: Bugfix to width/height tags for scaled down image when only
- one dimension was provided. Thanks, Per Carlson.
- * editpage: Fix FormattingHelp link on Discussion pages.
- * The umask setting can now be set to private, group, or public,
- avoiding the need to enter octal correctly which is particularly
- difficult in yaml setup files. (smcv)
- * graphviz: Support urls embedded in the graph, by having graphviz
- generate an imagemap.
- * graphviz: Support wikilinks embedded in the graph.
- (Sponsored by The TOVA Company.)"""]] \ No newline at end of file
diff --git a/doc/news/version_3.20111229.mdwn b/doc/news/version_3.20111229.mdwn
deleted file mode 100644
index 18c4f8d12..000000000
--- a/doc/news/version_3.20111229.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-ikiwiki 3.20111229 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Consume all stdin when rcs\_receive short-circuits,
- to avoid git SIGPIPE race.
- * Add path and path\_natural sort orders (smcv)
- * Test coverage can be checked with `make coverage` (smcv)
- * tag: encode categories using numeric values. (tango)"""]] \ No newline at end of file
diff --git a/doc/news/version_3.20120109.mdwn b/doc/news/version_3.20120109.mdwn
deleted file mode 100644
index de53c5d67..000000000
--- a/doc/news/version_3.20120109.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-ikiwiki 3.20120109 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * mdwn: Can use the discount markdown library, via the
- Text::Markdown::Discount perl module. This is preferred if available
- since it's the fastest currently supported markdown library, speeding up
- ikiwiki's markdown rendering by a factor of 40.
- (However, when multimarkdown is enabled, Text::Markdown::Multimarkdown
- is still used.)
- * On Debian, depend on libtext-markdown-discount."""]] \ No newline at end of file
diff --git a/doc/news/version_3.20120115.mdwn b/doc/news/version_3.20120115.mdwn
deleted file mode 100644
index ba665c666..000000000
--- a/doc/news/version_3.20120115.mdwn
+++ /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
index 3a9ebeb2a..000000000
--- a/doc/news/version_3.20120202.mdwn
+++ /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.20120629.mdwn b/doc/news/version_3.20120629.mdwn
new file mode 100644
index 000000000..34969798d
--- /dev/null
+++ b/doc/news/version_3.20120629.mdwn
@@ -0,0 +1,4 @@
+ikiwiki 3.20120629 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * mirrorlist: Add mirrorlist\_use\_cgi setting that avoids usedirs or
+ other config differences by linking to the mirror's CGI. (intrigeri)"""]] \ No newline at end of file
diff --git a/doc/news/version_3.20120725.mdwn b/doc/news/version_3.20120725.mdwn
new file mode 100644
index 000000000..08e2c771f
--- /dev/null
+++ b/doc/news/version_3.20120725.mdwn
@@ -0,0 +1,13 @@
+ikiwiki 3.20120725 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * 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](http://bugs.debian.org/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."""]] \ No newline at end of file
diff --git a/doc/news/version_3.20121016.mdwn b/doc/news/version_3.20121016.mdwn
new file mode 100644
index 000000000..62cb39758
--- /dev/null
+++ b/doc/news/version_3.20121016.mdwn
@@ -0,0 +1,17 @@
+ikiwiki 3.20121016 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * 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."""]] \ 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
index 000000000..98a5caffe
--- /dev/null
+++ b/doc/news/version_3.20121017.mdwn
@@ -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
index 000000000..473b63190
--- /dev/null
+++ b/doc/news/version_3.20121212.mdwn
@@ -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/plugins/anonok.mdwn b/doc/plugins/anonok.mdwn
index 506657a1c..407012b54 100644
--- a/doc/plugins/anonok.mdwn
+++ b/doc/plugins/anonok.mdwn
@@ -1,5 +1,5 @@
[[!template id=plugin name=anonok author="[[Joey]]"]]
-[[!tag type/auth]]
+[[!tag type/auth type/comments]]
By default, anonymous users cannot edit the wiki. This plugin allows
anonymous web users, who have not signed in, to edit any page in the wiki
diff --git a/doc/plugins/blogspam.mdwn b/doc/plugins/blogspam.mdwn
index c158316d4..3dd017f61 100644
--- a/doc/plugins/blogspam.mdwn
+++ b/doc/plugins/blogspam.mdwn
@@ -1,5 +1,5 @@
[[!template id=plugin name=blogspam author="[[Joey]]"]]
-[[!tag type/auth]]
+[[!tag type/auth type/comments]]
This plugin adds antispam support to ikiwiki, using the
[blogspam.net](http://blogspam.net/) API. Both page edits and
diff --git a/doc/plugins/camelcase.mdwn b/doc/plugins/camelcase.mdwn
index 1764b31b2..d9b7172d5 100644
--- a/doc/plugins/camelcase.mdwn
+++ b/doc/plugins/camelcase.mdwn
@@ -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]]
diff --git a/doc/plugins/comments.mdwn b/doc/plugins/comments.mdwn
index 48b6c6ae7..50a99415f 100644
--- a/doc/plugins/comments.mdwn
+++ b/doc/plugins/comments.mdwn
@@ -1,5 +1,5 @@
[[!template id=plugin name=comments author="[[Simon_McVittie|smcv]]"]]
-[[!tag type/web]]
+[[!tag type/web type/comments]]
This plugin adds "blog-style" comments. Unlike the wiki-style freeform
Discussion pages, these comments are posted by a simple form, cannot later
diff --git a/doc/plugins/comments/discussion.mdwn b/doc/plugins/comments/discussion.mdwn
index 3043b0106..227890bdd 100644
--- a/doc/plugins/comments/discussion.mdwn
+++ b/doc/plugins/comments/discussion.mdwn
@@ -203,3 +203,16 @@ wake of this:
correction follow-ups are common.
-- [[Jon]]
+
+
+---
+
+## Comment threads
+
+Any thoughts about implementing some simple threading in the comments?
+
+Or at least a reply functionality that quotes the subject/contents?
+
+-- [[iustin]]
+
+---
diff --git a/doc/plugins/contrib/album.mdwn b/doc/plugins/contrib/album.mdwn
index 836a98f33..745a44e8b 100644
--- a/doc/plugins/contrib/album.mdwn
+++ b/doc/plugins/contrib/album.mdwn
@@ -46,9 +46,9 @@ template:
----
-[[!template id=gitbranch branch=smcv/album3 author="[[Simon_McVittie|smcv]]"]]
+[[!template id=gitbranch branch=smcv/album4 author="[[Simon_McVittie|smcv]]"]]
-Available from [[smcv]]'s git repository, in the `album3` branch.
+Available from [[smcv]]'s git repository, in the `album4` branch.
I've called it `album` to distinguish it from
[[contrib/gallery|plugins/contrib/gallery]], although `gallery` might well be
a better name for this functionality.
@@ -59,23 +59,25 @@ individual photos can't be bookmarked in a meaningful way, and
the best it can do as a fallback for non-Javascript browsers
is to provide a direct link to the image.)
-Updated, November 2011: rebased onto [[trail]] v3, CSS adjusted.
+Updated, April 2012: rebased onto the version of [[trail]] that got merged
## Manual installation
-If you don't want to use a branch of ikiwiki, manual installation requires
-these files (use the "raw" link in gitweb to download), in addition to the
-ones needed by [[trail]]:
+First, you need a version of ikiwiki with the [[trail]] plugin merged in
+(version 3.20120203 or later).
-* [album.pm](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album3:/IkiWiki/Plugin/album.pm)
+Manual installation requires these files (use the "raw" link in gitweb
+to download):
+
+* [album.pm](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album4:/IkiWiki/Plugin/album.pm)
in an `IkiWiki/Plugin` subdirectory of your configured `plugindir`
-* [albumviewer.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album3:/templates/albumviewer.tmpl),
- [albumitem.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album3:/templates/albumitem.tmpl),
- [albumnext.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album3:/templates/albumnext.tmpl) and
- [albumprev.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album3:/templates/albumprev.tmpl),
+* [albumviewer.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album4:/templates/albumviewer.tmpl),
+ [albumitem.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album4:/templates/albumitem.tmpl),
+ [albumnext.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album4:/templates/albumnext.tmpl) and
+ [albumprev.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album4:/templates/albumprev.tmpl),
in your configured `templatedir`, or a `templates` subdirectory of your wiki repository
* the album-related bits from the end of the
- [stylesheet](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album3:/doc/style.css)
+ [stylesheet](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/album4:/doc/style.css)
(put them in your local.css)
## Demo
diff --git a/doc/plugins/contrib/asymptote.mdwn b/doc/plugins/contrib/asymptote.mdwn
new file mode 100644
index 000000000..a85c60efc
--- /dev/null
+++ b/doc/plugins/contrib/asymptote.mdwn
@@ -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
index 000000000..c6bdb1a99
--- /dev/null
+++ b/doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn
@@ -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/created_in_future.mdwn b/doc/plugins/contrib/created_in_future.mdwn
new file mode 100644
index 000000000..5768057aa
--- /dev/null
+++ b/doc/plugins/contrib/created_in_future.mdwn
@@ -0,0 +1,18 @@
+# Created_in_future
+
+This plugin provides a `created_in_future()` [[PageSpec|ikiwiki/pagespec/]]
+function. It matches pages which have a creation date in the future.
+
+It also sets the date of the next modification of the page on its creation
+date, so that the corresponding page (and the pages referring to it) will be
+rebuilt on the relevant call of `ikiwiki`.
+
+## Usage
+
+It can be used to display a list of upcoming events.
+
+ \[[!inline pages="events/* and created_in_future()" reverse=yes sorted=meta(date)]]
+
+## Code
+
+Code and documentation this way: [[https://atelier.gresille.org/projects/gresille-ikiwiki/wiki/Created_in_future]].
diff --git a/doc/plugins/contrib/getfield/discussion.mdwn b/doc/plugins/contrib/getfield/discussion.mdwn
index 5f7fffead..13ea8b1b3 100644
--- a/doc/plugins/contrib/getfield/discussion.mdwn
+++ b/doc/plugins/contrib/getfield/discussion.mdwn
@@ -1,3 +1,50 @@
+## Multiple values arrays
+
+This breaks if there are multiple values for a single key. It works fine in the report plugin, but inline display shows the ARRAY reference, e.g.
+
+ IPv6:
+ - fd64:2c08:9fa7:4::1
+ - 2001:470:1d:4a6::1
+
+and:
+
+ {{$IPv6}}
+
+yields:
+
+ ARRAY(0x266db10)
+
+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
Like you mentioned in [[ftemplate]] IIRC, it'll only work on the same page. If it can be made to work anywhere, or from a specific place in the wiki - configurable, possibly - you'll have something very similar to mediawiki's templates. I can already think of a few uses for this combined with [[template]] ;) . --[[SR|users/simonraven]]
diff --git a/doc/plugins/contrib/googlemaps.mdwn b/doc/plugins/contrib/googlemaps.mdwn
index 953f296ab..c43490b13 100644
--- a/doc/plugins/contrib/googlemaps.mdwn
+++ b/doc/plugins/contrib/googlemaps.mdwn
@@ -17,3 +17,5 @@ can be calculated automatically.
It can be [found here][3].
[3]: http://www.tahina.priv.at/hacks/googlemaps.html
+
+See also [[plugins/osm]].
diff --git a/doc/plugins/contrib/ikiwiki/directive/trailinline.mdwn b/doc/plugins/contrib/ikiwiki/directive/trailinline.mdwn
deleted file mode 100644
index 91d8a4edf..000000000
--- a/doc/plugins/contrib/ikiwiki/directive/trailinline.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-The `trailinline` directive is provided by the
-[[!iki plugins/contrib/trail desc=trail]]
-plugin. It is equivalent to combining [[ikiwiki/directive/trailitems]] and
-[[ikiwiki/directive/inline]] directives with the same options.
-
-A typical use is to navigate through all posts in a blog:
-
- \[[!trailinline pages="page(./posts/*) and !*/Discussion" archive=yes
- feedshow=10 quick=yes]]
-
-[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/contrib/ikiwiki/directive/ymlfront/discussion.mdwn b/doc/plugins/contrib/ikiwiki/directive/ymlfront/discussion.mdwn
new file mode 100644
index 000000000..f49c85079
--- /dev/null
+++ b/doc/plugins/contrib/ikiwiki/directive/ymlfront/discussion.mdwn
@@ -0,0 +1,37 @@
+I can't seem to make this work. I have tried, in this [sandbox](http://mesh.openisp.ca/sandbox), to set values for fields and then display them with the getfield meta syntax, but it doesn't seem to be working.
+
+The getfield, field and ymlfront plugins are enabled. I have tried with and without the following field registration:
+
+ # field plugin
+ # define the fields for the meshmtl project
+ field_register:
+ - meta
+ - hostname
+ - MAC
+ - IP
+
+I have tried both the ymlfront directive and the YAML markup (with the
+`---` delimiter), no luck. Any idea what I am doing wrong? --
+[[anarcat]]
+
+> I'm afraid I can't tell from here what the problem could be. It's clear that ymlfront is turned on, or the ymlfront directive in your sandbox page wouldn't be processed. The only thing I can suggest, in order to get more information about what could be going wrong, would be to do a dump of your indexdb file (see [[tips/inside dot ikiwiki]]) and see what the data for your sandbox page is. If there is field data there, that would indicate a problem with getfield; if there isn't field data there, that would indicate a problem with field or ymlfront.
+
+> Oh, and you only need to register "meta" with field_register; that will enable the data defined by the "meta" plugin to be read by field. Unless "hostname", "MAC" and "IP" are plugins, you don't need to add them to field_register. They can be taken care of by the ymlfront plugin. Perhaps that is the problem?
+
+> --[[KathrynAndersen]]
+
+> > I have tried removing the other fields from the declaration, no luck. I did, however, notice the following error in the `--rebuild` output:
+> >
+> > ymlfront parse: Load of sandbox data failed: YAML Error: Stream does not end with newline character
+> > Code: YAML_PARSE_ERR_NO_FINAL_NEWLINE
+> > Line: 0
+> > Document: 0
+> > at /usr/share/perl5/YAML/Loader.pm line 38
+> >
+> > Now *that* has to be related... ;) In the index.db, there is no ymlfront metadata for the sandbox page... Note that the `---` delimiter approach doesn't trigger the warning but doesn't populate the DB either...
+> >
+> > Finally note that after adding debugging code, I was able to figure out that this seems to be using the `YAML::XS` library. I have also traced the data and confirmed that `$yml_str` does get properly initialized in `parse_yml`, and it is where the error is generated. So maybe there's something wrong with the YAML library?
+> >
+> > Update: well, look here: using `YAML::Syck` doesn't yield the same error *and* the metadata actually works! So this is a problem specific to `YAML::Any`. Hardcoding `use YAML::XS` or *even* `use YAML::Any` fixed the problem for me.
+> >
+> > Now delimiters also work, but the output is kind of ugly: it gets parsed as regular markdown makup so the `---` makes horizontal lines in the beginning and headings in the end... --[[anarcat]]
diff --git a/doc/plugins/contrib/jscalendar.mdwn b/doc/plugins/contrib/jscalendar.mdwn
new file mode 100644
index 000000000..a320a0542
--- /dev/null
+++ b/doc/plugins/contrib/jscalendar.mdwn
@@ -0,0 +1,45 @@
+[[!meta title="Javascript equivalent of plugin 'calendar'"]]
+
+# Jscalendar
+
+Jscalendar is a javascript equivalent to the [[calendar|plugins/calendar]] plugin.
+
+## Description
+
+Here are some differences compared to this latter plugin.
+
+* Pros
+ * No need to rebuild the page containing the calendar each time day changes, or
+ a page (indexed by the calendar) is added, changed or deleted. This is
+ particularly useful if you want to have this calendar in the sidebar.
+ * Handles the case where several pages appear the same day: a popup appear to let user choose the day he wants.
+ * Smooth navigation among months.
+* Neutral
+ * Most of options are defined in Ikiwiki's setup files instead of the options
+ of the directive.
+* Cons
+ * As a consequence, every calendar of the wiki must index the same set of pages.
+ * Javascript :( .
+
+## Usage
+
+### Directive
+
+ \[[!jscalendar type="month" ]]
+
+### Setup file
+
+It being javascript rather than markdown, most of the configuration must be done in the IkiWiki configuration file rather than in the directive
+
+ 'archivebase' => "evenements/calendrier",
+ 'archive_pagespec' => "evenements/liste/* and ! evenements/liste/*/*",
+ 'week_start_day' => 1,
+ 'month_link' => 1,
+
+## Example
+
+You can see this plugin in action on [[our website|http://www.gresille.org]]. To see what happens when several pages happens on the same day, check the 15th of March 2012.
+
+Code and documentation can be found here : [[https://atelier.gresille.org/projects/gresille-ikiwiki/wiki/Jscalendar]]
+
+-- Louis
diff --git a/doc/plugins/contrib/localfavicon.mdwn b/doc/plugins/contrib/localfavicon.mdwn
new file mode 100644
index 000000000..66c9fdf5c
--- /dev/null
+++ b/doc/plugins/contrib/localfavicon.mdwn
@@ -0,0 +1,7 @@
+[[!template id=plugin name=localfavicon author="Franek"]]
+
+This is a trivial modification of the [[plugins/favicon]] plugin to allow different favicons for different parts of the site. For this, the option "localfavicon" has to be set to 1 in the setup file, otherwise the plugin behaves just like the favicon plugin.
+
+For now, it can be downloaded here: [[http://perm.lemtank.de/localfavicon.pm]]
+
+See the [[this forum thread|forum/Can_I_have_different_favicons_for_each_folder__63__]] for discussion.
diff --git a/doc/plugins/contrib/monthcalendar.mdwn b/doc/plugins/contrib/monthcalendar.mdwn
new file mode 100644
index 000000000..d48e4d6b7
--- /dev/null
+++ b/doc/plugins/contrib/monthcalendar.mdwn
@@ -0,0 +1,23 @@
+# Monthcalendar
+
+This plugin displays a calendar, containing in each of its day the list of links of pages published on this day. It can be used, for example, to display archives of blog posts, or to announce events.
+
+## Usage
+
+### Directive
+
+ \[[!monthcalendar type="month" year="2012" month="06" pages="events/*"]]
+
+### Automation
+
+By using the following line in template `calendarmonth.tmpl`, you can have `ikiwiki-calendar` using this plugin to display monthly archives.
+
+ \[[!monthcalendar type="month" year="<TMPL_VAR YEAR>" month="<TMPL_VAR MONTH>" pages="<TMPL_VAR PAGESPEC>"]]
+
+## Code
+
+Code and documentation can be found here : [[https://atelier.gresille.org/projects/gresille-ikiwiki/wiki/Monthcalendar]].
+
+## Example
+
+This plugin is used in [our website](http://www.gresille.org/evenements/calendrier/2012/03)
diff --git a/doc/plugins/contrib/report/discussion.mdwn b/doc/plugins/contrib/report/discussion.mdwn
index e23a4ced4..419c4bca6 100644
--- a/doc/plugins/contrib/report/discussion.mdwn
+++ b/doc/plugins/contrib/report/discussion.mdwn
@@ -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/syntax.mdwn b/doc/plugins/contrib/syntax.mdwn
index 5ca6311f9..da4213000 100644
--- a/doc/plugins/contrib/syntax.mdwn
+++ b/doc/plugins/contrib/syntax.mdwn
@@ -44,6 +44,8 @@ This plugin create the following CSS styles:
It can be downloaded from [here](http://taquiones.net/files/misc/) or through my personal debian repository at <http://taquiones.net/files/debian/>. There is a page with examples: <http://taquiones.net/software/syntax-examples.html>
+_**NOTE:** all the above links are broken_
+
Any help, comments or critics are welcome at <victor@taquiones.net>.
## version 0.9
diff --git a/doc/plugins/contrib/trail.mdwn b/doc/plugins/contrib/trail.mdwn
deleted file mode 100644
index bfd4d3d0b..000000000
--- a/doc/plugins/contrib/trail.mdwn
+++ /dev/null
@@ -1,133 +0,0 @@
-[[!tag patch]]
-[[!template id=gitbranch branch=smcv/trail3 author="[[smcv]]"]]
-
-Available from [[smcv]]'s git repository, in the `trail3` branch. This
-plugin aims to solve [[todo/wikitrails]] in a simpler way; it can also be
-used for [[navigation through blog posts|todo/Pagination_next_prev_links]].
-
-If you don't want to use a branch of ikiwiki, manual installation requires
-these files (use the "raw" link in gitweb to download):
-
-* [trail.pm](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/trail3:/IkiWiki/Plugin/trail.pm)
- in an `IkiWiki/Plugin` subdirectory of your configured `plugindir`
-* [page.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/trail3:/templates/page.tmpl)
- and
- [trails.tmpl](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/trail3:/templates/trails.tmpl)
- in your configured `templatedir`, or a `templates` subdirectory of your wiki repository
-* the trail-related bits from the end of the
- [stylesheet](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/trail3:/doc/style.css)
- (put them in your local.css)
-* the trail-related bits at the end of the
- [actiontabs](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/trail3:/themes/actiontabs/style.css)
- or [blueview/goldtype](http://git.pseudorandom.co.uk/smcv/ikiwiki.git/blob/trail3:/themes/blueview/style.css)
- stylesheets, if you use one of those themes (again, put them in your local.css)
-
-The branch also includes [[todo/test_coverage]] machinery.
-
-Demo:
-
-* [in use on entries in my blog](http://smcv.pseudorandom.co.uk/)
-* [a demo trail based on links](http://demo.hosted.pseudorandom.co.uk/trail/)
-* [a demo hybrid trail/inline](http://demo.hosted.pseudorandom.co.uk/trail2/)
-
-The page `e` is in both demo trails, to demonstrate how a page in more than
-one trail looks.
-
-The `smcv/trail2` branch is an older version of `trail3` which used typed links
-as its data structure, resulting in timing-related limitations (it couldn't
-select pages for the trail by using pagespecs, because pagespecs can't be
-evaluated correctly until the scan stage has finished).
-
-Updated, November 2011:
-
-* reinstated `inline` integration ([[report]] integration would probably be
- pretty easy too, if this gets merged)
-* switched from typed links back to a custom data structure to avoid
- chicken/egg problems with ordering
-* create typed links too, as a side-effect, but not when using an inline
-* regression test with nearly full coverage
-* CSS for the default anti-theme and all built-in themes (it looks nicest
- in the default anti-theme and in actiontabs - the demo uses actiontabs)
-
-Known bugs:
-
-* the blueview and goldtype CSS nearly work, but the alignment is a bit off
-
-----
-
-[[!template id=plugin name=trail author="[[Simon_McVittie|smcv]]"]]
-[[!tag type/chrome]]
-
-This plugin provides the [[ikiwiki/directive/trailoptions]],
-[[ikiwiki/directive/traillink]], [[ikiwiki/directive/trailitem]],
-[[ikiwiki/directive/trailitems]]
-and [[ikiwiki/directive/trailinline]] [[directives|ikiwiki/directive]].
-
-It's sometimes useful to have "trails" of pages in a wiki where each
-page links to the next and/or previous page. For instance, you could use
-this for a guided tour, sequence of chapters, or sequence of blog posts.
-
-In this plugin, a trail is represented by a page, and the pages in the
-trail are indicated by specially marked links within that page, or by
-including groups of pages with a [[ikiwiki/directive]].
-
-If using the default `page.tmpl`, each page automatically displays the
-trails that it's a member of (if any), with links to the trail and to
-the next and previous members. HTML `<link>` tags with the `prev`,
-`next` and `up` relations are also generated.
-
-The [[ikiwiki/directive/trailoptions]] directive sets options for the
-entire trail.
-
-Pages can be included in a trail in various ways:
-
-* The [[ikiwiki/directive/trailinline]] directive sets up an [[inline]],
- and at the same time adds the matching pages (from `pages` or `pagenames`)
- to the trail. One use is to navigate through all posts in a blog:
-
- \[[!trailinline pages="page(./posts/*) and !*/Discussion" archive=yes
- feedshow=10 quick=yes]]
-
- This directive only works if the [[!iki plugins/inline desc=inline]]
- plugin is also enabled.
-
-* The [[ikiwiki/directive/trailitems]] directive has optional `pages` and
- `pagenames` options which behave the same as in [[inline]], but don't
- produce any output in the page, so you can have trails that don't list
- all their pages.
-
-* The [[ikiwiki/directive/traillink]] directive makes a visible link
- and also adds the linked page to the trail. This will typically be
- used in a bullet list, but could also be in paragraph text:
-
- * [[!traillink Introduction]]
- * [[!traillink "Chapter 1"]]
- * [[!traillink Chapter_2]]
- * [[!traillink Appendix_A]]
-
- or
-
- To use this software you must \[[!traillink install]] it,
- \[[!traillink configuration text="configure it"]],
- and finally \[[!traillink running|run_it]].
-
- This also counts as a [[ikiwiki/WikiLink]] for things like the `link()`
- [[ikiwiki/PageSpec]] item.
-
-* The [[ikiwiki/directive/trailitem]] directive adds a page to the trail
- like `traillink`, but produces an invisible link, rather like `\[[!tag]]`:
-
- To use this software you must \[[!traillink install]] it,
- \[[!trailitem installing_from_packages]]
- \[[!trailitem installing_from_source]]
- \[[!traillink configuration text="configure it"]],
- and finally \[[!traillink running|run_it]].
- \[[!trailitem troubleshooting]]
-
- Like `\[[!tag]]`, this still counts as a [[ikiwiki/WikiLink]] even though
- there's no visible link.
-
-You can mix several of these directives in one page. The resulting
-trail will contain all of the pages matched by any of the directives,
-in the same order that the directives appear (unless you use the `sort` or
-`reverse` options on `\[[!trailoptions]]`).
diff --git a/doc/plugins/google.mdwn b/doc/plugins/google.mdwn
index 349c278ee..5346b8f40 100644
--- a/doc/plugins/google.mdwn
+++ b/doc/plugins/google.mdwn
@@ -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.
diff --git a/doc/plugins/headinganchors/discussion.mdwn b/doc/plugins/headinganchors/discussion.mdwn
index 151af8d92..eaf111f4e 100644
--- a/doc/plugins/headinganchors/discussion.mdwn
+++ b/doc/plugins/headinganchors/discussion.mdwn
@@ -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]]
diff --git a/doc/plugins/highlight/discussion.mdwn b/doc/plugins/highlight/discussion.mdwn
index 556b04145..a258f21fd 100644
--- a/doc/plugins/highlight/discussion.mdwn
+++ b/doc/plugins/highlight/discussion.mdwn
@@ -19,3 +19,5 @@ Having trouble working out where to get the perl bindings for highlight. --[Mick
> --[[Joey]]
Thanks for prompt reply.All working. I will post on my site tonight and link here what I did on CentOS to make this work. --[Mick](http://www.lunix.com.au)
+
+Any hint on how to highlight actual mdwn or any other supported markup code? -- [wiebel](http://wiebels.info)
diff --git a/doc/plugins/httpauth.mdwn b/doc/plugins/httpauth.mdwn
index 0eda5554f..2fae07739 100644
--- a/doc/plugins/httpauth.mdwn
+++ b/doc/plugins/httpauth.mdwn
@@ -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/lockedit.mdwn b/doc/plugins/lockedit.mdwn
index 681163203..8569238b1 100644
--- a/doc/plugins/lockedit.mdwn
+++ b/doc/plugins/lockedit.mdwn
@@ -1,5 +1,5 @@
[[!template id=plugin name=lockedit core=1 author="[[Joey]]"]]
-[[!tag type/auth]]
+[[!tag type/auth type/comments]]
This plugin allows the administrator of a wiki to lock some pages, limiting
who can edit them using the online interface. This doesn't prevent anyone
diff --git a/doc/plugins/mirrorlist.mdwn b/doc/plugins/mirrorlist.mdwn
index aedc1f4a0..b63685813 100644
--- a/doc/plugins/mirrorlist.mdwn
+++ b/doc/plugins/mirrorlist.mdwn
@@ -5,3 +5,18 @@ This plugin allows adding links a list of mirrors to each page in the
wiki. For each mirror, a name and an url should be specified. Pages are
assumed to exist in the same location under the specified url on each
mirror.
+
+In case the `usedirs` setting is not the same on all your mirrors, or
+if it is not the same on your local wiki as on the mirror a
+possibility is to let each mirror's ikiwiki CGI find out the correct
+target page url themselves; in that case the mirrors urls must be set
+to their ikiwiki CGI url instead of their base url. Example:
+
+ mirrorlist_use_cgi => 1,
+ mirrorlist => {
+ 'mirror1' => 'https://mirror.example.org/ikiwiki.cgi',
+ 'mirror2' => 'https://mirror2.example.org/ikiwiki.cgi',
+ },
+
+The mirrors must have the ikiwiki CGI and the [[goto]] plugin enabled
+for this to work.
diff --git a/doc/plugins/moderatedcomments.mdwn b/doc/plugins/moderatedcomments.mdwn
index f9466e833..85bcf652b 100644
--- a/doc/plugins/moderatedcomments.mdwn
+++ b/doc/plugins/moderatedcomments.mdwn
@@ -1,5 +1,5 @@
[[!template id=plugin name=moderatedcomments author="[[Joey]]"]]
-[[!tag type/auth]]
+[[!tag type/auth type/comments]]
This plugin causes [[comments]] to be held for manual moderation.
Admins can access the comment moderation queue via their preferences page.
diff --git a/doc/plugins/notifyemail.mdwn b/doc/plugins/notifyemail.mdwn
new file mode 100644
index 000000000..302979e6e
--- /dev/null
+++ b/doc/plugins/notifyemail.mdwn
@@ -0,0 +1,14 @@
+This plugin allows uses to subscribe to pages, and emails them when
+they are created or changed.
+
+It needs the [[!cpan Mail::SendMail]] perl module, and sends mail
+using the local MTA.
+
+Each user can configure which pages they are interested in, using an
+[[ikiwiki/PageSpec]] on their Preferences page. Any change to a page
+matching the PageSpec will send an email that includes the new content of
+the page, and a link to the page on the web.
+
+To make it easy to subscribe to comment threads when posting a comment,
+or a page, there is a check box that can be used to subscribe, without
+needing to manually edit the [[ikiwiki/PageSpec]].
diff --git a/doc/plugins/notifyemail/discussion.mdwn b/doc/plugins/notifyemail/discussion.mdwn
new file mode 100644
index 000000000..631c680fc
--- /dev/null
+++ b/doc/plugins/notifyemail/discussion.mdwn
@@ -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]]
diff --git a/doc/plugins/osm.mdwn b/doc/plugins/osm.mdwn
new file mode 100644
index 000000000..040d175ca
--- /dev/null
+++ b/doc/plugins/osm.mdwn
@@ -0,0 +1,31 @@
+[[!template id=plugin name=osm author="Blars Blarson, Antoine Beaupré"]]
+[[!tag type/special-purpose todo/geotagging]]
+
+## Openstreetmap/Openlayers support for ikiwiki
+
+This plugin provides simple Openstreetmap/Openlayers support for ikiwiki.
+It can embed Openstreetmap viewports within a page or link to a bigger map
+that will have multiple markers, generated with a KML (or CSV, or GeoJSON)
+datafile of markers based on the different calling pages. Multiple distinct
+maps on a single wiki are supported.
+
+You will need the [[!cpan XML::Writer]] perl module to write KML files,
+which is the default mode of operation. GeoJSON files can also be generated
+if the [[!cpan JSON]] perl module is installed.
+
+This provides the [[ikiwiki/directive/waypoint]] and [[ikiwiki/directive/osm]] directives.
+
+---
+
+The plugin was originally written by
+[[the techno-viking|http://techno-viking.com/posts/ikiwiki-maps/]] and fixed up
+by [[anarcat]].
+
+See [[the Mtl-mesh
+wiki|http://mesh.openisp.ca/nodes/anarcat]] for a sample of what this
+plugin can do
+
+See also [[plugins/contrib/googlemaps]].
+
+This plugin would be greatly improved by
+[[todo/internal_definition_list_support]].
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index b701d3662..b7c1582ca 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -49,15 +49,15 @@ Supported languages
`po_master_language` is used to set the "master" language in
`ikiwiki.setup`, such as:
- po_master_language => 'en|English'
+ po_master_language: en|English
`po_slave_languages` is used to set the list of supported "slave"
languages, such as:
- po_slave_languages => [ 'fr|Français',
- 'es|Español',
- 'de|Deutsch',
- ]
+ po_slave_languages:
+ - fr|Français
+ - es|Español
+ - de|Deutsch
Decide which pages are translatable
-----------------------------------
@@ -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
========
diff --git a/doc/plugins/poll/discussion.mdwn b/doc/plugins/poll/discussion.mdwn
new file mode 100644
index 000000000..eed3f6ef9
--- /dev/null
+++ b/doc/plugins/poll/discussion.mdwn
@@ -0,0 +1 @@
+Has anyone given any thought to approval voting (ie. marking more than one option), ranking or more complex decision-making protocols here? --[[anarcat]]
diff --git a/doc/plugins/recentchangesdiff.mdwn b/doc/plugins/recentchangesdiff.mdwn
index 57299f92d..660a430b9 100644
--- a/doc/plugins/recentchangesdiff.mdwn
+++ b/doc/plugins/recentchangesdiff.mdwn
@@ -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.
diff --git a/doc/plugins/recentchangesdiff/Discussion.mdwn b/doc/plugins/recentchangesdiff/Discussion.mdwn
deleted file mode 100644
index 55bb542f7..000000000
--- a/doc/plugins/recentchangesdiff/Discussion.mdwn
+++ /dev/null
@@ -1,20 +0,0 @@
-couldn't the diff be displayed as a popup? right now it's too bad because the diff is actually in the page, generated and downloaded, but the user can't see it. I have tried to address the issue by adding stuff to the change.tmpl template, but I may be missing something - and it doesn't quite look right:
-
- --- /usr/share/ikiwiki/templates/change.tmpl 2011-09-05 15:14:19.000000000 -0400
- +++ templates/change.tmpl 2011-10-11 13:04:37.704346964 -0400
- @@ -39,6 +39,7 @@
- </TMPL_LOOP>
- </div>
- <TMPL_IF DIFF>
- +<a href="#" onClick="document.getElementByClass('diff').style = 'block'">[[show diff|wikiicons/diff.png]]</a>
- <div class="diff">
- <pre>
- <TMPL_VAR DIFF>
-
-There are a few things wrong with this:
-
- 1. I don't like the hardcoded javascript in there, we should use [[plugins/toggle]] or something, but i am not sure how to make the this plugin depend on toggle, or if it is desirable.
- 2. it doesn't work at all: first it doesn't actually "toggle" and second the javascript somehow gets filtered out of the resulting HTML so we don't even see it
- 3. if the diffurl parameter is set in the template, we'd actually see two sets of glasses, which is silly. i tried moving the diff button upwards into the PAGES loop, but there the diffurls are file-specific, which also seem quite silly
-
-I am looking for guidance on how to improve and fix this now. --[[anarcat]] 2011-10-11
diff --git a/doc/plugins/search.mdwn b/doc/plugins/search.mdwn
index e95739cf3..f116649c1 100644
--- a/doc/plugins/search.mdwn
+++ b/doc/plugins/search.mdwn
@@ -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.
diff --git a/doc/plugins/sidebar/discussion.mdwn b/doc/plugins/sidebar/discussion.mdwn
index eb441529c..245fb1544 100644
--- a/doc/plugins/sidebar/discussion.mdwn
+++ b/doc/plugins/sidebar/discussion.mdwn
@@ -3,3 +3,10 @@
I tried exactly that, namely having an inline in my sidebar to include an rss feed from some other side. I think the complete wiki rebuild should be doable every few days when a new article appears in that feed. But contrary to that warning there is no complete wiki rebuild, only the sidebar page is rebuilt by the "ikiwiki --aggregate" from cron. Is that a bug or a feature?
> It's a bug, discussed in [[bugs/transitive_dependencies]]. --[[Joey]]
+
+I needed to include inline directives into sidebars at different site sections to generate a dynamically updated navigation - very nice when combined with toggles - and I ran into the very same problem. I tried the map directive instead, but found I wouldn't like to re-style everything and also was missing the ability to make use of the show=title variable giving me meta titles where needed without taking the cost of rebuild with every page edit.
+
+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
diff --git a/doc/plugins/teximg.mdwn b/doc/plugins/teximg.mdwn
index f3cade85f..866b1ee05 100644
--- a/doc/plugins/teximg.mdwn
+++ b/doc/plugins/teximg.mdwn
@@ -6,9 +6,6 @@ that renders LaTeX formulas into images.
Of course you will need LaTeX installed for this to work.
-See [this site](http://www.der-winnie.de/opensource/gsoc2007) for rendered
-images.
-
## configuration
There are several configuration directives that can be used in the setup
diff --git a/doc/plugins/theme.mdwn b/doc/plugins/theme.mdwn
index d2c62062b..5261df111 100644
--- a/doc/plugins/theme.mdwn
+++ b/doc/plugins/theme.mdwn
@@ -5,10 +5,10 @@ The theme plugin allows easily applying a theme to your wiki, by
configuring the `theme` setting in the setup file with the name of a theme
to use. The themes you can choose from are all subdirectories, typically
inside `/usr/share/ikiwiki/themes/`. See [[themes]] for an overview
-of the themes included in ikiwiki.
+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
------------------------
diff --git a/doc/plugins/trail.mdwn b/doc/plugins/trail.mdwn
new file mode 100644
index 000000000..14b97e35a
--- /dev/null
+++ b/doc/plugins/trail.mdwn
@@ -0,0 +1,76 @@
+[[!template id=plugin name=trail author="[[Simon_McVittie|smcv]]"]]
+[[!tag type/chrome]]
+
+This plugin provides the [[ikiwiki/directive/trailoptions]],
+[[ikiwiki/directive/traillink]], [[ikiwiki/directive/trailitem]],
+and [[ikiwiki/directive/trailitems]] [[directives|ikiwiki/directive]].
+
+It's sometimes useful to have "trails" of pages in a wiki where each
+page links to the next and/or previous page. For instance, you could use
+this for a guided tour, sequence of chapters, or sequence of blog posts.
+
+In this plugin, a trail is represented by a page, and the pages in the
+trail are indicated by specially marked links within that page, or by
+including groups of pages with a [[ikiwiki/directive]].
+
+If using the default `page.tmpl`, each page automatically displays the
+trails that it's a member of (if any), with links to the trail and to
+the next and previous members. HTML `<link>` tags with the `prev`,
+`next` and `up` relations are also generated.
+
+The [[ikiwiki/directive/trailoptions]] directive sets options for the
+entire trail.
+
+Pages can be included in a trail in various ways:
+
+* The [[ikiwiki/directive/inline]] directive with `trail="yes"` sets up an
+ [[inline]], and at the same time adds the matching pages (from `pages` or
+ `pagenames`) to the trail. One use is to navigate through all posts in
+ a blog:
+
+ \[[!inline pages="page(./posts/*) and !*/Discussion" archive=yes
+ feedshow=10 quick=yes trail=yes]]
+
+ This only works if the trail and [[!iki plugins/inline desc=inline]]
+ plugins are both enabled.
+
+* The [[ikiwiki/directive/trailitems]] directive has optional `pages` and
+ `pagenames` options which behave the same as in [[inline]], but don't
+ produce any output in the page, so you can have trails that don't list
+ all their pages.
+
+* The [[ikiwiki/directive/traillink]] directive makes a visible link
+ and also adds the linked page to the trail. This will typically be
+ used in a bullet list, but could also be in paragraph text:
+
+ * [[!traillink Introduction]]
+ * [[!traillink "Chapter 1"]]
+ * [[!traillink Chapter_2]]
+ * [[!traillink Appendix_A]]
+
+ or
+
+ To use this software you must \[[!traillink install]] it,
+ \[[!traillink configuration text="configure it"]],
+ and finally \[[!traillink running|run_it]].
+
+ This also counts as a [[ikiwiki/WikiLink]] for things like the `link()`
+ [[ikiwiki/PageSpec]] item.
+
+* The [[ikiwiki/directive/trailitem]] directive adds a page to the trail
+ like `traillink`, but produces an invisible link, rather like `\[[!tag]]`:
+
+ To use this software you must \[[!traillink install]] it,
+ \[[!trailitem installing_from_packages]]
+ \[[!trailitem installing_from_source]]
+ \[[!traillink configuration text="configure it"]],
+ and finally \[[!traillink running|run_it]].
+ \[[!trailitem troubleshooting]]
+
+ Like `\[[!tag]]`, this still counts as a [[ikiwiki/WikiLink]] even though
+ there's no visible link.
+
+You can mix several of these directives in one page. The resulting
+trail will contain all of the pages matched by any of the directives,
+in the same order that the directives appear (unless you use the `sort` or
+`reverse` options on `\[[!trailoptions]]`).
diff --git a/doc/plugins/trail/discussion.mdwn b/doc/plugins/trail/discussion.mdwn
new file mode 100644
index 000000000..6c0b790b9
--- /dev/null
+++ b/doc/plugins/trail/discussion.mdwn
@@ -0,0 +1,105 @@
+I believe the `trail3-integrated` and `trail3-prebuild` branches address
+Joey's review comments from IRC:
+
+ 06-12-2011 19:01:07 <joeyh>: ok, light review finished. so, if you want
+ to make a branch with inline trail=yes, and perhaps also adding a hook
+ so you don't need to inject, I think I can merge it right away
+
+I haven't published instructions for using this version as a
+standalone plugin, because it needs core and inline changes.
+
+Commits up to 63bb8b42 make the trail plugin better-integrated,
+including `\[[!inline trail=yes]]`. 63bb8b42 is the commit to
+merge if you don't like the design of my hooks.
+
+Commit 24168b99 adds a `build_affected` hook, run at about the
+same time as `render_backlinks`, and uses it to render the
+extra pages. This removes the need for `trail` to inject
+anything. In principle, backlinks etc. could use this hook
+too, if they weren't core.
+
+Commit d0dea308 on the `trail3-prebuild` branch adds a
+`prebuild` hook, which runs after everything has been scanned
+but before anything is rendered. This removes the need
+for `trail` to run its old `prerender` function in its
+render hooks (preprocess, pagetemplate etc.) to collate
+metadata before it renders anything. However, I'm not sure
+that this is really the right thing to do, which is why it's
+in its own branch: the `prebuild` hook is a lot like
+`needsbuild` (but later), so it's called even if no trail
+or trail member has actually been edited.
+
+For it to be useful for `trail`, the `prebuild` hook has to run
+after both pagespecs and sorting work. The other use case
+I've seen for a similar hook was for Giuseppe Bilotta to
+sort an inline-of-inlines by mtime of newest post, but that
+can't be the same hook, because it has to run after pagespecs
+work, but before sorting.
+
+--[[smcv]]
+
+> I've merged trail3-integrated, but not prebuild. I don't exactly dislike
+> prebuild, but dunno that the hook prolieration is worth the minor cleanup
+> it allows in trail. --[[Joey]]
+
+>> Hmm, t/trail.t is failing several tests here. To reproduce, I build the
+>> debian package from a clean state, or `rm -rf .t` between test runs. --[[Joey]]
+
+<pre>
+t/trail.t .................... 1/?
+# Failed test at t/trail.t line 211.
+# Failed test at t/trail.t line 213.
+# Failed test at t/trail.t line 215.
+# Failed test at t/trail.t line 217.
+# Failed test at t/trail.t line 219.
+# Failed test at t/trail.t line 221.
+# Failed test at t/trail.t line 223.
+# Failed test at t/trail.t line 225.
+# Failed test at t/trail.t line 227.
+# Failed test at t/trail.t line 229.
+# Failed test at t/trail.t line 231.
+</pre>
+
+> Looking at the first of these, it expected "trail=sorting n=sorting/new p="
+> but gets: "trail=sorting n=sorting/ancient p=sorting/new"
+>
+> Looking at the second failure, it expected "trail=sorting n=sorting/middle p=sorting/old$"
+> but got: "trail=sorting n=sorting/old p=sorting/end"
+>
+> Perhaps a legitimate bug? --[[Joey]]
+
+>> I saw this while developing, but couldn't reproduce it, and assumed
+>> I'd failed to update `blib` before `make test`, or some such.
+>> In fact it's a race condition, I think.
+>>
+>> The change and failure here is that `sorting.mdwn` is modified
+>> to sort its trail in reverse order of title. Previously, it
+>> was sorted by order of directives in the page, and secondarily
+>> by whatever sort order each directive specified (e.g.
+>> new, old and ancient were sorted by increasing age).
+>> `old` appearing between `new` and `ancient`, and `new` appearing
+>> between `end` and `old`, indicates that this re-sorting has not
+>> actually taken effect, and the old sort order is still used.
+>>
+>> I believe this is because the system time (as an integer) remained
+>> the same for the entire test, and mtimes as used in ikiwiki
+>> only have a 1-second resolution. We can either fix this with
+>> utime or sleep; I chose utime, since sleeping for 1 second would
+>> slow down the test significantly. Please merge or cherry-pick
+>> `smcv/trail-test` (there's only one commit). --[[smcv]]
+
+----
+
+[[!template id=gitbranch branch=smcv/ready/trail author=smcv]]
+
+Some later changes to trail:
+
+* Display the trail links at beginning/end of default `page.tmpl`
+ as suggested on IRC
+* Improve CSS, particularly in blueview and goldtype themes
+ ([example](http://blueview.hosted.pseudorandom.co.uk/posts/second_post/))
+* Fix a possible bug regarding state deletion
+
+--[[smcv]]
+
+> Applied --[[Joey]]
diff --git a/doc/plugins/type/comments.mdwn b/doc/plugins/type/comments.mdwn
new file mode 100644
index 000000000..6eaa2c25a
--- /dev/null
+++ b/doc/plugins/type/comments.mdwn
@@ -0,0 +1 @@
+These plugins relate to [[plugins/comments]].
diff --git a/doc/plugins/websetup.mdwn b/doc/plugins/websetup.mdwn
index a20a32489..387c90b75 100644
--- a/doc/plugins/websetup.mdwn
+++ b/doc/plugins/websetup.mdwn
@@ -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.
diff --git a/doc/plugins/wmd.mdwn b/doc/plugins/wmd.mdwn
index 2eac0788c..7202aece6 100644
--- a/doc/plugins/wmd.mdwn
+++ b/doc/plugins/wmd.mdwn
@@ -5,7 +5,7 @@
[[mdwn]]. This plugin makes WMD be used for editing pages in the wiki.
To use the plugin, you will need to install WMD. Download the [WMD
-source](http://ftp.netbsd.org/pub/NetBSD/packages/distfiles/wmd-1.0.1.zip). In that zip file
+source](https://code.google.com/p/pagedown/). In that zip file
you'll find a few example html files, a readme and `wmd` directory. Create
a 'wmd' subdirectory in the ikiwiki `underlaydir` directory (ie `sudo mkdir
/usr/share/ikiwiki/wmd`). Move the `wmd` directory into the directory you
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index dcab041dc..2b8202655 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -1,4 +1,4 @@
-lkiwiki's plugin interface allows all kinds of useful [[plugins]] to be
+Ikiwiki's plugin interface allows all kinds of useful [[plugins]] to be
written to extend ikiwiki in many ways. Despite the length of this page,
it's not really hard. This page is a complete reference to everything a
plugin might want to do. There is also a quick [[tutorial]].
@@ -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);
@@ -356,21 +368,48 @@ when the page is being previewed.)
The function is passed named parameters: "page" and "content", and
should return the formatted content.
-### delete
+### build_affected
+
+ hook(type => "build_affected", id => "foo", call => \&build_affected);
+
+This hook is called after the directly changed pages have been built,
+and can cause extra pages to be built. If links and backlinks were provided
+by a plugin, this would be where that plugin would rebuild pages whose
+backlinks have changed, for instance. The [[trail]] plugin uses this hook
+to rebuild pages whose next or previous page has changed.
+
+The function should currently ignore its parameters. It returns a list with
+an even number of items (a hash in list context), where the first item of
+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`.
+
+### <a name="delete">delete</a>
hook(type => "delete", id => "foo", call => \&delete);
-Each time a page or pages is removed from the wiki, the referenced function
+After a page or pages is removed from the wiki, the referenced function
is called, and passed the names of the source files that were removed.
-### change
+### rendered
- hook(type => "change", id => "foo", call => \&render);
+ hook(type => "rendered", id => "foo", call => \&rendered);
-Each time ikiwiki renders a change or addition (but not deletion) to the
+After ikiwiki renders a change or addition (but not deletion) to the
wiki, the referenced function is called, and passed the names of the
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.)
+
+### <a name="changes">changes</a>
+
+ hook(type => "changes", id => "foo", call => \&changes);
+
+After ikiwiki renders changes to the wiki, the referenced function is
+called, and passed the names of the source files that were added, modified,
+or deleted.
+
### cgi
hook(type => "cgi", id => "foo", call => \&cgi);
@@ -383,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);
@@ -396,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);
@@ -405,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);
@@ -445,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);
@@ -466,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);
@@ -477,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);
diff --git a/doc/plugins/write/tutorial.mdwn b/doc/plugins/write/tutorial.mdwn
index 5345f71f2..1912c8a2f 100644
--- a/doc/plugins/write/tutorial.mdwn
+++ b/doc/plugins/write/tutorial.mdwn
@@ -81,8 +81,8 @@ textbook.
sub fib {
my $num=shift;
- return 0 if $num == 1;
- return 1 if $num == 2;
+ return 0 if $num == 0;
+ return 1 if $num == 1;
return fib($num - 1) + fib($num - 2);
}
@@ -92,7 +92,7 @@ And let's change the `preprocess` sub to use it:
sub preprocess {
my %params=@_;
- my $num=$last++;
+ my $num=++$last;
return fib($num);
}
@@ -102,7 +102,7 @@ Feel free to try it out with a simple page like this:
Looks like it works ok, doesn't it? That creates a page that lists:
- 1, 1, 3, 5, 8
+ 1, 1, 2, 3, 5
But what happens if there are two pages that both use fib? Try it out.
If ikiwiki builds both pages in one pass, the sequence will continue
@@ -127,7 +127,7 @@ to start from 1 in every page that uses it.
sub preprocess {
my %params=@_;
my $page=$params{destpage};
- my $num=$last{$page}++;
+ my $num=++$last{$page};
return fib($num);
}
@@ -145,7 +145,7 @@ Just insert these lines of code inside `preprocess`, in the appropriate
spot:
if (exists $params{seed}) {
- $last{$page}=$params{seed}-1;
+ $last{$page}=$params{seed};
}
But this highlights another issue with the plugin. The `fib()` function is
@@ -158,7 +158,7 @@ Now, we could try to fix `fib()` to run in constant time for any number,
but that's not the focus of this tutorial. Instead, let's concentrate on
making the plugin use the existing function safely. A good first step would
be a guard on how high it will go.
-
+
my %last;
sub preprocess {
@@ -167,7 +167,7 @@ be a guard on how high it will go.
if (exists $params{seed}) {
$last{$page}=$params{seed}-1;
}
- my $num=$last{$page}++;
+ my $num=++$last{$page};
if ($num > 25) {
error "can only calculate the first 25 numbers in the sequence";
}
@@ -178,10 +178,10 @@ Returning an error message like this is standard for preprocessor plugins,
so that the user can look at the built page and see what went wrong.
Are we done? Nope, there's still a security hole. Consider what `fib()`
-does for numbers less than 1. Or for any number that's not an integer. In
+does for numbers less than 0. Or for any number that's not an integer. In
either case, it will run forever. Here's one way to fix that:
- if (int($num) != $num || $num < 1) {
+ if (int($num) != $num || $num < 0) {
error "positive integers only, please";
}
diff --git a/doc/plugins/write/tutorial/discussion.mdwn b/doc/plugins/write/tutorial/discussion.mdwn
new file mode 100644
index 000000000..19f7e4084
--- /dev/null
+++ b/doc/plugins/write/tutorial/discussion.mdwn
@@ -0,0 +1,20 @@
+Thanks for the tutorial!
+
+But I think you have an error in the fib function! If you really start with
+
+ my $last = 0;
+
+and your fib function, you'll get this error, as you've produced a never ending recursion:
+
+ Deep recursion on subroutine "IkiWiki::Plugin::fib::fib" at ./fib.pm line 29.
+
+So the fib function should better look like this, which is its true definition (see [[Wikipedia|http://de.wikipedia.org/wiki/Fibonacci-Folge]], for example):
+
+ sub fib {
+ my $num=shift;
+ return 0 if $num == 0;
+ return 1 if $num == 1;
+ return fib($num - 1) + fib($num - 2);
+ }
+
+Just as a hint for people who run into this error while doing this tutorial.
diff --git a/doc/rcs/git.mdwn b/doc/rcs/git.mdwn
index b4f639c61..c82adbd04 100644
--- a/doc/rcs/git.mdwn
+++ b/doc/rcs/git.mdwn
@@ -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.
diff --git a/doc/roadmap.mdwn b/doc/roadmap.mdwn
index 134ebcb7b..f2ff5802e 100644
--- a/doc/roadmap.mdwn
+++ b/doc/roadmap.mdwn
@@ -76,14 +76,11 @@ Probably incomplete list:
* Drop old `--getctime` option.
* Remove compatability code in `loadindex` to handle old index data layouts.
* Make pagespecs match relative by default? (see [[discussion]])
-* Flip wikilinks? (see [[todo/link_plugin_perhaps_too_general?]])
-* YADA format setup files per default?
+* Flip wikilinks? (see [[todo/link_plugin_perhaps_too_general?]] and [[todo/do_not_make_links_backwards]])
* Enable tagbase by default (so that tag autocreation will work by default).
Note that this is already done for wikis created by `auto-blog.setup`.
* [[tips/html5]] on by default (some day..)
* Remove support for old `.ikiwiki/comments_pending` from comment plugin.
-* Use yaml formatted setup files by default. (Not too compatability breaking
- really.)
In general, we try to use [[ikiwiki-transition]] or forced rebuilds on
upgrade to deal with changes that break compatability. Some things that
@@ -91,8 +88,5 @@ can't help with.
# future goals
-* Conversion support for existing other wikis.
- (Being worked on for MoinMoin and TWiki by [[Josh_Triplett|JoshTriplett]]
- and Jamey Sharp; support for other wikis should fit into the same
- framework.)
+* Conversion support for existing other wikis. See [[convert]].
* [[TODO]], [[bugs]], ...
diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index c3fb32b30..5049a4656 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -1,31 +1,6 @@
-# Sandbox
-
-[[!pagestats pages="/tags/*"]]
-
-[[!sidebar content="dfdsfsf""
-This is my custom sidebar for this page.
-
-\[[!calendar pages="posts/*"]]
-"""]]
-
-[[!sidebar ]]
-
-## number 2
-### number 3
-
This is the [[SandBox]], a page anyone can edit to try out ikiwiki
(version [[!version ]]).
-[[!toc levels=1 startlevel=2 ]]
-
-Let's try this~!
-
-w00t, how does this look on the **git** end? Well, as a commit of course.
-
-Testing this sandbox thing.
-
-## Blockquotes
-
> This is a blockquote.
>
> This is the first level of quoting.
@@ -37,20 +12,6 @@ Testing this sandbox thing.
>
> 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"""]]
-
-
Numbered list
1. First item.
@@ -69,9 +30,10 @@ Bulleted list
* one
* footballs; runner; unices
* Cool !
- * Indeed.
-[[new link]]
+test _this_ out.
+
+`test this code block`
----
@@ -105,71 +67,8 @@ Bulleted list
_italic_
-
-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
-
-
-Now let's write the same block, with a bullest list preceding it.
-
-
-* This is a bullet list
-
- # test 1,2,3
- $ another test
-
-
----
-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?
+This **SandBox** is also a [[blog]]!
- Do code tags work?
+[[!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
index 8845ec967..000000000
--- a/doc/sandbox/Fantasia.mdwn
+++ /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
index 6902ee32d..000000000
--- a/doc/sandbox/Hey__33__.mdwn
+++ /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
index 44b139a92..000000000
--- a/doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-Ελληνικά
diff --git a/doc/sandbox/Mooooo.mdwn b/doc/sandbox/Mooooo.mdwn
deleted file mode 100644
index 6f11d357c..000000000
--- a/doc/sandbox/Mooooo.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-Hrm.
diff --git a/doc/sandbox/NewPage.mdwn b/doc/sandbox/NewPage.mdwn
new file mode 100644
index 000000000..18e27fc89
--- /dev/null
+++ b/doc/sandbox/NewPage.mdwn
@@ -0,0 +1 @@
+This page uses directory hierarchies. Good.
diff --git a/doc/sandbox/Nur_so..mdwn b/doc/sandbox/Nur_so..mdwn
deleted file mode 100644
index 32c9f2397..000000000
--- a/doc/sandbox/Nur_so..mdwn
+++ /dev/null
@@ -1 +0,0 @@
-Das ist ein Test.
diff --git a/doc/sandbox/Test_it.mdwn b/doc/sandbox/Test_it.mdwn
deleted file mode 100644
index 5478d7a67..000000000
--- a/doc/sandbox/Test_it.mdwn
+++ /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
index aa5fa5b20..000000000
--- a/doc/sandbox/Testing_blog_entry.mdwn
+++ /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
index b42ae703e..000000000
--- a/doc/sandbox/adding_a_new_post.mdwn
+++ /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
index 7c9609598..000000000
--- a/doc/sandbox/ainvyu.mdwn
+++ /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
index a17729c90..000000000
--- a/doc/sandbox/bullet_list_and_code_test.mdwn
+++ /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
index 9766475a4..000000000
--- a/doc/sandbox/danc.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-ok
diff --git a/doc/sandbox/dateenumeration.mdwn b/doc/sandbox/dateenumeration.mdwn
deleted file mode 100644
index adc40bd23..000000000
--- a/doc/sandbox/dateenumeration.mdwn
+++ /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
index a955185ef..000000000
--- a/doc/sandbox/hey.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-* Hello
diff --git a/doc/sandbox/plop.mdwn b/doc/sandbox/plop.mdwn
deleted file mode 100644
index e8b7c915c..000000000
--- a/doc/sandbox/plop.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-plop
diff --git a/doc/sandbox/revert_me.mdwn b/doc/sandbox/revert_me.mdwn
deleted file mode 100644
index 2b1cd2f94..000000000
--- a/doc/sandbox/revert_me.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-this looks good
diff --git a/doc/sandbox/sandbocen.mdwn b/doc/sandbox/sandbocen.mdwn
deleted file mode 100644
index 8f7e049c5..000000000
--- a/doc/sandbox/sandbocen.mdwn
+++ /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
index 9daeafb98..000000000
--- a/doc/sandbox/sidebar.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-test
diff --git a/doc/security.mdwn b/doc/security.mdwn
index b573b5f23..afefd1bc3 100644
--- a/doc/security.mdwn
+++ b/doc/security.mdwn
@@ -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.
@@ -482,9 +482,18 @@ Ludwig Nussel discovered a way for users to hijack root's tty when
ikiwiki-mass-rebuild was run. Additionally, there was some potential
for information disclosure via symlinks. ([[!cve CVE-2011-1408]])
-This hole was disconvered on 8 June 2011 and fixed the same day with
+This hole was discovered on 8 June 2011 and fixed the same day with
the release of ikiwiki 3.20110608. Note that the fix is dependant on
-a version of su that has a similar hole fixed; [[!debbug 628843]]
-tracks fixing the hole in Debian's su. An upgrade is a must for any
-sites that have `ikiwiki-update-wikilist` installed suid (not the default),
-and whose admins run `ikiwiki-mass-rebuild`.
+a version of su that has a similar hole fixed. Version 4.1.5 of the shadow
+package contains the fixed su; [[!debbug 628843]] tracks fixing the hole in
+Debian. An upgrade is a must for any sites that have `ikiwiki-update-wikilist`
+installed suid (not the default), and whose admins run `ikiwiki-mass-rebuild`.
+
+## javascript insertion via meta tags
+
+Raúl Benencia discovered an additional XSS exposure in the meta plugin.
+([[!cve CVE-2012-0220]])
+
+This hole was discovered on 16 May 2012 and fixed the same day with
+the release of ikiwiki 3.20120516. A fix was backported to Debian squeeze,
+as version 3.20100815.9. An upgrade is recommended for all sites.
diff --git a/doc/setup.mdwn b/doc/setup.mdwn
index ce51faa6d..bdbe323fd 100644
--- a/doc/setup.mdwn
+++ b/doc/setup.mdwn
@@ -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.
diff --git a/doc/shortcuts.mdwn b/doc/shortcuts.mdwn
index 07210f9bf..b4f6d8ef4 100644
--- a/doc/shortcuts.mdwn
+++ b/doc/shortcuts.mdwn
@@ -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.
@@ -15,7 +15,7 @@ This page controls what shortcut links the wiki supports.
* [[!shortcut name=archive url="http://web.archive.org/*/%S"]]
* [[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]]
* [[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]]
-* [[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%s"]]
+* [[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]]
* [[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]]
* [[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]]
* [[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]]
@@ -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"]]
@@ -69,8 +67,10 @@ This page controls what shortcut links the wiki supports.
To add a new shortcut, use the `shortcut`
[[ikiwiki/directive]]. In the url, "%s" is replaced with the
text passed to the named shortcut, after [[!wikipedia url_encoding]]
-it, and '%S' is replaced with the raw, non-encoded text. The optional
-`desc` parameter controls the description of the link.
+it, and '%S' is replaced with the raw, non-encoded text.
+Additionally, `%W` is replaced with the text encoded just right for
+Wikipedia. The optional `desc` parameter controls the description of
+the link.
Remember that the `name` you give the shortcut will become a new
[[ikiwiki/directive]]. Avoid using a `name` that conflicts
diff --git a/doc/soc/application.mdwn b/doc/soc/application.mdwn
index 635ca755c..5cdb10bb7 100644
--- a/doc/soc/application.mdwn
+++ b/doc/soc/application.mdwn
@@ -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?**
diff --git a/doc/style.css b/doc/style.css
index 7bbfe5d2a..424d43816 100644
--- a/doc/style.css
+++ b/doc/style.css
@@ -202,6 +202,13 @@ div.recentchanges {
margin-top: 1em;
}
+.archivepagedate {
+ font-style: italic;
+}
+.archivepage {
+ margin-bottom: 1em;
+}
+
.error {
color: #C00;
}
@@ -275,6 +282,7 @@ div.progress-done {
@media print {
.actions { display: none; }
.tags { display: none; }
+ .trails { display: none; }
.feedbutton { display: none; }
#searchform { display: none; }
.blogform, #blogform { display: none; }
@@ -501,3 +509,42 @@ a.openid_large_btn:focus {
.fileupload-content .ui-progressbar-value {
background: url(ikiwiki/images/pbar-ani.gif);
}
+
+.trails {
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+.trail {
+ display: block;
+ clear: both;
+ position: relative;
+}
+
+.trailprev {
+ display: block;
+ text-align: left;
+ position: absolute;
+ top: 0%;
+ left: 3%;
+ width: 30%;
+}
+
+.trailup {
+ display: block;
+ text-align: center;
+ margin-left: 35%;
+ margin-right: 35%;
+}
+
+.trailnext {
+ display: block;
+ text-align: right;
+ position: absolute;
+ top: 0%;
+ width: 30%;
+ right: 3%;
+}
+
+.trailsep {
+ display: none;
+}
diff --git a/doc/templates.mdwn b/doc/templates.mdwn
index d189fa073..d0f891c21 100644
--- a/doc/templates.mdwn
+++ b/doc/templates.mdwn
@@ -80,10 +80,15 @@ Here is a full list of the template files used:
* `autotag.tmpl` - Filled in by the tag plugin to make tag pages.
* `calendarmonth.tmpl`, `calendaryear.tmpl` - Used by ikiwiki-calendar to
make calendar archive pages.
+* `trails.tmpl` - Used by the trail plugin to generate links on each page
+ that is a member of a trail.
+* `notifyemail.tmpl` - Used by the notifymail plugin to generate mails about
+ changed pages.
* `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`,
`editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`,
`editcomment.tmpl` `commentmoderation.tmpl`, `renamesummary.tmpl`,
`passwordmail.tmpl`, `openid-selector.tmpl`, `revert.tmpl` - Parts of ikiwiki's user
interface; do not normally need to be customised.
+
[[!meta robots="noindex, follow"]]
diff --git a/doc/theme_market.mdwn b/doc/theme_market.mdwn
new file mode 100644
index 000000000..06526df1a
--- /dev/null
+++ b/doc/theme_market.mdwn
@@ -0,0 +1,11 @@
+[[!meta title="Theme Market" description="user-contributed themes for ikiwiki"]]
+
+This is a directory of user-contributed ikiwiki themes. For more information about themes, see the [[plugins/theme]] page.
+
+It is usually preferable (and more maintainable) to create a [[css]] file instead of a full theme, but sometimes the HTML produced by ikiwiki just isn't compatible with your template, so you need to modify the templates provided. This is when you need to make your own theme.
+
+Feel free to add your own [[theme|themes]] here, but first consider writing a simpler [[css]] file and adding it to the [[css market]] instead, or look at the [[themes]] shipped with ikiwiki.
+
+ * **[[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/]]
diff --git a/doc/themes.mdwn b/doc/themes.mdwn
index 57f899677..7df25e66b 100644
--- a/doc/themes.mdwn
+++ b/doc/themes.mdwn
@@ -21,6 +21,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.
diff --git a/doc/themes/discussion.mdwn b/doc/themes/discussion.mdwn
index f2fc8cadf..ce79d0f70 100644
--- a/doc/themes/discussion.mdwn
+++ b/doc/themes/discussion.mdwn
@@ -5,3 +5,5 @@ I would like to contribute a theme I created and posted on github:
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]]
diff --git a/doc/themes/monochrome_small.png b/doc/themes/monochrome_small.png
new file mode 100644
index 000000000..6c98100a1
--- /dev/null
+++ b/doc/themes/monochrome_small.png
Binary files differ
diff --git a/doc/tipjar.mdwn b/doc/tipjar.mdwn
index ae612e129..6d65a0a70 100644
--- a/doc/tipjar.mdwn
+++ b/doc/tipjar.mdwn
@@ -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.)
diff --git a/doc/tips/Adding_Disqus_to_your_wiki.mdwn b/doc/tips/Adding_Disqus_to_your_wiki.mdwn
index 01447b009..3fd3a647d 100644
--- a/doc/tips/Adding_Disqus_to_your_wiki.mdwn
+++ b/doc/tips/Adding_Disqus_to_your_wiki.mdwn
@@ -24,3 +24,7 @@ and replace with
This changes the discussion link to a Comment link that takes you to the full page for that blog entry which should contain the disqus comments form that you added before.
Note: This does then mean that to add a comment people need to have javascript enabled.
+
+---
+
+You can also try [IkiWiki::Plugin::disqus](http://code.google.com/p/ikiwiki-plugin-disqus/).
diff --git a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
index 09e6f6742..f1028bc38 100644
--- a/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
+++ b/doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
@@ -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/JavaScript_to_add_index.html_to_file:_links/discussion.mdwn b/doc/tips/JavaScript_to_add_index.html_to_file:_links/discussion.mdwn
new file mode 100644
index 000000000..3b9f29e77
--- /dev/null
+++ b/doc/tips/JavaScript_to_add_index.html_to_file:_links/discussion.mdwn
@@ -0,0 +1,2 @@
+Please make this an ikiwiki feature. By that I mean, "server side". Cheers, thanks, --Dave
+> After I left this comment, I found that --no-usedirs suits my purposes: I can navigate my local wiki with file:/// urls... Hope this helps someone!
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
index 000000000..fffd587d8
--- /dev/null
+++ b/doc/tips/Make_calendar_start_week_on_Monday/discussion.mdwn
@@ -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.
diff --git a/doc/tips/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn b/doc/tips/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn
deleted file mode 100644
index 5565dbd8a..000000000
--- a/doc/tips/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-[[JoshTriplett]] has developed scripts to convert MoinMoin and TWiki wikis
-to ikiwikis backed by a git repository, including full history. For
-details, see [[his_user_page|JoshTriplett]].
diff --git a/doc/tips/convert_blogger_blogs_to_ikiwiki.mdwn b/doc/tips/convert_blogger_blogs_to_ikiwiki.mdwn
index 39ffc0404..e71e2132d 100644
--- a/doc/tips/convert_blogger_blogs_to_ikiwiki.mdwn
+++ b/doc/tips/convert_blogger_blogs_to_ikiwiki.mdwn
@@ -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.
diff --git a/doc/tips/convert_moinmoin_to_ikiwiki.mdwn b/doc/tips/convert_moinmoin_to_ikiwiki.mdwn
new file mode 100644
index 000000000..ec4574971
--- /dev/null
+++ b/doc/tips/convert_moinmoin_to_ikiwiki.mdwn
@@ -0,0 +1,109 @@
+This MoinMoin converter converts wikis to ikiwikis backed by a git repository, including full history. It simply parses the wiki pages into markdown using the MoinMoin engine.
+
+The converter was originally written by [[JoshTriplett]] and included support for Tikiwiki, for which it parses the wiki pages to HTML then back into markdown using the `libhtml-wikiconverter` Perl package. That original version from Josh is still available from [his wiki page](/users/JoshTriplett).
+
+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://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:
+
+ * the importer (`moin2git`) - which converts the wiki pages into a git repository with full history
+ * the converter (`moin2mdwn`) - which converts a set of moin-formatted text files into markdown + ikiwiki directives
+
+## MoinMoin importer features
+
+ * supports latest MoinMoin versions (tested with 1.9.x)
+ * uses `git fast-import` to improve performance (10 minutes and 200M of ram for a 7 years old 2GB Moinmoin wiki)
+ * multistep process allows bulk edit through git before markdown conversion, or staying with a
+ * imports attachments as subpages
+ * uses the per-page edit log
+ * consistent: multiple runs will generate the same repository
+ * re-entrant: can be run multiple times to import new changes
+
+## MoinMoin converter features
+
+ * most of the inline markup
+ * links
+ * attachment links
+ * smileys
+ * images (not well tested), into [[ikiwiki/directive/img]]
+ * preformatted and code areas, including [[ikiwiki/directive/format]]
+ * ordered, unordered and definition lists
+ * tables (although only with HTML and no styles)
+
+### Supported macros
+
+ * TableOfContents, through [[ikiwiki/directive/toc]]
+ * Navigation, through [[ikiwiki/directive/map]] (so as a nested
+ vertical list instead of an horizontal list)
+ * PageList, through [[ikiwiki/directive/map]]
+ * MonthCalendar, partially, through [[ikiwiki/directive/calendar]]
+ * FootNote, through markdown
+ * Anchor, through markdown and plain HTML
+ * `<<BR>>`, through the weird line ending thing
+ * AttachList, through a weird [[ikiwiki/directive/inline]]
+ * 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/orphans]]
+ * Date and Datetime, should be through [[plugins/date]] instead of
+ current hack
+
+### Supported parsers
+
+ * 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: [[plugins/rst]])
+
+## Current blocker
+
+This script is being used to test the conversion of the venerable [Koumbit wiki](https://wiki.koumbit.net/) into Ikiwiki, and so far progress is steady but difficult. The current blocker is:
+
+ * figuring out exactly which pages should exist and which should not, as there is ambiguity in the internal datastructures of MoinMoin, which become apparent when running the conversion script, as files a missing
+
+## Todos
+
+There are also significant pieces missing:
+
+ * inline parsers and hackish styled tables
+ * turn categories into tags
+ * name converted page to the right name depending on the `#format` parameter on top of page
+ * finish a full converter run on the Koumbitwiki
+ * improve the output of the converter (too much debugging)
+
+## MoinMoin features missing from ikiwiki
+
+The importer is pretty much complete, but the converter can only go so far as what features ikiwiki supports. Here are the MoinMoin features that are known to be missing from ikiwiki. Note that some of those features are available in MoinMoin only through third-party extensions.
+
+ * [[todo/do_not_make_links_backwards/]] - MoinMoin and Creole use `\[[link|text]]`, while ikiwiki uses `\[[text|link]]` - for now the converter generates [[markdown]] links so this is not so much an issue, but will freak out users
+ * [[todo/internal_definition_list_support/]] - includes tabling the results ([MoinMoin's DictColumns macro](http://moinmo.in/MacroMarket/DictColumns))
+ * [[todo/per page ACLs]] - ([MoinMoin's ACLs](http://moinmo.in/HelpOnAccessControlLists))
+ * [MailTo](http://moinmo.in/HelpOnMacros/MailTo) macro spam protection
+ * list pages based on full text page search
+ * extract part of other pages with the inline macro
+ * specifying a template when creating a page (as opposed to matching a pagespec)
+ * specifying a style for a sub-section (MoinMoin's inline parsers
+ allow the user to specify a CSS class - very useful see
+ [the documentation](http://moinmo.in/HelpOnMoinWikiSyntax#Using_the_wiki_parser_with_css_classes)
+ to get an idea)
+ * the above also keeps the SectionParser from being properly supported
+ * regex matching all over the place: pagespec, basically, but all
+ full text search (which is missing anyways, see above)
+
+### Missing macros
+
+ * RandomPage(N) - lists N random pages, skipped
+ * Gallery() - skipped
+ * Gettext - translates the string accordign to internal translation
+ system, ignored
+ * AdvancedSearch - an elaborate search form provided by MoinMoin
+ * Goto - a simple "jump to page" macro
+
+Comments and feedback always welcome! --[[anarcat]]
diff --git a/doc/tips/convert_moinmoin_to_ikiwiki/discussion.mdwn b/doc/tips/convert_moinmoin_to_ikiwiki/discussion.mdwn
new file mode 100644
index 000000000..2fe55d944
--- /dev/null
+++ b/doc/tips/convert_moinmoin_to_ikiwiki/discussion.mdwn
@@ -0,0 +1,5 @@
+I look forward to trying this. I have a large (~10 year old) MoinMoin installation that has been migrated up to a 1.8.x version so far, and which is partially ACL'd away behind logins. — [[Jon]]
+
+> I'll make that clearer in the docs, but we do not deal with ACL (yet?), as ikiwiki doesn't support Moinmoin's level of ACL flexibility. See [[todo/per_page_ACLs]] for more information. --[[anarcat]]
+
+>> I was actually thinking the ACLs would cause a problem just for the crawler, I hadn't considered their re-implementation (but yes, that would be good!) — [[Jon]]
diff --git a/doc/tips/dot_cgi.mdwn b/doc/tips/dot_cgi.mdwn
index 42a0aa7bf..dc88d9595 100644
--- a/doc/tips/dot_cgi.mdwn
+++ b/doc/tips/dot_cgi.mdwn
@@ -28,6 +28,10 @@ configuration changes should work anywhere.
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 +64,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
diff --git a/doc/tips/dot_cgi/discussion.mdwn b/doc/tips/dot_cgi/discussion.mdwn
index a8854565c..0e23e3a08 100644
--- a/doc/tips/dot_cgi/discussion.mdwn
+++ b/doc/tips/dot_cgi/discussion.mdwn
@@ -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
diff --git a/doc/tips/ikiwiki_as_a_requirements_management_tool/discussion.mdwn b/doc/tips/ikiwiki_as_a_requirements_management_tool/discussion.mdwn
index 94f0f8b4b..26eae28a5 100644
--- a/doc/tips/ikiwiki_as_a_requirements_management_tool/discussion.mdwn
+++ b/doc/tips/ikiwiki_as_a_requirements_management_tool/discussion.mdwn
@@ -16,3 +16,6 @@ This could be as simple as adding a link, fo e.g. :
+ \[[attributes/non-functional]]
You just have to create pages for each attribute you want and then pagespec could be used to filter requirements by attributes. I think something similar is used to trac bug with ikiwiki (linking to a \[[done]] page, etc.).
+
+---
+Generally speaking, I think it's always a good idea to get back to the "basics" for something, that huge and expensive tools were made for. But I'm doubtful if such a text oriented tool would really fit all needs of a requirements engineering tool... so what is your real world experience with your requirements engineering tool as described?
diff --git a/doc/tips/ikiwiki_via_gopher/discussion.mdwn b/doc/tips/ikiwiki_via_gopher/discussion.mdwn
new file mode 100644
index 000000000..196f203bc
--- /dev/null
+++ b/doc/tips/ikiwiki_via_gopher/discussion.mdwn
@@ -0,0 +1,8 @@
+Joey, do you have an ikiwiki served up on gopher, as an example, I can take a look at?
+I find this prospect interesting.
+I have a gopherhole, but no wiki in it.
+
+I was wondering, myself, if I symlinked a dirfull of dokuwiki pages in my gopherhole what that might be like...hmmmm.
+I might try that.
+
+tony baldwin | http://tonybaldwin.me | gopher://tonybaldwin.me
diff --git a/doc/todo/Add_basename_in_edittemplate.mdwn b/doc/todo/Add_basename_in_edittemplate.mdwn
new file mode 100644
index 000000000..6f5b0569f
--- /dev/null
+++ b/doc/todo/Add_basename_in_edittemplate.mdwn
@@ -0,0 +1,8 @@
+I wanted to produce an external link from a ikiwiki Subpage based on
+the *basename* of the Subpage. So I added the following code to the
+edittemplate plugin:
+
+ my ($basename) = $page =~ m!.*/(.*)!;
+ $template->param(basename => $basename || $page);
+
+Is there any other way I could have achieved this?
diff --git a/doc/todo/Add_space_before_slash_in_parent_links.mdwn b/doc/todo/Add_space_before_slash_in_parent_links.mdwn
index 536980ea8..e07ad8ef9 100644
--- a/doc/todo/Add_space_before_slash_in_parent_links.mdwn
+++ b/doc/todo/Add_space_before_slash_in_parent_links.mdwn
@@ -81,3 +81,76 @@ This is what I do on my site for example. -- [[Jon]]
>
> (Admittedly, `page.tmpl` is the hardest to maintain a fork of, because it
> tends to change whenever a new plugin is added...) --[[smcv]]
+
+----
+
+Here is a solution which doesn't require people to create their own
+`page.tmpl`. The solution uses an HTML list together with CSS to draw the
+separator and can therefore be controlled by users. This change also
+allows people to control other aspects of how the parentlinks are
+displayed. The only drawback is that lynx/w3m don't seem to deal with this
+CSS feature, but I don't think it's too bad since the parentlinks will
+simply show up as a list.
+
+> I guess I could live with w3m having a second list at the top.
+>
+> Does this method look identical in the default theme? What about the
+> other themes? Several of them do things with parentlinks css.. --[[Joey]]
+
+(I see that the other patch changes templates/misc.tmpl and
+templates/recentchanges.tmpl for INDEXLINK. I haven't done that but can do
+so if [[Joey]] likes this approach.)
+
+> Those template no longer have the redundant stuff. --[[Joey]]
+
+--[[tbm]]
+
+ diff --git a/doc/style.css b/doc/style.css
+ index 35a1331..b726365 100644
+ --- a/doc/style.css
+ +++ b/doc/style.css
+ @@ -129,6 +129,23 @@ pre {
+ overflow: auto;
+ }
+
+ +ul.parentlinks li:after {
+ +display: marker;
+ +content: "/ ";
+ +background: none;
+ +}
+ +
+ +ul.parentlinks li {
+ +display: inline;
+ +}
+ +
+ +ul.parentlinks
+ +{
+ +padding-left: 0;
+ +display:inline;
+ +list-style-type: none;
+ +}
+ +
+ div.recentchanges {
+ border-style: solid;
+ border-width: 1px;
+ diff --git a/templates/page.tmpl b/templates/page.tmpl
+ index 770ac23..f54493e 100644
+ --- a/templates/page.tmpl
+ +++ b/templates/page.tmpl
+ @@ -44,11 +44,15 @@
+ <TMPL_IF HTML5><section class="pageheader"><TMPL_ELSE><div class="pageheader"></TMPL_IF>
+ <TMPL_IF HTML5><header class="header"><TMPL_ELSE><div class="header"></TMPL_IF>
+ <span>
+ +<TMPL_IF PARENTLINKS>
+ <span class="parentlinks">
+ +<ul class="parentlinks">
+ <TMPL_LOOP PARENTLINKS>
+ -<a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>/
+ +<li><a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a></li>
+ </TMPL_LOOP>
+ +</ul>
+ </span>
+ +</TMPL_IF>
+ <span class="title">
+ <TMPL_VAR TITLE>
+ <TMPL_IF ISTRANSLATION>
diff --git a/doc/todo/BrowserID.mdwn b/doc/todo/BrowserID.mdwn
new file mode 100644
index 000000000..04a9166a8
--- /dev/null
+++ b/doc/todo/BrowserID.mdwn
@@ -0,0 +1,25 @@
+Please consider providing a plugin for [BrowserID](https://browserid.org/) authentication, preferably enabled by default.
+
+Some additional information on BrowserID:
+
+- <https://github.com/mozilla/browserid/wiki/How-to-Use-BrowserID-on-Your-Site>
+- <http://identity.mozilla.com/post/7616727542/introducing-browserid-a-better-way-to-sign-in>
+- <http://identity.mozilla.com/post/7669886219/how-browserid-differs-from-openid>
+- <http://identity.mozilla.com/post/7899984443/privacy-and-browserid>
+
+> I would like to see BrowserID offered as a signin option in ikiwiki
+> right next to the buttons for common openid providers.
+>
+> As far as implementing it goes, I don't want to rely on browserid.org.
+> This means that include.js needs to be shipped with ikiwiki (or in a
+> dependency in a sane world).
+>
+> And it means that relying on a https
+> connection to browserid.org to verify the user's identity assertion
+> token is out. (Well, it's probably out anyway, since it relies on https
+> CA security as the only security in that part of the protocol.)
+>
+> This seems to need an implementation, in perl or an externally callable
+> program (haskell would be fine ;),
+> of <https://wiki.mozilla.org/Identity/BrowserID#Assertion_Verification>.
+> --[[Joey]]
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
index 000000000..94a4f1577
--- /dev/null
+++ b/doc/todo/Calendar:_listing_multiple_entries_per_day_.mdwn
@@ -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/FormattingHelp_should_open_new_window.mdwn b/doc/todo/FormattingHelp_should_open_new_window.mdwn
new file mode 100644
index 000000000..58b4b6856
--- /dev/null
+++ b/doc/todo/FormattingHelp_should_open_new_window.mdwn
@@ -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/Render_multiple_destinations_from_one_source.mdwn b/doc/todo/Render_multiple_destinations_from_one_source.mdwn
index 5fd787607..b7723f919 100644
--- a/doc/todo/Render_multiple_destinations_from_one_source.mdwn
+++ b/doc/todo/Render_multiple_destinations_from_one_source.mdwn
@@ -48,3 +48,38 @@ Just brainstorming a bit after [[liw]]'s comment about this being useful on IRC,
> and parameterize it using `$ENV{FOO}`, then you can build two different
> setups from the same setup file.
> --[[Joey]]
+
+> > My post-update script has grown a bit, as I'm using ikiwiki-hosting now, so want to let the users update stuff themselves:
+> >
+> > #!/bin/sh
+> >
+> > PUB_URL=http://truestedt.hands.com
+> > PUB_TMPL=$HOME/source-public/templates-public
+> >
+> > # make the public config, in case of updates via ikiwiki-hosting
+> > sed -e 's/^\(srcdir\|destdir\|git_wrapper\): .*/&-public/;s#^\(url:\).*#\1 '$PUB_URL'#;s/^\(cgi_wrapper:\).*/\1 '"''"'/;s#^\(templatedir:\).*#\1 '$PUB_TMPL'#;s/^\(cgiurl\|historyurl\):/#&/;/disable_plugins:/a \
+> > - recentchanges\
+> > - editpage' ~/ikiwiki.setup > ~/ikiwiki.setup-public
+> > #echo 'wikistatedir: source/.ikiwiki-public' >> ~/ikiwiki.setup-public
+> > [ -d ~/source-public ] || cp -a ~/source ~/source-public
+> > [ -d ~/public_html-public ] || mkdir ~/public_html-public
+> >
+> > # run normal post-update hook
+> > ./hooks/post-update-ikiwiki "$@"
+> >
+> > # run post-update hook for the public version of the site
+> > ./hooks/post-update-ikiwiki-public "$@"
+> >
+> > exec git update-server-info
+> >
+> > I tried using wikistatedir, as you suggested, but then wiki edits are not reflected on the second site (AFAICT), so reverted to having a full checkout of the source.
+> > I'm guessing that that's because the second run through with the post-update hook sees no changes that it needs to worry about in the source directory, but it's just
+> > possible that I got confused while testing, as the sed is pretty fragile, so some of the time it was failing because of sed syntax errors.
+> >
+> > It strikes me that one ought to be able to have a plugin that takes the current config, applies a few minor tweaks to it (perhaps by loading an extra config file) and
+> > then does some or all of the tasks normally run by main() again, targeting a new directory -- that way there would be no need for the two post-updates, and whatever
+> > provoked a rebuild would always do both, whether on the command line or via CGI.
+> > I just don't know quite where the right place to plumb such a plugin in would be -- also, it would be good to separate out the bits of main() that we'd be calling
+> > so that both the plugin and main calls them in the same way, to ease future maintenance
+> >
+> > Any hints on where to start with such a plugin, gratefully received :-) -[[fil]]
diff --git a/doc/todo/Restrict_page_viewing.mdwn b/doc/todo/Restrict_page_viewing.mdwn
index 9c1889d63..20b59cb13 100644
--- a/doc/todo/Restrict_page_viewing.mdwn
+++ b/doc/todo/Restrict_page_viewing.mdwn
@@ -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.
diff --git a/doc/todo/Set_templates_for_whole_sections_of_the_site.mdwn b/doc/todo/Set_templates_for_whole_sections_of_the_site.mdwn
index e679d98e0..0dbda8a3a 100644
--- a/doc/todo/Set_templates_for_whole_sections_of_the_site.mdwn
+++ b/doc/todo/Set_templates_for_whole_sections_of_the_site.mdwn
@@ -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
index 000000000..54a615920
--- /dev/null
+++ b/doc/todo/Track_Markdown_Standardisation_Efforts.mdwn
@@ -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...
diff --git a/doc/todo/Using_page_titles_in_internal_links.mdwn b/doc/todo/Using_page_titles_in_internal_links.mdwn
new file mode 100644
index 000000000..6e1438bfd
--- /dev/null
+++ b/doc/todo/Using_page_titles_in_internal_links.mdwn
@@ -0,0 +1,3 @@
+It would be really nice if, should a page happen to have a title metavariable then links to that page which do not explicitly state a title would use it. -- Daniel Silverstone
+
+> i like the idea for some applications, but i'm afraid there would be lots of cases where it wouldn't be appropriate to happen automatically, first and foremost capitalization. a syntax like ``\[[|that page]]`` might still be available, as the current implementation assumes the ``|`` character to be part of the page name. --[[chrysn]]
diff --git a/doc/todo/Zoned_ikiwiki.mdwn b/doc/todo/Zoned_ikiwiki.mdwn
new file mode 100644
index 000000000..26260b256
--- /dev/null
+++ b/doc/todo/Zoned_ikiwiki.mdwn
@@ -0,0 +1,64 @@
+The idea behind this would be to have one ikiwiki behave as a dynamic private wiki in a specified area
+and a more static publiczone wiki. Actually private wiki page can be addressed via a *pagespec*.
+
+What is ready /can be done:
+
+* We already can more or less do this for example with [[httpauth|/plugins/httpauth/]], *.htaccess* files and a proper *httpauth_pagespec*
+yet at the cost of maintaining two different user/pass logbase (native ikiwiki signin)
+* Furthermore we can [[lockedit|plugins/lockedit/]] some pagespecs, ie in the public zone.
+
+What is problematic is when you link a public page in a private page :
+a backlink will be generated from the public page to the private page.
+
+As I noticed in [[per_page_ACLs]] in the end users through backlink
+navigation will frequently hit HTTP/401 deterring browsing as well as for the admin at false-positive logwatching.
+
+One can radically [[disable backlinks feature|todo/allow_disabling_backlinks]] but then no more neat backlink navigation that
+is really good to have in both area.
+
+I think of just preventing this backlink leak in that case would be sufficient via i.e a *privatebacklinks* config and
+a below patch.
+
+Comments are welcome.
+
+[[mathdesc]]
+
+
+<pre>
+diff --git a/IkiWiki.pm b/IkiWiki.pm
+--- a/IkiWiki.pm
++++ b/IkiWiki.pm
+@@ -294,6 +294,14 @@ sub getsetup () {
+ safe => 1,
+ rebuild => 1,
+ },
++ privatebacklinks => {
++ type => "pagespec",
++ example => "",
++ description => "PageSpec controlling which backlinks are private (ie users/*)",
++ link => "ikiwiki/PageSpec",
++ safe => 1,
++ rebuild => 1,
++ },
+ hardlink => {
+ type => "boolean",
+ default => 0,
+diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
+--- a/IkiWiki/Render.pm
++++ b/IkiWiki/Render.pm
+@@ -52,7 +52,8 @@ sub backlinks ($) {
+ $p_trimmed=~s/^\Q$dir\E// &&
+ $page_trimmed=~s/^\Q$dir\E//;
+
+- push @links, { url => $href, page => pagetitle($p_trimmed) };
++ push @links, { url => $href, page => pagetitle($p_trimmed) }
++ unless defined $config{privatebacklinks} && length $config{privatebacklinks} && pagespec_match($p, $config{privatebacklinks}) && !pagespec_match($page, $config{privatebacklinks}) ;
+ }
+ return @links;
+ }
+
+</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]]
diff --git a/doc/todo/ad-hoc_plugins.mdwn b/doc/todo/ad-hoc_plugins.mdwn
new file mode 100644
index 000000000..da28c1b8e
--- /dev/null
+++ b/doc/todo/ad-hoc_plugins.mdwn
@@ -0,0 +1,66 @@
+with pypy's sandbox module, it is possible to run user supplied code safely; that can be used for ad-hoc [[!taglink plugins]].
+
+ad-hoc plugins are little code snipplets that work similar to plugins, are limited in what they can do, but their code resides inside the wiki.
+
+## use cases
+
+* calendar modules for non-standard calendars.
+
+ an article mentioning Maladay could note it as `\[[!template id=discdate date="The Aftermath 5, 579 YOLD"]]`, which could run a script parsing the date and showing an appropriate gregorian daten in parentheses after the date in [[!wikipedia Discordian calendar]]
+
+* url operations for services that don't use the widespread url calculation patterns
+
+ a template for geocoordinates that offers links to various geo-services could take various input formats and generate urls like http://geohash.org/u2edk850cxh31 from `\[[!template id=geoinfos n=48.2081743 e=16.3738189]]`.
+
+## implementation in ikiwiki
+
+### `\[[!pythontemplate id=foo arg=value]]`
+
+the easiest way to enable ad-hoc plugins that came to my mind was creating a plugin like template, pythontemplate, that uses the same calling convention as the template plugin. i have implemented the plugin in perl, in a way that doesn't need any additional python code apart from what is shipped in pypy (in the [[!debpkg python-pypy.translator.sandbox]] package). the implementation is far from mature, but works.
+
+### `\[[!foo argument option=value]]`
+
+an implementation in the style of the [[ikiwiki/directive/shortcut]] directive would be easier to use, and would allow positional arguments too. (the template way of calling, with id= identification, requires parsing all arguments to a hash).
+
+### `hook(type="preprocess", id="foo", call=preprocess)`
+
+if one was to allow more features to wiki editors, one could even export the ikiwiki rpc api to python pages. (pages would get their `import()` function called via rpc, and coold `hook` into ikiwiki.) the security implications of such a feature would be much harder to overview, though, and the rpc would probably need filtering mechanisms.
+
+## implementation in python
+
+on the python side, i've prepared a `pythontemplate` module that can be imported from the template python programs. for example, it contains an argparse module that's adapted to ikiwiki specifics by formatting help output in a way suitable for wiki inclusion, and that silently handles the `page` and `destpage` options.
+
+The discordian calendar described above could look like this:
+
+ """Explain dates in discordian calendar"""
+ from pythontemplate.argparse import ArgumentParser
+ p = ArgumentParser(description=__doc__)
+ p.add_argument("--date", help="Date in discordian calendar")
+
+ args = p.parse_args()
+
+ def convert_date(...):
+ ...
+
+ print "%s <small>(%s)</small>"%(args.date, convert_date(args.date))
+
+Using argparse might be a bit of overkill here, but has the nice property of enabling `\[[!pythontemplate id=discdate help=true]]` for a documentation page.
+
+## security implications
+
+a simple implementation like my current one or a shortcut-style one is secure by design:
+
+* the perl module decides which python script inside the wiki is to be executed. it takes the arguments to preprocess and prepares them being passed over to the script in argv.
+* the perl module launches the secure pypy-sandbox. it tells it to allow read access to the script itself and the python library, and to run the script in an otherwise isolated environment. it passes the arguments by means of argv, receives the resulting html+directive text from stdout, and evaluates the return status and stderr in case of problems.
+
+time and memory limits can be passed to the sandbox process, so the worst thing a wiki editor could do would be to use up both resources to the defined limit whenever someone edits a page triggering the script.
+
+some details on pypy-sandbox internals:
+
+an interact script provides an "operating system" to the pypy sandbox binary itself, which it launches. the only syscalls the sandbox binary can do are stdio read/write, and every time the script being run inside wants to do something that would normally trigger a syscall, it talks to the interact script. for example, if the script tries to import the library, the binary asks the interact script for a file handle using an open() line, and the interact script will look in the virtual filesystem it keeps if such a file is present there. (it is, as it was instructed thus by the perl module).
+
+## performance / optimizations
+
+the current implementation amounts to an invocation to classical python and another invocation to pypy per directive. this also means that pypy will never get to play its big strength, just in time optimization.
+
+running a complete foreign language plugin using the xmlrpc interface in the sandbox would alleviate the problem, but the security implications would be difficult. a middle path (running a single pypy sandbox binary per ikiwiki run, but still calling into it only for directive evaluation) seems feasible. there is no direct support for such a thing in pypy yet, but it shouldn't be too hard to do, and even if the separations between the individual directive evaluations could be torn down from inside, the worst thing an attacker could do would be to have side effects between different directive evaluations).
diff --git a/doc/todo/allow_TMPL__95__LOOP_in_template_directives.mdwn b/doc/todo/allow_TMPL__95__LOOP_in_template_directives.mdwn
new file mode 100644
index 000000000..890c4cf4b
--- /dev/null
+++ b/doc/todo/allow_TMPL__95__LOOP_in_template_directives.mdwn
@@ -0,0 +1,278 @@
+[[!tag patch todo]]
+
+[[!template id="note" text="""
+Simply copied this from my website
+[[http://www.camco.ie/code/ikiwiki,3.20120202,20120313a/]]
+feel free to reformat / delete"""]]
+
+The following re-write allows for multiple definitions of the
+same tag value in a [[plugins/template]] definition. This, in turn, allows
+us to use TMPL_LOOPS in our [[ikiwiki/directive/template]] directives; all-be-it in a
+rather limited way.
+
+> I'm willing to consider such a feature, but it needs to be presented in
+> the form of a patch that is reviewable, not a gratuitous rewrite.
+> --[[Joey]]
+
+>> Yes, my apologies for that. The two worker functions `mktmpl_hash`
+and `proc_tmpl_hash` are new. The `preprocess` function then starts
+by arranging the parameters into an array. This array is passed to the
+`mktmpl_hash` and it creates a hash, suitable for passing into the
+HTML::Template directly. The `proc_tmpl_hash` then walks the hash
+structure and processes the parameters.
+
+>> I know ... you weren't looking for an explanation, just a patch
+... totally understand. Point I'm trying to make, it's a 90% re-write
+anyway (and my `style(8)` will probably piss most people off).
+
+>> Anyway, would love to contribute so will try to get to doing this
+"correctly" and post as a patch.
+
+I would, personally, only use this feature for very basic loops
+and, although nested loops *might* be possible (with a little
+more tinkering) it think any attempt would be better served by
+[[Kathyrn Anderson's|http://www.katspace.org/]] [[field et
+al.|http://ikiwiki.info/plugins/contrib/field/]] plugin.
+
+It *is* (primarily) intended to allow insertion of organised CSS
+blocks (i.e. `<div>`) through template directives (since i can't
+seem to get HTML and Markup to mix the way I want).
+
+[[!template id="note" text="""
+Apologies for the re-write. I struggle reading perl code that
+I didn't write and (probably too often) re-format to reduce my
+head-aches. Anyway it didn't make sense to post the patch since
+everything's changed now.
+"""]]
+
+NB: this *should* be 100% backwards compatible.
+
+# `lib/perl5/IkiWiki/Plugin/template.pm`
+
+[[!format perl """
+
+ #!/usr/bin/perl
+ # Structured template plugin.
+ package IkiWiki::Plugin::template ;
+
+ use warnings ;
+ use strict ;
+ use IkiWiki 3.00 ;
+ use Encode ;
+
+ sub mktmpl_hash( $ ; $ ; @ ) ;
+ # declare to supress warning in recursive call
+ sub mktmpl_hash( $ ; $ ; @ )
+ # make hash for the template, filling
+ # values from the supplied params
+ {
+ my $template = shift( @_ )
+ || error( "mktmpl_hash: no template provided" ) ;
+ my $param_src = shift( @_ )
+ || error( "mktmpl_hash: no parameters" ) ;
+
+ my $path ;
+ if( $#_ > 0 )
+ {
+ $path = [ @_ ] ;
+ } else {
+ $path = shift(@_) || [] ;
+ } ;
+
+ my %params ;
+
+ my @path_vars ;
+ if( $#{$path} < 0 )
+ {
+ @path_vars = $template->query() ;
+ } else {
+ @path_vars = $template->query( loop => $path ) ;
+ } ;
+
+ foreach my $var ( @path_vars )
+ {
+ push( @{$path}, $var ) ;
+ my $param_type = $template->query( name => $path ) ;
+ if( $param_type eq 'VAR' )
+ {
+ my @var_path = split( /_/, $var ) ;
+ if( $var_path[0] ne '' )
+ {
+ $path->[-1] = join( '_', @var_path[1..$#var_path] )
+ if( $var_path[0] eq 'raw' ) ;
+ $params{$var} = shift( @{$param_src->{$path->[-1]}} )
+ || return(undef) ;
+ } ;
+ } elsif( $param_type eq 'LOOP' )
+ {
+ $params{$var} = [] ;
+ push( @{$params{$var}}, $_ )
+ while( $_ = mktmpl_hash($template,$param_src,$path) ) ;
+ } ;
+ pop( @{$path} ) ;
+ } ;
+ return( \%params ) ;
+ } ;
+
+ sub proc_tmpl_hash( $ ; $ ; $ ; $ ) ;
+ # declare to supress warning in recursive call
+ sub proc_tmpl_hash( $ ; $ ; $ ; $ )
+ # walk the hash, preprocess and
+ # convert to html
+ {
+ my $tmpl_hash = shift( @_ ) ;
+ my $page = shift( @_ ) ;
+ my $destpage = shift( @_ ) ;
+ my $scan = shift( @_ ) ;
+ foreach my $key ( keys(%{$tmpl_hash}) )
+ {
+ unless( ref($tmpl_hash->{$key}) )
+ # here we assume that
+ # any reference is an
+ # array and allow it to
+ # fail if that's false
+ {
+ $tmpl_hash->{$key} =
+ IkiWiki::preprocess(
+ $page,
+ $destpage,
+ $tmpl_hash->{$key},
+ $scan ) ;
+ my @key_path = split( /_/, $key ) ;
+ $tmpl_hash->{$key} =
+ IkiWiki::htmlize(
+ $page,
+ $destpage,
+ pagetype($pagesources{$page}),
+ $tmpl_hash->{$key}, )
+ unless( $key_path[0] eq 'raw' ) ;
+ } else {
+ proc_tmpl_hash( $_, $page, $destpage, $scan )
+ foreach( @{$tmpl_hash->{$key}} ) ;
+ } ;
+ } ;
+ } ;
+
+ # "standard" ikiwiki definitions / hooks
+
+ sub import
+ {
+ hook( type => "getsetup",
+ id => "template",
+ call => \&getsetup ) ;
+ hook( type => "preprocess",
+ id => "template",
+ call => \&preprocess,
+ scan => 1 ) ;
+ } ;
+
+ sub getsetup()
+ {
+ return(
+ plugin => {
+ safe => 1,
+ rebuild => undef,
+ section => "widget",
+ }, ) ;
+ } ;
+
+ sub preprocess( @ )
+ {
+ # first process arguments into arrays of values
+ my %params ;
+
+ my( $key, $value ) ;
+ while( ($key,$value)=splice(@_,0,2) )
+ {
+ if( exists($params{$key}) )
+ {
+ push( @{$params{$key}}, $value ) ;
+ } else {
+ $params{$key} = [ $value ] ;
+ } ;
+ } ;
+
+ # set context
+ my $scan = ! defined( wantarray() ) ;
+ # This needs to run even in scan
+ # mode, in order to process links
+ # and other metadata included via
+ # the template.
+
+ # check for critical values
+ if( ! exists($params{id}) )
+ {
+ error( gettext("missing id parameter") ) ;
+ } ;
+
+ # set some convenience variables
+ my $id = $params{id}->[$#{$params{id}}] ;
+ my $page = $params{page}->[$#{$params{page}}] ;
+ my $destpage = $params{destpage}->[$#{$params{destpage}}] ;
+ # ... and an essential one for the production pass
+ $params{basename} = [ IkiWiki::basename($page) ] ;
+
+ # load the template
+ my $template ;
+ eval {
+ $template =
+ template_depends( $id, $page,
+ blind_cache=>1 ) ;
+ # The bare id is used, so
+ # a page templates/$id can
+ # be used as the template.
+ } ;
+ if( $@ )
+ {
+ error(
+ sprintf(
+ gettext("failed to process template %s"),
+ htmllink(
+ $page,
+ $destpage,
+ "/templates/$id")
+ )." $@"
+ ) ;
+ } ;
+
+ # create and process the parameters
+ my $tmpl_hash = mktmpl_hash( $template, \%params ) ;
+ proc_tmpl_hash( $tmpl_hash, $page, $destpage, $scan ) ;
+ # ... and load the template with the values
+ $template->param( $tmpl_hash ) ;
+
+ # return the processed page chunk
+ return( IkiWiki::preprocess($page,
+ $destpage,
+ $template->output(),$scan)
+ ) ;
+ } ;
+
+ 1 ;
+
+"""]]
+
+## sample template
+
+ # <TMPL_VAR HEADER0>
+
+ <table>
+ <TMPL_LOOP TEST0>
+ <tr>
+ <td><TMPL_VAR DATA0></td>
+ <td><TMPL_VAR DATA1></td>
+ </tr>
+ </TMPL_LOOP>
+ </table>
+
+## sample iki page
+
+ \[[!meta title="this is my loops page"]]
+
+ \[[!template id="loops"
+ header0="this is a table"
+ data0="cell0:0"
+ data1="cell0:1"
+ data0="cell1:0"
+ data1="cell1:1"
+ ]]
diff --git a/doc/todo/allow_banning_a_user_when_moderating_a_comment.mdwn b/doc/todo/allow_banning_a_user_when_moderating_a_comment.mdwn
new file mode 100644
index 000000000..c0b85ec85
--- /dev/null
+++ b/doc/todo/allow_banning_a_user_when_moderating_a_comment.mdwn
@@ -0,0 +1 @@
+If a logged-in user is both a comment moderator and an admin, it would be nice if you could tick a box to ban the poster of a comment (or their IP if not signed in. Or their IP, AND their login if signed in, I suppose.) via the comment moderation interface. Presently, you must view the back-end files to establish who posted the comment (the IP is not exposed in the moderation interface yet.) — [[Jon]]
diff --git a/doc/todo/anti-spam_protection.mdwn b/doc/todo/anti-spam_protection.mdwn
index b0524be5f..e39d4c19b 100644
--- a/doc/todo/anti-spam_protection.mdwn
+++ b/doc/todo/anti-spam_protection.mdwn
@@ -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]]
diff --git a/doc/todo/avatar/discussion.mdwn b/doc/todo/avatar/discussion.mdwn
new file mode 100644
index 000000000..568866f93
--- /dev/null
+++ b/doc/todo/avatar/discussion.mdwn
@@ -0,0 +1 @@
+It seems that this thing is on by default. How to turn it off?
diff --git a/doc/todo/be_more_selective_about_running_hooks.mdwn b/doc/todo/be_more_selective_about_running_hooks.mdwn
new file mode 100644
index 000000000..70a1cb7a2
--- /dev/null
+++ b/doc/todo/be_more_selective_about_running_hooks.mdwn
@@ -0,0 +1,68 @@
+[[!template id=gitbranch branch=chrismgray/exclusive-hooks author="[[chrismgray]]"]]
+
+Sometimes plugins register a function with `hook`, but they only want
+the function called with the content that they know how to deal with.
+Normally, this means that they call `pagetype` first thing in the
+function, determine if they know how to deal with the content, and
+only do anything if they do.
+
+> So, I can't find any plugins shipped with ikiwiki that actually do that.
+> Scan hooks are only ever passed the content of actual wiki pages, and
+> so unless a scan hook cares whether a page is written in markdown or
+> something else, it has no reason to care what the pagetype is. (Same for
+> linkify.) --[[Joey]]
+
+>> My [[org-mode|todo/org_mode]] external plugin (which will never
+>> really make sense to include with ikiwiki I think) does this. I
+>> think that most plugins defining alternate wiki syntaxes would as
+>> well. --[[chrismgray]]
+
+This is a bit wasteful in itself, but for external plugins, it's
+really bad. For functions like `scan` and `linkify`, where the entire
+page is sent back and forth over `stdout` and `stdin`, it really slows
+things down.
+
+Thus, I propose that there be a new optional parameter to `hook` that
+tells it that the function should only be called for files whose type
+is the same as the id of the plugin calling `hook`. I have called
+this parameter `exclusive` in my branch, but this might not be the
+best name.
+
+[[!tag patch]]
+
+> It's an interesting idea, but it might be more useful if it was more
+> generalized, say, by making it a filter, where the parameter is a regexp.
+>
+> --[[KathrynAndersen]]
+
+>> Would it make more sense as a pagespec? That might be a bit more hard
+>> to implement, but would certainly fix the naming issue.
+>>
+>> --[[chrismgray]]
+
+>>> Considering where it would be called, a pagespec might be overkill. --[[KathrynAndersen]]
+
+>>>> Pagespecs have some overhead themselves. Probably less than shipping
+>>>> the page content over stdio.
+>>>>
+>>>> Rather than putting filtering in the core of ikiwiki, I can think
+>>>> of two options. One is to make the main plugin a perl plugin, and
+>>>> have it call functions that are provided by another, external plugin.
+>>>> This is assuming you're using the other language because something
+>>>> is easy to do in it, not to avoid writing perl.
+>>>>
+>>>> Or, the external plugin interface could provide a version of `hook()`
+>>>> that does not pass the content parameter, but saves a copy that
+>>>> the plugin could request with a later rpc call. Assuming that
+>>>> it's really the overhead of serializing the page content, that's
+>>>> the problem, and not just the general overhead of making rpc calls
+>>>> for every page.. --[[Joey]]
+
+>>>>> Since the argument to `hook` is optional, the pagespec is only
+>>>>> interpreted if it is given. So there is no extra overhead
+>>>>> (beyond an unused `if` branch) in 99% of the cases.
+>>>>>
+>>>>> Rewriting the external plugin's shim using Perl is a good idea,
+>>>>> and one that I wish I had thought of earlier. On the other
+>>>>> hand, it doesn't set a great precedent about the usability of
+>>>>> external plugins. --[[chrismgray]]
diff --git a/doc/todo/break_up_page_template_into_subfiles.mdwn b/doc/todo/break_up_page_template_into_subfiles.mdwn
new file mode 100644
index 000000000..e9f2e310b
--- /dev/null
+++ b/doc/todo/break_up_page_template_into_subfiles.mdwn
@@ -0,0 +1,36 @@
+Wishlist items such as [[Add space before slash in parent links]] would be
+easier to deal with if the page.tmpl template was broken up into sections
+and each section had a separate template file which was included in the
+master page.tmpl file. This would make it easier to customize parts of a
+page without having to fork the whole page.tmpl and then have things break
+when there's an update of the master page.tmpl file.
+
+Suggested sections:
+
+* page_head.tmpl for the things in the <head> section
+* page_header.tmpl for things in the "header" div (which includes the PARENTLINKS loop)
+* page_actions.tmpl for the actions section
+* page_sidebar.tmpl for the sidebar
+* page_content.tmpl for the main content
+* page_footer.tmpl for the footer
+
+Would this work, or would HTML::Template have problems with this?
+
+-- [[KathrynAndersen]]
+
+> Well, breaking it up into 6 sections would let a user modify one of them
+> with only 1/6th the chance of it being broken by a new ikiwiki.
+> Which seems like a win from the user's POV. However, I know that there
+> are ikiwiki users who modify the `page.tmpl` but are very
+> unsophisticated; needing to find the right file amoung 6 to modify
+> would be a loss for these users. And some modifications would probably
+> need to be coordinated amoung multiple files.
+>
+> For ikiwiki developers, reducing by 5/6th the number of users affected by a
+> breaking change to page.tmpl is nice, but we still have to worry about
+> the 1 in 6 that would be affected despite the splitting. Ikiwiki has
+> enough users that any change to page.tmpl has to be carefully considered
+> to avoid breaking something they may depend on, and it's been two years
+> since that last needed to be done.
+>
+> So all in all, I don't think it's worth doing. --[[Joey]]
diff --git a/doc/todo/custom_location_for_openlayers.mdwn b/doc/todo/custom_location_for_openlayers.mdwn
new file mode 100644
index 000000000..3ccfa2944
--- /dev/null
+++ b/doc/todo/custom_location_for_openlayers.mdwn
@@ -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/do_not_make_links_backwards.mdwn b/doc/todo/do_not_make_links_backwards.mdwn
new file mode 100644
index 000000000..4059d8e2a
--- /dev/null
+++ b/doc/todo/do_not_make_links_backwards.mdwn
@@ -0,0 +1,95 @@
+[[!template id=gitbranch branch=anarcat/backwards_links author="[[anarcat]]"]]
+
+I understand this may be a bit provocative, but I strongly feel that ikiwiki linking rules are backwards. I come from the world of wikis like MoinMoin and [[plugins/contrib/mediawiki]], where you use `\[[link|description]]`. The defacto wiki markup "[[plugins/creole]]" also uses that convention, as does raw HTML (href comes first!). Ikiwiki doesn't: here we need to use `\[[description|link]]`.
+
+Everytime i come back to ikiwiki, i need to bend my mind backwards to create *proper* links. I understand that `\[[description|link]]` is more inline with Markdown's `[description](link)` approach, but in my mind it is too much of a problem for third part plugins to be a proper justification. For example, the [[plugins/creole]] plugin works pretty much as expected *expect* for links, because it can't override ikiwiki's internal link parser. For me that's a huge inconsistency that should be fixed.
+
+If there is an agreement within the community that we can change that, I am ready to work on a migration script or even a configuration variable... -- [[anarcat]]
+
+Dev notes
+---------
+
+I started looking into this, after encouraging words from Joey ("very long term roadmap", AKA "if someone does it"). It turns out it is less deeply rooted than i thought in the core of ikiwiki; everything being a plugin and all, this is also a plugin ([[plugins/link]]).
+
+The following needs to be done:
+
+ 1. the `link_regexp` variable needs to be turned backwards (or frontwards, if you like :P) (./) added an option for this, working!
+ 2. a config setting need to be added to the `link` plugin so that we can choose if we want backwards links or not (./) `links_direction`, how does that sound? I have changed that from `backwards_links` to be more neutral. 'rtl' means `\[[link|text]]` and 'ltr' means `\[[text|link]]`
+ 3. a (solid!) parser needs to be written for [[ikiwiki-transition]] to change the actual links (if necessary) (./) done!
+ 4. rewrite tests to take into account the two syntaxes (!) would be done when we migrate to the syntax
+ 5. deal with underlays (./) i wrote a script to convert it to markdown
+
+Discussion
+----------
+
+> It's not at all obvious to me that `rtl` should mean "link before description"
+> and not the other way round. Perhaps `wikilink_text_first` => `1` for the historical
+> IkiWiki syntax or `0` for the Creole/Mediawiki syntax? --[[smcv]]
+>
+> > A friend made the argument that it is more natural for a human to read the `text` then `link`, as the link is less important. Since we (occidental languages) read left to right, I felt this was appropriate. I also blindly assumed that it would "feel" also appropriate for right to left languages (arabic, hebrew, etc) to have those links backwards, and those languages are generally named "right to left".
+> >
+> > Originally, I named that parameter `backwards_links`, but then it wouldn't make sense in the long term, and isn't exactly neutral: it assume the current way is backwards! Your suggestion is interesting however, but I don't think the rtl/ltr nomenclature is problematic, with proper documentation of course... --[[anarcat]]
+
+There's a caveat: we can't have a per-wiki backwards_links option, because of the underlay, common to all wikis, which needs to be converted. So the option doesn't make much sense. Not sure how to deal with this... Maybe this needs to be at the package level? --[[anarcat]]
+
+> I've thought about adding a direction-neutral `\[[!link]]` directive -
+> see [[link plugin perhaps too general?]] for details. The basewiki
+> could use `\[[!link to=b desc=a]]` whenever it needs `\[[a|b]]`-style
+> links, maybe? --[[smcv]]
+
+>> It could, but it would be a pain to remember to do that.
+>>
+>> I feel that this should probably be a flag day transition because
+>> otherwise there will be a lot of variation between how different
+>> ikiwikis handle links, which is even worse than the current variation
+>> between ikiwiki and other wikis!
+>>
+>> There are quite likely ikiwiki page generators that build wikilinks
+>> too. One that's part of ikiwiki itself is `change.tmpl`. There may be
+>> others... --[[Joey]]
+
+>>> Agreed that it would be cleaner to just change everything, even though the transition might be painful.
+
+>>> Another interim option might be to change the basewiki links to be just \[[link to whatever]] without having a description.
+>>> That style of link would work whether the link style was "backwards" or "forwards". Unfortunately it could make some links less readable; after all, there is a reason why one wants to be able to change the link text! But I don't know what proportion of the links are like that. It's a thought, anyway.
+>>> --[[KathrynAndersen]]
+
+>>>> I dislike placing such requirements on the underlay, which is after
+>>>> all, just a subset of pages in this wiki, which many of the people
+>>>> editing may not even realize are part of the underlay. --[[Joey]]
+
+>>> Another option for internal links is to just use the regular markdown links instead of `\[[text|link]]` markup, that way it works regardless. Then the documentation for the link plugin just has to state both syntaxes in a safe manner.
+>>> I also agree that we should just switch in one shot, although I am worried this means this could be postponed indefinitely.--[[anarcat]]
+
+>>>> I have done just that in my branch: now the underlay only uses wikilinks in the wikilink page, elsewhere regular markdown links are used. I haven't converted the whole of the doc/ directory however, that would be left to the migration. I have written a ikiwik-transition tool to migrate from wikilink to markdown while i was there. --[[anarcat]]
+
+>>>>> No, that is *not* an option. Relative markdown links **break** when
+>>>>> page A, containing a link, is inlined into page B. --[[Joey]]
+
+----
+
+FWIW, I think this change may well be painful, but is a good idea. I can never remember which way around it should be.
+Rather like USB plugs, I invariably have to try both ways. — [[Jon]]
+
+The bikeshed color should be ...
+--------------------------------
+
+...[blue](http://blue.bikeshed.org/) of course. :) Just to make things clear here, the "bikeshedding" potential is absolutely huge here. right to left? left to right? who's right? how could we even decide this?
+
+I think we can approach this rationnally:
+
+ 1. left to right (text then link) can be considered more natural, and should therefore be supported
+ 2. it is supported in markdown using regular markdown links. in the proposed branch, the underlay wikilinks are converted to use regular markdown links
+ 3. ikiwiki links break other markup plugins, like mediawiki and creole, as those work right to left.
+ 4. those are recognized "standards" used by other popular sites, like Wikipedia, or any wiki supporting the Creole markup, which is [most wikis](http://www.wikicreole.org/wiki/Engines)
+
+Therefore, to respect interoperability and [POLA](https://en.wikipedia.org/wiki/Principle_of_least_astonishment), ikiwiki should respect that convention and reverse the way links are parsed by the link plugin, or move that functionality into creole/mediawiki modules, and out of the main core, which I do not think can be an option.
+
+So here's a roadmap to deploy this change:
+
+ 1. the code in the backwards_links branch i am working on is tested and proven, then merged in
+ 2. a release of the 3.x branch is published with the possibility for wikis to convert to the new markup, with the notion that the older markup is deprecated
+ 3. this wiki is converted to the new markup
+ 4. 4.0 is released with the new markup enabled by default and runs ikiwiki-transition on your wiki on upgrade
+
+Note that ikiwiki-transition can be ran multiple and will convert your markup to and from rtl/ltr, without issues, so this is pretty sturdy. I think the configuration variable can be kept throughout 4.x, with the notion that it will be completely removed eventually. --[[anarcat]]
diff --git a/doc/todo/ease_archivepage_styling.mdwn b/doc/todo/ease_archivepage_styling.mdwn
new file mode 100644
index 000000000..67415c176
--- /dev/null
+++ b/doc/todo/ease_archivepage_styling.mdwn
@@ -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/etherpad_support.mdwn b/doc/todo/etherpad_support.mdwn
new file mode 100644
index 000000000..c11243ffc
--- /dev/null
+++ b/doc/todo/etherpad_support.mdwn
@@ -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/fastcgi_or_modperl_installation_instructions.mdwn b/doc/todo/fastcgi_or_modperl_installation_instructions.mdwn
index 74dcaeb61..ad7910956 100644
--- a/doc/todo/fastcgi_or_modperl_installation_instructions.mdwn
+++ b/doc/todo/fastcgi_or_modperl_installation_instructions.mdwn
@@ -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/feed_enhancements_for_inline_pages.mdwn b/doc/todo/feed_enhancements_for_inline_pages.mdwn
index b48c37d7b..f13213dc2 100644
--- a/doc/todo/feed_enhancements_for_inline_pages.mdwn
+++ b/doc/todo/feed_enhancements_for_inline_pages.mdwn
@@ -1,4 +1,4 @@
-[[!template id=gitbranch branch=GiuseppeBilotta/inlinestuff author="Giuseppe Bilotta"]]
+[[!template id=gitbranch branch=GiuseppeBilotta/inlinestuff author="[[GiuseppeBilotta]]"]]
I rearranged my patchset once again, to clearly identify the origin and
motivation of each patch, which is explained in the following.
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index 4dbbc1cc8..bedf21d0c 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -6,7 +6,9 @@ Ikiwiki should really survive being asked to work with a git branch that has no
git clone barerepo.git srcdir
ikiwiki --rcs=git srcdir destdir
-I've fixed this initial construction case, and, based on my testing, I've also fixed the post-update executing on a new master, and ikiwiki.cgi executing on a non-existent master cases.
+I've fixed this initial construction case, and, based on my testing, I've
+also fixed the post-update executing on a new master, and ikiwiki.cgi
+executing on a non-existent master cases.
Please commit so my users stop whining at me about having clean branches to push to, the big babies.
@@ -63,15 +65,18 @@ It's still extra work) to a very hot code path that is run to eg,
update recentchanges after every change.
Seems not ideal to do extra work every time to handle a case
-that will liternally happen a maximum of once in the entire lifecycle of a
+that will literally happen a maximum of once in the entire lifecycle of a
wiki (and zero times more typically, since the setup automator puts in a
.gitignore file that works around this problem).
So as to not just say "no" ... what if it always tried to run git log,
-and if it failed (or returned no parsed lines, then it could look
-at git show-ref to desice whether to throw an error or not.
+and if it failed (or returned no parsed lines), then it could look
+at git show-ref to deduce whether to throw an error or not.
--[[Joey]]
+> Ah, but then git-log would still complain "bad revision 'HEAD'"
+> --[[Joey]]
+
<pre>
@@ -474,7 +478,10 @@ sub rcs_update () {
# Update working directory.
@@ -84,6 +89,7 @@ at git show-ref to desice whether to throw an error or not.
+ }
}
}
+
</pre>
Same concern here about extra work. Code path is nearly as hot, being
diff --git a/doc/todo/improved_mediawiki_support.mdwn b/doc/todo/improved_mediawiki_support.mdwn
new file mode 100644
index 000000000..68cbcf7d4
--- /dev/null
+++ b/doc/todo/improved_mediawiki_support.mdwn
@@ -0,0 +1,9 @@
+[[!tag patch todo wishlist]]
+
+I several updates to the mediawiki plugin to improve compatibility, improving img and File: support. I'd love to get them upstream. Is there any interest? Patches are at [[http://www.isi.edu/~johnh/SOFTWARE/IKIWIKI/index.html]]
+
+> The mediawiki plugin has never been included in ikiwiki, it's
+> [provided by a third party](https://github.com/jmtd/mediawiki.pm) and
+> you should send your patches to them.
+> [[done]]
+> --[[Joey]]
diff --git a/doc/todo/inline_directive_should_support_pagination.mdwn b/doc/todo/inline_directive_should_support_pagination.mdwn
new file mode 100644
index 000000000..eafe6ee11
--- /dev/null
+++ b/doc/todo/inline_directive_should_support_pagination.mdwn
@@ -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/internal_definition_list_support.mdwn b/doc/todo/internal_definition_list_support.mdwn
new file mode 100644
index 000000000..f87dc653f
--- /dev/null
+++ b/doc/todo/internal_definition_list_support.mdwn
@@ -0,0 +1,54 @@
+While ikiwiki can support definition lists (`dl/dt/dd`) through [[multimarkdown|plugins/mdwn]], it doesn't actually /do/ anything with those valuable definitions. It would be interesting for third party plugins to have access to this stuff as a proper data structure. This is what allows MoinMoin to have plugins that collect that data across multiple pages and tabulate it, for example.
+
+What I am proposing here is that the [[variables exported to plugins|plugins/write/#index6h2]] be extended to include a `%dictionnaries` hash. For a markup like this:
+
+[[!format txt """
+Apple
+: Apple is a fruit
+: It's also a computer company
+Orange
+: Orange is a fruit
+"""]]
+
+would result in a data structure like this:
+
+[[!format txt """
+%dicts = {
+ 'Apple' => [ "Apple is a fruit", "It's also a computer company" ],
+ 'Orange' => [ "Orange is a fruit" ],
+}
+"""]]
+
+Now, I know I can write myself a `format()` parser that would do this on all pages in my own plugin, but then it would need to be adapted to all markups, while markup formatters should be the ones implementing this directly, if possible.
+
+My first use case for this would be to extend the [[plugins/osm]] plugin to tap into those lists, so that I could have this data in the page, visible to the user:
+
+[[!format txt """
+Longitude
+: -45.30
+Latitude
+: 73.67
+"""]]
+
+and then reuse that data in the plugin.
+
+Then for us running the humongous [[koumbit wiki|https://wiki.koumbit.net/]], it is a necessary step to be able to migrate away from MoinMoin to Ikiwiki as we have a lot of pages that tabulate information like this. For example, see our [[ServerList|https://wiki.koumbit.net/ServerList]] ([[source|https://wiki.koumbit.net/ServerList?action=raw]]), being generated from pages like [[this one|https://wiki.koumbit.net/metis.koumbit.net]].
+
+If there are no objections to that concept, I may try to start coding patches. Otherwise this is really just a [[wishlist]]. --[[anarcat]]
+
+> Have you looked at the [[/plugins/contrib/field]] plugin? This gives you the infrastructure, and all you need is to write a plugin that parses the definition list format. Then you could use [[/plugins/contrib/getfield]], [[/plugins/contrib/ftemplate]] and/or [[/plugins/contrib/report]] to do what you like with the data.
+> --[[KathrynAndersen]]
+
+> ----
+
+> with the recent inclusion of discount to the [[plugins/mdwn]] module, definition lists can be used by default (instead of, as with multimarkdown, after an option is enabled), and look like this:
+>
+> =Apple=
+> Apple is a fruit.
+> Apple is also a company.
+> =Orange=
+> Orange is a fruit.
+>
+> (indented with four spaces). this makes definition lists a bit more attractive for definition harvesting.
+>
+> personally, i'd prefer a solution that works from the markup'ed plain text instead of invisible directives, as it integrates more naturally in the flow of designing a document, even though a plugin for explicitly stating invisible facts certainly has its purpose too. (think [[!wikipedia RDFa]] here ;-) ) --[[chrysn]]
diff --git a/doc/todo/linkbase.mdwn b/doc/todo/linkbase.mdwn
new file mode 100644
index 000000000..5dcef3c3d
--- /dev/null
+++ b/doc/todo/linkbase.mdwn
@@ -0,0 +1,16 @@
+[[!template id=gitbranch branch=GiuseppeBilotta/linkbase author="[[GiuseppeBilotta]]"]]
+
+This patches enables the user to specify additional paths (“link bases”)
+that can be used by ikiwiki when trying to resolve links. The list of
+link bases is built as follows:
+
+* the page itself (as ikiwiki currently does)
+* all link bases specified for this page
+* all link bases specified for pagespecs matched by this page
+
+To specify the link bases, the only way made available presently by the
+patchset is a linkbase plugin that works similarly to the shortcut
+plugin (link bases are specified in a linkbases.mdwn file at the
+document root). However, are ways are potentially possible.
+
+This is still work in progress. Comments and suggestions are welcome.
diff --git a/doc/todo/lucene_search_engine.mdwn b/doc/todo/lucene_search_engine.mdwn
new file mode 100644
index 000000000..bac9f9130
--- /dev/null
+++ b/doc/todo/lucene_search_engine.mdwn
@@ -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/mdwn_preview.mdwn b/doc/todo/mdwn_preview.mdwn
index c20314c28..fa69bad47 100644
--- a/doc/todo/mdwn_preview.mdwn
+++ b/doc/todo/mdwn_preview.mdwn
@@ -1,3 +1,37 @@
+ikiwiki needs a wysiwyg markdown editor. While there have been tries using
+WMD etc, they are not fully satisfactory, and also the license of
+everything around WMD is [[unclear|plugins/wmd/discussion]].
+
+[Hallo](https://github.com/bergie/hallo) is the closest to a solution
+I've seen.
+The user can edit the page by clicking on the html part they want to change
+and typing. Selecting text pops up a toolbar to modify it.
+
+[Demo of Hallo with live WYSIWYG markdown editing](http://bergie.github.com/hallo/markdown.html)
+This demo uses showdown, and I still don't know what the license of
+showdown is. However, the showdown part seems to only be to handle the live
+conversion from the markdown source in the edit field to the html. The
+(edited) html to markdown conversion is accomplished by Hallo.
+
+So, ikiwiki could use this in a page edit UI that does not show the
+markdown at all. The user would edit the live page, entirely in wysiwyg
+mode, and on saving hallo's generated markdown would be saved. Probably
+there would need to be a button to bring up the current markdown editor
+too, but without showdown, changes in it would not immediatly preview, so
+it'd make sense to disable hallo when the editor is visible.
+
+Issue: Ikiwiki directives can generate html. We would not want that html to
+be editable by halo and converted back to markdown. Also, the directives
+need to appear in the html so users can edit them. This seems to call for a
+special page rendering mode for editing, in which directives are either not
+expanded, or are expanded but the generated html wrapped in some tag that
+makes hallo refuse to edit it (which would probably require that feature be
+added to hallo, currently it acts on all blocks with `class=editable`),
+or otherwise allows it to be stripped out at save time. --[[Joey]]
+
+### old discussion
+
+
The [StackOverflow](http://stackoverflow.com/) site uses markdown for markup.
It has a fancy javascript thing for showing a real-time preview of what the user
is editing. It would be nice if ikiwiki could support this, too. The thing they
diff --git a/doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn b/doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn
index baad063ef..5701d8e2b 100644
--- a/doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn
+++ b/doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn
@@ -80,6 +80,11 @@ and decided this time it was really needed to implement this feature.
>>>>>> Ping? I've merged 3.20110321 in my `mirrorlist` branch and
>>>>>> checked it still works properly. --[[intrigeri]]
+>>>>>>> Joey: ping? I've rebased my `mirrorlist` branch on top of
+>>>>>>> 3.20120419, and checked it still works properly. I really
+>>>>>>> would like to see this functionality merged in time
+>>>>>>> for Wheezy. --[[intrigeri]]
+
>>>>> concerning goto/cgiurl, what about having that as the default in
>>>>> mirrorlist, but keeping ``nousedirs|file:///home/intrigeri/wiki`` and
>>>>> ``usedirs|http://example.com/wiki`` valid for cgi-less cases?
@@ -94,3 +99,5 @@ and decided this time it was really needed to implement this feature.
>>>>>> this should not block the merge of the branch I have been
>>>>>> proposing. Support for the usecase you are suggesting can
>>>>>> always be added later if needed. --[[intrigeri]]
+
+>>>>>>> Well, that came out nice and clean. [[done]] --[[Joey]]
diff --git a/doc/todo/monochrome_theme.mdwn b/doc/todo/monochrome_theme.mdwn
new file mode 100644
index 000000000..eaf51c080
--- /dev/null
+++ b/doc/todo/monochrome_theme.mdwn
@@ -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/org_mode.mdwn b/doc/todo/org_mode.mdwn
index ef7f4dbaf..bb3b7dec0 100644
--- a/doc/todo/org_mode.mdwn
+++ b/doc/todo/org_mode.mdwn
@@ -22,14 +22,15 @@ new plugin
==========
A complete rewrite of the plugin can be found
-[here][chrismgray-rewrite]. It is an [[external|plugins/write/external]] plugin using a
+[here][chrismgray-rewrite]. It uses a
dedicated emacs instance to parse the org-mode files. Thus, it should
be a bit faster than the older plugin, as well as properly handling
[[wikilinks|ikiwiki/wikilink]] and images, two features not present in the older
-plugin.
+plugin. An example of its use can be found at my [blog][chrismgray-blog].
[org-mode]: http://orgmode.org/
[MS]: http://www.golden-gryphon.com/blog/manoj/blog/2008/06/08/Using_org-mode_with_Ikiwiki/
[example]: http://blog.tremily.us/posts/Git/notes/
[raw]: http://orgmode.org/manual/Quoting-HTML-tags.html
[chrismgray-rewrite]: https://github.com/chrismgray/ikiwiki-org-plugin
+[chrismgray-blog]: http://chrismgray.github.com
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
index 000000000..fa74d3126
--- /dev/null
+++ b/doc/todo/osm__95__optimisations__95__and__95__fixes.mdwn
@@ -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
index 000000000..d59f394ee
--- /dev/null
+++ b/doc/todo/osm_arbitrary_layers.mdwn
@@ -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/pdf_output.mdwn b/doc/todo/pdf_output.mdwn
index 29c89e4eb..a0f324054 100644
--- a/doc/todo/pdf_output.mdwn
+++ b/doc/todo/pdf_output.mdwn
@@ -18,3 +18,5 @@ Note that for example dokuwiki has a [[nice plugin|http://danjer.doudouke.org/te
>>>>> Have you tried running it with "verbose" turned on, and noting the output? That could give some clues.
>>>>> And no, the PDFs are not placed in the source dir, only in the destination dir.
>>>>> -- [[KathrynAndersen]]
+
+**Edit (17.02.2012)**: I have put an extended version of the question on webmasters.stackexchange: [[http://webmasters.stackexchange.com/questions/24905/run-external-application-on-markdown-source-in-ikiwiki]] , perhaps someone of the ikiwiki programmers is intersted in having this feature too...
diff --git a/doc/todo/per_page_ACLs.mdwn b/doc/todo/per_page_ACLs.mdwn
new file mode 100644
index 000000000..82acac215
--- /dev/null
+++ b/doc/todo/per_page_ACLs.mdwn
@@ -0,0 +1,18 @@
+This is about going beyond the current [[ACL]] system and allow not only readonly pages (through [[plugins/lockedit]]) but also read protection, and per page. To quote that other page:
+
+> [[!acl user=joe page=.png allow=upload]]
+> [[!acl user=bob page=/blog/bob/ allow=]]
+> [[!acl user= page=/blog/bob/ deny=]]
+> [[!acl user=http://jeremie.koenig.myopenid.com/ page=/todo/* deny=create
+> reason="spends his time writing todo items instead of source code"]]
+>
+> Each would expand to a description of the resulting rule.
+>
+> a configurable page of the wiki would be used as an ACL list. Possibly could refer to other ACL pages, as in:
+>
+> [[!acl user= page=/subsite/ acl=/subsite/acl.mdwn]]
+
+I think this would be perfectly possible in Ikiwiki, provided of course the access to the full repository is not allowed, as that cannot be made granular. The way I would see that happen would be by dropping .htaccess files in the right directories and with clever configuration of the virtual host containing the ikiwiki install. Apache has plenty of methods for doing such authentication, and we could simply rely on [[plugins/httpauth/]] for that. *But* there is a key feature of having ACLs per page, or improving the httpauth plugin to have "noread" pagespecs... --[[anarcat]]
+
+Agreed with anarcat, I'am experimenting it. Moreover after sketching some kind of "private area" and a "public area" with [[plugins/httpauth/]], I realized in a public page, generated *backlinks* that appears, actually links pages in private. In the end users through backlink navigation will frequently hit HTTP/401 deterring browsing as well as for the admin at false-positive logwatching.
+So the plus would be to have a visual display noticing that some link is denied (why not with the reason in a mouseover popup). [[mathdesc]]
diff --git a/doc/todo/please_add_some_table_styles.mdwn b/doc/todo/please_add_some_table_styles.mdwn
new file mode 100644
index 000000000..1308e1950
--- /dev/null
+++ b/doc/todo/please_add_some_table_styles.mdwn
@@ -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]]
diff --git a/doc/todo/provide_inline_diffs_in_recentchanges.mdwn b/doc/todo/provide_inline_diffs_in_recentchanges.mdwn
index 39a35d0c6..3bf1bdc33 100644
--- a/doc/todo/provide_inline_diffs_in_recentchanges.mdwn
+++ b/doc/todo/provide_inline_diffs_in_recentchanges.mdwn
@@ -1,8 +1,27 @@
+[[!template id=gitbranch branch=anarcat/inline_diffs author="[[anarcat]]"]]
+
It would rock if I could view diffs from the web without going via feeds. I envision toggle-style buttons on the recentchanges page, or just links to the CGI, which then displays the diff... --[[madduck]]
-> The diffs are actually there, enabled by the `recentchangesdiff`
+> The diffs are actually there, enabled by the [[plugins/recentchangesdiff]]
> plugin, but they are hidden in the XHTML version by the stylesheet.
> You might try a user stylesheet with `div.diff { display: block }`.
> --[[JasonBlevins]]
-[[!tag wishlist]]
+> > I have implemented this in a branch in my repository (see the side box).
+> >
+> > Unfortunately it has some issues:
+> >
+> > 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. <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
index 000000000..55fe3aa1f
--- /dev/null
+++ b/doc/todo/publishing_in_the_future.mdwn
@@ -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
index 000000000..4c32b9ca9
--- /dev/null
+++ b/doc/todo/recentchanges_feed_with_comment.mdwn
@@ -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/recommend_libtext-markdown-discount_instead_of_depending.mdwn b/doc/todo/recommend_libtext-markdown-discount_instead_of_depending.mdwn
index 736e34787..bb953ef8d 100644
--- a/doc/todo/recommend_libtext-markdown-discount_instead_of_depending.mdwn
+++ b/doc/todo/recommend_libtext-markdown-discount_instead_of_depending.mdwn
@@ -13,3 +13,13 @@ installable on a wheezy host. -- [[Jon]]
> `libtext-markdown-discount-perl | libtext-markdown-perl',
> then users will not automatically transition to using discount, which
> I want them to do. [[done]] --[[Joey]]
+
+>> Sorry, I made a mistake in the phrasing of my original request. It's
+>> not installable on *squeeze*, which is what I care about, rather than
+>> *wheezy*. Someone needs to backport `libtext-markdown-discount` I
+>> guess. — [[Jon]]
+
+>>> For squeeze, it will be appropriate for an ikiwiki backport to
+>>> still depend on the old markdown. Although a discount backport would be
+>>> nice! I don't want the current ikiwiki to be held back by requirement
+>>> that it be installable as-is on squeeze. --[[Joey]]
diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
index b6495194a..e19ceaa8f 100644
--- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
+++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
@@ -55,3 +55,7 @@ href="http://jaspervdj.be/hakyll">Hakyll</a>?
>> dependency stuff. -- [[tychoish]]
>>> (nods) Which is why I suggested it. I'm not sure whether it would be easier to "bolt on" those things than static compilation, but it could be worth looking at, at least. -- [[KathrynAndersen]]
+
+-----
+
+Rather than coding plugins for the Perl ikiwiki in Haskell, I wonder how easily a Haskell ikiwiki could still support plugins written in Perl? The (old and apparently stale) [HsPerl5](http://hackage.haskell.org/package/HsPerl5) package might provide a helpful starting point there. -- [[JoshTriplett]]
diff --git a/doc/todo/sort_parameter_for_map_plugin_and_directive.mdwn b/doc/todo/sort_parameter_for_map_plugin_and_directive.mdwn
index f6ccaf538..b07ea33f1 100644
--- a/doc/todo/sort_parameter_for_map_plugin_and_directive.mdwn
+++ b/doc/todo/sort_parameter_for_map_plugin_and_directive.mdwn
@@ -4,4 +4,50 @@ Having a `sort=` parameter for the map plugin/directive would be real nice; like
I may hack one in from `inline` if it seem within my skill level.
+> this could leverage the [[sorting mechanism|ikiwiki/pagespec/sorting]] already in place. as it's not sorting a flat list, there's a number of different ways to sort, which should be configurable imo.
+>
+> as an example, i'll consider pages created in the sequence c/1, a, b, c, a/1, c/2.
+>
+> sorting could:
+>
+> * sort within each level:
+>
+> sorting order of child nodes would only matter internally in the groups
+>
+> that would create a (a/1) b c (c/1 c/2) sequence in our example.
+>
+> * sort by maximum
+>
+> the highest ranking page in a group would pull the parent to its own position
+>
+> that would create b a (a/1) c (c/1 c/2).
+>
+> * sort by minimum
+>
+> the lowest ranking page in a group would pull the parent to its own position
+>
+> here, that would give c (c/1 c/2) a (a/1) b
+>
+> * forced sequence
+>
+> all deepest-level items are forced to their positions, even if that means their parents are repeated at positions where they wouldn't occur naturally. parent nodes that don't have child nodes that occur directly before or after them are shown without the child nodes.
+>
+> that'd be c (c/1) a b c a (a/1) c (c/2) in our example.
+>
+> admittedly, the use cases for that are not too obvious, but think of a travel diary, for example, where you'd have the entries chronologically but grouped by the country you've visited. when you visit the same country twice, it should show up twice too.
+>
+> --[[chrysn]]
+
+------
+
+> i now do have two thirds of the solution:
+>
+> * i've patched the map plugin to accept a sort parameter (as usual in pagespec directives) and a strategy parameter, which is used to choose how the tree should be sorted. it turned out that the changes required were minimal; even precautions for having to display a node's parents although they are not supposed to be shown by themselves are present (they're decorated with the mapparent css class).
+> * i've implemented algorithms for the described strategies, but in python -- i tried in perl, but i'm not versed well enough in perl for such things. the "force" strategy works in perl but i'm afraid it depends on more than the perl sort algorithm to be just stable.
+> * if someone could port the three strategies implemented in python to perl, we'd have a complete patch for this.
+>
+> when comparing the implementation to my notes above, you'll see that there is a minor difference in the "force" algorithm -- my code doesn't generate the "parent" entries (**c** (c/1) a b c **a** (a/1) **c** (c/2) in the example), but they're generated by the already existing output code.
+>
+> the code can be found at [[incomplete_patch.pl.pl]] and [[python_algorithms.py]]. --[[chrysn]]
+
[[!tag wishlist]]
diff --git a/doc/todo/sort_parameter_for_map_plugin_and_directive/incomplete_patch.pl.pl b/doc/todo/sort_parameter_for_map_plugin_and_directive/incomplete_patch.pl.pl
new file mode 100644
index 000000000..1297be663
--- /dev/null
+++ b/doc/todo/sort_parameter_for_map_plugin_and_directive/incomplete_patch.pl.pl
@@ -0,0 +1,77 @@
+diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm
+index 38f090f..6b884cd 100644
+--- a/IkiWiki/Plugin/map.pm
++++ b/IkiWiki/Plugin/map.pm
+@@ -25,6 +25,42 @@ sub getsetup () {
+ },
+ }
+
++sub strategy_byparents (@) {
++ # Sort by parents only
++ #
++ # With this strategy, children are sorted *under* their parents
++ # regardless of their own position, and the parents' positions are
++ # determined only by comparing the parents themselves.
++
++ # FIXME this is *not* what's described above, but the old behavior (for
++ # testing/comparison)
++ use sort 'stable';
++ my (@sequence,) = @_;
++ @sequence = sort @sequence;
++ return @sequence;
++}
++
++sub strategy_forcedsequence (@) {
++ # Forced Sequence Mode
++ #
++ # Using this strategy, all entries will be shown in the sequence; this
++ # can cause parents to show up multiple times.
++ #
++ # The only reason why this is not the identical function is that
++ # parents that are sorted between their children are bubbled up to the
++ # top of their contiguous children to avoid being repeated in the
++ # output.
++
++ use sort 'stable';
++
++ my (@sequence,) = @_;
++ # FIXME: i'm surprised that this actually works. i'd expect this to
++ # work with bubblesort, but i'm afraid that this may just not yield the
++ # correct results with mergesort.
++ @sequence = sort {($b eq substr($a, 0, length($b))) - ($a eq substr($b, 0, length($a)))} @sequence;
++ return @sequence;
++}
++
+ sub preprocess (@) {
+ my %params=@_;
+ $params{pages}="*" unless defined $params{pages};
+@@ -37,8 +73,11 @@ sub preprocess (@) {
+
+ # Get all the items to map.
+ my %mapitems;
++ my @mapsequence;
+ foreach my $page (pagespec_match_list($params{page}, $params{pages},
+- deptype => $deptype)) {
++ deptype => $deptype,
++ sort => exists $params{sort} ? $params{sort} : "title")) {
++ push(@mapsequence, $page);
+ if (exists $params{show} &&
+ exists $pagestate{$page} &&
+ exists $pagestate{$page}{meta}{$params{show}}) {
+@@ -88,7 +127,15 @@ sub preprocess (@) {
+ $map .= "<ul>\n";
+ }
+
+- foreach my $item (sort keys %mapitems) {
++ if (!exists $params{strategy} || $params{strategy} eq "parent") {
++ @mapsequence = strategy_byparents(@mapsequence);
++ } elsif ($params{strategy} eq "forced") {
++ @mapsequence = strategy_forcedsequence(@mapsequence);
++ } else {
++ error("Unknown strategy.");
++ }
++
++ foreach my $item (@mapsequence) {
+ my @linktext = (length $mapitems{$item} ? (linktext => $mapitems{$item}) : ());
+ $item=~s/^\Q$common_prefix\E\///
+ if defined $common_prefix && length $common_prefix;
diff --git a/doc/todo/sort_parameter_for_map_plugin_and_directive/python_algorithms.py b/doc/todo/sort_parameter_for_map_plugin_and_directive/python_algorithms.py
new file mode 100644
index 000000000..e89c54fae
--- /dev/null
+++ b/doc/todo/sort_parameter_for_map_plugin_and_directive/python_algorithms.py
@@ -0,0 +1,86 @@
+testdata = "c/3 a b d b/1 c/1 c/2/x c/2 c".split(" ")
+
+def strategy_byearlychild(sequence):
+ """Sort by earliest child
+
+ When this strategy is used, a parent is displayed with all its children as
+ soon as the first child is supposed to be shown.
+
+ >>> strategy_byearlychild(testdata)
+ ['c', 'c/3', 'c/1', 'c/2', 'c/2/x', 'a', 'b', 'b/1', 'd']
+ """
+
+ # first step: pull parents to top
+ def firstchildindex(item):
+ childindices = [i for (i,text) in enumerate(sequence) if text.startswith(item + "/")]
+ # distinction required as min(foo, *[]) tries to iterate over foo
+ if childindices:
+ return min(sequence.index(item), *childindices)
+ else:
+ return sequence.index(item)
+ sequence = sorted(sequence, key=firstchildindex)
+
+ # second step: pull other children to the start too
+ return strategy_byparents(sequence)
+
+def strategy_byparents(sequence):
+ """Sort by parents only
+
+ With this strategy, children are sorted *under* their parents regardless of
+ their own position, and the parents' positions are determined only by
+ comparing the parents themselves.
+
+ >>> strategy_byparents(testdata)
+ ['a', 'b', 'b/1', 'd', 'c', 'c/3', 'c/1', 'c/2', 'c/2/x']
+ """
+
+ def partindices(item):
+ """Convert an entry a tuple of the indices of the entry's parts.
+
+ >>> sequence = testsequence
+ >>> assert partindices("c/2/x") == (sequence.index("c"), sequence.index("c/2"), sequence.index("c/2/x"))
+ """
+ return tuple(sequence.index(item.rsplit('/', i)[0]) for i in range(item.count('/'), -1, -1))
+
+ return sorted(sequence, key=partindices)
+
+def strategy_forcedsequence(sequence):
+ """Forced Sequence Mode
+
+ Using this strategy, all entries will be shown in the sequence; this can
+ cause parents to show up multiple times.
+
+ The only reason why this is not the identical function is that parents that
+ are sorted between their children are bubbled up to the top of their
+ contiguous children to avoid being repeated in the output.
+
+ >>> strategy_forcedsequence(testdata)
+ ['c/3', 'a', 'b', 'd', 'b/1', 'c', 'c/1', 'c/2', 'c/2/x']
+ """
+
+ # this is a classical bubblesort. other algorithms wouldn't work because
+ # they'd compare non-adjacent entries and move the parents before remote
+ # children. python's timsort seems to work too...
+
+ for i in range(len(sequence), 1, -1):
+ for j in range(1, i):
+ if sequence[j-1].startswith(sequence[j] + '/'):
+ sequence[j-1:j+1] = [sequence[j], sequence[j-1]]
+
+ return sequence
+
+def strategy_forcedsequence_timsort(sequence):
+ sequence.sort(lambda x,y: -1 if y.startswith(x) else 1)
+ return sequence
+
+if __name__ == "__main__":
+ import doctest
+ doctest.testmod()
+
+ import itertools
+
+ for perm in itertools.permutations(testdata):
+ if strategy_forcedsequence(testdata[:]) != strategy_forcedsequence_timsort(testdata[:]):
+ print "difference for testdata", testdata
+ print "normal", strategy_forcedsequence(testdata[:])
+ print "timsort", strategy_forcedsequence_timsort(testdata[:])
diff --git a/doc/todo/usedirs__95__redir_proposed_additional_module.mdwn b/doc/todo/usedirs__95__redir_proposed_additional_module.mdwn
new file mode 100644
index 000000000..6e9f27af0
--- /dev/null
+++ b/doc/todo/usedirs__95__redir_proposed_additional_module.mdwn
@@ -0,0 +1,8 @@
+I wrote a new ikiwiki plugin (download source) to generate redirection files so that the URL http://example.com/wiki/foo.html turns into http://example.com/wiki/foo/.
+
+This plugin is particularly useful when converting old sites built with static wiki pages into shiny new ikiwiki ones, while preserving external links.
+
+I'm happy to contribute the module to ikiwiki if there's interest. Source is [here](
+http://www.isi.edu/~johnh/SOFTWARE/IKIWIKI/usedirs_redir.pm.txt).
+
+[[!tag wishlist todo patch]]
diff --git a/doc/todo/wikiwyg.mdwn b/doc/todo/wikiwyg.mdwn
index 839986c7b..602a1b436 100644
--- a/doc/todo/wikiwyg.mdwn
+++ b/doc/todo/wikiwyg.mdwn
@@ -62,3 +62,10 @@ The plugin can be downloaded from <http://ikiwiki.xbaud.com/wikiwyg-1.6.tar.gz>
> lost my copy of this before merging it. I hope that this plugin will turn
> back up. In the meantime, there is a wmd plugin that accomplishes the
> same basic task of WSYWIG markdown editing. --[[Joey]]
+
+>> Seems the new place is now at Github: <https://github.com/audreyt/wikiwyg-js>
+>> FYI
+>> --[[users/Olea]]
+
+>>> No, that's the wikiwyg source, not the ikiwiki plugin to use it. The
+>>> latter is what's lost. --[[Joey]]
diff --git a/doc/todo/wikiwyg/discussion.mdwn b/doc/todo/wikiwyg/discussion.mdwn
index 304b39620..11c96a8b5 100644
--- a/doc/todo/wikiwyg/discussion.mdwn
+++ b/doc/todo/wikiwyg/discussion.mdwn
@@ -176,3 +176,6 @@ Thanks, [[Greg]]
>>> it, and at this point, I don't know where to find them anymore! Damn,
>>> damn, damn. I suspect I did that right when I was learning git, and
>>> screwed up pushing the branch. :-( --[[Joey]]
+>>>> Seems the new place is now at Github: <https://github.com/audreyt/wikiwyg-js>
+>>>> FYI
+>>>> --[[users/Olea]]
diff --git a/doc/usage.mdwn b/doc/usage.mdwn
index 44d32a01d..427a51f3b 100644
--- a/doc/usage.mdwn
+++ b/doc/usage.mdwn
@@ -253,8 +253,10 @@ also be configured using a setup file.
Specifies a username of a user (or, if openid is enabled, an openid)
who has the powers of a wiki admin. Currently allows locking of any page,
- and [[banning|banned_users]] users; other powers may be added later.
- May be specified multiple times for multiple admins.
+ and [[banning|banned_users]] users, as well as powers granted by
+ enabled plugins (such as [[moderating comments|plugins/moderatedcomments]]
+ and [[plugins/websetup]]. May be specified multiple times for multiple
+ admins.
For an openid user specify the full URL of the login, including "http://".
diff --git a/doc/users/GiuseppeBilotta.mdwn b/doc/users/GiuseppeBilotta.mdwn
new file mode 100644
index 000000000..7b15da959
--- /dev/null
+++ b/doc/users/GiuseppeBilotta.mdwn
@@ -0,0 +1,6 @@
+Custom patches to IkiWiki can be found in select branches of
+<http://git.oblomov.eu>.
+
+Patches proposed/discussed:
+[[!map pages="link(users/GiuseppeBilotta) and (todo/* or bugs/*) and
+link(branches) and !link(todo/done)"]]
diff --git a/doc/users/LucaCapello.mdwn b/doc/users/LucaCapello.mdwn
new file mode 100644
index 000000000..5ddccbf3d
--- /dev/null
+++ b/doc/users/LucaCapello.mdwn
@@ -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/Olea.mdwn b/doc/users/Olea.mdwn
new file mode 100644
index 000000000..1db2a7cf5
--- /dev/null
+++ b/doc/users/Olea.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="Ismael Olea"]]
+
+Ismael Olea is <a href="mailto:ismael@olea.org">ismael@olea.org</a>.
+His web page is [here](http://olea.org/diario/).
diff --git a/doc/users/OscarMorante.mdwn b/doc/users/OscarMorante.mdwn
new file mode 100644
index 000000000..7ece36db0
--- /dev/null
+++ b/doc/users/OscarMorante.mdwn
@@ -0,0 +1,3 @@
+Oscar Morante <oscar@morante.eu>
+
+[homepage](http://oscar.morante.eu)
diff --git a/doc/users/RickOwens.mdwn b/doc/users/RickOwens.mdwn
new file mode 100644
index 000000000..c619569d8
--- /dev/null
+++ b/doc/users/RickOwens.mdwn
@@ -0,0 +1 @@
+I'm a Systems Analyst in Montana. I use ikiwiki as a private notebook/journal/worklog/etc.
diff --git a/doc/users/acathur.mdwn b/doc/users/acathur.mdwn
new file mode 100644
index 000000000..fc3768ee1
--- /dev/null
+++ b/doc/users/acathur.mdwn
@@ -0,0 +1,3 @@
+Today I finally managed to setup and use ikiwiki, the way I intended to, after thinking about it for 3 years or more!
+This's to celebrate that, and to hopefuly contributing to ikiwiki in any possible way.
+
diff --git a/doc/users/adamshand.mdwn b/doc/users/adamshand.mdwn
index 5273c6439..acb2290ca 100644
--- a/doc/users/adamshand.mdwn
+++ b/doc/users/adamshand.mdwn
@@ -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"]]
--->
diff --git a/doc/users/anarcat.mdwn b/doc/users/anarcat.mdwn
index d868d7493..2bd50c76b 100644
--- a/doc/users/anarcat.mdwn
+++ b/doc/users/anarcat.mdwn
@@ -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]]
diff --git a/doc/users/chrismgray.mdwn b/doc/users/chrismgray.mdwn
new file mode 100644
index 000000000..b0084830d
--- /dev/null
+++ b/doc/users/chrismgray.mdwn
@@ -0,0 +1,4 @@
+I'm Chris Gray. I have an ikiwiki-based blog at
+[[http://chrismgray.github.com]]. I wrote a plugin for
+[[org-mode|todo/org_mode]] files that is probably the first ikiwiki
+plugin written mostly in emacs lisp.
diff --git a/doc/users/hb/discussion.mdwn b/doc/users/hb/discussion.mdwn
index 15c065e45..3214e1521 100644
--- a/doc/users/hb/discussion.mdwn
+++ b/doc/users/hb/discussion.mdwn
@@ -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]]
diff --git a/doc/users/iustin.mdwn b/doc/users/iustin.mdwn
new file mode 100644
index 000000000..db8cae218
--- /dev/null
+++ b/doc/users/iustin.mdwn
@@ -0,0 +1 @@
+I use ikiwiki to maintain my [personal blog](http://k1024.org/) and also for some private wikis.
diff --git a/doc/users/joshtriplett/discussion.mdwn b/doc/users/joshtriplett/discussion.mdwn
index 16e9be057..bbe0ed7c1 100644
--- a/doc/users/joshtriplett/discussion.mdwn
+++ b/doc/users/joshtriplett/discussion.mdwn
@@ -64,3 +64,5 @@ The other thing I saw was:
Moin version is 1.8.5
Help please!
+
+> Please take a look at [[tips/Convert_moinmoin_to_ikiwiki]] again, the code has radically changed and should now be easier to use *and* work with 1.8.x. --[[anarcat]]
diff --git a/doc/users/mathdesc.mdwn b/doc/users/mathdesc.mdwn
new file mode 100644
index 000000000..acb2a0756
--- /dev/null
+++ b/doc/users/mathdesc.mdwn
@@ -0,0 +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__]]
+
diff --git a/doc/users/pdurbin.mdwn b/doc/users/pdurbin.mdwn
new file mode 100644
index 000000000..15ded8346
--- /dev/null
+++ b/doc/users/pdurbin.mdwn
@@ -0,0 +1 @@
+<http://greptilian.com>
diff --git a/doc/users/tbm.mdwn b/doc/users/tbm.mdwn
new file mode 100644
index 000000000..cd7491c56
--- /dev/null
+++ b/doc/users/tbm.mdwn
@@ -0,0 +1,3 @@
+[[!meta title="Martin Michlmayr"]]
+
+Currently trying to convert [my homepage](http://www.cyrius.com/) to ikiwiki.
diff --git a/doc/users/ttw.mdwn b/doc/users/ttw.mdwn
new file mode 100644
index 000000000..03caad6c6
--- /dev/null
+++ b/doc/users/ttw.mdwn
@@ -0,0 +1 @@
+n0gOoi3
diff --git a/doc/users/undx.mdwn b/doc/users/undx.mdwn
new file mode 100644
index 000000000..9b62209ce
--- /dev/null
+++ b/doc/users/undx.mdwn
@@ -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/users/wiebel.mdwn b/doc/users/wiebel.mdwn
new file mode 100644
index 000000000..4d6997a9e
--- /dev/null
+++ b/doc/users/wiebel.mdwn
@@ -0,0 +1,5 @@
+Started my [Homepage](http://wiebel.scorpius.uberspace.de/) with ikiwiki added some plugins like:
+
+* [hlinclude](https://wiebel.scorpius.uberspace.de/space/hlinclude/) -> addition to highlight to render a files content and provide it as a download, example can be seen at [favlinks](https://wiebel.scorpius.uberspace.de/code/favlink/), sadly it seem to be unable to render itself, meh
+* [favlinks](https://wiebel.scorpius.uberspace.de/code/favlink/) -> to include favicons off linked Pages
+
diff --git a/ikiwiki-update-wikilist b/ikiwiki-update-wikilist
index 1976f7ed1..56d6e0731 100755
--- a/ikiwiki-update-wikilist
+++ b/ikiwiki-update-wikilist
@@ -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;
diff --git a/ikiwiki.spec b/ikiwiki.spec
index 0c7f435d9..6df191250 100644
--- a/ikiwiki.spec
+++ b/ikiwiki.spec
@@ -1,5 +1,5 @@
Name: ikiwiki
-Version: 3.20120202
+Version: 3.20121212
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
diff --git a/plugins/proxy.py b/plugins/proxy.py
index c2e9bd621..41cc45700 100644..100755
--- a/plugins/proxy.py
+++ b/plugins/proxy.py
@@ -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:
@@ -26,33 +28,62 @@
# 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
diff --git a/plugins/rst b/plugins/rst
index 0fe91c58b..ba0f543f9 100755
--- a/plugins/rst
+++ b/plugins/rst
@@ -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:
@@ -28,18 +32,22 @@
# 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)
diff --git a/po/Makefile b/po/Makefile
index dfb018c81..5ec4a157c 100644
--- a/po/Makefile
+++ b/po/Makefile
@@ -41,19 +41,22 @@ clean:
find underlays -name \*.mdwn -or -name \*.pot | xargs rm -f
%.mo: %.po
- msgfmt -o $@ $<
+ @if ! msgfmt -o $@ $<; then echo "unable to run msgfmt"; fi
%.po: ikiwiki.pot
@echo -n "Merging ikiwiki.pot and $@"
- @msgmerge $@ ikiwiki.pot -o $@.new 2>&1
-# Typically all that changes was a date or line number. I'd prefer not to
+# Typically all that changes is a date or line number. I'd prefer not to
# commit such changes, so detect and ignore them.
- @if [ "`diff $@ $@.new | grep '[<>]' | grep -v '[<>] #:' | wc -l`" -ne 2 ]; then \
- mv -f $@.new $@; \
+ @if ! msgmerge $@ ikiwiki.pot -o $@.new 2>&1; then \
+ echo "unable to run msgmerge"; \
else \
- rm -f $@.new; \
+ if [ "`diff $@ $@.new | grep '[<>]' | grep -v '[<>] #:' | wc -l`" -ne 2 ]; then \
+ mv -f $@.new $@; \
+ else \
+ rm -f $@.new; \
+ fi; \
+ msgfmt --statistics $@ 2>&1; \
fi
- @msgfmt --statistics $@ 2>&1
check:
@for file in $(POFILES); do \
diff --git a/po/bg.po b/po/bg.po
index 4963f86be..2ab4f5cdf 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki-bg\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Грешка"
@@ -139,7 +139,7 @@ msgstr "грешка при обработване на шаблона"
msgid "deleting bucket.."
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "готово"
@@ -158,7 +158,7 @@ msgstr "Грешка при изпращане на поща"
msgid "Failed to save file to S3: "
msgstr "Грешка при изпращане на поща"
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
#, fuzzy
msgid "Failed to delete file from S3: "
msgstr "грешка при запис на файла „%s”: %s"
@@ -176,15 +176,15 @@ msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -208,83 +208,87 @@ msgstr ""
msgid "There are no broken links!"
msgstr "Няма „счупени” връзки!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "създаване на %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "създаване на %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -294,11 +298,11 @@ msgstr[1] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -319,19 +323,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr "премахване на старата страница „%s”"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "създаване на %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "промяна на %s"
@@ -379,26 +387,26 @@ msgstr "грешка при четене на „%s”: %s"
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "крешка при компилиране на файла %s"
@@ -413,7 +421,7 @@ msgstr "При използване на приеставката „search”
msgid "failed to run graphviz"
msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr ""
@@ -478,31 +486,31 @@ msgstr "шаблонът „%s” не е намерен"
msgid "missing pages parameter"
msgstr "липсващ параметър „id” на шаблона"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "грешка при обработване на шаблона"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "модулът „RPC::XML::Client” не е намерен; източникът не е проверен"
@@ -522,11 +530,11 @@ msgid "%s is locked and cannot be edited"
msgstr ""
"Страницата „%s” е заключена от потребителя „%s” и не може да бъде променяна"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -553,15 +561,15 @@ msgstr "шаблонът „%s” не е намерен"
msgid "redir cycle is not allowed"
msgstr "шаблонът „%s” не е намерен"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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 "Огледало"
@@ -573,6 +581,18 @@ msgstr ""
msgid "more"
msgstr ""
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -587,42 +607,50 @@ msgstr "Всички страници имат връзки от други ст
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Грешка при създаване на акаунта."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Акаунтът е създаден. Можете да влезете."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Грешка при създаване на акаунта."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Грешка при изпращане на поща"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -650,88 +678,88 @@ msgstr "модулът „RPC::XML::Client” не е намерен; източ
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "крешка при компилиране на файла %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "грешка при запис на файла „%s”: %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
#, fuzzy
msgid "failed to translate"
msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -844,36 +872,36 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, fuzzy, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr ""
"Страницата „%s” е заключена от потребителя „%s” и не може да бъде променяна"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -911,20 +939,20 @@ msgstr "обновяване на страницата „%s”"
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, fuzzy, perl-format
msgid "update for rename of %s to %s"
msgstr "обновяване на страниците от уики „%s”: %s от потребител „%s”"
@@ -1053,6 +1081,11 @@ msgstr ""
msgid "failed to generate image from code"
msgstr "грешка при запис на файла „%s”: %s"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1119,59 +1152,59 @@ msgstr ""
msgid "scanning %s"
msgstr "сканиране на „%s”"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "пропускане на невалидното име на файл „%s”"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "премахване на старата страница „%s”"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "обновяване на страницата „%s”, съдържаща препратки към „%s”"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "премахване на „%s” понеже не се генерира от „%s”"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "обновяване на страницата „%s”, зависеща от „%s”"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "обновяване на „%s” и осъвременяване на обратните връзки"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, fuzzy, perl-format
msgid "building %s"
msgstr "промяна на %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: неуспех при обновяване на страницата „%s”"
@@ -1228,14 +1261,18 @@ msgstr "не може да бъде създадена обвивка, коят
msgid "wrapper filename not specified"
msgstr "не е указан файл на обвивката"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, perl-format
msgid "failed to compile %s"
msgstr "крешка при компилиране на файла %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:287
#, perl-format
msgid "successfully generated %s"
msgstr "успешно генериране на %s"
@@ -1256,68 +1293,68 @@ msgstr ""
msgid "usage: --set-yaml var=value"
msgstr ""
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "обновяване на уики..."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../IkiWiki.pm:1483
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i"
-#: ../IkiWiki.pm:1646
+#: ../IkiWiki.pm:1677
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "пропускане на невалидното име на файл „%s”"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "шаблонът „%s” не е намерен"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "непознат вид сортиране „%s”"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "непознат вид сортиране „%s”"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "грешка при четене на „%s”: %s"
diff --git a/po/cs.po b/po/cs.po
index 5cb42b937..a43b035cd 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Chyba"
@@ -138,7 +138,7 @@ msgstr "nepodařilo se zpracovat:"
msgid "deleting bucket.."
msgstr "mažu bucket..."
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "hotovo"
@@ -155,7 +155,7 @@ msgstr "Nepodařilo se vytvořit S3 bucket:"
msgid "Failed to save file to S3: "
msgstr "Nepodařilo se uložit soubor na S3:"
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr "Nelze smazat soubor z S3:"
@@ -172,16 +172,16 @@ msgstr "zakázáno proměnnou allowed_attachments"
msgid "bad attachment filename"
msgstr "chybné jméno souboru s přílohou"
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr "příloha nahrána"
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s není ani příloha, ani stránka."
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -207,85 +207,89 @@ msgstr "%s z %s"
msgid "There are no broken links!"
msgstr "Žádné porušené odkazy!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "komentář k %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
#, fuzzy
msgid "moderation"
msgstr "Schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "nepodporovaný formát stránky %s"
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr "komentář musí mít obsah"
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr "Anonym"
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
#, fuzzy
msgid "Comment Moderation"
msgstr "Schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "chybný název stránky"
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr "komentář k %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "stránka „%s“ neexistuje, takže nemůžete komentovat"
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "komentáře na stránce „%s“ jsou uzamčeny"
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr "komentář uložen pro schválení"
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../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:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr "Přidán komentář"
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr "Přidán komentář: %s"
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr "Schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr "schvalování komentářů"
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, fuzzy, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -295,12 +299,12 @@ 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:872
+#: ../IkiWiki/Plugin/comments.pm:903
#, fuzzy
msgid "Comment"
msgstr "Komentáře"
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -321,19 +325,24 @@ msgstr "na této stránce nebyl zkopírován žádný text s id %s"
msgid "removing old preview %s"
msgstr "odstraňuji starý náhled %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "%s není editovatelná stránka"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+#, fuzzy
+msgid "email comments to me"
+msgstr "Komentáře"
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "vytvářím %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "upravuji %s"
@@ -377,27 +386,27 @@ msgstr "není stránkou"
msgid "%s is an attachment, not a page."
msgstr "%s není ani příloha, ani stránka."
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr "nejste oprávněni měnit %s"
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "nemůžete pracovat se souborem s přístupovým oprávněními %s"
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr "nejste oprávněni měnit přístupová oprávnění souborů"
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "nejste oprávněni měnit %s"
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "nelze zkompilovat %s"
@@ -411,7 +420,7 @@ msgstr "%s musíte zadat při každém použití modulu %s"
msgid "failed to run graphviz"
msgstr "nepodařilo se spustit graphviz"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "program není platným programem graphviz"
@@ -470,31 +479,31 @@ msgstr "úprava stránky není povolena"
msgid "missing pages parameter"
msgstr "chybí parametr pages"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "parametry %s a %s nelze použít zároveň"
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Přidat nový příspěvek nazvaný:"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "nepodařilo se zpracovat:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client nebyl nalezen, nepinkám"
@@ -512,11 +521,11 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "Stránka %s je zamknutá a nelze ji měnit"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr "je povolen multimarkdown, ale Text::MultiMarkdown není nainstalován"
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -539,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:427
+#: ../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"
@@ -561,6 +570,19 @@ msgstr "schvalování komentářů"
msgid "more"
msgstr "více"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+#, fuzzy
+msgid "comment notification:"
+msgstr "schvalování komentářů"
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -574,42 +596,51 @@ msgstr "Na každou stránku vede odkaz z jiné stránky."
msgid "bad or missing template"
msgstr "chybná nebo chybějící šablona"
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Chyba při vytváření účtu."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Vytvoření účtu bylo úspěšné. Nyní se můžete přihlásit."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Chyba při vytváření účtu."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr "Bez e-mailové adresy nelze zaslat postup na resetování hesla."
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Nepodařilo se odeslat email."
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr "Postup na resetování hesla vám byl odeslán na e-mail."
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr "chybné URL pro resetování hesla"
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr "resetování hesla bylo zamítnuto"
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+#, fuzzy
+msgid "incorrect url"
+msgstr "chybné URL pro resetování hesla"
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr "Obdrženo pinknutí."
@@ -636,30 +667,30 @@ msgstr "LWP nebyl nalezen, nepinkám"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr "varování: rozpoznána stará verze po4a, doporučen přechod na 0.35."
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr "%s není platným kódem jazyka"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
"%s není platnou hodnotou parametru po_link_to, používám po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
"po_link_to=negotiated vyžaduje zapnuté usedirs, používám po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr "aktualizovány PO soubory"
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
@@ -667,7 +698,7 @@ msgstr ""
"Nemohu odstranit překlad. Nicméně pokud bude odstraněna hlavní stránka, "
"budou odstraněny také její překlady."
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
@@ -675,56 +706,56 @@ msgstr ""
"Nemohu přejmenovat překlad. Nicméně pokud bude přejmenována hlavní stránka, "
"budou přejmenovány také její překlady."
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "POT soubor (%s) neexistuje"
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "nepodařilo se zkopírovat PO soubor na %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr "nepodařilo se aktualizovat %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "nepodařilo se zkopírovat POT soubor na %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr "nepodařilo se přeložit %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr "odstraněny zastaralé PO soubory"
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr "nepodařilo se zapsat %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr "překlad se nezdařil"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"neplatná gettext data, pro pokračování v úpravách se vraťte na předchozí "
"stránku"
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -836,35 +867,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr "potvrďte odstranění %s"
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr "(Diff oříznut)"
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr "%s neexistuje"
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s není ve zdrojovém adresáři a proto nelze smazat"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr "%s není souborem"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr "potvrďte odstranění %s"
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr "Vyberte prosím přílohy, které se mají odstranit."
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr "odstraněno"
@@ -901,20 +932,20 @@ msgstr "přejmenování %s"
msgid "Also rename SubPages and attachments"
msgstr "Také přejmenovat podstránky a přílohy"
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr "Najednou lze přejmenovat pouze jednu přílohu."
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr "Vyberte přílohu, kterou chcete přejmenovat."
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr "přejmenování %s na %s"
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr "aktualizace pro přejmenování %s na %s"
@@ -1034,6 +1065,11 @@ 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
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1105,7 +1141,7 @@ msgstr "nemohu určit identitu nedůvěryhodného uživatele %s"
msgid "scanning %s"
msgstr "prohledávám %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1114,52 +1150,52 @@ msgstr ""
"v cestě ke zdrojovému adresáři (%s) byl nalezen symbolický odkaz -- chcete-"
"li to povolit, nastavte proměnnou allow_symlinks_before_srcdir"
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "přeskakuji chybné jméno souboru %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s má několik možných zdrojových stránek"
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "odstraňuji starou stránku %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr "sestavuji %s, která odkazuje na %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "odstraňuji %s, již není sestavována pomocí %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr "sestavuji %s, která závisí na %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "sestavuji %s, aby se aktualizovaly zpětné odkazy"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr "sestavuji %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: nelze sestavit %s"
@@ -1216,14 +1252,18 @@ msgstr "nemohu vytvořit obal, který využívá soubor setup"
msgid "wrapper filename not specified"
msgstr "jméno souboru s obalem nebylo zadáno"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, perl-format
msgid "failed to compile %s"
msgstr "nelze zkompilovat %s"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:287
#, perl-format
msgid "successfully generated %s"
msgstr "%s byl úspěšně vytvořen"
@@ -1245,66 +1285,66 @@ msgstr "použití: --set proměnná=hodnota"
msgid "usage: --set-yaml var=value"
msgstr "použití: --set proměnná=hodnota"
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "znovusestavuji wiki..."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr "chybné jméno souboru %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "šablona %s nebyla nalezena"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr "ano"
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "neznámý typ řazení %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "neznámý typ řazení %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr "nelze vybrat stránky: %s"
diff --git a/po/da.po b/po/da.po
index 5d612c662..2a05ba215 100644
--- 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: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Fejl"
@@ -141,7 +141,7 @@ msgstr "behandling af skabelon mislykkedes:"
msgid "deleting bucket.."
msgstr "sletter bundt.."
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "færdig"
@@ -158,7 +158,7 @@ msgstr "Oprettelse af S3 bundt mislykkedes: "
msgid "Failed to save file to S3: "
msgstr "Arkivering af fil til S3 mislykkedes: "
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr "Sletning af fil fra S3 mislykkedes: "
@@ -175,16 +175,16 @@ msgstr "forhindret af allowed_attachments"
msgid "bad attachment filename"
msgstr "dårligt vedhæftningsfilnavn"
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr "vedhæftningsoplægning"
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s er en vedhæftning, ikke en side."
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -210,83 +210,87 @@ msgstr "%s fra %s"
msgid "There are no broken links!"
msgstr "Ingen henvisninger der ikker fungerer!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, perl-format
msgid "this comment needs %s"
msgstr "denne kommentar kræver %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr "moderering"
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "Ikke-understøttet sideformat %s"
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr "kommentar skal have indhold"
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr "Anonym"
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr "Kommentarmoderering"
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "dårligt sidenavn"
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr "kommenterer på %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "siden '%s' eksisterer ikke, så du kan ikke kommentere"
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "kommentarer på side '%s' er lukket"
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr "kommentar gemt for moderering"
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../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:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr "Tilføjede en kommentar"
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr "Tilføjede en kommentar: %s"
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr "Kommentarmoderering"
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr "kommentarkoderering"
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -296,11 +300,11 @@ 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:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr "Kommentér"
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -321,19 +325,24 @@ msgstr "ingen tekst blev kopieret i denne side med id %s"
msgid "removing old preview %s"
msgstr "fjerner gammelt smugkig %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "%s er ikke en redigérbar side"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+#, fuzzy
+msgid "email comments to me"
+msgstr "%i kommentar"
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "opretter %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "redigerer %s"
@@ -377,26 +386,26 @@ msgstr "ikke en side"
msgid "%s is an attachment, not a page."
msgstr "%s er en vedhæftning, ikke en side."
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr "Du har ikke lov til at ændre %s"
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "du kan ikke påvirke en fil med modus %s"
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr "du har ikke lov til at ændre modus for filer"
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr "Du har ikke lov til at tilbageføre en sammenlægning"
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, perl-format
msgid "Failed to revert commit %s"
msgstr "tilbageføring af indlæg %s mislykkedes"
@@ -410,7 +419,7 @@ msgstr "Skal angive %s når udvidelsen %s bruges"
msgid "failed to run graphviz"
msgstr "graphviz-kørsel mislykkedes"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "prog er ikke et gyldigt graphviz-program"
@@ -471,31 +480,31 @@ msgstr "sideredigering er ikke tilladt"
msgid "missing pages parameter"
msgstr "mangler pages-parametren"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "parametrene %s og %s kan ikke anvendes sammen"
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr "%s (RSS-fødning)"
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr "%s (Atom-fødning)"
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Tilføj nyt indlæg med følgende titel:"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, perl-format
msgid "failed to process template %s"
msgstr "behandling af skabelon %s mislykkedes"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client ikke fundet, pinger ikke"
@@ -513,12 +522,12 @@ msgstr "henvisningskort"
msgid "%s is locked and cannot be edited"
msgstr "%s er låst og kan ikke redigeres"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"multimarkdown er aktiveret, men Text::MultiMarkdown er ikke installeret"
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -541,15 +550,15 @@ msgstr "henvisningsside ikke fundet"
msgid "redir cycle is not allowed"
msgstr "ring af henvisninger er ikke tilladt"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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"
@@ -561,6 +570,19 @@ msgstr "kommentar kræver moderering"
msgid "more"
msgstr "mere"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+#, fuzzy
+msgid "comment notification:"
+msgstr "kommentarkoderering"
+
#: ../IkiWiki/Plugin/openid.pm:71
#, perl-format
msgid "failed to load openid module: "
@@ -574,43 +596,52 @@ msgstr "Alle sider har henvisninger fra andre sider."
msgid "bad or missing template"
msgstr "dårlig eller manglende skabelon"
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Fejl ved kontooprettelse."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr "Din brugerside: "
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr "Opret din brugerside"
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Konto korrekt oprettet. Nu kan du logge på."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Fejl ved kontooprettelse."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
"Ingen emailadresse, så kan ikke sende adgangskodenulstillingsinstruktioner."
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Afsendelse af mail mislykkedes"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr "Du har fået tilsendt adgangskodenulstillingsinstruktioner."
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr "Ukorrekt adgangskodenumstillings-URL"
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr "adgangskodenulstilling afvist"
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+#, fuzzy
+msgid "incorrect url"
+msgstr "Ukorrekt adgangskodenumstillings-URL"
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr "Ping modtaget."
@@ -637,12 +668,12 @@ msgstr "LWP ikke fundet, pinger ikke"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr "advarsel: Gammel po4a detekteret. Anbefaler opgradering til 0.35."
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr "%s er ikke en gyldig sprogkode"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
@@ -650,7 +681,7 @@ msgstr ""
"%s er ikke en gyldig værdi for po_link_to, falder tilbage til "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
@@ -658,11 +689,11 @@ msgstr ""
"po_link_to=negotiated kræver at usedirs er aktiveret, falder tilbage til "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr "opdaterer PO-filer"
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
@@ -670,7 +701,7 @@ msgstr ""
"Kan ikke fjerne en oversættelse. Fjern i stedet hovedsiden, så fjernes dens "
"oversættelser også."
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
@@ -678,55 +709,55 @@ msgstr ""
"Kan ikke omdøbe en oversættelse. Omdøb i stedet hovedsiden, så omdøbes dens "
"oversættelser også."
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "POT-filen %s eksisterer ikke"
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "kopiering af underlags-PO-fil til %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr "opdatering af %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "kopiering af POT-filen til %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr "oversættelse af %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr "forældede PO filer fjernet"
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr "skrivning af %s mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr "oversættelse mislykkedes"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"forkert gettext-data, gå tilbage til forrige side og fortsæt redigering"
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr "%s har forkert syntaks: skal bruge CODE|NAME"
@@ -838,35 +869,35 @@ msgstr "Dette tilbagefører indlæg %s"
msgid "confirm reversion of %s"
msgstr "bekræft tilbageføring af %s"
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr "(Diff trunkeret)"
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr "%s eksisterer ikke"
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s er ikke i srcdir, så kan ikke blive slettet"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr "%s er ikke en fil"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr "bekræft at %s bliver fjernet"
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr "Vælg vedhæftning der skal slettes."
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr "fjernet"
@@ -903,20 +934,20 @@ msgstr "omdøb %s"
msgid "Also rename SubPages and attachments"
msgstr "Omdøb også UnderSider og vedhæftninger"
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr "Kun en vedhæftning kan blive omdøbt ad gangen."
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr "Vælg vedhæftningen som skal omdøbes."
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr "omdøb %s til %s"
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr "opdatering til omdøbning af %s til %s"
@@ -1036,6 +1067,11 @@ msgstr "manglende tex-kode"
msgid "failed to generate image from code"
msgstr "billedopbygning fra kode mislykkedes"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, perl-format
msgid "removing transient version of %s"
@@ -1107,7 +1143,7 @@ msgstr "kan ikke afgøre id for ikke-tillidsfulde skribent %s"
msgid "scanning %s"
msgstr "gennemlæser %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1116,52 +1152,52 @@ msgstr ""
"symbolsk lænke fundet i srcdir-sti (%s) -- sæt allow_symlinks_before_srcdir "
"for at tillade dette"
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "udelader forkert filnavn %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s har flere mulige kildesider"
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr "anmoder %s om oprettelses- og redigeringstider for fil.."
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, perl-format
msgid "removing obsolete %s"
msgstr "fjerner forældet %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr "danner %s, som henviser til %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "fjerner %s, ikke længere dannet af %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr "danner %s, som afhænger af %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "danner %s, for at opdatere dens krydshenvisninger (backlinks)"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr "danner %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: kan ikke danne %s"
@@ -1218,14 +1254,18 @@ msgstr "kan ikke oprette en wrapper som bruger en opsætningsfil"
msgid "wrapper filename not specified"
msgstr "wrapper-navn ikke angivet"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "Korrekt bygget %s"
@@ -1246,67 +1286,67 @@ msgstr "brug: --set var=værdi"
msgid "usage: --set-yaml var=value"
msgstr "brug: --set-yaml var=værdi"
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "genopbygger wiki..."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr "dårligt filnavn %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "skabelon %s ikke fundet"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr "ja"
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, perl-format
msgid "invalid sort type %s"
msgstr "forkert sorteringstype %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "ukendt sorteringsform %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr "kan ikke få sider til at passe sammen: %s"
diff --git a/po/de.po b/po/de.po
index 9cc9e388b..c19fedb5a 100644
--- 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: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Fehler"
@@ -139,7 +139,7 @@ msgstr "Fehler beim Ablauf:"
msgid "deleting bucket.."
msgstr "lösche Behälter (bucket)..."
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "fertig"
@@ -157,7 +157,7 @@ msgstr "Konnte Behälter (bucket) in S3 nicht anlegen: "
msgid "Failed to save file to S3: "
msgstr "Konnte die Datei nicht in S3 speichern: "
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr "Konnte die Datei nicht in S3 löschen: "
@@ -174,16 +174,16 @@ msgstr "durch allowed_attachements verboten"
msgid "bad attachment filename"
msgstr "fehlerhafter Dateiname für Anhang"
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr "Anhang hochladen"
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "Seite %s ist ein Anhang und keine Seite."
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -209,86 +209,90 @@ msgstr "%s von %s"
msgid "There are no broken links!"
msgstr "Es gibt keine ungültigen Verweise!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "kommentiere %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
#, fuzzy
msgid "moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "nicht unterstütztes Seitenformat %s"
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr "ein Kommentar sollte Inhalt haben"
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr "Anonym"
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
#, fuzzy
msgid "Comment Moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "fehlerhafter Seitenname"
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr "kommentiere %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
"Seite %s existiert nicht, Sie können sie deshalb auch nicht kommentieren"
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "Kommentare zur Seite %s sind gesperrt"
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr "Der Kommentar wurde zur Moderation gespeichert"
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../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:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr "Kommentar hinzugefügt"
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr "Kommentar hinzugefügt: %s"
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr "Kommentar-Moderation"
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -298,11 +302,11 @@ 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:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr "Kommentieren"
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -323,19 +327,24 @@ msgstr "es wurde kein Text in diese Seite mit der id %s kopiert"
msgid "removing old preview %s"
msgstr "entferne alte Vorschau %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "Seite %s kann nicht bearbeitet werden"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+#, fuzzy
+msgid "email comments to me"
+msgstr "%i Kommentar"
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "erstelle %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "bearbeite %s"
@@ -379,27 +388,27 @@ msgstr "Keine Seite"
msgid "%s is an attachment, not a page."
msgstr "Seite %s ist ein Anhang und keine Seite."
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr "Sie dürfen %s nicht verändern"
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "Sie können eine Datei mit den Zugriffsrechten %s nicht nutzen"
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr "Sie dürfen die Zugriffsrechte der Datei nicht ändern"
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "Sie dürfen %s nicht verändern"
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "erzeugen von %s fehlgeschlagen"
@@ -413,7 +422,7 @@ msgstr "%s muss angegeben werden, wenn die %s Erweiterung verwandt wird"
msgid "failed to run graphviz"
msgstr "graphviz konnte nicht ausgeführt werden"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "prog ist kein gültiges graphviz-Programm"
@@ -476,31 +485,31 @@ msgstr "bearbeiten der Seiten nicht erlaubt"
msgid "missing pages parameter"
msgstr "fehlender Seitenparameter"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "die Parameter %s und %s können nicht zusammen benutzt werden"
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Füge einen neuen Beitrag hinzu. Titel:"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "Fehler beim Ablauf:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client nicht gefunden, führe Ping nicht aus"
@@ -518,13 +527,13 @@ msgstr "Verknüpfungskarte"
msgid "%s is locked and cannot be edited"
msgstr "%s ist gesperrt und kann nicht bearbeitet werden"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"multimarkdown ist eingeschaltet, aber Text::MultiMarkdown ist nicht "
"installiert"
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -548,16 +557,16 @@ msgstr "Umleitungsseite nicht gefunden"
msgid "redir cycle is not allowed"
msgstr "Zyklische Umleitungen sind nicht erlaubt"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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"
@@ -569,6 +578,19 @@ msgstr "Kommentar muss moderiert werden"
msgid "more"
msgstr "mehr"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+#, fuzzy
+msgid "comment notification:"
+msgstr "Kommentar-Moderation"
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -582,44 +604,53 @@ msgstr "Alle Seiten haben mindestens einen Verweis von einer anderen Seite."
msgid "bad or missing template"
msgstr "fehlerhafte oder fehlende Vorlage"
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Konto konnte nicht erstellt werden."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr "Ihre Benutzerseite: "
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr "Benutzerseite erstellen"
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Kontoerstellung erfolgreich. Sie können sich jetzt anmelden."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Konto konnte nicht erstellt werden."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
"es gibt keine E-Mail Adresse, deshalb kann keine Anweisung zum Zurücksetzen "
"des Passwortes zugeschickt werden."
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Es konnte keine E-Mail versandt werden"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr "Ihnen wurden Anweisungen zum Zurücksetzen des Passworts zugesandt."
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr "fehlerhafte URL zum Zurücksetzen des Passworts"
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr "zurücksetzen des Passworts abgelehnt"
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+#, fuzzy
+msgid "incorrect url"
+msgstr "fehlerhafte URL zum Zurücksetzen des Passworts"
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr "Ping empfangen."
@@ -646,12 +677,12 @@ msgstr "LWP nicht gefunden, führe Ping nicht aus"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr "Warnung: Altes po4a erkannt! Empfehle Aktualisierung auf 0.35"
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr "%s ist keine gültige Sprachkodierung"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
@@ -659,7 +690,7 @@ msgstr ""
"%s ist kein gültiger Wert für po_link_to, greife zurück auf "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
@@ -667,11 +698,11 @@ msgstr ""
"po_link_to=negotiated benötigt usedirs eingeschaltet, greife zurück auf "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr "PO-Dateien aktualisiert"
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
@@ -679,7 +710,7 @@ msgstr ""
"Übersetzung kann nicht entfernt werden. Wenn die Master Seite entfernt wird, "
"werden auch ihre Übersetzungen entfernt."
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
@@ -687,56 +718,56 @@ msgstr ""
"Eine Übersetzung kann nicht umbenannt werden. Wenn die Master Seite "
"unbenannt wird, werden auch ihre Übersetzungen unbenannt."
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "POT-Datei (%s) existiert nicht"
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "konnte die PO-Datei nicht aus dem Underlay nach %s kopieren"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr "aktualisieren von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "kopieren der POT-Datei nach %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr "übersetzen von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr "überflüssige PO-Dateien wurden entfernt"
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr "schreiben von %s fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr "übersetzen fehlgeschlagen"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"ungültige gettext Datei, gehe zurück zur vorherigen Seite um weiter zu "
"arbeiten"
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -850,35 +881,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr "bestätigen Sie die Entfernung von %s"
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr "(Diff wurde gekürzt)"
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr "%s existiert nicht"
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s ist nicht im srcdir und kann deshalb nicht gelöscht werden"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr "%s ist keine Datei"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr "bestätigen Sie die Entfernung von %s"
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr "Bitte wählen Sie die zu entfernenden Anhänge aus."
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr "entfernt"
@@ -915,20 +946,20 @@ msgstr "benenne %s um"
msgid "Also rename SubPages and attachments"
msgstr "Auch Unterseiten (SubPages) und Anhänge umbenennen"
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr "Es kann immer nur ein Anhang gleichzeitig umbenannt werden."
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr "Bitte wählen Sie den Anhang aus, der umbenannt werden soll."
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr "benenne %s in %s um"
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr "aktualisiert zum Umbenennen von %s nach %s"
@@ -1048,6 +1079,11 @@ msgstr "fehlender TeX-Code"
msgid "failed to generate image from code"
msgstr "konnte kein Bild aus dem Code erzeugen"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1122,7 +1158,7 @@ msgstr ""
msgid "scanning %s"
msgstr "durchsuche %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1131,52 +1167,52 @@ msgstr ""
"symbolischer Verweis im srcdir Pfad (%s) gefunden -- setzen Sie "
"allow_symlinks_before_srcdir, um dies zu erlauben"
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "überspringe fehlerhaften Dateinamen %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s hat mehrere mögliche Quellseiten"
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "entferne alte Seite %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr "erzeuge %s, die auf %s verweist"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "entferne %s, wird nicht länger von %s erzeugt"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr "erzeuge %s, die von %s abhängt"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "erzeuge %s, um dessen Rückverweise zu aktualisieren"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr "erzeuge %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: kann %s nicht erzeugen"
@@ -1236,14 +1272,18 @@ msgstr "Kann keinen Wrapper erzeugen, der eine Einrichtungsdatei verwendet"
msgid "wrapper filename not specified"
msgstr "Dateiname des Wrappers nicht angegeben"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "%s wurde erfolgreich erstellt"
@@ -1265,69 +1305,69 @@ msgstr "Aufruf: --set Variable=Wert"
msgid "usage: --set-yaml var=value"
msgstr "Aufruf: --set Variable=Wert"
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "erzeuge Wiki neu.."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr "fehlerhafter Dateiname %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "Vorlage %s nicht gefunden"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr "ja"
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "Unbekannter Sortierungstyp %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "Unbekannter Sortierungstyp %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr "Kann die Seiten nicht zuordnen: %s"
diff --git a/po/es.po b/po/es.po
index 86f49f2c2..d215c1b4e 100644
--- 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: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Error"
@@ -144,7 +144,7 @@ msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
msgid "deleting bucket.."
msgstr "borrando el directorio.."
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "completado"
@@ -163,7 +163,7 @@ msgstr "Creación de directorio en S3 fallida: "
msgid "Failed to save file to S3: "
msgstr "No puedo guardar el archivo en S3: "
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
#, fuzzy
msgid "Failed to delete file from S3: "
msgstr "No puedo borrar archivo en S3: "
@@ -181,16 +181,16 @@ msgstr "prohibido por la claúsula allowed_attachments"
msgid "bad attachment filename"
msgstr "nombre de archivo adjunto erróneo"
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr "enviado el adjunto"
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "la página %s no es modificable"
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -216,85 +216,89 @@ msgstr "%s desde la página %s"
msgid "There are no broken links!"
msgstr "¡ No hay enlaces rotos !"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "creando comentarios en la página %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
#, fuzzy
msgid "moderation"
msgstr "Aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "formato de página %s no soportado"
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr "Un comentario debe tener algún contenido"
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr "Anónimo"
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
#, fuzzy
msgid "Comment Moderation"
msgstr "Aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "nombre de página erróneo"
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr "creando comentarios en la página %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "la página '%s' no existe, así que no se puede comentar sobre ella"
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "los comentarios para la página '%s' están cerrados"
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr "comentario guardado a la espera de aprobación"
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../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:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr "Añadir un comentario"
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr "Comentario añadido: %s"
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr "Aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr "aprobación de comentarios"
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, fuzzy, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -304,12 +308,12 @@ msgstr[1] "Comentarios"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
#, fuzzy
msgid "Comment"
msgstr "Comentarios"
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -330,19 +334,24 @@ msgstr "no se ha copiado ningún texto con el identificador %s en esta pagina"
msgid "removing old preview %s"
msgstr "eliminando la antigua previsualización %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "la página %s no es modificable"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+#, fuzzy
+msgid "email comments to me"
+msgstr "Comentarios"
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "creando página %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "modificando página %s"
@@ -387,27 +396,27 @@ msgstr "no encuentro páginas coincidentes: %s"
msgid "%s is an attachment, not a page."
msgstr "la página %s no es modificable"
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr "No puede cambiar %s"
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "no puede actuar sobre un archivo con permisos %s"
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr "No puede cambiar los permisos de acceso de un archivo"
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "No puede cambiar %s"
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "ha fallado la compilación del programa %s"
@@ -421,7 +430,7 @@ msgstr "Es obligatorio indicar %s cuando se utiliza el complemento de búsqueda"
msgid "failed to run graphviz"
msgstr "no he podido ejecutar el programa graphviz "
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "prog no es un programa graphviz válido "
@@ -485,31 +494,31 @@ msgstr "no está permitida la modificación de páginas"
msgid "missing pages parameter"
msgstr "falta el parámetro pages"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Añadir una entrada nueva titulada:"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna"
@@ -527,12 +536,12 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "La página %s está bloqueada y no puede modificarse"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"el modo multimarkdown está activo, pero no está instalado Text::MultiMarkdown"
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -556,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:427
+#: ../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"
@@ -578,6 +587,19 @@ msgstr "aprobación de comentarios"
msgid "more"
msgstr "ver más"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+#, fuzzy
+msgid "comment notification:"
+msgstr "aprobación de comentarios"
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -592,46 +614,55 @@ msgstr "Todas las páginas están referenciadas entre sí."
msgid "bad or missing template"
msgstr "plantilla errónea ó no existente"
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Error creando la cuenta de usuario."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Cuenta de usuario creada con éxito. Ahora puede identificarse."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Error creando la cuenta de usuario."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
"No tengo dirección de correo electrónica, así que no puedo enviar "
"instrucciones para reiniciar la contraseña"
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "No he podido enviar el mensaje de correo electrónico"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"Las instrucciones para reiniciar la contraseña se le han enviado por correo "
"electrónico"
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr "el url para reiniciar la contraseña es incorrecto"
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr "reinicio de contraseña denegado"
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+#, fuzzy
+msgid "incorrect url"
+msgstr "el url para reiniciar la contraseña es incorrecto"
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr "Recibida una señal ping."
@@ -658,88 +689,88 @@ msgstr "No he encontrado el componente LWP, no envío señal alguna"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, fuzzy, perl-format
msgid "%s is not a valid language code"
msgstr "%s no es un archivo"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, fuzzy, perl-format
msgid "POT file (%s) does not exist"
msgstr "No existe la página %s."
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "ha fallado la compilación del programa %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "dimensionamiento fallido: %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "dimensionamiento fallido: %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
#, fuzzy
msgid "failed to translate"
msgstr "no he podido ejecutar el programa dot"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -851,35 +882,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr "confirme el borrado de %s"
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr "(Lista de diferencias truncada)"
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr "No existe la página %s."
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s no está en el directorio fuente por lo que no puede ser borrada"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr "%s no es un archivo"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr "confirme el borrado de %s"
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr "Por favor seleccione los adjuntos que serán borrados."
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr "borrado"
@@ -916,20 +947,20 @@ msgstr "cambiando de nombre %s"
msgid "Also rename SubPages and attachments"
msgstr "También cambia de nombre las subpáginas y los adjuntos"
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr "Únicamente un adjunto puede ser renombrado a la vez."
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr "Por favor, seleccione el adjunto al que cambiar el nombre."
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr "%s cambia de nombre a %s"
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr "actualizado el cambio de nombre de %s a %s"
@@ -1053,6 +1084,11 @@ 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
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1126,7 +1162,7 @@ msgstr "no puedo determinar el identificador de un usuario no fiable como %s"
msgid "scanning %s"
msgstr "explorando %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1135,54 +1171,54 @@ msgstr ""
"encontrado un enlace simbólico en la ruta del directorio fuente (%s) -- use "
"la directiva allow_symlinks_before_srcdir para permitir la acción"
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "ignorando el archivo %s porque su nombre no es correcto"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s tiene mútiples páginas fuente posibles"
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "eliminando la antigua página %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "convirtiendo la página %s, la cual referencia a %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "eliminando la página %s puesto que ya no se deriva de %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "convirtiendo la página %s, la cual depende de %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr ""
"convirtiendo la página %s para actualizar la lista de páginas que hacen "
"referencia a ella."
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, fuzzy, perl-format
msgid "building %s"
msgstr "Informaremos a %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: no puedo convertir la página %s"
@@ -1241,14 +1277,18 @@ msgstr ""
msgid "wrapper filename not specified"
msgstr "el programa envoltorio no ha sido especificado"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "creado con éxito el programa envoltorio %s"
@@ -1270,70 +1310,70 @@ msgstr "uso: --set variable=valor"
msgid "usage: --set-yaml var=value"
msgstr "uso: --set variable=valor"
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "reconstruyendo el wiki.."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr "el nombre de archivo %s es erróneo"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "no he encontrado la plantilla %s"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr "si"
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "no conozco este tipo de ordenación %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "no conozco este tipo de ordenación %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr "no encuentro páginas coincidentes: %s"
diff --git a/po/fr.po b/po/fr.po
index a1fa14f9d..aef6a2a1d 100644
--- 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: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Erreur"
@@ -139,7 +139,7 @@ msgstr "Échec du traitementdu modèle :"
msgid "deleting bucket.."
msgstr "Suppression du compartiment S3 (« bucket »)..."
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "Terminé"
@@ -156,7 +156,7 @@ msgstr "Impossible de créer un compartiment S3 : "
msgid "Failed to save file to S3: "
msgstr "Impossible de sauvegarder le fichier dans le compartiment S3 : "
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr "Échec lors de la suppression du fichier sur S3 : "
@@ -173,16 +173,16 @@ msgstr "Action interdite par allowed_attachments"
msgid "bad attachment filename"
msgstr "Nom de la pièce jointe incorrect"
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr "Envoi de la pièce jointe"
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s est une pièce jointe, pas une page."
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -208,83 +208,87 @@ msgstr "%s sur %s"
msgid "There are no broken links!"
msgstr "Aucun lien cassé !"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, perl-format
msgid "this comment needs %s"
msgstr "Ce commentaire demande %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr "Modération"
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "Format de page non reconnu %s"
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr "Un commentaire doit avoir un contenu."
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr "Anonyme"
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr "Modération du commentaire"
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "Nom de page incorrect"
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr "Faire un commentaire sur %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "La page '%s' n'existe pas, commentaire impossible."
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "Le commentaire pour la page '%s' est terminé."
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../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:522
+#: ../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:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr "Commentaire ajouté"
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr "Commentaire ajouté : %s"
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr "Modération du commentaire"
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr "modération du commentaire"
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -294,11 +298,11 @@ 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:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr "poster un commentaire"
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -319,19 +323,24 @@ msgstr "Aucun texte n'a été copié dans cette page avec l'identifiant %s"
msgid "removing old preview %s"
msgstr "Suppression de l'ancienne prévisualisation %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "%s n'est pas une page éditable"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+#, fuzzy
+msgid "email comments to me"
+msgstr "%i commentaire"
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "Création de %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "Édition de %s"
@@ -375,27 +384,27 @@ msgstr "Ce n'est pas une page."
msgid "%s is an attachment, not a page."
msgstr "%s est une pièce jointe, pas une page."
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr "Vous n'êtes pas autorisé à modifier %s"
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "Vous ne pouvez pas modifier un fichier dont le mode est %s"
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr "Vous n'êtes pas autorisé à modifier le mode des fichiers"
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "Vous n'êtes pas autorisé à modifier %s"
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "Échec de la compilation de %s"
@@ -409,7 +418,7 @@ msgstr "Vous devez indiquer %s lors de l'utilisation du greffon %s."
msgid "failed to run graphviz"
msgstr "Échec du lancement de graphviz"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "Ce programme n'est pas un programme graphviz valable"
@@ -472,31 +481,31 @@ msgstr "Modification de page interdite"
msgid "missing pages parameter"
msgstr "Paramètre « pages » manquant"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "Les paramètres %s et %s ne peuvent être utilisés ensemble."
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Ajouter un nouvel article dont le titre est :"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "Échec du traitementdu modèle :"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client introuvable, pas de réponse au ping"
@@ -514,11 +523,11 @@ msgstr "linkmap"
msgid "%s is locked and cannot be edited"
msgstr "%s est verrouillé et ne peut être modifié"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr "mulitmarkdown est activé mais Text::Multimarkdown n'est pas installé"
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -542,15 +551,15 @@ msgstr "Page de redirection introuvable"
msgid "redir cycle is not allowed"
msgstr "Redirection cyclique non autorisée"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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"
@@ -562,6 +571,19 @@ msgstr "le commentaire doit passer par une instance de modération"
msgid "more"
msgstr "lire la suite"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+#, fuzzy
+msgid "comment notification:"
+msgstr "modération du commentaire"
+
#: ../IkiWiki/Plugin/openid.pm:71
#, perl-format
msgid "failed to load openid module: "
@@ -575,46 +597,55 @@ msgstr "Toutes les pages sont liées à d'autres pages."
msgid "bad or missing template"
msgstr "Modèle de page incorrect ou manquant"
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Erreur lors de la création du compte."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr "Votre page d'utilisateur :"
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr "Création de votre page d'utilisateur"
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Le compte a été créé. Vous pouvez maintenant vous identifier."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Erreur lors de la création du compte."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
"Aucune adresse indiquée. Impossible d'envoyer les instructions pour "
"réinitialiser le mot de passe."
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Impossible d'envoyer un courriel"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"Vous avez reçu un message contenant les instructions pour réinitialiser le "
"mot de passe"
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr "Adresse pour la réinitialisation du mot de passe incorrecte"
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr "réinitialisation du mot de passe refusée"
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+#, fuzzy
+msgid "incorrect url"
+msgstr "Adresse pour la réinitialisation du mot de passe incorrecte"
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr "Ping reçu"
@@ -643,12 +674,12 @@ msgstr ""
"Note : ancienne version de po4a détectée. Il est recommandé d'installer la "
"version 0.35."
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr "%s n'est pas un code de langue valable"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
@@ -656,7 +687,7 @@ msgstr ""
"%s n'est pas une valeur correcte pour po_link_to, retour à la valeur par "
"défaut."
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
@@ -664,11 +695,11 @@ msgstr ""
"po_link_to=negotiated nécessite que usedirs soit activé, retour à "
"po_link_to=default."
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr "Fichiers PO mis à jour."
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
@@ -676,7 +707,7 @@ msgstr ""
"Impossible de supprimer cette traduction. Si la page maître est supprimée, "
"alors ses traductions seront supprimées."
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
@@ -684,56 +715,56 @@ msgstr ""
"Impossible de renommer cette traduction. Si la page maître est renommée, "
"alors ses traductions pourront être renommées."
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "Le fichier POT %s n'existe pas."
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "Impossible de copier le fichier PO underlay dans %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr "Impossible de mettre à jour %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "Impossible de copier le fichier POT dans %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr "N/A"
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr "Impossible de traduire %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr "Fichiers PO obsolètes supprimés."
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr "Impossible de modifier %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr "Impossible de traduire"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"Données gettext incorrectes, retour à la page précédente pour la poursuite "
"des modifications."
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr "La syntaxe de %s n'est pas correcte : il faut utiliser CODE|NOM"
@@ -847,35 +878,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr "Suppression de %s confirmée"
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr "(fichier de différences tronqué)"
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr "%s n'existe pas"
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s n'est pas dans srcdir et ne peut donc pas être supprimé"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr "%s n'est pas un fichier"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr "Suppression de %s confirmée"
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr "Veuillez choisir la pièce jointe à supprimer"
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr "supprimé"
@@ -912,20 +943,20 @@ msgstr "%s renommé"
msgid "Also rename SubPages and attachments"
msgstr "« SubPages » et attachements renommés."
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr "Modification de pièce jointe : une seule à la fois"
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr "Veuillez sélectionner la pièce jointe à renommer"
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr "Renomme %s en %s"
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr "mise à jour, suite au changement de %s en %s"
@@ -1045,6 +1076,11 @@ 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
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1117,7 +1153,7 @@ msgstr ""
msgid "scanning %s"
msgstr "Examen de %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1126,53 +1162,53 @@ msgstr ""
"Lien symbolique trouvé dans l'adresse de srcdir (%s) -- pour l'autoriser, "
"activez le paramètre « allow_symlinks_before_srcdir »."
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "Omission du fichier au nom incorrect %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s peut être associé à plusieurs pages source."
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
"recherche de %s pour les dates de modification et de création des fichiers..."
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, perl-format
msgid "removing obsolete %s"
msgstr "Suppression de %s obsolète"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr "Reconstruction de %s, qui est lié à %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "Suppression de %s, qui n'est plus rendu par %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr "Reconstruction de %s, qui dépend de %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "Reconstruction de %s, afin de mettre à jour ses rétroliens"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr "construction de %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki : impossible de reconstruire %s"
@@ -1234,14 +1270,18 @@ msgstr ""
msgid "wrapper filename not specified"
msgstr "Le nom du fichier CGI n'a pas été indiqué"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "%s a été créé avec succès"
@@ -1262,67 +1302,67 @@ msgstr "Syntaxe : -- set var=valeur"
msgid "usage: --set-yaml var=value"
msgstr "Syntaxe : --set-yaml var=valeur"
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "Reconstruction du wiki..."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr "Nom de fichier incorrect %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "Modèle de page %s introuvable"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr "oui"
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, perl-format
msgid "invalid sort type %s"
msgstr "Type de tri %s inconnu"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "Type de tri %s inconnu"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr "Impossible de trouver les pages : %s"
diff --git a/po/gu.po b/po/gu.po
index 123cadd4a..9d2d53fad 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki-gu\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "ક્ષતિ"
@@ -137,7 +137,7 @@ msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
msgid "deleting bucket.."
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "સંપૂર્ણ"
@@ -156,7 +156,7 @@ msgstr "મેઇલ મોકલવામાં નિષ્ફળ"
msgid "Failed to save file to S3: "
msgstr "મેઇલ મોકલવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
#, fuzzy
msgid "Failed to delete file from S3: "
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
@@ -174,16 +174,16 @@ msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -207,83 +207,87 @@ msgstr ""
msgid "There are no broken links!"
msgstr "અહીં કોઇ તૂટેલ કડી નથી!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -293,11 +297,11 @@ msgstr[1] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, fuzzy, perl-format
@@ -318,19 +322,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr "જુનાં પાનાં દૂર કરે છે %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "%s સુધારે છે"
@@ -378,26 +386,26 @@ msgstr "વાંચી શકાતી નથી %s: %s"
msgid "%s is an attachment, not a page."
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
@@ -411,7 +419,7 @@ msgstr "જ્યારે શોધ પ્લગઇન ઉપયોગ કર
msgid "failed to run graphviz"
msgstr "ગ્રાફવિઝ ચલાવવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "કાર્યક્રમએ યોગ્ય ગ્રાફવિઝ કાર્યક્રમ નથી"
@@ -474,31 +482,31 @@ msgstr "ફીડ મળ્યું નહી"
msgid "missing pages parameter"
msgstr "ખોવાયેલ %s વિકલ્પ"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "આ શિર્ષકથી નવું પોસ્ટ ઉમેરો:"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવામાં આવતું નથી"
@@ -516,11 +524,11 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s એ %s દ્વારા તાળું મરાયેલ છે અને તેમાં સુધારો કરી શકાશે નહી"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr "Markdown.pm પર્લ મોડ્યુલ (%s) અથવા /usr/bin/markdown (%s) લાવવામાં નિષ્ફળ"
@@ -544,15 +552,15 @@ msgstr "ફીડ મળ્યું નહી"
msgid "redir cycle is not allowed"
msgstr "ફીડ મળ્યું નહી"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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 "મિરર"
@@ -564,6 +572,18 @@ msgstr ""
msgid "more"
msgstr "વધુ"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -578,42 +598,50 @@ msgstr "બધા પાનાંઓ બીજા પાનાંઓ વડે
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "ખાતું બનાવવામાં ક્ષતિ."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "ખાતું બનાવવાનું સફળ. તમે હવે લોગઇન કરી શકો છો."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "ખાતું બનાવવામાં ક્ષતિ."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "મેઇલ મોકલવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -641,88 +669,88 @@ msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવા
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, fuzzy, perl-format
msgid "%s is not a valid language code"
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "%s લખવામાં નિષ્ફળ: %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
#, fuzzy
msgid "failed to translate"
msgstr "ડોટ ચલાવવામાં નિષ્ફળ"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -836,35 +864,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, fuzzy, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s એ %s દ્વારા તાળું મરાયેલ છે અને તેમાં સુધારો કરી શકાશે નહી"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, fuzzy, perl-format
msgid "%s is not a file"
msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -902,20 +930,20 @@ msgstr "રેન્ડર કરે છે %s"
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, fuzzy, perl-format
msgid "update for rename of %s to %s"
msgstr "%s નો સુધારો %s નાં %s વડે"
@@ -1041,6 +1069,11 @@ msgstr "ખોવાયેલ કિંમતો"
msgid "failed to generate image from code"
msgstr "માપ બદલવામાં નિષ્ફળ: %s"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1107,59 +1140,59 @@ msgstr ""
msgid "scanning %s"
msgstr "%s શોધે છે"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "જુનાં પાનાં દૂર કરે છે %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "રેન્ડર કરે છે %s, જે %s સાથે જોડાણ ધરાવે છે"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "દૂર કરે છે %s, હવે %s વડે રેન્ડર કરાતું નથી"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "રેન્ડર કરે છે %s, જે %s પર આધારિત છે"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "રેન્ડર કરે છે %s, તેનાં પાછળનાં જોડાણો સુધારવા માટે"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, fuzzy, perl-format
msgid "building %s"
msgstr "%s સુધારે છે"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: %s રેન્ડર કરી શકાતું નથી"
@@ -1216,14 +1249,18 @@ msgstr "ગોઠવણ ફાઇલનો ઉપયોગ કરે છે ત
msgid "wrapper filename not specified"
msgstr "આવરણ ફાઇલનામ સ્પષ્ટ કરેલ નથી"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, perl-format
msgid "failed to compile %s"
msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:287
#, perl-format
msgid "successfully generated %s"
msgstr "સફળતાપૂર્વક પેદા કરેલ છે %s"
@@ -1244,66 +1281,66 @@ msgstr ""
msgid "usage: --set-yaml var=value"
msgstr ""
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "વીકી ફરીથી બનાવે છે.."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../IkiWiki.pm:1483
#, fuzzy, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr "%s પર શોધાયેલ લુપ %s પર ચલાવે છે %i ઉંડાણ પર"
-#: ../IkiWiki.pm:1646
+#: ../IkiWiki.pm:1677
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "ટેમ્પલેટ %s મળ્યું નહી"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "વાંચી શકાતી નથી %s: %s"
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index 970b94724..d1307cde5 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-02-02 22:29-0400\n"
+"POT-Creation-Date: 2012-12-11 12:49-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:1480
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr ""
@@ -154,7 +154,7 @@ msgstr ""
msgid "Failed to save file to S3: "
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr ""
@@ -229,57 +229,61 @@ msgstr ""
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:378 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:381
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:398
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:405
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:519
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:521
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:534
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:538
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:607 ../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:659
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:700
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:861
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -289,11 +293,11 @@ msgstr[1] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:871
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -314,19 +318,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr ""
@@ -370,26 +378,26 @@ msgstr ""
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1700
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, perl-format
msgid "Failed to revert commit %s"
msgstr ""
@@ -403,7 +411,7 @@ msgstr ""
msgid "failed to run graphviz"
msgstr ""
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr ""
@@ -462,31 +470,31 @@ msgstr ""
msgid "missing pages parameter"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, perl-format
msgid "failed to process template %s"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr ""
@@ -529,15 +537,15 @@ msgstr ""
msgid "redir cycle is not allowed"
msgstr ""
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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 ""
@@ -549,6 +557,18 @@ msgstr ""
msgid "more"
msgstr ""
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, perl-format
msgid "failed to load openid module: "
@@ -562,42 +582,50 @@ msgstr ""
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr ""
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -624,87 +652,87 @@ msgstr ""
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -816,35 +844,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:47
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -881,20 +909,20 @@ msgstr ""
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr ""
@@ -1014,6 +1042,11 @@ msgstr ""
msgid "failed to generate image from code"
msgstr ""
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, perl-format
msgid "removing transient version of %s"
@@ -1080,59 +1113,59 @@ msgstr ""
msgid "scanning %s"
msgstr ""
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, perl-format
msgid "removing obsolete %s"
msgstr ""
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr ""
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr ""
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr ""
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr ""
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr ""
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr ""
@@ -1189,14 +1222,18 @@ msgstr ""
msgid "wrapper filename not specified"
msgstr ""
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, perl-format
msgid "failed to compile %s"
msgstr ""
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:287
#, perl-format
msgid "successfully generated %s"
msgstr ""
@@ -1225,58 +1262,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:1462
+#: ../IkiWiki.pm:1483
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
-#: ../IkiWiki.pm:1656
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr ""
-#: ../IkiWiki.pm:1956
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr ""
-#: ../IkiWiki.pm:2206
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2283
+#: ../IkiWiki.pm:2304
#, perl-format
msgid "invalid sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2304
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2440
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr ""
diff --git a/po/it.po b/po/it.po
index 872a39e62..062f1c2a7 100644
--- 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: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Errore"
@@ -137,7 +137,7 @@ msgstr "errore nell'elaborazione:"
msgid "deleting bucket.."
msgstr "eliminazione contenitore..."
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "fatto"
@@ -154,7 +154,7 @@ msgstr "Impossibile creare il contenitore S3: "
msgid "Failed to save file to S3: "
msgstr "Impossibile salvare il file sul S3: "
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr "Impossibile eliminare il file dal S3: "
@@ -171,16 +171,16 @@ msgstr "non permesso da allowed_attachments"
msgid "bad attachment filename"
msgstr "nome file dell'allegato non valido"
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr "carica allegato"
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "%s è un allegato, non una pagina."
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -206,85 +206,89 @@ msgstr "%s da %s"
msgid "There are no broken links!"
msgstr "Non ci sono collegamenti rotti."
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "commento su %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
#, fuzzy
msgid "moderation"
msgstr "Moderazione commenti"
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr "formato pagina %s non supportato"
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr "i commenti devono avere un contenuto"
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr "Anonimo"
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
#, fuzzy
msgid "Comment Moderation"
msgstr "Moderazione commenti"
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr "nome pagina non valido"
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr "commento su %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr "la pagina «%s» non esiste, impossibile commentarla"
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr "i commenti per la pagina «%s» sono chiusi"
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr "commento trattenuto per moderazione"
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../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:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr "Aggiunto commento"
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr "Aggiunto commento: %s"
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr "Moderazione commenti"
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr "moderazione commento"
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, fuzzy, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -294,12 +298,12 @@ msgstr[1] "Commenti"
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
#, fuzzy
msgid "Comment"
msgstr "Commenti"
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -320,19 +324,24 @@ msgstr "nessun testo è stato copiato in questa pagina con l'id %s"
msgid "removing old preview %s"
msgstr "rimozione vecchia anteprima %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "%s non è una pagina modificabile"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+#, fuzzy
+msgid "email comments to me"
+msgstr "Commenti"
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "creazione %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "modifica %s"
@@ -376,27 +385,27 @@ msgstr "non è una pagina"
msgid "%s is an attachment, not a page."
msgstr "%s è un allegato, non una pagina."
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr "non è permesso modificare %s"
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr "non è permesso lavorare su un file in modalità %s"
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr "non è permesso cambiare la modalità del file"
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
#, fuzzy
msgid "you are not allowed to revert a merge"
msgstr "non è permesso modificare %s"
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "errore nel compilare %s"
@@ -410,7 +419,7 @@ msgstr "Occorre specificare %s quando si usa il plugin %s"
msgid "failed to run graphviz"
msgstr "errore nell'eseguire graphviz"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "prog non è un programma graphviz valido"
@@ -472,31 +481,31 @@ msgstr "modifica della pagina non ammessa"
msgid "missing pages parameter"
msgstr "parametro pagine mancante"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr "i parametri %s e %s non possono essere usati insieme"
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Aggiungere un nuovo articolo dal titolo:"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "errore nell'elaborazione:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client non trovato, impossibile inviare ping"
@@ -514,12 +523,12 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s è bloccata e non può essere modificata"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
"multimarkdown è stato abilitato, ma Text::MultiMarkdown non è aggiornato"
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -542,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:427
+#: ../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"
@@ -564,6 +573,19 @@ msgstr "moderazione commento"
msgid "more"
msgstr "altro"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+#, fuzzy
+msgid "comment notification:"
+msgstr "moderazione commento"
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -577,45 +599,54 @@ msgstr "Tutte le pagine hanno collegamenti in entrata da altre pagine."
msgid "bad or missing template"
msgstr "modello errato o mancante"
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Errore nella creazione dell'account."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Account creato con successo. È ora possibile effettuare l'accesso."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Errore nella creazione dell'account."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
"Nessun indirizzo email, impossibile inviare per email le istruzioni per "
"reimpostare la password."
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Impossibile spedire il messaggio"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
"Il messaggio con le istruzioni per reimpostare la password è stato inviato."
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr "url per il reset della password non corretto"
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr "reset della password non permesso"
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+#, fuzzy
+msgid "incorrect url"
+msgstr "url per il reset della password non corretto"
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr "Ping ricevuto."
@@ -644,19 +675,19 @@ msgstr ""
"attenzione: è presente un vecchio po4a. Si raccomanda di aggiornare almeno "
"alla versione 0.35."
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr "%s non è una codifica di lingua valida"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
"%s non è un valore per po_link_to valido, verrà utilizzato po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
@@ -664,11 +695,11 @@ msgstr ""
"po_link_to=negotiated richiede che venga abilitato usedirs, verrà utilizzato "
"po_link_to=default"
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr "file PO aggiornati"
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
@@ -676,7 +707,7 @@ msgstr ""
"Impossibile eliminare una traduzione. Tuttavia, se la pagina principale è "
"stata eliminata anche le traduzioni lo saranno."
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
@@ -684,56 +715,56 @@ msgstr ""
"Impossibile rinominare una traduzione. Tuttavia, se la pagina principale è "
"stata rinominata anche le traduzioni lo saranno."
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr "Il file POT (%s) non esiste"
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "impossibile copiare il file PO di underlay in %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr "impossibile aggiornare %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr "impossibile copiare il file POT in %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr "N/D"
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr "impossibile tradurre %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr "file PO obsoleti rimossi"
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr "impossibile scrivere %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr "impossibile tradurre"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
"dati gettext non validi, tornare alle pagina precedente per continuare le "
"modifiche"
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -847,35 +878,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr "conferma rimozione di %s"
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr "(Diff troncato)"
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr "%s non esiste"
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s non è in src, quindi non può essere eliminato"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr "%s non è un file"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr "conferma rimozione di %s"
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr "Selezionare l'allegato da rimuovere."
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr "rimosso"
@@ -912,20 +943,20 @@ msgstr "rinomina di %s"
msgid "Also rename SubPages and attachments"
msgstr "Rinomina anche SottoPagine e allegati"
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr "Si può rinominare un solo allegato alla volta."
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr "Selezionare l'allegato da rinominare."
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr "rinomina %s in %s"
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr "aggiornamento per rinomina di %s in %s"
@@ -1045,6 +1076,11 @@ msgstr "codice tex mancante"
msgid "failed to generate image from code"
msgstr "impossibile generare l'immagine dal codice"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1116,7 +1152,7 @@ msgstr "impossibile determinare l'id del committer non fidato %s"
msgid "scanning %s"
msgstr "scansione %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1125,52 +1161,52 @@ msgstr ""
"collegamento simbolico trovato nel percorso srcdir (%s) -- impostare "
"allow_symlinks_before_srcdir per abilitare questa configurazione"
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "ignorato il file dal nome scorretto %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr "%s ha diverse pagine sorgenti possibili"
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "rimozione della vecchia pagina %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr "compilazione di %s, che è collegato a %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr "rimozione di %s, non più richiesto da %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr "compilazione di %s, che dipende da %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr "compilazione di %s, per aggiornare i collegamenti ai precedenti"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr "compilazione di %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: impossibile compilare %s"
@@ -1228,14 +1264,18 @@ msgstr "impossibile creare un contenitore che utilizzi un file di setup"
msgid "wrapper filename not specified"
msgstr "nome del file del contenitore non specificato"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "%s generato con successo"
@@ -1257,66 +1297,66 @@ msgstr "utilizzo: --set var=valore"
msgid "usage: --set-yaml var=value"
msgstr "utilizzo: --set var=valore"
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "ricostruzione wiki..."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr "nome file %s scorretto"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "modello %s non trovato"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr "sì"
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "ordinamento %s sconosciuto"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "ordinamento %s sconosciuto"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr "impossibile trovare pagine corrispondenti: %s"
diff --git a/po/pl.po b/po/pl.po
index 902ae8260..3b645d23e 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki 1.51\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Błąd"
@@ -141,7 +141,7 @@ msgstr "awaria w trakcie przetwarzania:"
msgid "deleting bucket.."
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "gotowe"
@@ -160,7 +160,7 @@ msgstr "Awaria w trakcie wysyłania wiadomości"
msgid "Failed to save file to S3: "
msgstr "Awaria w trakcie wysyłania wiadomości"
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
#, fuzzy
msgid "Failed to delete file from S3: "
msgstr "awaria w trakcie zmiany rozmiaru: %s"
@@ -178,16 +178,16 @@ msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
#, fuzzy
msgid "this attachment is not yet saved"
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -211,83 +211,87 @@ msgstr ""
msgid "There are no broken links!"
msgstr "Wszystkie odnośniki są aktualne!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "tworzenie %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "tworzenie %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -297,11 +301,11 @@ msgstr[1] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, fuzzy, perl-format
@@ -322,19 +326,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr "usuwanie starej strony %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "tworzenie %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "edycja %s"
@@ -382,26 +390,26 @@ msgstr "awaria w trakcie odczytu %s: %s"
msgid "%s is an attachment, not a page."
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "awaria w trakcie kompilowania %s"
@@ -416,7 +424,7 @@ msgstr "Wtyczka do wyszukiwarka wymaga podania %s"
msgid "failed to run graphviz"
msgstr "awaria w trakcie uruchamiania wtyczki graphviz"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr "prog nie jest poprawnym programem graphviz"
@@ -481,31 +489,31 @@ msgstr "nieznaleziony kanał RSS"
msgid "missing pages parameter"
msgstr "brakujący parametr %s"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr "Tytuł nowego wpisu"
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "awaria w trakcie przetwarzania:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania"
@@ -526,11 +534,11 @@ msgstr ""
"strona %s jest tymczasowo zablokowana przez użytkownika %s i nie może być "
"teraz edytowana"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -557,15 +565,15 @@ msgstr "nieznaleziony kanał RSS"
msgid "redir cycle is not allowed"
msgstr "nieznaleziony kanał RSS"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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"
@@ -577,6 +585,18 @@ msgstr ""
msgid "more"
msgstr "więcej"
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -591,42 +611,50 @@ msgstr "Dla każdej strony istnieje odnośnik z innej strony"
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Błąd w trakcie zakładania konta."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Konto założone pomyślnie. Teraz można zalogować się."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Błąd w trakcie zakładania konta."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Awaria w trakcie wysyłania wiadomości"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -654,88 +682,88 @@ msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, fuzzy, perl-format
msgid "%s is not a valid language code"
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "awaria w trakcie kompilowania %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "awaria w trakcie zmiany rozmiaru: %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "awaria w trakcie zapisu %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
#, fuzzy
msgid "failed to translate"
msgstr "awaria w trakcie uruchamiania dot"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -849,37 +877,37 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, fuzzy, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr ""
"strona %s jest tymczasowo zablokowana przez użytkownika %s i nie może być "
"teraz edytowana"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, fuzzy, perl-format
msgid "%s is not a file"
msgstr "Strona %s nie może być edytowana"
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -917,20 +945,20 @@ msgstr "renderowanie %s"
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, fuzzy, perl-format
msgid "update for rename of %s to %s"
msgstr "aktualizacja stron wiki %s: %s przez użytkownika %s"
@@ -1062,6 +1090,11 @@ msgstr "brakujące wartości"
msgid "failed to generate image from code"
msgstr "awaria w trakcie zmiany rozmiaru: %s"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1128,59 +1161,59 @@ msgstr ""
msgid "scanning %s"
msgstr "skanowanie %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "pomijanie nieprawidłowej nazwy pliku %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "usuwanie starej strony %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "renderowanie %s z odnośnikiem do %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "usuwanie %s nie tworzonego już przez %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "renderowanie %s zależącego od %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "renderowanie %s w celu aktualizacji powrotnych odnośników"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, fuzzy, perl-format
msgid "building %s"
msgstr "edycja %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: awaria w trakcie tworzenia %s"
@@ -1237,14 +1270,18 @@ msgstr "awaria w trakcie tworzenia osłony używającej pliku konfiguracyjnego"
msgid "wrapper filename not specified"
msgstr "nieokreślona nazwa pliku osłony"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "pomyślnie utworzono %s"
@@ -1265,68 +1302,68 @@ msgstr ""
msgid "usage: --set-yaml var=value"
msgstr ""
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "przebudowywanie wiki..."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "pomijanie nieprawidłowej nazwy pliku %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "nieznaleziony szablon %s"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "nieznany sposób sortowania %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "nieznany sposób sortowania %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "awaria w trakcie odczytu %s: %s"
diff --git a/po/sv.po b/po/sv.po
index 666524d03..cebd63d86 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Fel"
@@ -138,7 +138,7 @@ msgstr "misslyckades med att behandla mall:"
msgid "deleting bucket.."
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "klar"
@@ -157,7 +157,7 @@ msgstr "Misslyckades med att skicka e-post"
msgid "Failed to save file to S3: "
msgstr "Misslyckades med att skicka e-post"
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
#, fuzzy
msgid "Failed to delete file from S3: "
msgstr "misslyckades med att skriva %s: %s"
@@ -175,15 +175,15 @@ msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -207,83 +207,87 @@ msgstr ""
msgid "There are no broken links!"
msgstr "Det finns inga trasiga länkar!"
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "skapar %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "skapar %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -293,11 +297,11 @@ msgstr[1] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -318,19 +322,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr "tar bort gammal sida %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "skapar %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "redigerar %s"
@@ -378,26 +386,26 @@ msgstr "kan inte läsa %s: %s"
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "misslyckades med att kompilera %s"
@@ -412,7 +420,7 @@ msgstr "Måste ange %s när sökinsticket används"
msgid "failed to run graphviz"
msgstr "linkmap misslyckades att köra dot"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr ""
@@ -475,31 +483,31 @@ msgstr "mallen %s hittades inte"
msgid "missing pages parameter"
msgstr "mall saknar id-parameter"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "misslyckades med att behandla mall:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "RPC::XML::Client hittades inte, pingar inte"
@@ -518,11 +526,11 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s är låst av %s och kan inte redigeras"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -549,15 +557,15 @@ msgstr "mallen %s hittades inte"
msgid "redir cycle is not allowed"
msgstr "mallen %s hittades inte"
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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"
@@ -569,6 +577,18 @@ msgstr ""
msgid "more"
msgstr ""
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -583,42 +603,50 @@ msgstr "Alla sidor länkas till av andra sidor."
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Fel vid skapandet av konto."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Kontot har skapats. Du kan nu logga in."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Fel vid skapandet av konto."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Misslyckades med att skicka e-post"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -646,88 +674,88 @@ msgstr "RPC::XML::Client hittades inte, pingar inte"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "misslyckades med att kompilera %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "misslyckades med att skriva %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
#, fuzzy
msgid "failed to translate"
msgstr "linkmap misslyckades att köra dot"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -840,35 +868,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, fuzzy, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s är låst av %s och kan inte redigeras"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -906,20 +934,20 @@ msgstr "ritar upp %s"
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, fuzzy, perl-format
msgid "update for rename of %s to %s"
msgstr "uppdatering av %s, %s av %s"
@@ -1048,6 +1076,11 @@ msgstr ""
msgid "failed to generate image from code"
msgstr "misslyckades med att skriva %s: %s"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1114,59 +1147,59 @@ msgstr ""
msgid "scanning %s"
msgstr "söker av %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "hoppar över felaktigt filnamn %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "tar bort gammal sida %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "ritar upp %s, vilken länkar till %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "tar bort %s, som inte längre ritas upp av %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "ritar upp %s, vilken är beroende av %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "ritar upp %s, för att uppdatera dess bakåtlänkar"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, fuzzy, perl-format
msgid "building %s"
msgstr "redigerar %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: kan inte rita upp %s"
@@ -1223,14 +1256,18 @@ msgstr "kan inte skapa en wrapper som använder en konfigurationsfil"
msgid "wrapper filename not specified"
msgstr "filnamn för wrapper har inte angivits"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "generering av %s lyckades"
@@ -1251,66 +1288,66 @@ msgstr ""
msgid "usage: --set-yaml var=value"
msgstr ""
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "bygger om wiki.."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "hoppar över felaktigt filnamn %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "mallen %s hittades inte"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "okänd sorteringstyp %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "okänd sorteringstyp %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "kan inte läsa %s: %s"
diff --git a/po/tr.po b/po/tr.po
index ecf76c6ec..b29e2c6d8 100644
--- 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: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Hata"
@@ -133,7 +133,7 @@ msgstr ""
msgid "deleting bucket.."
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr ""
@@ -150,7 +150,7 @@ msgstr ""
msgid "Failed to save file to S3: "
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
msgid "Failed to delete file from S3: "
msgstr ""
@@ -167,15 +167,15 @@ msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -199,83 +199,87 @@ msgstr ""
msgid "There are no broken links!"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, perl-format
msgid "this comment needs %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, perl-format
msgid "commenting on %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -285,11 +289,11 @@ msgstr[1] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -310,19 +314,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr ""
@@ -366,26 +374,26 @@ msgstr ""
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, perl-format
msgid "Failed to revert commit %s"
msgstr ""
@@ -399,7 +407,7 @@ msgstr ""
msgid "failed to run graphviz"
msgstr ""
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr ""
@@ -458,31 +466,31 @@ msgstr ""
msgid "missing pages parameter"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, perl-format
msgid "failed to process template %s"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr ""
@@ -500,11 +508,11 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr ""
@@ -526,15 +534,15 @@ msgstr ""
msgid "redir cycle is not allowed"
msgstr ""
-#: ../IkiWiki/Plugin/meta.pm:427
+#: ../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 ""
@@ -546,6 +554,18 @@ msgstr ""
msgid "more"
msgstr ""
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, perl-format
msgid "failed to load openid module: "
@@ -559,42 +579,50 @@ msgstr ""
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr ""
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -621,87 +649,87 @@ msgstr ""
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, perl-format
msgid "failed to update %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, perl-format
msgid "failed to copy the POT file to %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, perl-format
msgid "failed to translate %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, perl-format
msgid "failed to write %s"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
msgid "failed to translate"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -813,35 +841,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -878,20 +906,20 @@ msgstr ""
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, perl-format
msgid "update for rename of %s to %s"
msgstr ""
@@ -1011,6 +1039,11 @@ msgstr ""
msgid "failed to generate image from code"
msgstr ""
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, perl-format
msgid "removing transient version of %s"
@@ -1078,59 +1111,59 @@ msgstr ""
msgid "scanning %s"
msgstr ""
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, perl-format
msgid "removing obsolete %s"
msgstr ""
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, perl-format
msgid "building %s, which links to %s"
msgstr ""
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, perl-format
msgid "removing %s, no longer built by %s"
msgstr ""
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, perl-format
msgid "building %s, which depends on %s"
msgstr ""
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, perl-format
msgid "building %s, to update its backlinks"
msgstr ""
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, perl-format
msgid "building %s"
msgstr ""
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, perl-format
msgid "ikiwiki: cannot build %s"
msgstr ""
@@ -1187,14 +1220,18 @@ msgstr ""
msgid "wrapper filename not specified"
msgstr ""
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, perl-format
msgid "failed to compile %s"
msgstr ""
#. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:240
+#: ../IkiWiki/Wrapper.pm:287
#, perl-format
msgid "successfully generated %s"
msgstr ""
@@ -1215,66 +1252,66 @@ msgstr ""
msgid "usage: --set-yaml var=value"
msgstr ""
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr ""
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../IkiWiki.pm:1483
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
-#: ../IkiWiki.pm:1646
+#: ../IkiWiki.pm:1677
#, perl-format
msgid "bad file name %s"
msgstr ""
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr ""
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, perl-format
msgid "invalid sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr ""
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, perl-format
msgid "cannot match pages: %s"
msgstr ""
diff --git a/po/vi.po b/po/vi.po
index 47c34effa..0d9f5736f 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-30 16:33-0400\n"
+"POT-Creation-Date: 2012-10-16 15:16-0400\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:1470
+#: ../IkiWiki/CGI.pm:464 ../IkiWiki/CGI.pm:465 ../IkiWiki.pm:1501
msgid "Error"
msgstr "Lỗi"
@@ -139,7 +139,7 @@ msgstr "mẫu không xử lý được:"
msgid "deleting bucket.."
msgstr ""
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:227
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:225
msgid "done"
msgstr "xong"
@@ -158,7 +158,7 @@ msgstr "Lỗi gửi thư"
msgid "Failed to save file to S3: "
msgstr "Lỗi gửi thư"
-#: ../IkiWiki/Plugin/amazon_s3.pm:247
+#: ../IkiWiki/Plugin/amazon_s3.pm:248
#, fuzzy
msgid "Failed to delete file from S3: "
msgstr "lỗi ghi %s: %s"
@@ -176,15 +176,15 @@ msgstr ""
msgid "bad attachment filename"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:295
+#: ../IkiWiki/Plugin/attachment.pm:296
msgid "attachment upload"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:346
+#: ../IkiWiki/Plugin/attachment.pm:347
msgid "this attachment is not yet saved"
msgstr ""
-#: ../IkiWiki/Plugin/attachment.pm:363
+#: ../IkiWiki/Plugin/attachment.pm:365
msgid "just uploaded"
msgstr ""
@@ -208,83 +208,87 @@ msgstr ""
msgid "There are no broken links!"
msgstr "Không có liên kết bị ngắt nào."
-#: ../IkiWiki/Plugin/comments.pm:114
+#: ../IkiWiki/Plugin/comments.pm:113
#, fuzzy, perl-format
msgid "this comment needs %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/Plugin/comments.pm:117
+#: ../IkiWiki/Plugin/comments.pm:116
msgid "moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:138 ../IkiWiki/Plugin/format.pm:50
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
#, perl-format
msgid "unsupported page format %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:143
+#: ../IkiWiki/Plugin/comments.pm:142
msgid "comment must have content"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:201
+#: ../IkiWiki/Plugin/comments.pm:200
msgid "Anonymous"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:263
+#: ../IkiWiki/Plugin/comments.pm:262
msgid "Comment Moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:379 ../IkiWiki/Plugin/editpage.pm:95
-#: ../IkiWiki/Plugin/editpage.pm:101
+#: ../IkiWiki/Plugin/comments.pm:358 ../IkiWiki/Plugin/comments.pm:362
+msgid "email replies to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:396 ../IkiWiki/Plugin/editpage.pm:96
+#: ../IkiWiki/Plugin/editpage.pm:102
msgid "bad page name"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:382
+#: ../IkiWiki/Plugin/comments.pm:399
#, fuzzy, perl-format
msgid "commenting on %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/Plugin/comments.pm:399
+#: ../IkiWiki/Plugin/comments.pm:416
#, perl-format
msgid "page '%s' doesn't exist, so you can't comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:406
+#: ../IkiWiki/Plugin/comments.pm:423
#, perl-format
msgid "comments on page '%s' are closed"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:520
+#: ../IkiWiki/Plugin/comments.pm:548
msgid "comment stored for moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:522
+#: ../IkiWiki/Plugin/comments.pm:550
msgid "Your comment will be posted after moderator review"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:535
+#: ../IkiWiki/Plugin/comments.pm:563
msgid "Added a comment"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:539
+#: ../IkiWiki/Plugin/comments.pm:567
#, perl-format
msgid "Added a comment: %s"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:608 ../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:660
+#: ../IkiWiki/Plugin/comments.pm:691
msgid "Comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:701
+#: ../IkiWiki/Plugin/comments.pm:732
msgid "comment moderation"
msgstr ""
-#: ../IkiWiki/Plugin/comments.pm:862
+#: ../IkiWiki/Plugin/comments.pm:893
#, perl-format
msgid "%i comment"
msgid_plural "%i comments"
@@ -293,11 +297,11 @@ msgstr[0] ""
#. translators: Here "Comment" is a verb;
#. translators: the user clicks on it to
#. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:872
+#: ../IkiWiki/Plugin/comments.pm:903
msgid "Comment"
msgstr ""
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/conditional.pm:27 ../IkiWiki/Plugin/cutpaste.pm:46
#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
#: ../IkiWiki/Plugin/testpagespec.pm:26
#, perl-format
@@ -318,19 +322,23 @@ msgstr ""
msgid "removing old preview %s"
msgstr "đang gỡ bỏ trang cũ %s"
-#: ../IkiWiki/Plugin/editpage.pm:117
+#: ../IkiWiki/Plugin/editpage.pm:118
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/Plugin/editpage.pm:307
+#: ../IkiWiki/Plugin/editpage.pm:166
+msgid "email comments to me"
+msgstr ""
+
+#: ../IkiWiki/Plugin/editpage.pm:319
#, perl-format
msgid "creating %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/Plugin/editpage.pm:325 ../IkiWiki/Plugin/editpage.pm:344
-#: ../IkiWiki/Plugin/editpage.pm:355 ../IkiWiki/Plugin/editpage.pm:400
-#: ../IkiWiki/Plugin/editpage.pm:442
+#: ../IkiWiki/Plugin/editpage.pm:337 ../IkiWiki/Plugin/editpage.pm:356
+#: ../IkiWiki/Plugin/editpage.pm:367 ../IkiWiki/Plugin/editpage.pm:412
+#: ../IkiWiki/Plugin/editpage.pm:454
#, perl-format
msgid "editing %s"
msgstr "đang sửa %s"
@@ -378,26 +386,26 @@ msgstr "không thể đọc %s: %s"
msgid "%s is an attachment, not a page."
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:777 ../IkiWiki/Plugin/git.pm:840
-#: ../IkiWiki.pm:1690
+#: ../IkiWiki/Plugin/git.pm:783 ../IkiWiki/Plugin/git.pm:846
+#: ../IkiWiki.pm:1721
#, perl-format
msgid "you are not allowed to change %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:799
+#: ../IkiWiki/Plugin/git.pm:805
#, perl-format
msgid "you cannot act on a file with mode %s"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:803
+#: ../IkiWiki/Plugin/git.pm:809
msgid "you are not allowed to change file modes"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:873
+#: ../IkiWiki/Plugin/git.pm:879
msgid "you are not allowed to revert a merge"
msgstr ""
-#: ../IkiWiki/Plugin/git.pm:892
+#: ../IkiWiki/Plugin/git.pm:896
#, fuzzy, perl-format
msgid "Failed to revert commit %s"
msgstr "lỗi biên dịch %s"
@@ -412,7 +420,7 @@ msgstr "Cần phải xác định %s khi dùng bổ sung tìm kiếm"
msgid "failed to run graphviz"
msgstr "linkmap không chạy dot được"
-#: ../IkiWiki/Plugin/graphviz.pm:143
+#: ../IkiWiki/Plugin/graphviz.pm:144
msgid "prog not a valid graphviz program"
msgstr ""
@@ -477,31 +485,31 @@ msgstr "không tìm thấy mẫu %s"
msgid "missing pages parameter"
msgstr "mẫu thiếu tham số id"
-#: ../IkiWiki/Plugin/inline.pm:192
+#: ../IkiWiki/Plugin/inline.pm:209
#, perl-format
msgid "the %s and %s parameters cannot be used together"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:297
+#: ../IkiWiki/Plugin/inline.pm:315
#, perl-format
msgid "%s (RSS feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:301
+#: ../IkiWiki/Plugin/inline.pm:319
#, perl-format
msgid "%s (Atom feed)"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:330
+#: ../IkiWiki/Plugin/inline.pm:348
msgid "Add a new post titled:"
msgstr ""
-#: ../IkiWiki/Plugin/inline.pm:369 ../IkiWiki/Plugin/template.pm:44
+#: ../IkiWiki/Plugin/inline.pm:387 ../IkiWiki/Plugin/template.pm:44
#, fuzzy, perl-format
msgid "failed to process template %s"
msgstr "mẫu không xử lý được:"
-#: ../IkiWiki/Plugin/inline.pm:695
+#: ../IkiWiki/Plugin/inline.pm:712
msgid "RPC::XML::Client not found, not pinging"
msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
@@ -520,11 +528,11 @@ msgstr ""
msgid "%s is locked and cannot be edited"
msgstr "%s bị %s khoá nên không thể sửa được"
-#: ../IkiWiki/Plugin/mdwn.pm:45
+#: ../IkiWiki/Plugin/mdwn.pm:52
msgid "multimarkdown is enabled, but Text::MultiMarkdown is not installed"
msgstr ""
-#: ../IkiWiki/Plugin/mdwn.pm:70
+#: ../IkiWiki/Plugin/mdwn.pm:96
#, perl-format
msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
msgstr "lỗi nạp mô-đun perl Markdown.pm (%s) hay « /usr/bin/markdown » (%s)"
@@ -549,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:427
+#: ../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"
@@ -569,6 +577,18 @@ msgstr ""
msgid "more"
msgstr ""
+#: ../IkiWiki/Plugin/notifyemail.pm:72
+msgid "Cannot subscribe your email address without logging in."
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:135
+msgid "change notification:"
+msgstr ""
+
+#: ../IkiWiki/Plugin/notifyemail.pm:137
+msgid "comment notification:"
+msgstr ""
+
#: ../IkiWiki/Plugin/openid.pm:71
#, fuzzy, perl-format
msgid "failed to load openid module: "
@@ -583,42 +603,50 @@ msgstr "Mọi trang được liên kết với trang khác."
msgid "bad or missing template"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:231
+#: ../IkiWiki/Plugin/passwordauth.pm:145 ../IkiWiki/Plugin/passwordauth.pm:337
+msgid "Error creating account."
+msgstr "Gặp lỗi khi tạo tài khoản."
+
+#: ../IkiWiki/Plugin/passwordauth.pm:297
msgid "Your user page: "
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:238
+#: ../IkiWiki/Plugin/passwordauth.pm:304
msgid "Create your user page"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:268
+#: ../IkiWiki/Plugin/passwordauth.pm:334
msgid "Account creation successful. Now you can Login."
msgstr "Tài khoản đã được tạo. Lúc bây giờ bạn có thể đăng nhập."
-#: ../IkiWiki/Plugin/passwordauth.pm:271
-msgid "Error creating account."
-msgstr "Gặp lỗi khi tạo tài khoản."
-
-#: ../IkiWiki/Plugin/passwordauth.pm:278
+#: ../IkiWiki/Plugin/passwordauth.pm:344
msgid "No email address, so cannot email password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:312
+#: ../IkiWiki/Plugin/passwordauth.pm:371
msgid "Failed to send mail"
msgstr "Lỗi gửi thư"
-#: ../IkiWiki/Plugin/passwordauth.pm:314
+#: ../IkiWiki/Plugin/passwordauth.pm:373
msgid "You have been mailed password reset instructions."
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:349
+#: ../IkiWiki/Plugin/passwordauth.pm:408
msgid "incorrect password reset url"
msgstr ""
-#: ../IkiWiki/Plugin/passwordauth.pm:352
+#: ../IkiWiki/Plugin/passwordauth.pm:411
msgid "password reset denied"
msgstr ""
+#: ../IkiWiki/Plugin/passwordauth.pm:424
+msgid "incorrect url"
+msgstr ""
+
+#: ../IkiWiki/Plugin/passwordauth.pm:427
+msgid "access denied"
+msgstr ""
+
#: ../IkiWiki/Plugin/pingee.pm:30
msgid "Ping received."
msgstr ""
@@ -646,88 +674,88 @@ msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:180
+#: ../IkiWiki/Plugin/po.pm:179
#, perl-format
msgid "%s is not a valid language code"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:192
+#: ../IkiWiki/Plugin/po.pm:191
#, perl-format
msgid ""
"%s is not a valid value for po_link_to, falling back to po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:197
+#: ../IkiWiki/Plugin/po.pm:196
msgid ""
"po_link_to=negotiated requires usedirs to be enabled, falling back to "
"po_link_to=default"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:468
+#: ../IkiWiki/Plugin/po.pm:467
msgid "updated PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:491
+#: ../IkiWiki/Plugin/po.pm:490
msgid ""
"Can not remove a translation. If the master page is removed, however, its "
"translations will be removed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:511
+#: ../IkiWiki/Plugin/po.pm:510
msgid ""
"Can not rename a translation. If the master page is renamed, however, its "
"translations will be renamed as well."
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:957
+#: ../IkiWiki/Plugin/po.pm:956
#, perl-format
msgid "POT file (%s) does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:971
+#: ../IkiWiki/Plugin/po.pm:970
#, fuzzy, perl-format
msgid "failed to copy underlay PO file to %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/po.pm:980
+#: ../IkiWiki/Plugin/po.pm:979
#, fuzzy, perl-format
msgid "failed to update %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/po.pm:986
+#: ../IkiWiki/Plugin/po.pm:985
#, fuzzy, perl-format
msgid "failed to copy the POT file to %s"
msgstr "lỗi biên dịch %s"
-#: ../IkiWiki/Plugin/po.pm:1022
+#: ../IkiWiki/Plugin/po.pm:1021
msgid "N/A"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1032
#, fuzzy, perl-format
msgid "failed to translate %s"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1112
+#: ../IkiWiki/Plugin/po.pm:1111
msgid "removed obsolete PO files"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1169 ../IkiWiki/Plugin/po.pm:1181
-#: ../IkiWiki/Plugin/po.pm:1220
+#: ../IkiWiki/Plugin/po.pm:1168 ../IkiWiki/Plugin/po.pm:1180
+#: ../IkiWiki/Plugin/po.pm:1219
#, fuzzy, perl-format
msgid "failed to write %s"
msgstr "lỗi ghi %s: %s"
-#: ../IkiWiki/Plugin/po.pm:1179
+#: ../IkiWiki/Plugin/po.pm:1178
#, fuzzy
msgid "failed to translate"
msgstr "linkmap không chạy dot được"
-#: ../IkiWiki/Plugin/po.pm:1232
+#: ../IkiWiki/Plugin/po.pm:1231
msgid "invalid gettext data, go back to previous page to continue edit"
msgstr ""
-#: ../IkiWiki/Plugin/po.pm:1275
+#: ../IkiWiki/Plugin/po.pm:1274
#, perl-format
msgid "%s has invalid syntax: must use CODE|NAME"
msgstr ""
@@ -840,35 +868,35 @@ msgstr ""
msgid "confirm reversion of %s"
msgstr ""
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:49
msgid "(Diff truncated)"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:32 ../IkiWiki/Plugin/rename.pm:37
+#: ../IkiWiki/Plugin/remove.pm:39 ../IkiWiki/Plugin/rename.pm:37
#, perl-format
msgid "%s does not exist"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:39
+#: ../IkiWiki/Plugin/remove.pm:56
#, fuzzy, perl-format
msgid "%s is not in the srcdir, so it cannot be deleted"
msgstr "%s bị %s khoá nên không thể sửa được"
-#: ../IkiWiki/Plugin/remove.pm:42 ../IkiWiki/Plugin/rename.pm:46
+#: ../IkiWiki/Plugin/remove.pm:59 ../IkiWiki/Plugin/rename.pm:46
#, perl-format
msgid "%s is not a file"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:149
+#: ../IkiWiki/Plugin/remove.pm:166
#, perl-format
msgid "confirm removal of %s"
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:186
+#: ../IkiWiki/Plugin/remove.pm:203
msgid "Please select the attachments to remove."
msgstr ""
-#: ../IkiWiki/Plugin/remove.pm:230
+#: ../IkiWiki/Plugin/remove.pm:263
msgid "removed"
msgstr ""
@@ -906,20 +934,20 @@ msgstr "đang vẽ %s"
msgid "Also rename SubPages and attachments"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:258
+#: ../IkiWiki/Plugin/rename.pm:266
msgid "Only one attachment can be renamed at a time."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:261
+#: ../IkiWiki/Plugin/rename.pm:269
msgid "Please select the attachment to rename."
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:371
+#: ../IkiWiki/Plugin/rename.pm:379
#, perl-format
msgid "rename %s to %s"
msgstr ""
-#: ../IkiWiki/Plugin/rename.pm:597
+#: ../IkiWiki/Plugin/rename.pm:605
#, fuzzy, perl-format
msgid "update for rename of %s to %s"
msgstr "cập nhật %2$s của %1$s bởi %3$s"
@@ -1048,6 +1076,11 @@ msgstr ""
msgid "failed to generate image from code"
msgstr "lỗi ghi %s: %s"
+#: ../IkiWiki/Plugin/trail.pm:363
+#, perl-format
+msgid "building %s, its previous or next page has changed"
+msgstr ""
+
#: ../IkiWiki/Plugin/transient.pm:45
#, fuzzy, perl-format
msgid "removing transient version of %s"
@@ -1114,59 +1147,59 @@ msgstr ""
msgid "scanning %s"
msgstr "đang quét %s"
-#: ../IkiWiki/Render.pm:280
+#: ../IkiWiki/Render.pm:281
#, perl-format
msgid ""
"symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
"allow this"
msgstr ""
-#: ../IkiWiki/Render.pm:316
+#: ../IkiWiki/Render.pm:317
#, perl-format
msgid "skipping bad filename %s"
msgstr "đang bỏ qua tên tập tin sai %s"
-#: ../IkiWiki/Render.pm:332
+#: ../IkiWiki/Render.pm:333
#, perl-format
msgid "%s has multiple possible source pages"
msgstr ""
-#: ../IkiWiki/Render.pm:372
+#: ../IkiWiki/Render.pm:373
#, perl-format
msgid "querying %s for file creation and modification times.."
msgstr ""
-#: ../IkiWiki/Render.pm:446
+#: ../IkiWiki/Render.pm:447
#, fuzzy, perl-format
msgid "removing obsolete %s"
msgstr "đang gỡ bỏ trang cũ %s"
-#: ../IkiWiki/Render.pm:530
+#: ../IkiWiki/Render.pm:531
#, fuzzy, perl-format
msgid "building %s, which links to %s"
msgstr "đang vẽ %s mà liên kết tới %s"
-#: ../IkiWiki/Render.pm:539
+#: ../IkiWiki/Render.pm:540
#, fuzzy, perl-format
msgid "removing %s, no longer built by %s"
msgstr "đang gỡ bỏ %s, không còn được vẽ lại bởi %s"
-#: ../IkiWiki/Render.pm:622 ../IkiWiki/Render.pm:704
+#: ../IkiWiki/Render.pm:623 ../IkiWiki/Render.pm:705
#, fuzzy, perl-format
msgid "building %s, which depends on %s"
msgstr "đang vẽ %s mà phụ thuộc vào %s"
-#: ../IkiWiki/Render.pm:717
+#: ../IkiWiki/Render.pm:718
#, fuzzy, perl-format
msgid "building %s, to update its backlinks"
msgstr "đang vẽ %s để cập nhật các liên kết ngược của nó"
-#: ../IkiWiki/Render.pm:797
+#: ../IkiWiki/Render.pm:798
#, fuzzy, perl-format
msgid "building %s"
msgstr "đang sửa %s"
-#: ../IkiWiki/Render.pm:849
+#: ../IkiWiki/Render.pm:863
#, fuzzy, perl-format
msgid "ikiwiki: cannot build %s"
msgstr "ikiwiki: không thể vẽ %s"
@@ -1223,14 +1256,18 @@ msgstr "không thể tạo bộ bao bọc sử dụng tập tin thiết lập"
msgid "wrapper filename not specified"
msgstr "chưa xác định tên tập tin bộ bao bọc"
+#: ../IkiWiki/Wrapper.pm:108
+msgid "Please wait"
+msgstr ""
+
#. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:220
+#: ../IkiWiki/Wrapper.pm:267
#, 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:287
#, perl-format
msgid "successfully generated %s"
msgstr "%s đã được tạo ra"
@@ -1251,67 +1288,67 @@ msgstr ""
msgid "usage: --set-yaml var=value"
msgstr ""
-#: ../ikiwiki.in:216
+#: ../ikiwiki.in:214
msgid "rebuilding wiki.."
msgstr "đang xây dựng lại wiki.."
-#: ../ikiwiki.in:219
+#: ../ikiwiki.in:217
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:1452
+#: ../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:1646
+#: ../IkiWiki.pm:1677
#, fuzzy, perl-format
msgid "bad file name %s"
msgstr "đang bỏ qua tên tập tin sai %s"
-#: ../IkiWiki.pm:1946
+#: ../IkiWiki.pm:1977
#, perl-format
msgid "template %s not found"
msgstr "không tìm thấy mẫu %s"
-#: ../IkiWiki.pm:2196
+#: ../IkiWiki.pm:2227
msgid "yes"
msgstr ""
-#: ../IkiWiki.pm:2273
+#: ../IkiWiki.pm:2304
#, fuzzy, perl-format
msgid "invalid sort type %s"
msgstr "kiểu sắp xếp không rõ %s"
-#: ../IkiWiki.pm:2294
+#: ../IkiWiki.pm:2325
#, perl-format
msgid "unknown sort type %s"
msgstr "kiểu sắp xếp không rõ %s"
-#: ../IkiWiki.pm:2430
+#: ../IkiWiki.pm:2461
#, fuzzy, perl-format
msgid "cannot match pages: %s"
msgstr "không thể đọc %s: %s"
diff --git a/t/prune.t b/t/prune.t
new file mode 100755
index 000000000..8c3925e9e
--- /dev/null
+++ b/t/prune.t
@@ -0,0 +1,23 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More tests => 6;
+use File::Path qw(make_path remove_tree);
+
+BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+
+%config=IkiWiki::defaultconfig();
+
+remove_tree("t/tmp");
+
+make_path("t/tmp/srcdir/a/b/c");
+make_path("t/tmp/srcdir/d/e/f");
+writefile("a/b/c/d.mdwn", "t/tmp/srcdir", "foo");
+writefile("d/e/f/g.mdwn", "t/tmp/srcdir", "foo");
+IkiWiki::prune("t/tmp/srcdir/d/e/f/g.mdwn");
+ok(-d "t/tmp/srcdir");
+ok(! -e "t/tmp/srcdir/d");
+IkiWiki::prune("t/tmp/srcdir/a/b/c/d.mdwn", "t/tmp/srcdir");
+ok(-d "t/tmp/srcdir");
+ok(! -e "t/tmp/srcdir/a");
diff --git a/t/syntax.t b/t/syntax.t
index a3760a2b2..b7c6efd58 100755
--- a/t/syntax.t
+++ b/t/syntax.t
@@ -5,8 +5,9 @@ use Test::More;
my @progs="ikiwiki.in";
my @libs="IkiWiki.pm";
-# monotone, external, amazon_s3 skipped since they need perl modules
-push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm | grep -v monotone.pm | grep -v external.pm | grep -v amazon_s3.pm | grep -v po.pm`;
+# monotone, external, amazon_s3, po, and cvs
+# skipped since they need perl modules
+push @libs, map { chomp; $_ } `find IkiWiki -type f -name \\*.pm | grep -v monotone.pm | grep -v external.pm | grep -v amazon_s3.pm | grep -v po.pm | grep -v cvs.pm`;
push @libs, 'IkiWiki/Plugin/skeleton.pm.example';
plan(tests => (@progs + @libs));
diff --git a/t/trail.t b/t/trail.t
new file mode 100755
index 000000000..dce3b3c7e
--- /dev/null
+++ b/t/trail.t
@@ -0,0 +1,292 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More 'no_plan';
+use IkiWiki;
+
+sub check_trail {
+ my $file=shift;
+ my $expected=shift;
+ my $trailname=shift || qr/\w+/;
+ my $blob=readfile("t/tmp/out/$file");
+ my ($trailline)=$blob=~/^trail=$trailname\s+(.*)$/m;
+ is($trailline, $expected, "expected $expected in $file");
+}
+
+sub check_no_trail {
+ my $file=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 trail $trailname in $file");
+}
+
+my $blob;
+
+ok(! system("rm -rf t/tmp"));
+ok(! system("mkdir t/tmp"));
+
+# Write files with a date in the past, so that when we refresh,
+# the update is detected.
+sub write_old_file {
+ my $name = shift;
+ my $content = shift;
+
+ writefile($name, "t/tmp/in", $content);
+ ok(utime(333333333, 333333333, "t/tmp/in/$name"));
+}
+
+# Use a rather stylized template to override the default rendering, to make
+# it easy to search for the desired results
+write_old_file("templates/trails.tmpl", <<EOF
+<TMPL_LOOP TRAILLOOP>
+<TMPL_IF __FIRST__><nav></TMPL_IF>
+<div>
+trail=<TMPL_VAR TRAILPAGE> n=<TMPL_VAR NEXTPAGE> p=<TMPL_VAR PREVPAGE>
+</div>
+<div>
+<TMPL_IF PREVURL>
+<a href="<TMPL_VAR PREVURL>">&lt; <TMPL_VAR PREVTITLE></a>
+</TMPL_IF> |
+<a href="<TMPL_VAR TRAILURL>">^ <TMPL_VAR TRAILTITLE> ^</a>
+| <TMPL_IF NEXTURL>
+<a href="<TMPL_VAR NEXTURL>"><TMPL_VAR NEXTTITLE> &gt;</a>
+</TMPL_IF>
+</div>
+<TMPL_IF __LAST__></nav></TMPL_IF>
+</TMPL_LOOP>
+EOF
+);
+write_old_file("badger.mdwn", "[[!meta title=\"The Breezy Badger\"]]\ncontent of badger");
+write_old_file("mushroom.mdwn", "content of mushroom");
+write_old_file("snake.mdwn", "content of snake");
+write_old_file("ratty.mdwn", "content of ratty");
+write_old_file("mr_toad.mdwn", "content of mr toad");
+write_old_file("add.mdwn", '[[!trailitems pagenames="add/a add/b add/c add/d add/e"]]');
+write_old_file("add/b.mdwn", "b");
+write_old_file("add/d.mdwn", "d");
+write_old_file("del.mdwn", '[[!trailitems pages="del/*" sort=title]]');
+write_old_file("del/a.mdwn", "a");
+write_old_file("del/b.mdwn", "b");
+write_old_file("del/c.mdwn", "c");
+write_old_file("del/d.mdwn", "d");
+write_old_file("del/e.mdwn", "e");
+write_old_file("self_referential.mdwn", '[[!trailitems pagenames="self_referential" circular=yes]]');
+write_old_file("sorting/linked.mdwn", "linked");
+write_old_file("sorting/a/b.mdwn", "a/b");
+write_old_file("sorting/a/c.mdwn", "a/c");
+write_old_file("sorting/z/a.mdwn", "z/a");
+write_old_file("sorting/beginning.mdwn", "beginning");
+write_old_file("sorting/middle.mdwn", "middle");
+write_old_file("sorting/end.mdwn", "end");
+write_old_file("sorting/new.mdwn", "new");
+write_old_file("sorting/old.mdwn", "old");
+write_old_file("sorting/ancient.mdwn", "ancient");
+# These three need to be in the appropriate age order
+ok(utime(333333333, 333333333, "t/tmp/in/sorting/new.mdwn"));
+ok(utime(222222222, 222222222, "t/tmp/in/sorting/old.mdwn"));
+ok(utime(111111111, 111111111, "t/tmp/in/sorting/ancient.mdwn"));
+write_old_file("sorting/linked2.mdwn", "linked2");
+# This initially uses the default sort order: age for the inline, and path
+# for trailitems. We change it later.
+write_old_file("sorting.mdwn",
+ '[[!traillink linked]] ' .
+ '[[!trailitems pages="sorting/z/a or sorting/a/b or sorting/a/c"]] ' .
+ '[[!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]]
+* [[!traillink badger]]
+* [[!traillink badger text="This is a link to badger, with a title"]]
+* [[!traillink That_is_the_badger|badger]]
+* [[!traillink badger]]
+* [[!traillink mushroom]]
+* [[!traillink mushroom]]
+* [[!traillink snake]]
+* [[!traillink snake]]
+EOF
+);
+
+write_old_file("wind_in_the_willows.mdwn", <<EOF
+[[!trailoptions circular=yes sort=title]]
+[[!trailitems pages="ratty or badger or mr_toad"]]
+[[!trailitem moley]]
+EOF
+);
+
+ok(! system("make -s ikiwiki.out"));
+
+my $command = "perl -I. ./ikiwiki.out -set usedirs=0 -plugin trail -plugin inline -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates t/tmp/in t/tmp/out -verbose";
+
+ok(! system($command));
+
+ok(! system("$command -refresh"));
+
+$blob = readfile("t/tmp/out/meme.html");
+ok($blob =~ /<a href="(\.\/)?badger.html">badger<\/a>/m);
+ok($blob =~ /<a href="(\.\/)?badger.html">This is a link to badger, with a title<\/a>/m);
+ok($blob =~ /<a href="(\.\/)?badger.html">That is the badger<\/a>/m);
+
+check_trail("badger.html", "n=mushroom p=", "meme");
+check_trail("badger.html", "n=mr_toad p=ratty", "wind_in_the_willows");
+
+ok(! -f "t/tmp/out/moley.html");
+
+check_trail("mr_toad.html", "n=ratty p=badger", "wind_in_the_willows");
+check_no_trail("mr_toad.html", "meme");
+# meta title is respected for pages that have one
+$blob = readfile("t/tmp/out/mr_toad.html");
+ok($blob =~ /">&lt; The Breezy Badger<\/a>/m);
+# pagetitle for pages that don't
+ok($blob =~ /">ratty &gt;<\/a>/m);
+
+check_no_trail("ratty.html", "meme");
+check_trail("ratty.html", "n=badger p=mr_toad", "wind_in_the_willows");
+
+check_trail("mushroom.html", "n=snake p=badger", "meme");
+check_no_trail("mushroom.html", "wind_in_the_willows");
+
+check_trail("snake.html", "n= p=mushroom", "meme");
+check_no_trail("snake.html", "wind_in_the_willows");
+
+check_trail("self_referential.html", "n= p=", "self_referential");
+
+check_trail("add/b.html", "n=add/d p=", "add");
+check_trail("add/d.html", "n= p=add/b", "add");
+ok(! -f "t/tmp/out/add/a.html");
+ok(! -f "t/tmp/out/add/c.html");
+ok(! -f "t/tmp/out/add/e.html");
+
+check_trail("del/a.html", "n=del/b p=");
+check_trail("del/b.html", "n=del/c p=del/a");
+check_trail("del/c.html", "n=del/d p=del/b");
+check_trail("del/d.html", "n=del/e p=del/c");
+check_trail("del/e.html", "n= p=del/d");
+
+check_trail("sorting/linked.html", "n=sorting/a/b p=");
+check_trail("sorting/a/b.html", "n=sorting/a/c p=sorting/linked");
+check_trail("sorting/a/c.html", "n=sorting/z/a p=sorting/a/b");
+check_trail("sorting/z/a.html", "n=sorting/beginning p=sorting/a/c");
+check_trail("sorting/beginning.html", "n=sorting/middle p=sorting/z/a");
+check_trail("sorting/middle.html", "n=sorting/end p=sorting/beginning");
+check_trail("sorting/end.html", "n=sorting/new p=sorting/middle");
+check_trail("sorting/new.html", "n=sorting/old p=sorting/end");
+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.
+
+writefile("add/a.mdwn", "t/tmp/in", "a");
+writefile("add/c.mdwn", "t/tmp/in", "c");
+writefile("add/e.mdwn", "t/tmp/in", "e");
+ok(unlink("t/tmp/in/del/a.mdwn"));
+ok(unlink("t/tmp/in/del/c.mdwn"));
+ok(unlink("t/tmp/in/del/e.mdwn"));
+
+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=");
+check_trail("add/b.html", "n=add/c p=add/a");
+check_trail("add/c.html", "n=add/d p=add/b");
+check_trail("add/d.html", "n=add/e p=add/c");
+check_trail("add/e.html", "n= p=add/d");
+
+check_trail("del/b.html", "n=del/d p=");
+check_trail("del/d.html", "n= p=del/b");
+ok(! -f "t/tmp/out/del/a.html");
+ok(! -f "t/tmp/out/del/c.html");
+ok(! -f "t/tmp/out/del/e.html");
+
+check_trail("sorting/old.html", "n=sorting/new p=");
+check_trail("sorting/new.html", "n=sorting/middle p=sorting/old");
+check_trail("sorting/middle.html", "n=sorting/linked2 p=sorting/new");
+check_trail("sorting/linked2.html", "n=sorting/linked p=sorting/middle");
+check_trail("sorting/linked.html", "n=sorting/end p=sorting/linked2");
+check_trail("sorting/end.html", "n=sorting/a/c p=sorting/linked");
+check_trail("sorting/a/c.html", "n=sorting/beginning p=sorting/end");
+check_trail("sorting/beginning.html", "n=sorting/a/b p=sorting/a/c");
+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"));
diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl
index 93bdd9ce0..3e0bd9bc2 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>
diff --git a/templates/atompage.tmpl b/templates/atompage.tmpl
index e82b59827..3cdd71d1a 100644
--- a/templates/atompage.tmpl
+++ b/templates/atompage.tmpl
@@ -33,7 +33,7 @@
<id><TMPL_VAR PAGEURL></id>
</TMPL_IF>
<subtitle type="html"><TMPL_VAR FEEDDESC ESCAPE=HTML></subtitle>
-<generator uri="http://ikiwiki.info/" version="<TMPL_VAR VERSION>">ikiwiki</generator>
+<generator uri="http://ikiwiki.info/">ikiwiki</generator>
<updated><TMPL_VAR FEEDDATE></updated>
<TMPL_VAR CONTENT>
</feed>
diff --git a/templates/change.tmpl b/templates/change.tmpl
index d7ec90875..cb022220e 100644
--- a/templates/change.tmpl
+++ b/templates/change.tmpl
@@ -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>
@@ -39,7 +44,11 @@
</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/templates/editcomment.tmpl b/templates/editcomment.tmpl
index a2edc691e..e177db959 100644
--- a/templates/editcomment.tmpl
+++ b/templates/editcomment.tmpl
@@ -13,6 +13,9 @@
<label for="url" class="block">Website:</label>
<TMPL_VAR NAME=FIELD-URL> (optional)
<br />
+<label for="url" class="block">Email:</label>
+<TMPL_VAR NAME=FIELD-EMAIL> <TMPL_VAR FIELD-ANONSUBSCRIBE>
+<br />
<TMPL_ELSE>
(You might want to <a href="<TMPL_VAR SIGNINURL>">Signin</a> first?)
<br />
@@ -22,7 +25,8 @@
<TMPL_VAR FIELD-SUBJECT><br />
<label for="editcontent" class="block">Comment:</label>
<TMPL_VAR FIELD-EDITCONTENT><br />
-<TMPL_VAR FORM-SUBMIT> <TMPL_VAR FIELD-TYPE> <TMPL_VAR HELPONFORMATTINGLINK><br />
+<TMPL_VAR FORM-SUBMIT> <TMPL_VAR FIELD-TYPE> <TMPL_VAR HELPONFORMATTINGLINK>
+<TMPL_VAR FIELD-SUBSCRIBE><br />
<TMPL_VAR NAME="FORM-END">
<TMPL_VAR WMD_PREVIEW>
diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl
index 696c8dcad..4736c95d0 100644
--- a/templates/editpage.tmpl
+++ b/templates/editpage.tmpl
@@ -18,13 +18,16 @@
<TMPL_VAR FIELD-EDITCONTENT><br />
</div>
<TMPL_IF NAME="CAN_COMMIT">
-<label for="editmessage" class="block">Optional comment about this change:</label>
+<label for="editmessage" class="block">Optional description of this change:</label>
<TMPL_VAR FIELD-EDITMESSAGE><br />
</TMPL_IF>
<TMPL_VAR FORM-SUBMIT>
<TMPL_VAR HELPONFORMATTINGLINK>
<TMPL_IF NAME="FIELD-ATTACHMENT">
<a class="toggle" href="#attachments">Attachments</a>
+</TMPL_IF>
+<TMPL_VAR FIELD-SUBSCRIBE>
+<TMPL_IF NAME="FIELD-ATTACHMENT">
<div class="<TMPL_VAR ATTACHMENTS-CLASS>" id="attachments">
<div id="fileupload">
<script>
diff --git a/templates/notifyemail.tmpl b/templates/notifyemail.tmpl
new file mode 100644
index 000000000..508766875
--- /dev/null
+++ b/templates/notifyemail.tmpl
@@ -0,0 +1,9 @@
+A <TMPL_IF NAME=ISCOMMENT>comment has been posted at<TMPL_ELSE>change has been made to</TMPL_IF> <TMPL_VAR URL>
+<TMPL_IF NAME=SHOWCONTENT>
+----
+
+<TMPL_VAR CONTENT>
+
+----
+</TMPL_IF>
+To stop these notifications, visit <TMPL_VAR PREFSURL>
diff --git a/templates/page.tmpl b/templates/page.tmpl
index 8659018a0..89b4f3a06 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -27,6 +27,15 @@
<TMPL_IF FEEDLINKS><TMPL_VAR FEEDLINKS></TMPL_IF>
<TMPL_IF RELVCS><TMPL_VAR RELVCS></TMPL_IF>
<TMPL_IF META><TMPL_VAR META></TMPL_IF>
+<TMPL_LOOP TRAILLOOP>
+<TMPL_IF PREVPAGE>
+<link rel="prev" href="<TMPL_VAR PREVURL>" title="<TMPL_VAR PREVTITLE>" />
+</TMPL_IF>
+<link rel="up" href="<TMPL_VAR TRAILURL>" title="<TMPL_VAR TRAILTITLE>" />
+<TMPL_IF NEXTPAGE>
+<link rel="next" href="<TMPL_VAR NEXTURL>" title="<TMPL_VAR NEXTTITLE>" />
+</TMPL_IF>
+</TMPL_LOOP>
</head>
<body>
@@ -103,6 +112,8 @@
<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
</TMPL_IF>
+<TMPL_VAR TRAILS>
+
<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
<TMPL_IF SIDEBAR>
@@ -138,6 +149,8 @@
<TMPL_UNLESS DYNAMIC>
<TMPL_IF HTML5><nav id="pageinfo"><TMPL_ELSE><div id="pageinfo"></TMPL_IF>
+<TMPL_VAR TRAILS>
+
<TMPL_IF TAGS>
<TMPL_IF HTML5><nav class="tags"><TMPL_ELSE><div class="tags"></TMPL_IF>
Tags:
diff --git a/templates/trails.tmpl b/templates/trails.tmpl
new file mode 100644
index 000000000..54c046043
--- /dev/null
+++ b/templates/trails.tmpl
@@ -0,0 +1,23 @@
+<TMPL_LOOP TRAILLOOP>
+<TMPL_IF __FIRST__><TMPL_IF HTML5><nav class="trails"><TMPL_ELSE><div class="trails"></TMPL_IF></TMPL_IF>
+<div class="trail">
+<TMPL_IF PREVPAGE>
+<span class="trailprev">
+<span class="trailarrow">←</span>
+<a href="<TMPL_VAR PREVURL>"><TMPL_VAR PREVTITLE></a>
+<span class="trailsep">|</span>
+</span>
+</TMPL_IF>
+<span class="trailup">
+<a href="<TMPL_VAR TRAILURL>"><TMPL_VAR TRAILTITLE></a>
+</span>
+<TMPL_IF NEXTPAGE>
+<span class="trailnext">
+<span class="trailsep">|</span>
+<a href="<TMPL_VAR NEXTURL>"><TMPL_VAR NEXTTITLE></a>
+<span class="trailarrow">→</span>
+</span>
+</TMPL_IF>
+</div>
+<TMPL_IF __LAST__><TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF></TMPL_IF>
+</TMPL_LOOP>
diff --git a/themes/actiontabs/style.css b/themes/actiontabs/style.css
index 749d9b21e..f6cb5c04e 100644
--- a/themes/actiontabs/style.css
+++ b/themes/actiontabs/style.css
@@ -142,3 +142,8 @@ div.recentchanges {
padding: 0 0 0 2ex;
border-color: #999;
}
+
+.pageheader .trails {
+ /* allow space for the action tabs */
+ margin-bottom: 2em;
+}
diff --git a/themes/blueview/style.css b/themes/blueview/style.css
index c07d1cdfa..40a940f26 100644
--- a/themes/blueview/style.css
+++ b/themes/blueview/style.css
@@ -197,14 +197,15 @@ body {
font-weight: bold;
}
-.pageheader .header .title, .pageheader .header .parentlinks, .pageheader .actions ul li, .pageheader .header span, .pageheader #otherlanguages ul li {
+.pageheader .header .title, .pageheader .header .parentlinks, .pageheader .actions ul li, .pageheader .header span, .pageheader #otherlanguages ul li, .pageheader .trailprev, .pageheader .trailnext, .pageheader .trailup {
padding: 0.25em 0.25em 0.25em 0.25em;
background-image: url('background_darkness.png');
background-repeat: repeat;
color: white;
}
-.pageheader .header span a, .pageheader .actions ul li a, .pageheader .header .parentlinks a, .pageheader #otherlanguages ul li a {
+.pageheader .header span a, .pageheader .actions ul li a, .pageheader .header .parentlinks a, .pageheader #otherlanguages ul li a, .pageheader a, .pageheader .trail a {
+ font-weight: bold;
color: white;
text-decoration: none;
}
diff --git a/themes/monochrome/gradient.png b/themes/monochrome/gradient.png
new file mode 100644
index 000000000..7363185d5
--- /dev/null
+++ b/themes/monochrome/gradient.png
Binary files differ
diff --git a/themes/monochrome/style.css b/themes/monochrome/style.css
new file mode 100644
index 000000000..41a3a4441
--- /dev/null
+++ b/themes/monochrome/style.css
@@ -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; }
diff --git a/underlays/attachment/ikiwiki/images/ui-bg_flat_0_aaaaaa_40x100.png b/underlays/attachment/ikiwiki/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 000000000..5b5dab2ab
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-bg_glass_55_fbf9ee_1x400.png b/underlays/attachment/ikiwiki/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 000000000..ad3d6346e
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-bg_glass_65_ffffff_1x400.png b/underlays/attachment/ikiwiki/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 000000000..42ccba269
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-bg_glass_75_dadada_1x400.png b/underlays/attachment/ikiwiki/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 000000000..5a46b47cb
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-bg_glass_95_fef1ec_1x400.png b/underlays/attachment/ikiwiki/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 000000000..4443fdc1a
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-icons_2e83ff_256x240.png b/underlays/attachment/ikiwiki/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 000000000..45e8928e5
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-icons_454545_256x240.png b/underlays/attachment/ikiwiki/images/ui-icons_454545_256x240.png
new file mode 100644
index 000000000..7ec70d11b
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/underlays/attachment/ikiwiki/images/ui-icons_cd0a0a_256x240.png b/underlays/attachment/ikiwiki/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 000000000..7930a5580
--- /dev/null
+++ b/underlays/attachment/ikiwiki/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/underlays/openid-selector/ikiwiki/openid/openid-jquery.js b/underlays/openid-selector/ikiwiki/openid/openid-jquery.js
index c59be1edc..056110384 100644
--- a/underlays/openid-selector/ikiwiki/openid/openid-jquery.js
+++ b/underlays/openid-selector/ikiwiki/openid/openid-jquery.js
@@ -38,7 +38,7 @@ var providers_small = {
},
wordpress: {
name: 'Wordpress',
- icon: 'https://ddgw.s3.amazonaws.com/wordpress.org.ico',
+ icon: 'https://s2.wp.com/i/favicon.ico',
label: 'Enter your Wordpress.com username:',
url: 'http://{username}.wordpress.com/'
},
diff --git a/underlays/osm/ikiwiki/images/osm.png b/underlays/osm/ikiwiki/images/osm.png
new file mode 100644
index 000000000..487bf003c
--- /dev/null
+++ b/underlays/osm/ikiwiki/images/osm.png
Binary files differ
diff --git a/underlays/osm/ikiwiki/osm.js b/underlays/osm/ikiwiki/osm.js
new file mode 100644
index 000000000..37e588f7b
--- /dev/null
+++ b/underlays/osm/ikiwiki/osm.js
@@ -0,0 +1,166 @@
+// taken from http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript
+var urlParams = {};
+(function () {
+ var e,
+ a = /\\+/g, // Regex for replacing addition symbol with a space
+ r = /([^&=]+)=?([^&]*)/g,
+ d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
+ q = window.location.search.substring(1);
+
+ while (e = r.exec(q))
+ urlParams[d(e[1])] = d(e[2]);
+})();
+
+function mapsetup(divname, options) {
+ div = document.getElementById(divname);
+ if (options.fullscreen) {
+ permalink = 'permalink';
+ div.style.top = 0;
+ div.style.left = 0;
+ div.style.position = 'absolute';
+ div.style.width = '100%';
+ div.style.height = '100%';
+ }
+ else {
+ div.style.height = options.height;
+ div.style.width = options.width;
+ div.style.float = options.float;
+ permalink = {base: options.href, title: "View larger map"};
+ }
+ map = new OpenLayers.Map(divname, {
+ controls: [
+ new OpenLayers.Control.Navigation(),
+ new OpenLayers.Control.ScaleLine(),
+ new OpenLayers.Control.Permalink(permalink)
+ ],
+ displayProjection: new OpenLayers.Projection("EPSG:4326"),
+ 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));
+ }
+ }
+
+ if (options.format == 'CSV') {
+ pois = new OpenLayers.Layer.Text( "CSV",
+ { location: options.csvurl,
+ projection: new OpenLayers.Projection("EPSG:4326")
+ });
+ } else if (options.format == 'GeoJSON') {
+ pois = new OpenLayers.Layer.Vector("GeoJSON", {
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: options.jsonurl,
+ format: new OpenLayers.Format.GeoJSON()
+ }),
+ strategies: [new OpenLayers.Strategy.Fixed()],
+ projection: new OpenLayers.Projection("EPSG:4326")
+ });
+ } else {
+ pois = new OpenLayers.Layer.Vector("KML", {
+ protocol: new OpenLayers.Protocol.HTTP({
+ url: options.kmlurl,
+ format: new OpenLayers.Format.KML({
+ extractStyles: true,
+ extractAttributes: true
+ })
+ }),
+ strategies: [new OpenLayers.Strategy.Fixed()],
+ projection: new OpenLayers.Projection("EPSG:4326")
+ });
+ }
+ map.addLayer(pois);
+ select = new OpenLayers.Control.SelectFeature(pois);
+ map.addControl(select);
+ select.activate();
+
+ pois.events.on({
+ "featureselected": function (event) {
+ var feature = event.feature;
+ var content = '<h2><a href="' + feature.attributes.href + '">' +feature.attributes.name + "</a></h2>" + feature.attributes.description;
+ popup = new OpenLayers.Popup.FramedCloud("chicken",
+ feature.geometry.getBounds().getCenterLonLat(),
+ new OpenLayers.Size(100,100),
+ content,
+ null, true, function () {select.unselectAll()});
+ feature.popup = popup;
+ map.addPopup(popup);
+ },
+ "featureunselected": function (event) {
+ var feature = event.feature;
+ if (feature.popup) {
+ map.removePopup(feature.popup);
+ feature.popup.destroy();
+ delete feature.popup;
+ }
+ }
+ });
+
+ if (options.editable) {
+ vlayer = new OpenLayers.Layer.Vector( "Editable" );
+ map.addControl(new OpenLayers.Control.EditingToolbar(vlayer));
+ map.addLayer(vlayer);
+ }
+
+ if (options.fullscreen) {
+ map.addControl(new OpenLayers.Control.PanZoomBar());
+ map.addControl(new OpenLayers.Control.LayerSwitcher());
+ map.addControl(new OpenLayers.Control.MousePosition());
+ map.addControl(new OpenLayers.Control.KeyboardDefaults());
+ } else {
+ map.addControl(new OpenLayers.Control.ZoomPanel());
+ }
+
+ //Set start centrepoint and zoom
+ if (!options.lat || !options.lon) {
+ options.lat = urlParams['lat'];
+ options.lon = urlParams['lon'];
+ }
+ if (!options.zoom) {
+ options.zoom = urlParams['zoom'];
+ }
+ if (options.lat && options.lon) {
+ var lat = options.lat;
+ var lon = options.lon;
+ var zoom= options.zoom || 10;
+ center = new OpenLayers.LonLat( lon, lat ).transform(
+ new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
+ map.getProjectionObject() // to Spherical Mercator Projection
+ );
+ map.setCenter (center, zoom);
+ } else {
+ pois.events.register("loadend", this, function () { map.zoomToExtent(pois.getDataExtent()); });
+ }
+}