]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
Merge branch 'master' into cvs
authorAmitai Schlair <schmonz-web-ikiwiki@schmonz.com>
Thu, 29 Nov 2012 22:33:14 +0000 (17:33 -0500)
committerAmitai Schlair <schmonz-web-ikiwiki@schmonz.com>
Thu, 29 Nov 2012 22:33:14 +0000 (17:33 -0500)
365 files changed:
IkiWiki.pm
IkiWiki/CGI.pm
IkiWiki/Plugin/aggregate.pm
IkiWiki/Plugin/amazon_s3.pm
IkiWiki/Plugin/attachment.pm
IkiWiki/Plugin/bzr.pm
IkiWiki/Plugin/comments.pm
IkiWiki/Plugin/conditional.pm
IkiWiki/Plugin/cvs.pm
IkiWiki/Plugin/darcs.pm
IkiWiki/Plugin/editpage.pm
IkiWiki/Plugin/edittemplate.pm
IkiWiki/Plugin/filecheck.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/graphviz.pm
IkiWiki/Plugin/httpauth.pm
IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/link.pm
IkiWiki/Plugin/mercurial.pm
IkiWiki/Plugin/meta.pm
IkiWiki/Plugin/mirrorlist.pm
IkiWiki/Plugin/monotone.pm
IkiWiki/Plugin/notifyemail.pm [new file with mode: 0644]
IkiWiki/Plugin/osm.pm
IkiWiki/Plugin/passwordauth.pm
IkiWiki/Plugin/pinger.pm
IkiWiki/Plugin/po.pm
IkiWiki/Plugin/recentchanges.pm
IkiWiki/Plugin/recentchangesdiff.pm
IkiWiki/Plugin/remove.pm
IkiWiki/Plugin/rename.pm
IkiWiki/Plugin/rsync.pm
IkiWiki/Plugin/skeleton.pm.example
IkiWiki/Plugin/svn.pm
IkiWiki/Plugin/tla.pm
IkiWiki/Plugin/trail.pm [new file with mode: 0644]
IkiWiki/Plugin/transient.pm
IkiWiki/Render.pm
IkiWiki/Wrapper.pm
auto-blog.setup
debian/changelog
debian/compat
debian/control
debian/copyright
doc/anchor.mdwn
doc/basewiki/sandbox.mdwn
doc/branches.mdwn
doc/bugs/CGI_wrapper_doesn__39__t_store_PERL5LIB_environment_variable.mdwn [new file with mode: 0644]
doc/bugs/CamelCase_and_Recent_Changes_create_spurious_Links.mdwn [new file with mode: 0644]
doc/bugs/Existing_Discussion_pages_appear_as_non-existing.mdwn [new file with mode: 0644]
doc/bugs/Linkmap_doesn__39__t_support_multiple_linkmaps_on_a_single_page.mdwn [new file with mode: 0644]
doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn [new file with mode: 0644]
doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn [new file with mode: 0644]
doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn [new file with mode: 0644]
doc/bugs/Underscores_in_links_don__39__t_appear.mdwn [new file with mode: 0644]
doc/bugs/W3MMode_still_uses_http:__47____47__localhost__63__.mdwn
doc/bugs/bug_in_cgiurl_port.mdwn [new file with mode: 0644]
doc/bugs/cannot_clone_documented_git_repo.mdwn [new file with mode: 0644]
doc/bugs/conditional_preprocess_during_scan.mdwn
doc/bugs/definition_lists_should_be_bold.mdwn [new file with mode: 0644]
doc/bugs/feeds_get_removed_in_strange_conditions.mdwn [new file with mode: 0644]
doc/bugs/graphviz_demo_generates_empty_graph.mdwn [new file with mode: 0644]
doc/bugs/ipv6_address_in_comments.mdwn [new file with mode: 0644]
doc/bugs/linkmap_displays_underscore_escapes.mdwn [new file with mode: 0644]
doc/bugs/linkmap_displays_underscore_escapes/the_patch.pl [new file with mode: 0644]
doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn [new file with mode: 0644]
doc/bugs/must_save_before_uploading_more_than_one_attachment.mdwn
doc/bugs/nonexistent_pages_in_inline_pagenames_do_not_add_a_dependency.mdwn [new file with mode: 0644]
doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn [new file with mode: 0644]
doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn [new file with mode: 0644]
doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn [new file with mode: 0644]
doc/bugs/osm_linkto__40____41___usage_breaks_map_rendering.mdwn [new file with mode: 0644]
doc/bugs/osm_sometimes_looses_some_nodes.mdwn [new file with mode: 0644]
doc/bugs/pagetitle_function_does_not_respect_meta_titles.mdwn
doc/bugs/removal_of_transient_pages.mdwn
doc/bugs/renaming_a_page_destroyed_some_links.mdwn [new file with mode: 0644]
doc/bugs/trail_shows_on_cgi_pages.mdwn [new file with mode: 0644]
doc/bugs/trail_test_suite_failures.mdwn [new file with mode: 0644]
doc/bugs/transient_autocreated_tagbase_is_not_transient_autoindexed.mdwn
doc/bugs/wiki_links_still_processed_inside_code_blocks.mdwn
doc/bugs/wrong_link_in_recentchanges_when_reverting_an_ikiwiki_outside_git_root.mdwn
doc/contact.mdwn
doc/convert.mdwn
doc/css_market.mdwn
doc/examples/blog/posts.mdwn
doc/examples/softwaresite/bugs/hghg.mdwn [new file with mode: 0644]
doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__.mdwn [new file with mode: 0644]
doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_1_8a5acbb6234104b607c8c4cf16124ae4._comment [new file with mode: 0644]
doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_2_155e5823860a91989647ede8b5c9224a._comment [new file with mode: 0644]
doc/forum/Anyone_mirroring_ikiwiki_inline_feed_to_identi.ca__63__/comment_3_317f1202a3da1bfc845d4becbac4bba8._comment [new file with mode: 0644]
doc/forum/Attachment_and_sub-directory.mdwn [new file with mode: 0644]
doc/forum/Background_picture_and_css.mdwn [new file with mode: 0644]
doc/forum/CGI_script_and_HTTPS.mdwn [new file with mode: 0644]
doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment [new file with mode: 0644]
doc/forum/Calendar:_listing_multiple_entries_per_day.mdwn
doc/forum/Calendar:_listing_multiple_entries_per_day/comment_5_de545ebb6376066674ef2aaae4757b9c._comment [new file with mode: 0644]
doc/forum/Can_I_have_different_favicons_for_each_folder__63__/comment_2_b8ccd3c29249eca73766f567bce12569._comment [new file with mode: 0644]
doc/forum/Can_not_advance_past_first_page_of_results_using_search_plugin.mdwn [new file with mode: 0644]
doc/forum/Commiting_all_moderated_comments_into_special_branch__63__.mdwn [new file with mode: 0644]
doc/forum/Commiting_all_moderated_comments_into_special_branch__63__/comment_1_8403e8ff9c5c8dddb6d744632322f7bc._comment [new file with mode: 0644]
doc/forum/Empty_sha1sum_messages.mdwn [new file with mode: 0644]
doc/forum/Empty_sha1sum_messages/comment_1_b260b5e6b4c4f4c203b01183fee9fd69._comment [new file with mode: 0644]
doc/forum/Empty_sha1sum_messages/comment_2_d6a47838a3c81d0a75e6fc22e786c976._comment [new file with mode: 0644]
doc/forum/Error:___34__do__34___parameter_missing.mdwn [new file with mode: 0644]
doc/forum/Error:___34__do__34___parameter_missing/comment_1_3a51c303ba1670f1567f323349b53837._comment [new file with mode: 0644]
doc/forum/Error:___34__do__34___parameter_missing/comment_2_c5f24a8c4d2de0267cf0de1908480e82._comment [new file with mode: 0644]
doc/forum/Everyone_can_remove_comments.mdwn [new file with mode: 0644]
doc/forum/Google_searches_of_ikiwiki.info_are_broken._:__40__.mdwn [new file with mode: 0644]
doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment [new file with mode: 0644]
doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment [new file with mode: 0644]
doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment [new file with mode: 0644]
doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_create_a_WikiLink_to_a_page_in_a_subdirectory__63__/comment_1_d20ee1d8d7a3e77a445f8b887e807119._comment [new file with mode: 0644]
doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_inline_a_page_from_another_git_repository.mdwn [new file with mode: 0644]
doc/forum/How_to_set_the_meta_author_field_from_user_name__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_set_the_meta_author_field_from_user_name__63__/comment_1_0906e1f3eb8b826a7730233b95cb5ddd._comment [new file with mode: 0644]
doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn [new file with mode: 0644]
doc/forum/Include_attachment_in_a_page.mdwn [new file with mode: 0644]
doc/forum/Include_attachment_in_a_page/comment_1_275aad6ca3b2972749b7f6636b130035._comment [new file with mode: 0644]
doc/forum/Multiple_urls.mdwn [new file with mode: 0644]
doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_6_1dccdfebad31446200213a2cae25f0e2._comment [new file with mode: 0644]
doc/forum/Parent_Links_all_link_to_root.mdwn [new file with mode: 0644]
doc/forum/Parent_Links_all_link_to_root/comment_1_4b5ed25cceb7740f64ee08aba00a1d91._comment [new file with mode: 0644]
doc/forum/Problem_with_gitweb/comment_1_c505be6a13651c397fb803dd4117acce._comment [deleted file]
doc/forum/Problem_with_gitweb/comment_3_6a5b96f7e0d6b169c090e3df7281d938._comment [new file with mode: 0644]
doc/forum/Problem_with_gitweb/comment_5_8a79b879205bd265d54e30f0eee2ac63._comment [new file with mode: 0644]
doc/forum/Problem_with_local_git_commit.mdwn [new file with mode: 0644]
doc/forum/See_rendered_old_revisions_via_pagehistory.mdwn [new file with mode: 0644]
doc/forum/Setting_http__95__proxy.mdwn [new file with mode: 0644]
doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment [new file with mode: 0644]
doc/forum/Slow_ikiwiki_after_first_run.mdwn [new file with mode: 0644]
doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment [new file with mode: 0644]
doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment [new file with mode: 0644]
doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn [new file with mode: 0644]
doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment [new file with mode: 0644]
doc/forum/When_do_tags_like_a__47__b_get_listed_as_a__47__b_and_not_only_b__63__.mdwn [new file with mode: 0644]
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 with mode: 0644]
doc/forum/access_restrictions:_for_extranet.mdwn [new file with mode: 0644]
doc/forum/access_restrictions:_for_extranet/comment_1_a0666c3c15661fb0fff70f313cd0d47d._comment [new file with mode: 0644]
doc/forum/access_restrictions:_for_extranet/comment_2_563040aa099c9366dc5701eb4bc9c10d._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters.mdwn [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_1_83fbb415dd3ae6a19ed5ea5f82065c28._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_2_d258536c98538d4744f66eb3132439a9._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_3_d62173d0ae220ab7b063631952856587._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_4_d5d0174e09a94359c23fd9c006a22bbc._comment [new file with mode: 0644]
doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment [new file with mode: 0644]
doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn [new file with mode: 0644]
doc/forum/how_to_login_as_admin/comment_1_295e130c6400a2d7336758e82bcd5647._comment [new file with mode: 0644]
doc/forum/howto_install_the_pagedown_plugin.mdwn [new file with mode: 0644]
doc/forum/howto_install_the_pagedown_plugin/comment_1_158fbcef24d20920c40968da8f10442a._comment [new file with mode: 0644]
doc/forum/ikiwiki_--setup_creates_tmp__47___directory_in_destdir.mdwn [new file with mode: 0644]
doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment [new file with mode: 0644]
doc/forum/possible_utf-8_problem__63__.mdwn [new file with mode: 0644]
doc/forum/problem_with_git_after_a_commit_of_ikiwiki.mdwn [new file with mode: 0644]
doc/forum/problem_with_git_after_a_commit_of_ikiwiki/comment_1_2b9986717769419a8ae0f730c36b7e65._comment [new file with mode: 0644]
doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__.mdwn [new file with mode: 0644]
doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment [new file with mode: 0644]
doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment [new file with mode: 0644]
doc/git.mdwn
doc/ikiwiki-update-wikilist.mdwn
doc/ikiwiki/directive/edittemplate.mdwn
doc/ikiwiki/directive/graph.mdwn
doc/ikiwiki/directive/graph/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/img/discussion.mdwn
doc/ikiwiki/directive/inline.mdwn
doc/ikiwiki/directive/map/discussion.mdwn
doc/ikiwiki/directive/meta.mdwn
doc/ikiwiki/directive/meta/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/osm.mdwn
doc/ikiwiki/directive/osm/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/sidebar/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/table.mdwn
doc/ikiwiki/directive/trailitem.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/trailitems.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/traillink.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/trailoptions.mdwn [new file with mode: 0644]
doc/ikiwikiusers.mdwn
doc/install.mdwn
doc/news/cia.mdwn [deleted file]
doc/news/openid.mdwn
doc/news/version_3.20111107.mdwn [deleted file]
doc/news/version_3.20111229.mdwn [deleted file]
doc/news/version_3.20120109.mdwn [deleted file]
doc/news/version_3.20120115.mdwn [deleted file]
doc/news/version_3.20120202.mdwn [deleted file]
doc/news/version_3.20120516.mdwn [new file with mode: 0644]
doc/news/version_3.20120629.mdwn [new file with mode: 0644]
doc/news/version_3.20120725.mdwn [new file with mode: 0644]
doc/news/version_3.20121016.mdwn [new file with mode: 0644]
doc/news/version_3.20121017.mdwn [new file with mode: 0644]
doc/plugins/anonok.mdwn
doc/plugins/blogspam.mdwn
doc/plugins/camelcase.mdwn
doc/plugins/comments.mdwn
doc/plugins/contrib/album.mdwn
doc/plugins/contrib/asymptote.mdwn [new file with mode: 0644]
doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn [new file with mode: 0644]
doc/plugins/contrib/created_in_future.mdwn [new file with mode: 0644]
doc/plugins/contrib/getfield/discussion.mdwn
doc/plugins/contrib/googlemaps.mdwn
doc/plugins/contrib/ikiwiki/directive/trailinline.mdwn [deleted file]
doc/plugins/contrib/ikiwiki/directive/trailitem.mdwn [deleted file]
doc/plugins/contrib/ikiwiki/directive/trailitems.mdwn [deleted file]
doc/plugins/contrib/ikiwiki/directive/traillink.mdwn [deleted file]
doc/plugins/contrib/ikiwiki/directive/trailoptions.mdwn [deleted file]
doc/plugins/contrib/ikiwiki/directive/ymlfront/discussion.mdwn [new file with mode: 0644]
doc/plugins/contrib/jscalendar.mdwn [new file with mode: 0644]
doc/plugins/contrib/localfavicon.mdwn [new file with mode: 0644]
doc/plugins/contrib/monthcalendar.mdwn [new file with mode: 0644]
doc/plugins/contrib/report/discussion.mdwn
doc/plugins/contrib/syntax.mdwn
doc/plugins/contrib/trail.mdwn [deleted file]
doc/plugins/headinganchors/discussion.mdwn
doc/plugins/highlight/discussion.mdwn
doc/plugins/httpauth.mdwn
doc/plugins/lockedit.mdwn
doc/plugins/mirrorlist.mdwn
doc/plugins/moderatedcomments.mdwn
doc/plugins/notifyemail.mdwn [new file with mode: 0644]
doc/plugins/po.mdwn
doc/plugins/poll/discussion.mdwn [new file with mode: 0644]
doc/plugins/recentchangesdiff.mdwn
doc/plugins/sidebar/discussion.mdwn
doc/plugins/teximg.mdwn
doc/plugins/trail.mdwn [new file with mode: 0644]
doc/plugins/trail/discussion.mdwn [new file with mode: 0644]
doc/plugins/type/comments.mdwn [new file with mode: 0644]
doc/plugins/wmd.mdwn
doc/plugins/write.mdwn
doc/plugins/write/tutorial.mdwn
doc/plugins/write/tutorial/discussion.mdwn [new file with mode: 0644]
doc/rcs/git.mdwn
doc/roadmap.mdwn
doc/sandbox.mdwn
doc/sandbox/Fantasia.mdwn [deleted file]
doc/sandbox/Hey__33__.mdwn [deleted file]
doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn [deleted file]
doc/sandbox/Mooooo.mdwn [deleted file]
doc/sandbox/NewPage.mdwn [new file with mode: 0644]
doc/sandbox/Nur_so..mdwn [deleted file]
doc/sandbox/Nyus_of_se_däi.mdwn [deleted file]
doc/sandbox/Test_it.mdwn [deleted file]
doc/sandbox/Testing_blog_entry.mdwn [deleted file]
doc/sandbox/adding_a_new_post.mdwn [deleted file]
doc/sandbox/ainvyu.mdwn [deleted file]
doc/sandbox/bullet_list_and_code_test.mdwn [deleted file]
doc/sandbox/danc.mdwn [deleted file]
doc/sandbox/dateenumeration.mdwn [deleted file]
doc/sandbox/hey.mdwn [deleted file]
doc/sandbox/plop.mdwn [deleted file]
doc/sandbox/revert_me.mdwn [deleted file]
doc/sandbox/sandbocen.mdwn [deleted file]
doc/sandbox/sidebar.mdwn [deleted file]
doc/security.mdwn
doc/shortcuts.mdwn
doc/soc/application.mdwn
doc/style.css
doc/templates.mdwn
doc/themes.mdwn
doc/themes/monochrome_small.png [new file with mode: 0644]
doc/tipjar.mdwn
doc/tips/Adding_Disqus_to_your_wiki.mdwn
doc/tips/Importing_posts_from_Wordpress/discussion.mdwn
doc/tips/JavaScript_to_add_index.html_to_file:_links/discussion.mdwn [new file with mode: 0644]
doc/tips/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn [deleted file]
doc/tips/convert_moinmoin_to_ikiwiki.mdwn [new file with mode: 0644]
doc/tips/convert_moinmoin_to_ikiwiki/discussion.mdwn [new file with mode: 0644]
doc/tips/dot_cgi.mdwn
doc/tips/dot_cgi/discussion.mdwn
doc/tips/ikiwiki_as_a_requirements_management_tool/discussion.mdwn
doc/tips/ikiwiki_via_gopher/discussion.mdwn [new file with mode: 0644]
doc/todo/Add_basename_in_edittemplate.mdwn [new file with mode: 0644]
doc/todo/Add_space_before_slash_in_parent_links.mdwn
doc/todo/FormattingHelp_should_open_new_window.mdwn [new file with mode: 0644]
doc/todo/Javascript_calendar.mdwn [deleted file]
doc/todo/Render_multiple_destinations_from_one_source.mdwn
doc/todo/Restrict_page_viewing.mdwn
doc/todo/Track_Markdown_Standardisation_Efforts.mdwn [new file with mode: 0644]
doc/todo/Using_page_titles_in_internal_links.mdwn [new file with mode: 0644]
doc/todo/Zoned_ikiwiki.mdwn [new file with mode: 0644]
doc/todo/ad-hoc_plugins.mdwn [new file with mode: 0644]
doc/todo/allow_TMPL__95__LOOP_in_template_directives.mdwn [new file with mode: 0644]
doc/todo/allow_banning_a_user_when_moderating_a_comment.mdwn [new file with mode: 0644]
doc/todo/anti-spam_protection.mdwn
doc/todo/avatar/discussion.mdwn [new file with mode: 0644]
doc/todo/break_up_page_template_into_subfiles.mdwn [new file with mode: 0644]
doc/todo/custom_location_for_openlayers.mdwn [new file with mode: 0644]
doc/todo/do_not_make_links_backwards.mdwn
doc/todo/ease_archivepage_styling.mdwn [new file with mode: 0644]
doc/todo/etherpad_support.mdwn [new file with mode: 0644]
doc/todo/fastcgi_or_modperl_installation_instructions.mdwn
doc/todo/feed_enhancements_for_inline_pages.mdwn
doc/todo/headless_git_branches.mdwn
doc/todo/improved_mediawiki_support.mdwn [new file with mode: 0644]
doc/todo/internal_definition_list_support.mdwn
doc/todo/linkbase.mdwn [new file with mode: 0644]
doc/todo/mdwn_preview.mdwn
doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn
doc/todo/monochrome_theme.mdwn [new file with mode: 0644]
doc/todo/org_mode.mdwn
doc/todo/osm__95__optimisations__95__and__95__fixes.mdwn [new file with mode: 0644]
doc/todo/osm_arbitrary_layers.mdwn [new file with mode: 0644]
doc/todo/per_page_ACLs.mdwn [new file with mode: 0644]
doc/todo/please_add_some_table_styles.mdwn [new file with mode: 0644]
doc/todo/provide_inline_diffs_in_recentchanges.mdwn
doc/todo/publishing_in_the_future.mdwn [new file with mode: 0644]
doc/todo/recentchanges_feed_with_comment.mdwn [new file with mode: 0644]
doc/todo/sort_parameter_for_map_plugin_and_directive.mdwn
doc/todo/sort_parameter_for_map_plugin_and_directive/incomplete_patch.pl.pl [new file with mode: 0644]
doc/todo/sort_parameter_for_map_plugin_and_directive/python_algorithms.py [new file with mode: 0644]
doc/todo/usedirs__95__redir_proposed_additional_module.mdwn [new file with mode: 0644]
doc/todo/wikiwyg.mdwn
doc/todo/wikiwyg/discussion.mdwn
doc/users/GiuseppeBilotta.mdwn [new file with mode: 0644]
doc/users/LucaCapello.mdwn [new file with mode: 0644]
doc/users/Olea.mdwn [new file with mode: 0644]
doc/users/OscarMorante.mdwn [new file with mode: 0644]
doc/users/RickOwens.mdwn [new file with mode: 0644]
doc/users/adamshand.mdwn
doc/users/anarcat.mdwn
doc/users/hb/discussion.mdwn
doc/users/joshtriplett/discussion.mdwn
doc/users/mathdesc.mdwn [new file with mode: 0644]
doc/users/pdurbin.mdwn [new file with mode: 0644]
doc/users/tbm.mdwn [new file with mode: 0644]
doc/users/undx.mdwn [new file with mode: 0644]
doc/users/wiebel.mdwn [new file with mode: 0644]
ikiwiki-update-wikilist
ikiwiki.spec
plugins/proxy.py [changed mode: 0644->0755]
plugins/rst
po/Makefile
po/bg.po
po/cs.po
po/da.po
po/de.po
po/es.po
po/fr.po
po/gu.po
po/ikiwiki.pot
po/it.po
po/pl.po
po/sv.po
po/tr.po
po/vi.po
t/prune.t [new file with mode: 0755]
t/syntax.t
t/trail.t [new file with mode: 0755]
templates/archivepage.tmpl
templates/change.tmpl
templates/editcomment.tmpl
templates/editpage.tmpl
templates/notifyemail.tmpl [new file with mode: 0644]
templates/page.tmpl
templates/trails.tmpl [new file with mode: 0644]
themes/actiontabs/style.css
themes/blueview/style.css
themes/monochrome/gradient.png [new file with mode: 0644]
themes/monochrome/style.css [new file with mode: 0644]
underlays/osm/ikiwiki/osm.js

index 2a83777e6574ec74e9ebb878f0964a88b0118639..52da3c112b26289298ef2a4a1faf7636ec6ff119 100644 (file)
@@ -118,6 +118,22 @@ sub getsetup () {
                safe => 0,
                rebuild => 0,
        },
+       cgi_overload_delay => {
+               type => "string",
+               default => '',
+               example => "10",
+               description => "number of seconds to delay CGI requests when overloaded",
+               safe => 1,
+               rebuild => 0,
+       },
+       cgi_overload_message => {
+               type => "string",
+               default => '',
+               example => "Please wait",
+               description => "message to display when overloaded (may contain html)",
+               safe => 1,
+               rebuild => 0,
+       },
        rcs => {
                type => "string",
                default => '',
@@ -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;
 
index 62383b6fd22cf3ca6bed2dc3571f5cafb3c10715..5baa6c1798ef02e1f45680daa032da17674fafb0 100644 (file)
@@ -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;
index 5e22609c9b354a2b2770762a17cd60bcd5c36535..83bd670cb449f017ce9c35b81262af29ccdb6883 100644 (file)
@@ -201,7 +201,7 @@ sub migrate_to_internal {
                if (-e $oldoutput) {
                        require IkiWiki::Render;
                        debug("removing output file $oldoutput");
-                       IkiWiki::prune($oldoutput);
+                       IkiWiki::prune($oldoutput, $config{destdir});
                }
        }
        
index cfd8cd3477f81dd0758564994f35979419e330a0..a9da6bf12b69dc62f2ee05f22aaaef2c88fe7dde 100644 (file)
@@ -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
index 5a180cd5cf3c3eaac5282ef267982327e49eba8d..aea70429d0bcc3bc86a776ba8b2dde8352483a37 100644 (file)
@@ -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}) {
index 3bc4ea8dd69b1d67329ec1db81bdd2e4ac9d19cf..72552abccaa96212c5f71d48cefcbb1b21e4498b 100644 (file)
@@ -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;
 
index 91a482ed6660059ed3a77f30b5236dbd891303a8..c00bf52752e9326a3ffc40855ed8b130dced74ce 100644 (file)
@@ -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);
                        }
                }
 
index 026078b3ccf6751c26418d329a62f715b1bb5252..0a3d7fb4cd18ef14261eb6896722c0991d8405dd 100644 (file)
@@ -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);
index 42812ddefe77ae8888c0040d99d0b0ef82ed774b..759ea1c23b3d76672155d66b559c3cda6ed0c124 100644 (file)
@@ -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, {
index 1313041e78fe9c61588c04a53bae58e4e22d33d5..646f65df10688087decd275e0be6109203573aae 100644 (file)
@@ -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, {
index 54051c58c2cf836e258c110d0ec4a47d6ff1e0a2..d15607990db2412b8a14f281864f82f98b3cac7f 100644 (file)
@@ -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;
index 061242fd82c1f1a76251dac12f8017821688a2a1..c7f1e4fa7f7117660b5d89207a1795caec9fc6af 100644 (file)
@@ -132,7 +132,7 @@ sub filltemplate ($$) {
        if ($@) {
                # Indicate that the earlier preprocessor directive set 
                # up a template that doesn't work.
-               return "[[!pagetemplate ".gettext("failed to process template:")." $@]]";
+               return "[[!edittemplate ".gettext("failed to process template:")." $@]]";
        }
 
        $template->param(name => $page);
index 4f4e67489a41c51ecae344119362f0ea611d481a..cdea5c706f4085686bf20b5e7a09283792137c31 100644 (file)
@@ -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
index 3dd910cd5a5c29df8705238cc03a224e2ad2e7d4..0c0e27521aa55d0381041e75721a618e1f55cf43 100644 (file)
@@ -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
@@ -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;
index b9f997e04b123a11a50aa9dddac82d982fb2fbf7..d4018edaaf9dad384818488356a3e7e8c4d8841c 100644 (file)
@@ -132,6 +132,7 @@ sub graph (@) {
                }, "text");
                $p->parse($src);
                $p->eof;
+               $s=~s/\[ href= \]//g; # handle self-links
                $params{src}=$s;
        }
        else {
index cb488449dd680b2ae36aefde23636ba3fdfe6ab8..76d574b2a899df7e77cb71f2a4f27ee078e76b43 100644 (file)
@@ -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;
index bdab5793b7c8a611ebb4bbfb7c1ff0951218712c..8eb033951a365ce2ada82394c94c8e903ae858df 100644 (file)
@@ -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;
index ef01f110702228fb71356d7d76437161f134b156..1ba28eafd6d4912f16d8aa7fa5c16e01ca9f8dea 100644 (file)
@@ -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;
 
index b7fe01485aff129c3f672b8995bfedede2e959fb..8da4ceb07ada8f026e908be1004d060e9e21adeb 100644 (file)
@@ -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, {
index 220fff9dccaa547824ccb0bc7a19ddbe583f516d..421f1dc86a83d33ac823f9989ad9e42c6dea12c9 100644 (file)
@@ -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);
index f54d94ad52366110e29f20575672bcd0fcc4413c..b7e53248500d8a31337e582e81d24a5870ebb074 100644 (file)
@@ -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}}
                ).
index 1d89e3f6b1cd6d9fc887ae539a97b17301ac5e62..105627814b793fa5ff868ceff7c07e00c3dd9078 100644 (file)
@@ -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 (file)
index 0000000..2c1775f
--- /dev/null
@@ -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
index 2b5d0d5f120c80ae478407f4358d4666a0e3034d..a7baa5f2b968ebb0464a787be7371a26a2f98423 100644 (file)
@@ -34,8 +34,8 @@ sub getsetup () {
                },
                osm_default_icon => {
                        type => "string",
-                       example => "/ikiwiki/images/osm.png",
-                       description => "the icon shon on links and on the main map",
+                       example => "ikiwiki/images/osm.png",
+                       description => "the icon shown on links and on the main map",
                        safe => 0,
                        rebuild => 1,
                },
@@ -56,51 +56,70 @@ sub getsetup () {
                osm_tag_default_icon => {
                        type => "string",
                        example => "icon.png",
-                       description => "the icon attached to a tag so that pages tagged with that tag will have that icon on the map",
+                       description => "the icon attached to a tag, displayed on the map for tagged pages",
                        safe => 0,
                        rebuild => 1,
                },
-               osm_tag_icons => {
+               osm_openlayers_url => {
                        type => "string",
-                       example => {
-                               'test' => '/img/test.png',
-                               'trailer' => '/img/trailer.png'
-                       },
-                       description => "tag to icon mapping, leading slash is important!",
+                       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 $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 $fullscreen = defined($params{'fullscreen'}); # sanitized here
        my ($width, $height, $float);
-       if ($fullscreen) {
-               $height = '100%';
-               $width = '100%';
-               $float = 0;
-       }
-       else {
-               $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
-       }
+       $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;
-       if ($fullscreen) {
-               $map = $params{'map'} || $page;
-       }
-       else {
-               $map = $params{'map'} || 'map';
-       }
+       $map = $params{'map'} || 'map';
+       
        $map = scrub($map, $page, $dest); # sanitized here
        my $name = scrub($params{'name'} || $map, $page, $dest);
 
@@ -111,16 +130,27 @@ sub preprocess {
        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 => $fullscreen,
+               fullscreen => 0,
                editable => defined($params{'editable'}),
                lat => $lat,
                lon => $lon,
                href => $href,
+               google_apikey => $config{'osm_google_apikey'},
        };
        return "<div id=\"mapdiv-$name\"></div>";
 }
@@ -137,7 +167,7 @@ sub process_waypoint {
        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 $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) {
@@ -150,46 +180,20 @@ sub process_waypoint {
        }
 
        my $tag = $params{'tag'};
-       if ($tag) {
-               if (!defined($config{'osm_tag_icons'}->{$tag})) {
-                       error("invalid tag specified, see osm_tag_icons configuration or don't specify any");
+       foreach my $t (keys %{$typedlinks{$page}{'tag'}}) {
+               if ($icon = get_tag_icon($t)) {
+                       $tag = $t;
+                       last;
                }
-               $icon = $config{'osm_tag_icons'}->{$tag};
-       }
-       else {
-               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;
-                       }
+               $t =~ s!/$config{'tagbase'}/!!;
+               if ($icon = get_tag_icon($t)) {
+                       $tag = $t;
+                       last;
                }
        }
-       $icon = "/ikiwiki/images/osm.png" unless $icon;
+       $icon = urlto($icon, $dest, 1);
        $tag = '' unless $tag;
-       if ($page eq $dest) {
-               if (!defined($config{'osm_format'}) || !$config{'osm_format'}) {
-                       $config{'osm_format'} = 'KML';
-               }
-               my %formats = map { $_ => 1 } split(/, */, $config{'osm_format'});
-               if ($formats{'GeoJSON'}) {
-                       will_render($page,$config{destdir} . "/$map/pois.json");
-               }
-               if ($formats{'CSV'}) {
-                       will_render($page,$config{destdir} . "/$map/pois.txt");
-               }
-               if ($formats{'KML'}) {
-                       will_render($page,$config{destdir} . "/$map/pois.kml");
-               }
-       }
-       my $href = "/ikiwiki.cgi?do=osm&map=$map&lat=$lat&lon=$lon&zoom=$zoom";
-       if (defined($destsources{htmlpage($map)})) {
-               $href = urlto($map,$page) . "?lat=$lat&lon=$lon&zoom=$zoom";
-       }
+       register_rendered_files($map, $page, $dest);
        $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name} = {
                page => $page,
                desc => $desc,
@@ -197,19 +201,28 @@ sub process_waypoint {
                tag => $tag,
                lat => $lat,
                lon => $lon,
-               # how to link back to the page from the map, not to be
+               # 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
-               href => urlto($page,$map),
+               # 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'})) {
-               $params{'href'} = $href; # propagate down to embeded
-               $output .= preprocess(%params);
+               $output .= preprocess(%params,
+                       href => $mapurl,
+               );
        }
        if (!$hidden) {
-               $href =~ s!&!&amp;!g;
-               $output .= "<a href=\"$href\"><img class=\"img\" src=\"$icon\" $alt /></a>";
+               $output .= "<a href=\"$mapurl\"><img class=\"img\" src=\"$icon\" $alt /></a>";
        }
        return $output;
 }
@@ -222,10 +235,6 @@ sub get_tag_icon($) {
        if (srcfile($attached)) {
                return $attached;
        }
-       # look for the old way: mappings
-       if ($config{'osm_tag_icons'}->{$tag}) {
-               return $config{'osm_tag_icons'}->{$tag};
-       }
        else {
                return undef;
        }
@@ -308,10 +317,7 @@ sub savestate {
                }
        }
 
-       if (!defined($config{'osm_format'}) || !$config{'osm_format'}) {
-               $config{'osm_format'} = 'KML';
-       }
-       my %formats = map { $_ => 1 } split(/, */, $config{'osm_format'});
+       my %formats = get_formats();
        if ($formats{'GeoJSON'}) {
                writejson(\%waypoints, \%linestrings);
        }
@@ -341,8 +347,7 @@ sub writejson($;$) {
                                "geometry" => { "type" => "LineString", "coordinates" => $linestring });
                        push @{$geojson{'features'}}, \%json;
                }
-               debug('writing pois file pois.json in ' . $config{destdir} . "/$map");
-               writefile("pois.json",$config{destdir} . "/$map",to_json(\%geojson));
+               writefile("pois.json", $config{destdir} . "/$map", to_json(\%geojson));
        }
 }
 
@@ -352,61 +357,31 @@ sub writekml($;$) {
        eval q{use XML::Writer};
        error $@ if $@;
        foreach my $map (keys %waypoints) {
-               debug("writing pois file pois.kml in " . $config{destdir} . "/$map");
-
-=pod
-Sample placemark:
-
-<?xml version="1.0" encoding="UTF-8"?>
-<kml xmlns="http://www.opengis.net/kml/2.2">
-  <Placemark>
-    <name>Simple placemark</name>
-    <description>Attached to the ground. Intelligently places itself 
-       at the height of the underlying terrain.</description>
-    <Point>
-      <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
-    </Point>
-  </Placemark>
-</kml>
-
-Sample style:
-
-
-        <Style id="sh_sunny_copy69">
-                <IconStyle>
-                        <scale>1.4</scale>
-                        <Icon>
-                                <href>http://waypoints.google.com/mapfiles/kml/shapes/sunny.png</href>
-                        </Icon>
-                        <hotSpot x="0.5" y="0.5" xunits="fraction" yunits="fraction"/>
-                </IconStyle>
-                <LabelStyle>
-                        <color>ff00aaff</color>
-                </LabelStyle>
-        </Style>
-
-
-=cut
-
-               use IO::File;
-               my $output = IO::File->new(">".$config{destdir} . "/$map/pois.kml");
-
-               my $writer = XML::Writer->new( OUTPUT => $output, DATA_MODE => 1, ENCODING => 'UTF-8');
+               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}};
-                       $writer->startTag("Style", id => $options{tag});
-                       $writer->startTag("IconStyle");
-                       $writer->startTag("Icon");
-                       $writer->startTag("href");
-                       $writer->characters($options{icon});
-                       $writer->endTag();
-                       $writer->endTag();
-                       $writer->endTag();
-                       $writer->endTag();
+                       if (!$tags_map{$options{tag}}) {
+                           debug("found new style " . $options{tag});
+                           $tags_map{$options{tag}} = ();
+                           $writer->startTag("Style", id => $options{tag});
+                           $writer->startTag("IconStyle");
+                           $writer->startTag("Icon");
+                           $writer->startTag("href");
+                           $writer->characters($options{icon});
+                           $writer->endTag();
+                           $writer->endTag();
+                           $writer->endTag();
+                           $writer->endTag();
+                       }
+                       $tags_map{$options{tag}}{$name} = \%options;
                }
        
                foreach my $name (keys %{$waypoints{$map}}) {
@@ -453,8 +428,10 @@ Sample style:
                        $writer->endTag();
                }
                $writer->endTag();
+               $writer->endTag();
                $writer->end();
-               $output->close();
+
+               writefile("pois.kml", $config{destdir} . "/$map", $output);
        }
 }
 
@@ -472,8 +449,7 @@ sub writecsvs($;$) {
                                $options{'icon'} . "\n";
                        $poisf .= $line;
                }
-               debug("writing pois file pois.txt in " . $config{destdir} . "/$map");
-               writefile("pois.txt",$config{destdir} . "/$map",$poisf);
+               writefile("pois.txt", $config{destdir} . "/$map", $poisf);
        }
 }
 
@@ -503,7 +479,7 @@ sub format (@) {
        return $params{content};
 }
 
-sub prefered_format() {
+sub preferred_format() {
        if (!defined($config{'osm_format'}) || !$config{'osm_format'}) {
                $config{'osm_format'} = 'KML';
        }
@@ -511,19 +487,21 @@ sub prefered_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;
 
-       eval q{use JSON};
-       error $@ if $@;
        if (exists $pagestate{$page}{'osm'}) {
                foreach my $map (keys %{$pagestate{$page}{'osm'}}) {
                        foreach my $name (keys %{$pagestate{$page}{'osm'}{$map}{'displays'}}) {
-                               my %options = %{$pagestate{$page}{'osm'}{$map}{'displays'}{$name}};
-                               $options{'map'} = $map;
-                               $options{'format'} = prefered_format();
-                               $loader .= "mapsetup(\"mapdiv-$name\", " . to_json(\%options) . ");\n";
+                               $loader .= map_setup_code($map, $name, %{$pagestate{$page}{'osm'}{$map}{'displays'}{$name}});
                        }
                }
        }
@@ -540,6 +518,8 @@ sub cgi($) {
 
        return unless defined $cgi->param('do') &&
                $cgi->param("do") eq "osm";
+       
+       IkiWiki::loadindex();
 
        IkiWiki::decode_cgi_utf8($cgi);
 
@@ -553,7 +533,16 @@ sub cgi($) {
        print "<html><body>";
        print "<div id=\"mapdiv-$map\"></div>";
        print embed_map_code();
-       print "<script type=\"text/javascript\" charset=\"utf-8\">mapsetup( 'mapdiv-$map', { 'map': '$map', 'lat': urlParams['lat'], 'lon': urlParams['lon'], 'zoom': urlParams['zoom'], 'fullscreen': 1, 'editable': 1, 'format': '" . prefered_format() . "'});</script>";
+       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;
@@ -561,9 +550,45 @@ sub cgi($) {
 
 sub embed_map_code(;$) {
        my $page=shift;
-       return '<script src="http://www.openlayers.org/api/OpenLayers.js" type="text/javascript" charset="utf-8"></script>'.
+       my $olurl = $config{osm_openlayers_url} || "http://www.openlayers.org/api/OpenLayers.js";
+       my $code = '<script src="'.$olurl.'" type="text/javascript" charset="utf-8"></script>'."\n".
                '<script src="'.urlto("ikiwiki/osm.js", $page).
                '" type="text/javascript" charset="utf-8"></script>'."\n";
+       if ($config{'osm_google_apikey'}) {
+           $code .= '<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key='.$config{'osm_google_apikey'}.'&sensor=false" type="text/javascript" charset="utf-8"></script>';
+       }
+       return $code;
+}
+
+sub map_setup_code($;@) {
+       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;
index 35ebd961f53e8da8e2a012d970f8d309d135a307..0cf2a26ea99380b6dd395824945bfcebd42c33b9 100644 (file)
@@ -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");
index ea4f3e0dc563bac69a999ed42b4884f48b1892a7..588f7a42a4698f6ce72e24b4647df2bedc862c7a 100644 (file)
@@ -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 () {
index 6410a1c663ceba0b615a6d3959bb27c3dd20b609..53e6af92f1db14c668f287724aed7b8b12c6f76a 100644 (file)
@@ -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;
 
index 8ce9474be631dbd8ae428304e25d1d1d2adac3df..4c186325562cad93869ea4b0fe49ab305dcdf2cc 100644 (file)
@@ -165,6 +165,7 @@ sub store ($$$) {
        # Limit pages to first 10, and add links to the changed pages.
        my $is_excess = exists $change->{pages}[10];
        delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess;
+       my $has_diffurl=0;
        $change->{pages} = [
                map {
                        if (length $config{cgiurl}) {
@@ -180,6 +181,9 @@ sub store ($$$) {
                        else {
                                $_->{link} = pagetitle($_->{page});
                        }
+                       if (defined $_->{diffurl}) {
+                               $has_diffurl=1;
+                       }
 
                        $_;
                } @{$change->{pages}}
@@ -227,6 +231,8 @@ sub store ($$$) {
                wikiname => $config{wikiname},
        );
        
+       $template->param(has_diffurl => 1) if $has_diffurl;
+
        $template->param(permalink => urlto($config{recentchangespage})."#change-".titlepage($change->{rev}))
                if exists $config{url};
        
index 41882279331f8b1a2171bb98197602197ba64190..eb358be67bef0e8a87146846857d5bc24cfdc396 100644 (file)
@@ -9,10 +9,12 @@ use HTML::Entities;
 my $maxlines=200;
 
 sub import {
+       add_underlay("javascript");
        hook(type => "getsetup", id => "recentchangesdiff",
                call => \&getsetup);
        hook(type => "pagetemplate", id => "recentchangesdiff",
                call => \&pagetemplate);
+       hook(type => "format", id => "recentchangesdiff.pm", call => \&format);
 }
 
 sub getsetup () {
@@ -55,4 +57,24 @@ sub pagetemplate (@) {
        }
 }
 
+sub format (@) {
+        my %params=@_;
+
+       if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
+               # no <body> tag, probably in preview mode
+               $params{content}=include_javascript(undef).$params{content};
+       }
+       return $params{content};
+}
+
+# taken verbatim from toggle.pm
+sub include_javascript ($) {
+       my $from=shift;
+       
+       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $from).
+               '" type="text/javascript" charset="utf-8"></script>'."\n".
+               '<script src="'.urlto("ikiwiki/toggle.js", $from).
+               '" type="text/javascript" charset="utf-8"></script>';
+}
+
 1
index 14ac01c9bcfc390f370f1a8fca74c3b51d7f0baa..d48b28f955043ec347dd87879a789c0830dfa5ab 100644 (file)
@@ -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();
 
index 8e32d41aecfd58934fc7353612c680162abd2914..8387a1e32446753f749887ba5655d23c2dfce462 100644 (file)
@@ -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);
index e38801e4a110b0b9e4790935de65f08bce30441e..1b85ea000120846ca5426e97be3603425e83cb1f 100644 (file)
@@ -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);
 }
 
index 7974d5e5325f396a6bd90cc446e239bed9a0c44f..f9caef40c1f44b9c6a14d0f9b67bd3a251be5ec6 100644 (file)
@@ -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 ($) {
index 8824a6ce0a60311cac8ec304258b545e661eea83..fd11f2c637597d98915f6a5bc29fc03ff6d0c572 100644 (file)
@@ -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;
 
index da4385446412635d3b4843e4b439e07cd399195b..11be248e8da9d90fe050da1ad57f643a7ae0cdf1 100644 (file)
@@ -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 (file)
index 0000000..7d2338f
--- /dev/null
@@ -0,0 +1,437 @@
+#!/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,
+               },
+}
+
+sub needsbuild (@) {
+       my $needsbuild=shift;
+       foreach my $page (keys %pagestate) {
+               if (exists $pagestate{$page}{trail}) {
+                       if (exists $pagesources{$page} &&
+                           grep { $_ eq $pagesources{$page} } @$needsbuild) {
+                               # 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;
+               }
+               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 ($old_n ne $new_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];
+
+                       add_depends($member, $trail);
+
+                       $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;
+
+       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};
+
+       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) {
+                               add_depends($params{destpage}, $prev);
+                               $prevurl = urlto($prev, $page);
+                               $prevtitle = title_of($prev);
+                       }
+
+                       if (defined $next) {
+                               add_depends($params{destpage}, $next);
+                               $nexturl = urlto($next, $page);
+                               $nexttitle = title_of($next);
+                       }
+
+                       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;
index c0ad5fc11476ef4442cb64e81c7f5580e3795942..d4eb005ea2485374410396b5323c3db0c6e6b191 100644 (file)
@@ -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);
                }
        }
 }
index 05132a8a81560a3ce0039b748ce0458d5742ad53..a90d202eef0c10fd480b00459c1238f58052b094 100644 (file)
@@ -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});
                }
        }
 }
index c39aa2ef7d678207ef86c938baef3f7af1933c30..06be36dfc8f17ad8247cace2880f21d8ce89b5fd 100644 (file)
@@ -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"));
index 0eb83ded614a2b4e2b2397bf8d2db897984317db..5617daf9e6a30dece748037dd6bebcfa8550dda6 100644 (file)
@@ -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,
index ceefb64e3d27af9482fa2cbeaff2d9d3010ec6b4..3e6075631856dd5cd833d44118a236d8090b43a7 100644 (file)
-ikiwiki (3.20120203) UNRELEASED; urgency=low
+ikiwiki (3.20121018) UNRELEASED; urgency=low
+
+  * filecheck: Fix bug that prevented File::MimeInfo::Magic from ever
+    being used.
+
+ -- Joey Hess <joeyh@debian.org>  Sun, 04 Nov 2012 11:59:10 -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
-  * 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.
   * 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>  Wed, 08 Feb 2012 16:07:00 -0400
+ -- Joey Hess <joeyh@debian.org>  Mon, 19 Mar 2012 14:24:43 -0400
 
 ikiwiki (3.20120202) unstable; urgency=low
 
index 7f8f011eb73d6043d2e6db9d2c101195ae2801f2..ec635144f60048986bc560c5576355344005e6e7 100644 (file)
@@ -1 +1 @@
-7
+9
index 54cbd0f7bef122ec7185295989b4513eb8c56f7e..9c6ab7ad989420c5fd1024a3ffd63c730ee7dc3d 100644 (file)
@@ -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/
 
index 8fddb682b74d6bee7d721d60ee2b2b6b8af5c2ea..e1a81932b2f0a5b8145aecbf33f73cb9063f20e5 100644 (file)
@@ -157,6 +157,10 @@ 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+
@@ -244,6 +248,10 @@ Files: underlays/themes/goldtype/*
 Copyright: © Lars Wirzenius
 License: GPL-2+
 
+Files: underlays/themes/monochrome/*
+Copyright: © 2012 Jon Dowland
+License: GPL-2+
+
 License: BSD-2-clause
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
index 012e52fa0a1e9b6017b02319f01a0262a3ea79be..12d193fe9a3af99e14441cd62df4e77e7db3fbcc 100644 (file)
@@ -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.
index c66534fc28a9e3fdb145ec62c7440d5872794ef7..e76bdb8d1b5aceaf23058561a030b4e281bfe9d5 100644 (file)
@@ -30,3 +30,5 @@ Bulleted list
 * item
 
 [[ikiwiki/WikiLink]]
+
+[[!calendar type="month" pages="blog/*"]]
index b7b9164acd0c8bcbc3cc96e5e0e2134af1933b56..232f2ce6a71f1cd14ca2b85d4d8dad2baf7c5e02 100644 (file)
@@ -20,6 +20,6 @@ Long-lived branches in the main git repository:
 * `ignore` gets various branches merged to it that [[Joey]] wishes to ignore
   when looking at everyone's unmerged changes.
 * `pristine-tar` contains deltas that
-  [pristine-tar](http://kitenet.net/~joey/code/pristine-tar)
+  [pristine-tar](http://joeyh.name/code/pristine-tar)
   can use to recreate released tarballs of ikiwiki
 * `setup` contains the ikiwiki.setup file for this site
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 (file)
index 0000000..81a5abf
--- /dev/null
@@ -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 (file)
index 0000000..de95fb7
--- /dev/null
@@ -0,0 +1,11 @@
+Hi folks,
+
+This is a fairly fresh wiki.  I recently noticed the Links: section the the bottom looked like this:
+
+Links: index recentchanges/change 0b2f03d3d21a3bb21f6de75d8711c73df227e17c recentchanges/change 1c5b830b15c4f2f0cc97ecc0adfd60a1f1578918 recentchanges/change 20b20b91b90b28cdf2563eb959a733c6dfebea7a recentchanges/change 3377cedd66380ed416f59076d69f546bf12ae1e4 recentchanges/change 4c53d778870ea368931e7df2a40ea67d00130202 recentchanges/change 7a9f3c441a9ec7e189c9df322851afa21fd8b00c recentchanges/change 7dcaea1be47308ee27a18f893ff232a8370e348a recentchanges/change 963245d4e127159e12da436dea30941ec371c6be recentchanges/change cd489ff4abde8dd611f7e42596b93953b38b9e1c ... 
+
+All of those "recentchanges/ change xxxxxxx" links are clickable, but all yield 404 when clicked.
+
+When I disable the CamelCase plugin and rebuild the wiki, all the Links other than index disappear, as they should.  Re-enable CamelCase, and they're back.
+
+This is a very simple wiki.  Just fresh, only one page other than index (this one), and nothing at all fancy/weird about it.
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 (file)
index 0000000..9ba4ede
--- /dev/null
@@ -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 (file)
index 0000000..a064547
--- /dev/null
@@ -0,0 +1,3 @@
+If I use the linkmap directive twice on a single page, I get the same image appearing in both locations, even though the parameters for the two directives may have been different.
+
+-- Martin
diff --git a/doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn b/doc/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting.mdwn
new file mode 100644 (file)
index 0000000..4c7b12e
--- /dev/null
@@ -0,0 +1,11 @@
+Say you are commenting on this report. The Navbar on top will look like
+
+[ikiwiki](http://ikiwiki.info/)/ [bugs](http://ikiwiki.info/bugs/)/ commenting on Navbar does not link to page being commented on while commenting
+
+while either of those two options would be better:
+
+[ikiwiki](http://ikiwiki.info/)/ [bugs](http://ikiwiki.info/bugs/)/ commenting on [Navbar does not link to page being commented on while commenting](http://ikiwiki.info/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting/)
+
+[ikiwiki](http://ikiwiki.info/)/ [bugs](http://ikiwiki.info/bugs/)/ [Navbar does not link to page being commented on while commenting](http://ikiwiki.info/bugs/Navbar_does_not_link_to_page_being_commented_on_while_commenting/) / New comment
+
+-- RichiH
diff --git a/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn b/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__.mdwn
new file mode 100644 (file)
index 0000000..e93f4e5
--- /dev/null
@@ -0,0 +1,47 @@
+Saving a wiki page in ikwiki or 
+<tt>ikiwiki --setup wiki.setup --rebuild</tt> takes a **dozen minutes** on a tiny tiny wiki (10 user-added pages)!
+
+I profiled ikiwiki with [[!cpan Devel::SmallProf]] : see [[users/mathdesc]] for details.
+
+And I came to the conclusion that [[plugins/filecheck]] on attachment was the only cause.
+It always go the fallback code using time-consuming file even there it's look like it's
+not successful. 
+
+<pre>
+ # Get the mime type.
+        #
+        # First, try File::Mimeinfo. This is fast, but doesn't recognise
+        # all files.
+        eval q{use File::MimeInfo::Magic};                    
+        my $mimeinfo_ok=! $@;                                     
+        my $mimetype;
+        if ($mimeinfo_ok) {
+                my $mimetype=File::MimeInfo::Magic::magic($file);
+        }                                                         
+        
+        # Fall back to using file, which has a more complete
+        # magic database.
+        if (! defined $mimetype) {
+                open(my $file_h, "-|", "file", "-bi", $file); 
+                $mimetype=<$file_h>;                                 
+                chomp $mimetype;                            
+                close $file_h;                   
+        }
+        if (! defined $mimetype || $mimetype !~s /;.*//) {
+                # Fall back to default value.
+                $mimetype=File::MimeInfo::Magic::default($file)
+                        if $mimeinfo_ok; 
+                if (! defined $mimetype) {
+                        $mimetype="unknown";
+                }                                                  
+        }        
+</pre>
+
+I found on [[plugins/filecheck/discussion/]] what [[users/DavidBremner/]] described as :
+> no way to detect text/plain using File::MimeInfo::Magic::magic()
+But I can't figure out if my issue is boarder and includes this or not.. 
+
+Any ideas , solve :) more that welcome.
+
+> [[done]], as isbear noted in [[discussion]], there was a bug that
+> prevented File::MimeInfo::Magic from ever being used. --[[Joey]]
diff --git a/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn b/doc/bugs/Slow_Filecheck_attachments___34__snails_it_all__34__/discussion.mdwn
new file mode 100644 (file)
index 0000000..629aba7
--- /dev/null
@@ -0,0 +1,141 @@
+##Foreword :
+Disabling of filecheck is not actually possible because btw it cause the attachment.pm to malfunction and
+any of pagespec that could contain a *mimetype* condition.
+
+attachment.pm imports "statically"  filecheck so actually disabling it should be *interdicted* .
+
+<pre>
+sub import {
+        add_underlay("attachment");
+        add_underlay("javascript");
+        add_underlay("jquery");
+        hook(type => "getsetup", id => "attachment", call => \&getsetup);
+        hook(type => "checkconfig", id => "attachment", call => \&checkconfig);
+        hook(type => "formbuilder_setup", id => "attachment", call => \&formbuilder_setup);
+        hook(type => "formbuilder", id => "attachment", call => \&formbuilder, last => 1);
+        IkiWiki::loadplugin("filecheck");
+}
+</pre>
+
+----
+
+## How bad is it ?
+
+So I tried on three pages to inline <tt>!mimetype(image/*)</tt> while I allowed attachment of <tt>mimetype(image/*)</tt>
+
+My profiling tests in the bug report shows that most of the time is spend in the "Fallback using file" block code,
+I tried to comment that block and see how it'll perform. Obviously this is much much faster ... but is the mimetype
+discovered using only *File::MimeInfo* ?
+
+
+Dumping some strings before return to STDERR, rebuilding . This is just a  [[!toggle  id="code-test" text="dumpdebug adding"]] 
+
+[[!toggleable  id="code-test" text="""
+<pre>
+sub match_mimetype ($$;@) {
+        my $page=shift;
+        my $wanted=shift;
+
+        my %params=@_;
+        my $file=exists $params{file} ? $params{file} : IkiWiki::srcfile($IkiWiki::pagesources{$page});
+        if (! defined $file) {
+                return IkiWiki::ErrorReason->new("file does not exist");
+        }
+
+        # Get the mime type.
+        #
+        # First, try File::Mimeinfo. This is fast, but doesn't recognise
+        # all files.
+        eval q{use File::MimeInfo::Magic};
+        my $mimeinfo_ok=! $@;
+        my $mimetype;
+        print STDERR " --- match_mimetype (".$file.")\n";
+        if ($mimeinfo_ok) {
+                my $mimetype=File::MimeInfo::Magic::magic($file);
+        }
+
+        # Fall back to using file, which has a more complete
+        # magic database.
+        #if (! defined $mimetype) {
+        #       open(my $file_h, "-|", "file", "-bi", $file);
+        #       $mimetype=<$file_h>;
+        #       chomp $mimetype;
+        #       close $file_h;
+        #}
+
+        if (! defined $mimetype || $mimetype !~s /;.*//) {
+                # Fall back to default value.
+                $mimetype=File::MimeInfo::Magic::default($file)
+                        if $mimeinfo_ok;
+                if (! defined $mimetype) {
+                        $mimetype="unknown";
+                }
+        }
+
+        my $regexp=IkiWiki::glob2re($wanted);
+        if ($mimetype!~$regexp) {
+                 print STDERR " xxx MIME unknown ($mimetype - $wanted - $regexp ) \n";
+                return IkiWiki::FailReason->new("file MIME type is $mimetype, not $wanted");
+        }
+        else {
+                print STDERR " vvv MIME found\n";
+                return IkiWiki::SuccessReason->new("file MIME type is $mimetype");
+        }
+}
+</pre>
+"""]]
+
+The results dump to stderr (or a file called... 'say *mime*) looks like this :
+<pre>
+--- match_mimetype (/usr/share/ikiwiki/attachment/ikiwiki/jquery.fileupload-ui.js)
+ xxx MIME unknown (text/plain - image/* - (?i-xsm:^image\/.*$) )
+ --- match_mimetype (/usr/share/ikiwiki/locale/fr/directives/ikiwiki/directive/fortune.mdwn)
+ xxx MIME unknown (text/plain - image/* - (?i-xsm:^image\/.*$) )
+ --- match_mimetype (/usr/share/ikiwiki/locale/fr/basewiki/shortcuts.mdwn)
+ xxx MIME unknown (text/plain - image/* - (?i-xsm:^image\/.*$) 
+ --- match_mimetype (/usr/share/ikiwiki/smiley/smileys/alert.png)
+ xxx MIME unknown (application/octet-stream - image/* - (?i-xsm:^image\/.*$) )
+ --- match_mimetype (/usr/share/ikiwiki/attachment/ikiwiki/images/ui-bg_flat_75_ffffff_40x100.png)
+ xxx MIME unknown (application/octet-stream - image/* - (?i-xsm:^image\/.*$) 
+</pre>
+
+<tt>---</tt> prepend signals the file on analysis<br/>
+<tt>xxx</tt> prepend signals a returns failure : mime is unknown, the match is a failure<br/>
+<tt>vvv</tt> prepend signals a return success.<br/>
+
+
+This is nasty-scary results ! Something missed me or this mime-filecheck is plain nuts ?
+
+*Question 1* : How many files have been analysed : **3055** (yet on a tiny tiny wiki)
+<pre>grep "^ --- " mime | wc -l
+3055
+</pre>
+
+*Question 2* : How many time it fails : *all the time*
+<pre>
+ grep "^ xxx " mime | wc -l
+3055
+</pre>
+
+*Question 1bis*  : Doh btw , how many files have been re-analysed ?  ** 2835 ** OMG !!
+<pre>grep "^ --- " mime | sort -u | wc -l
+220
+</pre>
+
+## Conclusion
+
+- Only the system command *file -bi* works. While it is **should** be easy on the cpu , it's also hard on the I/O -> VM :( 
+- Something nasty with the mime  implementation and/or my system configuration -> Hints ? :D
+- Need to cache during the rebuild : a same page needs not being rechecked for its mime while it's locked !
+
+
+--mathdesc
+
+> >        if ($mimeinfo_ok) {
+> >                my $mimetype=File::MimeInfo::Magic::magic($file);
+> >        }
+> 
+> That seems strange to me, `my` restricts scope of $mimetype to enclosing if block, thus, assigned value will be dropped - I think, it is the problem.
+> Try removing that stray `my`.
+>
+> --isbear
diff --git a/doc/bugs/Underscores_in_links_don__39__t_appear.mdwn b/doc/bugs/Underscores_in_links_don__39__t_appear.mdwn
new file mode 100644 (file)
index 0000000..b25dfb7
--- /dev/null
@@ -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]]
index 3c28e379bdd7fdbeb758e0bf6d87aa9cd9e95086..34eecef8c59db55b775792cb64e90d2cf2b2ea4c 100644 (file)
@@ -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/bug_in_cgiurl_port.mdwn b/doc/bugs/bug_in_cgiurl_port.mdwn
new file mode 100644 (file)
index 0000000..3736578
--- /dev/null
@@ -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 (file)
index 0000000..4f2ec66
--- /dev/null
@@ -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]]
index 23b9fd2ccc3435ae143deb5aaaa9a28c01daa901..1ba142331dd0804b63a25f6d3c48d171c8f5ef00 100644 (file)
@@ -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 (file)
index 0000000..a72206b
--- /dev/null
@@ -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 (file)
index 0000000..deec208
--- /dev/null
@@ -0,0 +1,57 @@
+For some time now, in circumstances that I've had enormous troubles
+trying to track, I've seen feeds getting removed by ikiwiki when
+apparently unrelated pages got changed, with the message:
+
+> removing somepath/somepage/somefeed, no longer built by some/unrelated/page
+
+I've finally been able to find how and why it happens. The situation is
+the following:
+
+* page A has an inline directive that (directly) generates a feed F
+* page B inlines A, thus (indirectly) generating F again
+* page B is rendered after page A
+
+The feed removal happens when changes are made to prevent B from
+inlining A; for example, because B is a tag page and A is untagged B, or
+because B includes A through a pagespec that no longer matches A. In
+this case, this happens:
+
+* page A is built, rendering F
+* page B is built, _not_ rendering F, which it used to render
+* F is removed because it is not built by B anymore
+
+Note that although this issue is triggered (for me) from the changes I
+proposed last year to allow feed generation from nested inlines
+coalescing it to be page-based instead of destpage-based
+(bb8f76a4a04686def8cc6f21bcca80cb2cc3b2c9 and
+72c8f01b36c841b0e83a2ad7ad1365b9116075c5) there is potential for it
+popping up in other cases.
+
+Specifically, the logic for the removal of dependent pages currently
+relies on the assumption that each output has a single generator. My
+changes caused this assumption to be violated, hence the error, but
+other cases may pop up for other plugins in the future.
+
+I have a [patch] fixing this issue (for feeds specifically, i.e. only
+the problem I am actually having) on top of my `mystuff` branch, but
+since that also has heaps of other unrelated stuff, you may want to just
+[pick it from my gitweb][gw].
+
+[gw]: (http://git.oblomov.eu/ikiwiki/patch/671cb26cf50643827f258270d9ac8ad0b1388a65)
+
+The patch changes the `will_render()` for feeds to be based on the page
+rather than on the destpage, matching the fact that for nested inlines
+it's the inner page that is ultimately responsible for generating the
+feed.
+
+I've noticed that it requires at least _two_ full rebuilds before the
+index is again in a sensible state. (On the first rebuild, all feeds
+from nested inlines are actually _removed_.)
+
+While the patch is needed because there are legitimate cases in which
+nested feeds are needed (for example, I have an index page that inlines
+index pages for subsection of my site, and I want _those_ feed from
+being visible), there are other cases when one may want to skip feed
+generation from nested inlines.
+
+--[[GiuseppeBilotta]]
diff --git a/doc/bugs/graphviz_demo_generates_empty_graph.mdwn b/doc/bugs/graphviz_demo_generates_empty_graph.mdwn
new file mode 100644 (file)
index 0000000..5b96f14
--- /dev/null
@@ -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 (file)
index 0000000..9039165
--- /dev/null
@@ -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/linkmap_displays_underscore_escapes.mdwn b/doc/bugs/linkmap_displays_underscore_escapes.mdwn
new file mode 100644 (file)
index 0000000..f74ca51
--- /dev/null
@@ -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 (file)
index 0000000..6b56c55
--- /dev/null
@@ -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 (file)
index 0000000..26945ee
--- /dev/null
@@ -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]]
index 20d5dc8e64407fd88a7b03b4b08049f1d15df47b..bd5ddc6d5a0dc2b3ff4f5d4c7e2c14e016092396 100644 (file)
@@ -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 (file)
index 0000000..486be03
--- /dev/null
@@ -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/discussion.mdwn b/doc/bugs/opendiscussion_should_respect_the_discussion_option/discussion.mdwn
new file mode 100644 (file)
index 0000000..a5c9516
--- /dev/null
@@ -0,0 +1,26 @@
+This would be great to see fixed. It's perplexing to have discussion => 0 in my configuration, not have any discussion links on my site, but still be able to add a discussion page by URL hacking something like this: /cgi-bin/ikiwiki/ikiwiki.cgi?page=posts%2Fdiscussion&do=edit.
+
+spammers have figured that little trick out so I am consitently getting spammed checked into my git repository.
+
+I'm not really sure if this patch introduced other problems, but it seems to have fixed my site:
+
+               0 mcclelland@chavez:~/.ikiwiki/IkiWiki/Plugin$ diff -u /usr/share/perl5/IkiWiki/Plugin/opendiscussion.pm opendiscussion.pm 
+               --- /usr/share/perl5/IkiWiki/Plugin/opendiscussion.pm   2012-05-07 11:31:24.000000000 -0400
+               +++ opendiscussion.pm   2012-07-29 17:49:28.000000000 -0400
+               @@ -25,7 +25,7 @@
+                       my $cgi=shift;
+                       my $session=shift;
+                
+               -       return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/i;
+               +       return "" if $page=~/(\/|^)\Q$config{discussionpage}\E$/i && $config{discussion};
+                       return "" if pagespec_match($page, "postcomment(*)");
+                       return undef;
+                }
+               1 mcclelland@chavez:~/.ikiwiki/IkiWiki/Plugin$  
+
+If libdir is configured to be ~/.ikiwiki in your ikiwiki.settings file, and you are running Debian, you can do the following:
+
+               mkdir -p ~/.ikiwiki/IkiWiki/Plugin
+               cp /usr/share/perl5/IkiWiki/Plugin/opendiscussion.pm ~/.ikiwiki/IkiWiki/Plugin/
+
+And then apply the patch above to ~/.ikiwiki/Ikiwiki/Plugin/opendiscussion.pm.
diff --git a/doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn b/doc/bugs/osm_KML_maps_do_not_display_properly_on_google_maps.mdwn
new file mode 100644 (file)
index 0000000..2b20240
--- /dev/null
@@ -0,0 +1,14 @@
+[[!template  id=gitbranch branch=anarcat/master author="[[anarcat]]"]]
+
+I know this sounds backwards, but it seems to me that the KML-generated map should be displayable on google maps. KML is the standard Google uses for google maps, and since we use it, we should interoperate with them. God knows why this is failing, but it is and should probably be fixed for the sake of interoperability: <https://maps.google.ca/maps?q=http:%2F%2Fwiki.reseaulibre.ca%2Fmap%2Fpois.kml> -- [[users/anarcat]]
+
+> The KML only needs a Document tag because it uses "shared styles" -- don't ask me what this is. Here is a [[patch]]: [[https://reseaulibre.deuxpi.ca/0001-Add-Document-tag-to-OSM-plugin-KML-output.patch]] --[[deuxpi]]
+
+> > I applied the patch to my master branch and tested it on the above URL: it works... mostly. The icons for the elements on the actual map seem incorrect (some are the proper icons, some others are the ugly default blue pin of google maps, weird) but I think this is a step in the right direction. Thus, this should be merged. -- [[anarcat]]
+
+>>> I've cherry-picked this patch, but from the description it does not
+>>> sound "fixed" enough to close this bug. (OTOH, perhaps only google can
+>>> fix it, so it people are happy with the state of affairs I won't insist
+>>> this bug be left open.) --[[Joey]]
+
+> > > > I am happy with this right now, so let's mark this as [[done]]. I do agree this seems like a google bug, so let's move on. --[[anarcat]]
diff --git a/doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn b/doc/bugs/osm_KML_maps_icon_path_have_a_trailing_slash.mdwn
new file mode 100644 (file)
index 0000000..0677d0e
--- /dev/null
@@ -0,0 +1,32 @@
+This is not a problem on Apache webservers because they, oddly enough, ignore trailing slashes on paths (maybe some `PATH_INFO` magic, no idea). But basically, in our wiki, the paths to the icon tags are generated with a trailing slash. An excerpt of our [KML file](http://wiki.reseaulibre.ca/map/pois.kml):
+
+    <Style id="/tag/up">
+    <IconStyle>
+    <Icon>
+    <href>http://wiki.reseaulibre.ca//tag/up/icon.png/</href>
+    </Icon>
+    </IconStyle>
+    </Style>
+
+Notice the trailing `/` after the `icon.png`. This breaks display on nginx - the file that gets served isn't the icon, but the frontpage for some reason. I followed the [[setup instructions|tips/dot cgi]] for Nginx that I just had to write because there weren't any, so maybe I screwed up some part, but it does seem to me that the trailing slash is wrong regardless.
+
+(Also notice how the style tag is being turned over backwards by the HTML sanitizer here, cute. :P)
+
+I wrote a crude hack for this, but this strikes me as a similar problem to the one we found in [[bugs/osm linkto() usage breaks map rendering]]. However, I am at a loss how to fix this cleanly because we cannot `will_render()` the tag icons, as they are already generated out there! Weird. Anyways, here's the stupid [[patch]]:
+
+[[!format diff """
+diff --git a/IkiWiki/Plugin/osm.pm b/IkiWiki/Plugin/osm.pm
+index a7baa5f..c9650d0 100644
+--- a/IkiWiki/Plugin/osm.pm
++++ b/IkiWiki/Plugin/osm.pm
+@@ -192,6 +192,7 @@ sub process_waypoint {
+                }
+        }
+        $icon = urlto($icon, $dest, 1);
++       $icon =~ s!/*$!!; # hack - urlto shouldn't be appending a slash in the first place
+        $tag = '' unless $tag;
+        register_rendered_files($map, $page, $dest);
+        $pagestate{$page}{'osm'}{$map}{'waypoints'}{$name} = {
+"""]]
+
+I'm not writing this to a branch out of sheer shame of my misunderstanding. ;) There also may be a workaround that could be done in Nginx too. --[[anarcat]]
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 (file)
index 0000000..89c08b7
--- /dev/null
@@ -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 (file)
index 0000000..9de1b4e
--- /dev/null
@@ -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]]
index c6e3cd4fd3326c09c08e629ab795318e7cb1a67f..15d28f9893865855c5817ca4ab860acffdf3c341 100644 (file)
@@ -279,3 +279,11 @@ So, looking at your meta branch: --[[Joey]]
 >>>> for the po plugin, because I want to merge the po plugin soon.
 >>>> If #2 gets tackled later, we will certianly have all kinds of fun.
 >>>> no matter what is done for the po plugin. --[[Joey]] 
+
+>>>>> For the record: I've gotten used to the lack of this feature,
+>>>>> and it now seems much less important to me than it was when
+>>>>> initially developing the po plugin. So, I'm hereby officially
+>>>>> removing this from my plate. If anyone else wants to start from
+>>>>> scratch, or from my initial work, I'm happy to review the
+>>>>> po-related part of things -- just drop me an email in this
+>>>>> case. --[[intrigeri]]
index 2667a2b8318cfdecddafb4caa9d1b1efd1913737..4843b59007b82d50a062a46d0fb033c976033268 100644 (file)
@@ -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 (file)
index 0000000..fd7a80b
--- /dev/null
@@ -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/trail_shows_on_cgi_pages.mdwn b/doc/bugs/trail_shows_on_cgi_pages.mdwn
new file mode 100644 (file)
index 0000000..74f329f
--- /dev/null
@@ -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 (file)
index 0000000..a3b7159
--- /dev/null
@@ -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]] 
index 3eb1542d377e0e19875adde9c7a2d7b5fe815d33..702608831bb618b2e430eacc239312efc4f548bc 100644 (file)
@@ -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]]
index b2a8b06323cd7f497918d748eb0b710ef981b10f..9f0a1d1022459d4a00cfbbec88dcf2c86281c0b4 100644 (file)
@@ -46,4 +46,22 @@ and have it render like:
 > there should give some strong hints how to fix this bug, though I haven't
 > tried to apply the method yet. --[[Joey]]
 
+>> As far, as I can see, smileys bug is solved by checking for code/pre. In
+>> this case, however, this is not applicable. WikiLinks/directives *should* be
+>> expanded before passing text to formatter, as their expansion may contain
+>> markup. Directives should be processed before, as they may provide *partial*
+>> markup (eg `template` ones), that have no sense except when in the page
+>> cotext. Links should be processed before, because, at least multimarkdown may
+>> try to expand them as anchor-links.
+>>
+>> For now, my partial solution is to restrict links to not have space at the
+>> start, this way in many cases escaping in code may be done in natural way
+>> and not break copypastability. For example, shell 'if \[[ condition ]];'
+>> will work fine with this.
+>>
+>> Maybe directives can also be restricted to only be allowed on the line by
+>> themselves (not separated by blank lines, however) or something similar.
+>>
+>> --[[isbear]]
+
 [[!debbug 487397]]
index bf311c19878e02e9437a99adac6caccf1ce7f693..5f7450b799a0f955e4f083a1073bac8549f49800 100644 (file)
@@ -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]]
index 486a4d1864a2e731cb9d7d6cd6bc37c9f2705609..7d31ddf1078cdce298ced4ff5c30e66583a585be 100644 (file)
@@ -4,7 +4,7 @@ ikiwiki's own wiki. ikiwiki provides a [[bug_tracker|bugs]], a
 [[TODO_list|TODO]], and "discussion" sub-pages for every page, as well as a
 [[forum]] for general questions and discussion. ikiwiki
 developers monitor [[RecentChanges]] closely, via the webpage, email,
-[CIA](http://cia.navi.cx), and IRC, and respond in a timely fashion.
+and IRC, and respond in a timely fashion.
 
 You could also drop by the IRC channel `#ikiwiki` on
 [OFTC](http://www.oftc.net/) (`irc.oftc.net`), or use the
index 871cd31fe5fe533ebe2e35371261412b00854092..fd4fbeac3398dda08a5c4bcae0b20c8e711272a6 100644 (file)
@@ -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.
index 3f562702871c8db32d9c6ec6c31782571d855827..c9c6694e7eb097679d899be4b47e833d3c493188 100644 (file)
@@ -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/)
index 08e014838008bc1c31adb7ccbc2cc69980ec390b..2bd0f1d6f218b8b842f7f0d8e6a417c9a4114c37 100644 (file)
@@ -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 (file)
index 0000000..cece641
--- /dev/null
@@ -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 (file)
index 0000000..c0b8965
--- /dev/null
@@ -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 (file)
index 0000000..1d710d1
--- /dev/null
@@ -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 (file)
index 0000000..6c709b3
--- /dev/null
@@ -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 (file)
index 0000000..6bda934
--- /dev/null
@@ -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 (file)
index 0000000..91d7aee
--- /dev/null
@@ -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 (file)
index 0000000..8271009
--- /dev/null
@@ -0,0 +1,8 @@
+Is it possible to put two different background pictures into the right and left sides of the following ikiwiki css?
+
+[lessish css theme](https://raw.github.com/spiffin/ikiwiki_lessish/master/lessish.css)
+
+Is it also possible to have a background like this: [http://ysharifi.wordpress.com/](http://ysharifi.wordpress.com/)
+or this [tex.stackexchange.com](tex.stackexchange.com)
+
+I am not a css expert so, it would be nice if you could provide some details.
diff --git a/doc/forum/CGI_script_and_HTTPS.mdwn b/doc/forum/CGI_script_and_HTTPS.mdwn
new file mode 100644 (file)
index 0000000..2f25500
--- /dev/null
@@ -0,0 +1,29 @@
+Dear ikiwiki folks,
+
+using Debian Wheezy and ikiwiki 3.20120629 for some reason when accessing the site using HTTP (and not HTTPS), going to Edit, so executing the CGI script, all URLs are prepended with HTTPS, which I do not want.
+
+        <base href="https://www.example.org/" />
+
+Trying to look at the source, I guess it is originating from `IkiWiki/CGI.pm`.
+
+        sub printheader ($) {
+               my $session=shift;
+       
+               if (($ENV{HTTPS} && lc $ENV{HTTPS} ne "off") || $config{sslcookie}) {
+                       print $session->header(-charset => 'utf-8',
+                               -cookie => $session->cookie(-httponly => 1, -secure => 1));
+               }
+               else {
+                       print $session->header(-charset => 'utf-8',
+                               -cookie => $session->cookie(-httponly => 1));
+               }
+        }
+
+Does it check if HTTPS is enabled in the environment? During `ikiwiki --setup example.setup` or when the CGI script is run when the site is accessed (for example in an Apache environment)?
+
+Can this somehow be disabled in ikiwiki. Reading the code I guess I could somehow set `HTTPS = off` somewhere in the `VirtualHost` section of the Apache configuration.
+
+
+Thanks,
+
+--[[PaulePanter]]
diff --git a/doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment b/doc/forum/CGI_script_and_HTTPS/comment_1_3f8ef438ca7de11635d4e40080e7baa9._comment
new file mode 100644 (file)
index 0000000..03f1032
--- /dev/null
@@ -0,0 +1,43 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-11-05T11:27:02Z"
+ content="""
+IkiWiki generates self-referential URLs using the `url` and `cgiurl`
+configuration parameters, and the `urlto()` and `cgiurl()` functions;
+the code you quoted isn't involved (it's choosing whether to set
+HTTPS-only cookies or not, rather than choosing how to generate
+self-referential URLs).
+
+If you want your wiki to be accessible via both HTTP and HTTPS, and use
+whichever the user first requested, you should set both `url` and
+`cgiurl` to the same URI scheme and hostname with no port specified,
+either both `http` or both `https`, for instance:
+
+    url: http://www.example.com/
+    cgiurl: http://www.example.com/ikiwiki.cgi
+
+or
+
+    url: https://example.org/wiki/
+    cgiurl: https://example.org/cgi-bin/ikiwiki
+
+(or the Perl-syntax equivalents if you're not using a YAML
+setup file).
+
+If you use one of those, IkiWiki will attempt to generate
+path-only links, like \"/wiki/\" and \"/cgi-bin/ikiwiki?...\",
+whenever it's valid to do so. A visitor using HTTP will stay
+on HTTP and a visitor using HTTPS will stay on HTTPS.
+
+The choice of `http` or `https` for the `url` and `cgiurl`
+still matters when a URL *must* be absolute, such as in an
+RSS feed.
+
+I improved this code in late 2010 for this todo item:
+[[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]].
+It's possible that it has regressed (that's happened
+a couple of times). If it has, please quote your exact
+`url` and `cgiurl` configuration.
+"""]]
index ebea43697b8ef745225ffc5ac6e3f8be8a7da2ed..251cd6d9f9cfb22e5c92651dce6f02a426308316 100644 (file)
@@ -15,3 +15,5 @@ I'm not sure how I go about swapping the link on the day number to a link to, I
 and a suitable whilst loop looks to be all that's needed...
 
 Any pointers appreciated.
+
+A [[!taglink patch]] has been proposed in [comment](#comment-d6f94e2b779d1c038b6359aad79ed14b)
diff --git a/doc/forum/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 (file)
index 0000000..fef8520
--- /dev/null
@@ -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 (file)
index 0000000..0c8ca3b
--- /dev/null
@@ -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 (file)
index 0000000..1a9391e
--- /dev/null
@@ -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 (file)
index 0000000..e45069c
--- /dev/null
@@ -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 (file)
index 0000000..5aa5af0
--- /dev/null
@@ -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 (file)
index 0000000..f464232
--- /dev/null
@@ -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 (file)
index 0000000..7ad6f28
--- /dev/null
@@ -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 (file)
index 0000000..452fc94
--- /dev/null
@@ -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:___34__do__34___parameter_missing.mdwn b/doc/forum/Error:___34__do__34___parameter_missing.mdwn
new file mode 100644 (file)
index 0000000..402217e
--- /dev/null
@@ -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 (file)
index 0000000..a01a334
--- /dev/null
@@ -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 (file)
index 0000000..dd2fdb2
--- /dev/null
@@ -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 (file)
index 0000000..5e30b08
--- /dev/null
@@ -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 (file)
index 0000000..3716a14
--- /dev/null
@@ -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_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn b/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__.mdwn
new file mode 100644 (file)
index 0000000..537ba61
--- /dev/null
@@ -0,0 +1,3 @@
+How to add additional links to the gray horizontable bar under page title?  
+
+What I meant by the gray horizontable bar shows "Edit RecentChanges Preferences".  I want to disable those three but add some other links to other pages in my website.
diff --git a/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment b/doc/forum/How_to_add_additional_links_to_the_gray_horizontable_bar_under_page_title__63__/comment_1_f2e52d38f60888c7d5142de853123540._comment
new file mode 100644 (file)
index 0000000..1bb3fa7
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmb2CAGUNU_Kx6YSImD2ox6MtjuaM6Jp1E"
+ nickname="Nicolas"
+ subject="comment 1"
+ date="2012-11-09T08:34:42Z"
+ content="""
+You could use custom templates and hardcode those links there.
+"""]]
diff --git a/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__.mdwn
new file mode 100644 (file)
index 0000000..3f771e7
--- /dev/null
@@ -0,0 +1,14 @@
+In a Ikiwiki instance, I made a subdirectory to hold blog pages
+
+    /website
+    blog.mdwn
+    ...
+
+    /website/blog
+    /website/blog/blog1.mdwn
+    /website/blog/blog2.mdwn
+    ...
+
+On blog.mdwn,  reader by default see the last 10 posts, but it seems there is no link to blog pages older than that. What's a good way to make titles of blog pages older also somehow visible to reader at the blog front page `blog.mdwn`?
+
+On any individual blog page such as `blog1.mdwn`, there is not a link to the blog pages immediately before and after it. How to make such links?
diff --git a/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_1_aad510f45be505efaabcb6fb860665a4._comment
new file mode 100644 (file)
index 0000000..ce99b84
--- /dev/null
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="use trail=yes, and an extra inline with archive=yes"
+ date="2012-08-04T17:22:18Z"
+ content="""
+To get just the titles of older posts, you want an inline with
+`archive=\"yes\"`, probably one that skips the same number of posts
+displayed in full:
+
+    [[!inline pages=\"blog/* and !*/Discussion\"
+      skip=\"10\" feeds=\"no\" archive=\"yes\"]]
+
+To get 'next' and 'previous' links on each post, use a recent
+IkiWiki version, enable the [[plugins/trail]] plugin and add
+`trail=\"yes\"` to your main inline:
+
+    [[!inline pages=\"blog/* and !*/Discussion\"
+      show=\"10\" trail=\"yes\"]]
+
+For instance see
+[my blog](http://git.pseudorandom.co.uk/pseudorandom.co.uk/smcv.git/blob/83e9a713d77778b58460ed04f6c48665d817f3cd:/index.mdwn).
+"""]]
diff --git a/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment b/doc/forum/How_to_add_link_to_previous_and_next_blog_on_blog_pages__63__/comment_2_ee65792a5b796caa216f4e7a653fc668._comment
new file mode 100644 (file)
index 0000000..5546c47
--- /dev/null
@@ -0,0 +1,23 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmKyeW2G4jjSdnL1m6kPPtAiGFUBsnYCfY"
+ nickname="FName"
+ subject="How to install the trail package?"
+ date="2012-08-09T00:11:26Z"
+ content="""
+I tried putting
+
+trail 
+
+in
+
+    add_plugins => [qw{ 
+    ...
+    trail
+    ...
+    }]
+
+in site.setup and rebuild.  It gives error
+
+    Failed to load plugin IkiWiki::Plugin::trail: Can't locate IkiWiki/Plugin/trail.pm in @IN ...
+
+"""]]
diff --git a/doc/forum/How_to_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 (file)
index 0000000..75d98fe
--- /dev/null
@@ -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 (file)
index 0000000..524852f
--- /dev/null
@@ -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_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn b/doc/forum/How_to_generate_blog_archive_pages_in___47__blog_subdir_but_not_ikiwiki_root_path__63__.mdwn
new file mode 100644 (file)
index 0000000..e4901d7
--- /dev/null
@@ -0,0 +1,26 @@
+My Ikiwiki and blog has structure
+
+    /website
+    blog.mdwn
+    ...
+
+    /website/blog
+    /website/blog/blog1.mdwn
+    /website/blog/blog2.mdwn
+    ...
+
+After running
+
+    ikiwiki-calendar ./foo.setup "/blog/*"
+
+I got a
+
+   /website/archives/
+
+and archive pages in it.
+
+I'd like to have it in 
+
+   /website/blog/archives/
+
+as those are archive pages for blog pages only.  How to do it?
diff --git a/doc/forum/How_to_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 (file)
index 0000000..528a48b
--- /dev/null
@@ -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 (file)
index 0000000..e0d6829
--- /dev/null
@@ -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 (file)
index 0000000..2d7c02a
--- /dev/null
@@ -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_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn b/doc/forum/How_to_style_main_sidebar_and_SubPage_sidebar_differently_using_CSS__63__.mdwn
new file mode 100644 (file)
index 0000000..09cf014
--- /dev/null
@@ -0,0 +1,13 @@
+How to style main sidebar and SubPage sidebar differently using CSS?
+
+I have a main sidebar
+
+   /sidebar.mdwn
+
+and a SubPage sidebar
+
+  /blog/sidebar.mdwn
+
+How to style the two differently using CSS?
+
+For example I'd like the sidebar shown on any page inside /blog to have a blue border and any other page outside of /blog to have a sidebar with red border.
diff --git a/doc/forum/Include_attachment_in_a_page.mdwn b/doc/forum/Include_attachment_in_a_page.mdwn
new file mode 100644 (file)
index 0000000..e4a5a53
--- /dev/null
@@ -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 (file)
index 0000000..a6f9956
--- /dev/null
@@ -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 (file)
index 0000000..03125d2
--- /dev/null
@@ -0,0 +1,8 @@
+Hi,
+Is there a way of making a given ikiwiki instance accessible both from the LAN where it's server is and from the WAN?
+
+Say I have ikiwiki installed on a server connected to a router. That router has  port forwarding and dyndns configured so I could open ikiwiki from outside the LAN. Trying to open normal ikiwiki pages, from outside the LAN, or with a proxy, works. However, the Editing and Preferences pages, for example, redirect to http://192.168.x.x/~username/ikiwiki/ikiwiki.cgi?page=posts%2Fhello_world&do=edit (in the case of the edit page), which of course only exists inside the LAN, and fails loading.
+
+Editing the "url" and "cgiurl" directives in the .setup file to point to the dyndns address makes it work from the outside, but I can't edit the pages from inside the LAN anymore with this configuration. The normal pages, once again, are accessible. Edit or Preferences, on the other hand, redirect to the public address, which I can't open from inside the same LAN it points to.
+
+For this reason I ask, is there an way to have multiple urls point to the same ikiwiki page, namely a LAN IP url and a public IP one? Thanks in advance.
diff --git a/doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment b/doc/forum/Multiple_urls/comment_1_e4c1256346d5a421161c20e344d8bada._comment
new file mode 100644 (file)
index 0000000..9806f53
--- /dev/null
@@ -0,0 +1,22 @@
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ ip="60.241.8.244"
+ subject="A Few Ways To Do This"
+ date="2012-10-09T02:02:09Z"
+ content="""
+I don't think one can alter IkiWiki to have multiple URLs, because the URL is built in to the CGI when the CGI is generated.
+
+1. Use the external hostname (say, foo.com) for the URL, and tell your local machine that foo.com has an IP of 192.168.x.x, thus making it accessible from within the LAN.
+2. Give the URL as a relative-absolute URL; that is, rather than \"http://foo.com/ikiwiki.cgi\" give it as \"/ikiwiki.cgi\". This doesn't always work, though.
+3. Build two versions of the site from the same git repo. One for access from inside, and one for access from outside. Both setup files would need to be identical, apart from
+
+    * the destination directory
+    * the URLs
+    * the git-update file name; one would need to call it something other than post-update.
+    
+    Then one would make a new \"post-update\" file which calls *both* of the ikiwiki post-update scripts, so that both versions of the site are updated when you make a change.
+    Then set up your web-server to point to the \"external\" directory for the external site, and the \"internal\" directory for the internal site; easy enough to do if you use virtual hosts.
+
+Yes, I know the third one is somewhat complex... I use the idea myself in order to make two versions of a site where one is editable and the other is not, but that's not what you're aiming for, I know.
+
+"""]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude/comment_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_5_39b01857f7e0b388a6e7a3c1cf5388d5._comment
new file mode 100644 (file)
index 0000000..17228b8
--- /dev/null
@@ -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 (file)
index 0000000..d93684d
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkiulxucQx_YZQZUVJdNF6oMaZwWb8JF2M"
+ nickname="Martin"
+ subject="Reproduced"
+ date="2012-07-25T02:23:13Z"
+ content="""
+I also encountered this bug (having to delete indexdb) in 3.20120629.
+
+-- Martin
+"""]]
diff --git a/doc/forum/Parent_Links_all_link_to_root.mdwn b/doc/forum/Parent_Links_all_link_to_root.mdwn
new file mode 100644 (file)
index 0000000..b9c4c8e
--- /dev/null
@@ -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 (file)
index 0000000..656cc0f
--- /dev/null
@@ -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/comment_1_c505be6a13651c397fb803dd4117acce._comment b/doc/forum/Problem_with_gitweb/comment_1_c505be6a13651c397fb803dd4117acce._comment
deleted file mode 100644 (file)
index 0a492fa..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawk_MMtLPS7osC5MjX00q2ATjvvXPWqm0ik"
- nickname="micheal"
- subject="comment 1"
- date="2012-03-05T18:44:36Z"
- content="""
-Any Ideas what I could do?
-"""]]
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 (file)
index 0000000..c8bbe9b
--- /dev/null
@@ -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 (file)
index 0000000..242ce89
--- /dev/null
@@ -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 (file)
index 0000000..e9dfdb4
--- /dev/null
@@ -0,0 +1,42 @@
+I have a problem when I edit my wiki with a text editor and use just git to commit. 
+
+Suppose `iki` is my scrdir and `iki.git` my repository. Then I did `git clone iki.git myiki` to get a copy. Then I do 
+
+    cd myiki 
+    echo "test" >> somepage.mdwm"
+    git add somepage.mdwm
+    git pull 
+    git commit -m "test"
+    git push
+
+Then I get the following error message
+
+    Counting objects: 5, done.        
+    Delta compression using up to 2 threads.
+    Compressing objects: 100% (2/2), done.
+    Writing objects: 100% (3/3), 287 bytes, done.
+    Total 3 (delta 1), reused 0 (delta 0)
+    Unpacking objects: 100% (3/3), done.
+    remote: From /home/myuser/iki
+    remote:    32bb6be..1f3a647  master     -> origin/master
+    remote: There are no candidates for merging among the refs that you just fetched.
+    remote: Generally this means that you provided a wildcard refspec which had no
+    remote: matches on the remote end.
+    remote: 'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 207.
+    remote: skipping bad filename local.css~
+    remote: skipping bad filename #tex_sandbox.mdwn#
+    To /home/myuser/iki.git
+       32bb6be..1f3a647  master -> master
+
+When I check the repository via gitk I see that everything seems to be ok, if I check the scrdir the same way origin master is one step away from master and the change doesn't appear on the iki web page. Then I tried to do a `sudo git pull --prune origin master` in my scrdir which sets master to the head, but the change isn't there anyway. It foremost appears when I do a second change as above or if I do `sudo ikiwiki --setup iki.setup`.
+
+By the way the setup gives me a similar error message:
+
+    successfully generated /var/www/iki/ikiwiki.cgi  
+    successfully generated /home/myuser/iki.git/hooks/post-update
+    There are no candidates for merging among the refs that you just fetched.
+    Generally this means that you provided a wildcard refspec which had no
+    matches on the remote end.
+    'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 207.
+
+Any ideas what may be wrong here and how to fix this?
diff --git a/doc/forum/See_rendered_old_revisions_via_pagehistory.mdwn b/doc/forum/See_rendered_old_revisions_via_pagehistory.mdwn
new file mode 100644 (file)
index 0000000..465746e
--- /dev/null
@@ -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 (file)
index 0000000..3bf8a76
--- /dev/null
@@ -0,0 +1,22 @@
+Hi! My wiki is behind a proxy and, as I understood looking in the web, I need to set the environment variables using ENV inside the wiki's config.
+
+So far I tried:
+
+ENV: {
+  http_proxy => 'http://proxy.uns.edu.ar:1280/',
+  https_proxy => 'http://proxy.uns.edu.ar:1280/'
+}
+
+without luck, as I get:
+
+
+YAML::XS::Load Error: The problem:
+
+    found unexpected ':'
+
+was found at document: 1, line: 85, column: 22
+while scanning a plain scalar at line: 85, column: 3
+usage: ikiwiki [options] source dest
+       ikiwiki --setup configfile
+
+What am I missing? (maybe learning perl?)
diff --git a/doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment b/doc/forum/Setting_http__95__proxy/comment_1_350a7c4834c9f422e107b646cdbae3b0._comment
new file mode 100644 (file)
index 0000000..3623652
--- /dev/null
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-10-10T13:45:10Z"
+ content="""
+If your wiki configuration is written in YAML (it says IkiWiki::Setup::Yaml near the top), the correct syntax is something like
+
+    ENV:
+      http_proxy: http://proxy.uns.edu.ar:1280/
+      https_proxy: http://proxy.uns.edu.ar:1280/
+
+or
+
+    ENV: { http_proxy: 'http://proxy.uns.edu.ar:1280/', https_proxy: 'http://proxy.uns.edu.ar:1280/' }
+
+(many variations are possible, see <http://www.yaml.org/>).
+
+The syntax you quoted is correct for Perl-syntax setup files (which will mention IkiWiki::Setup::Standard near the top), but not YAML ones.
+"""]]
diff --git a/doc/forum/Slow_ikiwiki_after_first_run.mdwn b/doc/forum/Slow_ikiwiki_after_first_run.mdwn
new file mode 100644 (file)
index 0000000..db07f6d
--- /dev/null
@@ -0,0 +1 @@
+I have local ikiwiki on my notebook. When I save an edit the first time after booting and logging in, saving is very slow. Any idea how to fix this?
diff --git a/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment b/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_8_098bb7a3112751a7e6167483dde626bb._comment
new file mode 100644 (file)
index 0000000..ff0d79d
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://andrewspiers.pip.verisignlabs.com/"
+ ip="118.209.91.42"
+ subject="passing environment variables."
+ date="2012-08-24T03:47:07Z"
+ content="""
+I am getting this 'Error: \"do\" parameter missing' when trying to log in as well. I am using Apache and Firefox. The Apache error log says \"Died at /usr/share/perl5/IkiWiki/CGI.pm line 428.\" when it dies.
+
+I do have ssl set up, not sure if this is part of the problem?
+"""]]
diff --git a/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment b/doc/forum/The_requested_URL___47____126__jean__47__blog__47__ikiwiki.cgi_was_not_found_on_this_server./comment_9_fbf403255c38da93caa5b98589fbb285._comment
new file mode 100644 (file)
index 0000000..53c44d1
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://andrewspiers.pip.verisignlabs.com/"
+ ip="118.209.91.42"
+ subject="comment 9"
+ date="2012-08-24T04:29:06Z"
+ content="""
+SSL was the problem, it was necessary to specify https:// in the url=> and cgiurl=> parameters in ikiwiki.setup, the redirect wasn't working otherwise.
+"""]]
diff --git a/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn b/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__.mdwn
new file mode 100644 (file)
index 0000000..4fee07d
--- /dev/null
@@ -0,0 +1,9 @@
+It occurred to me the difference between tag and taglink, as described in http://ikiwiki.info/ikiwiki/directive/tag/ is just that the latter enable the option to have a displayed form of the tag different from the tag itself, e.g. a tag `foo` can be displayed as `bar` using 
+
+    \[[!taglink foo|bar]]
+
+while with tag you can only display the tag `foo` as itself
+
+    \[[!tag foo]]
+
+Is that it?
diff --git a/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment b/doc/forum/What__39__s_the_difference_between_tag_and_taglink__63__/comment_1_b3553d65d12af4c4a87f1f66f961c8d9._comment
new file mode 100644 (file)
index 0000000..2394445
--- /dev/null
@@ -0,0 +1,49 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="comment 1"
+ date="2012-08-19T15:05:35Z"
+ content="""
+`\[[!tag]]` does not produce any output in the body of the page, but
+stores an invisible tag (which, in the default templates, gets displayed
+in the footer of the page).
+
+For instance, this
+
+    Here is some text about badgers
+    \[[!tag badger]]
+
+or this
+
+    \[[!tag badger]]
+    Here is some text about badgers
+
+or even this
+
+    Here is some text about \[[!tag badger]]badgers
+
+will all come out like this:
+
+    Edit | RecentChanges | etc.
+    ----
+    Here is some text about badgers
+    ----
+    tags: badger
+
+`\[[!taglink]]` produces a [[ikiwiki/WikiLink]] in the body of the
+page, *and* stores an invisible tag like `\[[!tag]]`.
+
+So this:
+
+    Some text about \[[!tag mushrooms]] and toadstools
+
+renders like this
+
+    Edit | RecentChanges | etc.
+    ----
+    Some text about _mushrooms_ and toadstools
+    ----
+    tags: mushrooms
+
+where `_mushrooms_` represents a hyperlink.
+"""]]
diff --git a/doc/forum/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 (file)
index 0000000..42f470a
--- /dev/null
@@ -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 (file)
index 0000000..953a714
--- /dev/null
@@ -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 (file)
index 0000000..66f0f7f
--- /dev/null
@@ -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 (file)
index 0000000..767fb7c
--- /dev/null
@@ -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 (file)
index 0000000..75b9d49
--- /dev/null
@@ -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/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 (file)
index 0000000..2e5ac7e
--- /dev/null
@@ -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 (file)
index 0000000..d1b555b
--- /dev/null
@@ -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 (file)
index 0000000..2822261
--- /dev/null
@@ -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 (file)
index 0000000..8dc2f98
--- /dev/null
@@ -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 (file)
index 0000000..57c99be
--- /dev/null
@@ -0,0 +1,50 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmKyeW2G4jjSdnL1m6kPPtAiGFUBsnYCfY"
+ nickname="FName"
+ subject="Still can't use ikiwiki on Mac OS X"
+ date="2012-10-21T17:12:15Z"
+ content="""
+I'm still not able to use Ikiwiki on Mac:
+
+    $ ikiwiki --setup ./web.setup
+    generating wrappers..
+    rebuilding wiki..
+    Cannot decode string with wide characters at /opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/Encode.pm line 174.
+
+
+       $ ls -la /opt/local/bin/perl*
+       lrwxr-xr-x  1 root  admin     20 Oct 21 12:06 /opt/local/bin/perl -> /opt/local/bin/perl5
+       lrwxr-xr-x  1 root  admin     23 Oct 21 12:06 /opt/local/bin/perl5 -> /opt/local/bin/perl5.12
+       -rwxr-xr-x  1 root  admin   9896 Jun 26 01:39 /opt/local/bin/perl5.12
+       lrwxr-xr-x  1 root  admin      8 Jun 26 01:39 /opt/local/bin/perl5.12.4 -> perl5.12
+       -rwxr-xr-x  1 root  admin  10000 Jun 26 01:55 /opt/local/bin/perl5.14
+       lrwxr-xr-x  1 root  admin      8 Jun 26 01:56 /opt/local/bin/perl5.14.2 -> perl5.14
+       -rwxr-xr-x  1 root  admin  10000 Aug 23 13:41 /opt/local/bin/perl5.16
+       lrwxr-xr-x  1 root  admin      8 Aug 23 13:42 /opt/local/bin/perl5.16.1 -> perl5.16
+       lrwxr-xr-x  1 root  admin     12 Oct 21 11:44 /opt/local/bin/perlbug -> perlbug-5.16
+       -rwxr-xr-x  2 root  admin  45815 Jun 26 01:39 /opt/local/bin/perlbug-5.12
+       -rwxr-xr-x  2 root  admin  45203 Jun 26 01:55 /opt/local/bin/perlbug-5.14
+       -rwxr-xr-x  2 root  admin  41712 Aug 23 13:41 /opt/local/bin/perlbug-5.16
+       lrwxr-xr-x  1 root  admin     12 Oct 21 11:44 /opt/local/bin/perldoc -> perldoc-5.16
+       -rwxr-xr-x  1 root  admin    244 Jun 26 01:39 /opt/local/bin/perldoc-5.12
+       -rwxr-xr-x  1 root  admin    244 Jun 26 01:55 /opt/local/bin/perldoc-5.14
+       -rwxr-xr-x  1 root  admin    244 Aug 23 13:41 /opt/local/bin/perldoc-5.16
+       lrwxr-xr-x  1 root  admin     12 Oct 21 11:44 /opt/local/bin/perlivp -> perlivp-5.16
+       -rwxr-xr-x  1 root  admin  12484 Jun 26 01:39 /opt/local/bin/perlivp-5.12
+       -rwxr-xr-x  1 root  admin  12297 Jun 26 01:55 /opt/local/bin/perlivp-5.14
+       -rwxr-xr-x  1 root  admin  10802 Aug 23 13:41 /opt/local/bin/perlivp-5.16
+       lrwxr-xr-x  1 root  admin     15 Oct 21 11:44 /opt/local/bin/perlthanks -> perlthanks-5.16
+       -rwxr-xr-x  2 root  admin  45815 Jun 26 01:39 /opt/local/bin/perlthanks-5.12
+       -rwxr-xr-x  2 root  admin  45203 Jun 26 01:55 /opt/local/bin/perlthanks-5.14
+       -rwxr-xr-x  2 root  admin  41712 Aug 23 13:41 /opt/local/bin/perlthanks-5.16
+
+
+If I simply relink `/opt/local/bin/perl` to a newer version of perl such as `/opt/local/bin/perl5.16`, it still doesn't work, as it seems 
+
+    $ ikiwiki -version
+    ikiwiki version 3.20110608
+
+simply force to use perl5.12.
+
+
+"""]]
diff --git a/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment b/doc/forum/build_error:_Cannot_decode_string_with_wide_characters/comment_5_e652027a8f90ebef6f21613b5784ded2._comment
new file mode 100644 (file)
index 0000000..08bde8c
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnxp2XU8gIribhhGhGuYtU6eMMwHv5gUGI"
+ nickname="Amitai"
+ subject="may I recommend pkgsrc?"
+ date="2012-10-22T03:50:56Z"
+ content="""
+Looks like the MacPorts ikiwiki package is old. I use ikiwiki from pkgsrc as mentioned in [[tips/ikiwiki_on_mac_os_x]]. I also maintain the package, so it's updated regularly.
+"""]]
diff --git a/doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn b/doc/forum/how_could_i_generate_a_flat_textfile_from_metadata_in_multiple_pages.mdwn
new file mode 100644 (file)
index 0000000..d82a419
--- /dev/null
@@ -0,0 +1,3 @@
+I am already using the [[plugins/contrib/report]] plugin to generate reports aggregated from multiple pages, and it's great! However, I am now looking at generating non-HTML reports. Basically, I want to generate a BIND zonefile from the data aggregated from similar reports. I have gone as far as using the [[plugins/pagetemplate]] plugin to have an empty page as a template - but even that bit doesn't work as i still get pesky `<script>` tags in the output. Besides, the data actually gets parsed on display, and I'd like to do some validation and processing.
+
+How should I go forward? Should i write a separate plugin from [[plugins/contrib/report]]? Should I make a plugin that, like [[plugins/graphviz]] generates data in a separate page? Any suggestions? --[[anarcat]]
diff --git a/doc/forum/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 (file)
index 0000000..bceecf8
--- /dev/null
@@ -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 (file)
index 0000000..51b0a55
--- /dev/null
@@ -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 (file)
index 0000000..3985a79
--- /dev/null
@@ -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 (file)
index 0000000..dab8836
--- /dev/null
@@ -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/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment b/doc/forum/missing_pages_redirected_to_search-SOLVED/comment_1_aa03c337b31d7acb95761eb51caab1ef._comment
new file mode 100644 (file)
index 0000000..eac5dc1
--- /dev/null
@@ -0,0 +1,44 @@
+[[!comment format=mdwn
+ username="mathdesc"
+ subject="For lighttpd with mod_magnet"
+ date="2012-08-18T18:27:32Z"
+ content="""
+Same can be done for lighttpd via a lua script (said rewrite.lua) using *mod_magnet* than need to be installed and
+called in your conf like this :
+
+<pre>
+# error-handler for status 404                                         
+$HTTP[\"url\"] =~ \"^/mysite/\" { 
+magnet.attract-physical-path-to = ( server.document-root + \"/rewrite.lua\" )
+}
+</pre>
+
+Ref :
+[[mod_magnet docs|http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModMagnet]]
+
+
+
+<pre>
+
+  function removePrefix(str, prefix)    
+        return str:sub(1,#prefix+1) == prefix..\"/\" and str:sub(#prefix+2)
+  end
+
+
+
+   attr = lighty.stat(lighty.env[\"physical.path\"])
+   local prefix = '/mysite'
+   if (not attr) then
+        -- we couldn't stat() the file 
+        -- let's generate a xapian query with it
+        new_uri =removePrefix(lighty.env[\"uri.path\"], prefix)
+        print (\"page not found : \" .. new_uri .. \" asking xapian\")
+        lighty.env[\"uri.path\"] = \"/mysite/ikiwiki.cgi\"    
+        lighty.env[\"uri.query\"] = \"P=\" .. new_uri  
+        lighty.env[\"physical.rel-path\"] = lighty.env[\"uri.path\"]
+        lighty.env[\"physical.path\"] = lighty.env[\"physical.doc-root\"] .. lighty.env[\"physical.rel-path\"]
+    end
+</pre>   
+
+Hope this is useful to you :)
+"""]]
diff --git a/doc/forum/possible_utf-8_problem__63__.mdwn b/doc/forum/possible_utf-8_problem__63__.mdwn
new file mode 100644 (file)
index 0000000..fb87fad
--- /dev/null
@@ -0,0 +1,26 @@
+I have some problems with a blog wiki that I try to setup.
+
+Everything seemed to work correctly with utf-8 until
+I tried to have a page name with utf-8 characters that
+contained a blog. More testing showed that the 'from'-parameter
+in the form didn't like utf-8. Just that variable, everything
+else works fine.
+
+As soon as I try to add a new entry I get "bad page name"
+instead of the editpage.
+
+Here is an example:
+The page itself is named 'hönshuset.mdwn' and it contains
+this blog inline:
+
+\[\[!inline  pages="honshuset/*" postform=yes ]]
+
+Looking at the form, it is the from-parameter that contains 'hönshuset'
+that triggers the problem. If I rename the file to honshuset.mdwn
+everything works fine.
+
+For some reason the from-parameter seems to depend on both the filename and
+the rootpage parameter. If I add *rootpage*, then I must not use
+utf-8 characters in *rootpage* or in the source filename.
+
+I use ikiwiki 3.20120629 in Debian sid.
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 (file)
index 0000000..3fb8929
--- /dev/null
@@ -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 (file)
index 0000000..ecdc20b
--- /dev/null
@@ -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 (file)
index 0000000..6c5ee43
--- /dev/null
@@ -0,0 +1,4 @@
+is there a way to know which file ikiwiki is currently processing while i am running "ikiwiki --setup $FOO.setup" ?
+
+i am migrating a large ikiwiki instance and the compiler dies in the middle of setup -- but i don't know which file is causing the problem.
+
diff --git a/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment b/doc/forum/which_file_ikiwiki_--setup_is_processing_right_now__63__/comment_1_4f52f8fc083982bd5a572742cf35c74f._comment
new file mode 100644 (file)
index 0000000..21b5e7d
--- /dev/null
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="try --verbose"
+ date="2012-09-14T05:01:16Z"
+ content="""
+you can try `--verbose` when you use `--rebuild`, otherwise you could also try `strace`.
+"""]]
diff --git a/doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment b/doc/forum/wmd_editor_double_preview/comment_1_0d3acf67f3c35f8c4156228f96dcd975._comment
new file mode 100644 (file)
index 0000000..cc8c9ac
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk_MMtLPS7osC5MjX00q2ATjvvXPWqm0ik"
+ nickname="micheal"
+ subject="comment 1"
+ date="2012-08-18T06:30:56Z"
+ content="""
+Any Ideas how to do this?
+"""]]
index 1da9fbfbd8926b1e6e0a9b0f41fed84b08e2998e..2f61f38a093cea01100637272e86e767ec80618e 100644 (file)
@@ -12,10 +12,8 @@ rejected.
 
 The gitweb is [here](http://source.ikiwiki.branchable.com/?p=source.git;a=summary).
 
-Commits to this git repository are fed into [CIA](http://cia.vc), and can
-be browsed, subscribed to etc on its
-[project page](http://cia.vc/stats/project/ikiwiki). They're also fed into
-[twitter](http://twitter.com/ikiwiki).
+Commits to this git repository are fed into [KGB](http://kgb.alioth.debian.org/)
+for transmission to the #ikiwiki irc channel.
 
 ## personal git repositories
 
index e5ea72e36cf519816489c17d34b45c9eb895031e..b6330c5e5e2882991a4fdafd81e15f57eecf191a 100644 (file)
@@ -8,8 +8,11 @@ ikiwiki-update-wikilist [-r]
 
 # DESCRIPTION
 
-`ikiwiki-update-wikilist` is designed to be made suid root, but is not installed
-suid by default. If made suid, it allows users to add or remove their names
+`ikiwiki-update-wikilist` is designed to be safely run as root by arbitrary
+users, either by being made suid and using the (now deprecated suidperl), or
+by being configured in `/etc/sudoers` to allow arbitrary users to run.
+
+All it does is allows users to add or remove their names
 from the `/etc/ikiwiki/wikilist` file. 
 
 By default, the user's name will be added.
index c486e821b0fc3ddd66d61226cb53f56ab18ad6bc..569c2818f01835fcbacb24e5d873059c990a8ed4 100644 (file)
@@ -2,9 +2,15 @@ The `edittemplate` directive is supplied by the [[!iki plugins/edittemplate desc
 
 This directive allows registering template pages, that provide default
 content for new pages created using the web frontend. To register a
-template, insert a [[ikiwiki/directive/template]] directive on some other page.
+template, insert a [[ikiwiki/directive/template]] directive on some other
+page.
 
        \[[!edittemplate template="bugtemplate" match="bugs/*"]]
+A recommended place to put the directive is on the parent page
+of the pages that will be created using the template. So the above
+example would be put on the bugs page. (Do not put the directive on the
+template page itself.)
 
 In the above example, the page named "bugtemplate" is registered as a
 template to be used when any page named "bugs/*" is created. To avoid
@@ -25,12 +31,4 @@ like other ikiwiki [[templates]]. Currently only one variable is
 set: `<TMPL_VAR name>` is replaced with the name of the page being
 created.
 
-----
-
-It's generally not a good idea to put the `edittemplate` directive in
-the template page itself, since the directive would then be included as
-part of the template on new pages, which would then in turn be registered
-as templates. If multiple pages are registered as templates for a new page,
-an arbitrary one is chosen, so that could get confusing.
-
 [[!meta robots="noindex, follow"]]
index 8b066c2f2a64fa4f7022f713b9035873a86bbbbd..7021e47fb6a64d7e5c27fba2b98c79fab0275908 100644 (file)
@@ -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 (file)
index 0000000..f88da72
--- /dev/null
@@ -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]]
index 74b735eae9bab124ea79cd97d7105a7af057db2d..6fc28e75ed1ce7be7497e5a0b2bd5b9caa1825f2 100644 (file)
@@ -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]]
index 22c18d9a18714556591b0ac574736a291e4360cf..a9c241afc1859951975961347af6c490dbc292d4 100644 (file)
@@ -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"]]
index b7ac17b1a9e19f685f24934c14533cbf750f7996..6c2e6f1c2cd691e9050d571f514184465a6e0e4b 100644 (file)
@@ -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:
index 72cfc6f569ee434f74e66f82d1759309786c28c6..984f685402f28993eb7b1a11a761c3430eacd910 100644 (file)
@@ -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 (file)
index 0000000..a0aefe0
--- /dev/null
@@ -0,0 +1,69 @@
+Is there any reason the [language attribute](https://en.wikipedia.org/wiki/Meta_element#The_language_attribute) is not supported?
+--[[LucaCapello]]
+
+> Attached a patch against the Git repository, working on Debian ikiwiki_3.20100815.9. --[[LucaCapello]]
+
+[[patch]]
+
+-----
+
+<pre>
+From 680e57fd384b65e289d92054835687f3d6f3a19d Mon Sep 17 00:00:00 2001
+From: Luca Capello <luca@pca.it>
+Date: Sat, 6 Oct 2012 14:11:19 +0200
+Subject: [PATCH] IkiWiki/Plugin/meta.pm: support the language attribute
+
+---
+ IkiWiki/Plugin/meta.pm          |    9 +++++++++
+ doc/ikiwiki/directive/meta.mdwn |    4 ++++
+ 2 files changed, 13 insertions(+)
+
+diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
+index 421f1dc..1a49f0c 100644
+--- a/IkiWiki/Plugin/meta.pm
++++ b/IkiWiki/Plugin/meta.pm
+@@ -102,6 +102,10 @@ sub preprocess (@) {
+               $pagestate{$page}{meta}{description}=$value;
+               # fallthrough
+       }
++      elsif ($key eq 'language') {
++              $pagestate{$page}{meta}{language}=$value;
++              # fallthrough
++      }
+       elsif ($key eq 'guid') {
+               $pagestate{$page}{meta}{guid}=$value;
+               # fallthrough
+@@ -279,6 +283,11 @@ sub preprocess (@) {
+               push @{$metaheaders{$page}}, '<meta name="'.$key.
+                       '" content="'.encode_entities($value).'" />';
+       }
++      elsif ($key eq 'language') {
++              push @{$metaheaders{$page}},
++                      '<meta http-equiv="Content-Language" content="'.
++                      encode_entities($value).'" />';
++      }
+       elsif ($key eq 'name') {
+               push @{$metaheaders{$page}}, scrub('<meta name="'.
+                       encode_entities($value).
+diff --git a/doc/ikiwiki/directive/meta.mdwn b/doc/ikiwiki/directive/meta.mdwn
+index 984f685..b82fa58 100644
+--- a/doc/ikiwiki/directive/meta.mdwn
++++ b/doc/ikiwiki/directive/meta.mdwn
+@@ -59,6 +59,10 @@ Supported fields:
+   Specifies a short description for the page. This will be put in
+   the html header, and can also be displayed by eg, the [[map]] directive.
++* language
++
++  Specifies the natural language for the page, for example, "en".
++
+ * keywords
+   Specifies keywords summarizing the contents of the page. This
+-- 
+1.7.10.4
+</pre>
+
+----
+
+I guess patching [[/ikiwiki/directive/meta]] to document the fact this attribute is supported would be good. — [[Jon]]
index a2cdd667f6c446c256c397d1f399f47442f7b0f4..6807a81988fbf302591bf3be1c88dc966167c13a 100644 (file)
@@ -27,18 +27,16 @@ icon.png (default, modifiable)..
 
 ## map display
 
- * `map` - map to display, defaults to the current page
-    name in fullscreen mode, "map" otherwise
+ * `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
- * `fullscreen` - make the map take the whole screen through CSS
  * `editable` - add edit controls in a separate layer
- * `right` - float the map right, ignored for fullscreen
- * `left` - float the map left (default unless fullscreen)
- * `width` - width of the map, ignored for fullscreen
- * `height` - height of the map, ignored for fullscreen
+ * `right` - float the map right
+ * `left` - float the map left (default)
+ * `width` - width of the map
+ * `height` - height of the map
 
 ## waypoints
 
diff --git a/doc/ikiwiki/directive/osm/discussion.mdwn b/doc/ikiwiki/directive/osm/discussion.mdwn
new file mode 100644 (file)
index 0000000..d9eb569
--- /dev/null
@@ -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/sidebar/discussion.mdwn b/doc/ikiwiki/directive/sidebar/discussion.mdwn
new file mode 100644 (file)
index 0000000..17c50ac
--- /dev/null
@@ -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]]
index a6692f92c59eaa24a3414c6774e17ea1426af055..3e791778978e42b87d20d55eeee813555c338408 100644 (file)
@@ -26,7 +26,7 @@ cells. For example:
        \[[!table data="""
        left||right|
        a|b|c|d
-       this cell spans 4 columns|||
+       this cell spans **4** columns|||
        """]]
 
 ## usage
@@ -47,4 +47,7 @@ or a spreadsheet), `delimiter` must be set to a literal tab character. These
 are difficult to type in most web browsers - copying and pasting one from
 the table data is likely to be the easiest way.
 
+Note that the contents of table cells can contain arbitrary ikiwiki and
+markdown markup.
+
 [[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/trailitem.mdwn b/doc/ikiwiki/directive/trailitem.mdwn
new file mode 100644 (file)
index 0000000..59626b5
--- /dev/null
@@ -0,0 +1,9 @@
+The `trailitem` directive is supplied by the
+[[!iki plugins/trail desc=trail]] plugin. It is used like this:
+
+    \[[!trailitem some_other_page]]
+
+to add `some_other_page` to the trail represented by this page, without
+generating a visible hyperlink.
+
+[[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/trailitems.mdwn b/doc/ikiwiki/directive/trailitems.mdwn
new file mode 100644 (file)
index 0000000..387b403
--- /dev/null
@@ -0,0 +1,25 @@
+The `trailitems` directive is supplied by the
+[[!iki plugins/trail desc=trail]] plugin. It adds pages
+to the trail represented by the current page, without producing any output
+on that page.
+
+    \[[!trailitems pages="posts/*" sort="age"]]
+
+    \[[!trailitems pagenames="a b c"]]
+
+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`: 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`)
+
+* `reverse`: reverse the order of `sort` (cannot be used with `pagenames`)
+
+[[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/traillink.mdwn b/doc/ikiwiki/directive/traillink.mdwn
new file mode 100644 (file)
index 0000000..090e253
--- /dev/null
@@ -0,0 +1,16 @@
+The `traillink` directive is supplied by the
+[[!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.
+
+In its simplest form, the first parameter is like the content of a WikiLink:
+
+    \[[!traillink some_other_page]]
+
+The displayed text can also be overridden, either with a `|` symbol or with
+a `text` parameter:
+
+    \[[!traillink Click_here_to_start_the_trail|some_other_page]]
+    \[[!traillink some_other_page text="Click here to start the trail"]]
+
+[[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/trailoptions.mdwn b/doc/ikiwiki/directive/trailoptions.mdwn
new file mode 100644 (file)
index 0000000..d83f444
--- /dev/null
@@ -0,0 +1,18 @@
+The `trailoptions` directive is supplied by the
+[[!iki plugins/trail desc=trail]] plugin. It sets options for the
+trail represented by this page.
+
+    \[[!trailoptions sort="meta(title)" circular="no"]]
+
+Options available:
+
+* `sort`: sets a [[ikiwiki/pagespec/sorting]] order for the entire trail,
+  overriding the order in which they were added
+
+* `reverse`: reverses the order of the trail
+
+* `circular`: if set to `yes` or `1`, the trail is made into a loop by
+  making the last page's "next" link point to the first page, and the first
+  page's "previous" link point to the last page
+
+[[!meta robots="noindex, follow"]]
index 7ede47e998ea494050ca8fbe911c7ca8f94e3c2d..b56a7b9f2674ffa6a28ce3aec018eef832504fff 100644 (file)
@@ -80,6 +80,9 @@ Projects & Organizations
 * [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
 
 Personal sites and blogs
 ========================
@@ -171,9 +174,13 @@ Personal sites and blogs
 * [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/]]
index 9c5d5939b132ca07b46a97c1656d9e8ad69263d1..82fd299e35c1a26b4a2ef8a63d0bcfaca61deef9 100644 (file)
@@ -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 (file)
index 3e22be9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Commits to ikiwiki's source code are now fed into
-[CIA](http://cia.navi.cx/), and can be browsed, subscribed to etc on its
-[project page](http://cia.navi.cx/stats/project/ikiwiki). Note that changes
-to the documentation wiki are currently excluded.
index b1695c38545237be66c9db6f2c796dd9c892a41d..c5af6cd30f46345e0491db8432eb5f2a79ffa8df 100644 (file)
@@ -10,4 +10,4 @@ log back in, try out the OpenID signup process if you don't already have an
 OpenID, and see how OpenID works for you. And let me know your feelings about
 making such a switch. --[[Joey]]
 
-[[!poll 67 "Accept only OpenID for logins" 21 "Accept only password logins" 42 "Accept both"]]
+[[!poll 69 "Accept only OpenID for logins" 21 "Accept only password logins" 43 "Accept both"]]
diff --git a/doc/news/version_3.20111107.mdwn b/doc/news/version_3.20111107.mdwn
deleted file mode 100644 (file)
index 5af8ae6..0000000
+++ /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 (file)
index 18c4f8d..0000000
+++ /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 (file)
index de53c5d..0000000
+++ /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 (file)
index ba665c6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-ikiwiki 3.20120115 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Make backlink(.) work. Thanks, Giuseppe Bilotta.
-   * mdwn: Workaround discount's eliding of &lt;style&gt; blocks.
-   * attachment: Fix utf-8 display bug."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120202.mdwn b/doc/news/version_3.20120202.mdwn
deleted file mode 100644 (file)
index 3a9ebeb..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-ikiwiki 3.20120202 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * mdwn: Added nodiscount setting, which can be used to avoid using the
-     markdown discount engine, when maximum compatability is needed.
-   * Switch to YAML::XS to work around insanity in YAML::Mo. Closes: #[657533](http://bugs.debian.org/657533)
-   * cvs: Ensure text files are added in non-binary mode. (Amitai Schlair)
-   * cvs: Various cleanups and testing. (Amitai Schlair)
-   * calendar: Fix strftime encoding bug.
-   * shortcuts: Fixed a broken shortcut to wikipedia (accidentially
-     made into a shortcut to wikiMedia).
-   * Various portability improvements. (Amitai Schlair)"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120516.mdwn b/doc/news/version_3.20120516.mdwn
new file mode 100644 (file)
index 0000000..aa85f54
--- /dev/null
@@ -0,0 +1,4 @@
+ikiwiki 3.20120516 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * meta: Security fix; add missing sanitization of author and authorurl.
+     Thanks, Raúl Benencia"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20120629.mdwn b/doc/news/version_3.20120629.mdwn
new file mode 100644 (file)
index 0000000..3496979
--- /dev/null
@@ -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 (file)
index 0000000..08e2c77
--- /dev/null
@@ -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 (file)
index 0000000..62cb397
--- /dev/null
@@ -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 (file)
index 0000000..98a5caf
--- /dev/null
@@ -0,0 +1,3 @@
+ikiwiki 3.20121017 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * recentchangesdiff: fix further breakage to the template from 3.20120725"""]]
\ No newline at end of file
index 506657a1c1a16806921b216d842f8bc815adf22c..407012b54581d276a6742f1c8a5ddf41ee3745a2 100644 (file)
@@ -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
index c158316d43bfab793f1039874974371c60ddcfc3..3dd017f61897b318d017b40ad70ae704ea851469 100644 (file)
@@ -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
index 1764b31b2a009afae8fe0fca846f4032dfcef912..d9b7172d58a488f69a99bf7d0393dcc326bf9663 100644 (file)
@@ -7,4 +7,7 @@ link.
 
 If this plugin is enabled, this will be a link: SandBox
 
+Use of this plugin is not recommended, particularly on complex wikis with
+things like [[aggregate]] in use.
+
 [[!tag type/link]]
index 48b6c6ae7a8f7462e3f98d4db0856baa1d93f85d..50a99415f040dd5aec24b5233848546f8fcf73e3 100644 (file)
@@ -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
index 836a98f33b9d5225b810bd40360ed2ad392c819a..745a44e8b8c82ca691fe0b504963c234cd8ef8a0 100644 (file)
@@ -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 (file)
index 0000000..31bf0b1
--- /dev/null
@@ -0,0 +1,141 @@
+[[!template id=plugin name=asymptote author="[[PeterSimons]]"]]
+[[!tag type/widget]]
+
+This plugin provides the [[ikiwiki/directive/asymptote]]
+[[ikiwiki/directive]] which allows embedding
+[asymptote](http://asymptote.sourceforge.net/) diagrams in a page.
+
+Security implications: asymptote has functions for reading files and
+other dangerous stuff, so enabling this plugin means that everyone who
+can edit your Wiki can also read any file from your hard drive thats
+accessible to the user running Ikiwiki. 
+
+[[!if test="enabled(asymptote)" then="""
+An example diagram:
+
+[[!asymptote src="""
+import geometry;
+unitsize(1cm);
+triangle t = triangle((0,0), (4,0), (0.5,2));
+show(La="$D$", Lb="$E$", Lc="", t);
+dot(t.A^^t.B^^t.C);
+point pD = midpoint(t.BC); dot(pD);
+point pE = midpoint(t.AC); dot(pE);
+draw(pD--pE);
+
+point A_ = (pD-t.A)*2+t.A; dot("$A'$", A_, NE);
+draw(t.B--A_--t.C, dashed);
+draw(t.A--A_, dashed);
+
+point E_ = midpoint(line(t.B,A_)); dot(Label("$E'$", E_, E));
+draw(E_--pD, dashed);
+"""]]
+"""]]
+
+This plugin uses the [[!cpan Digest::SHA]] perl module.
+
+The full source code is:
+
+        #! /usr/bin/perl
+
+        package IkiWiki::Plugin::asymptote;
+        use warnings;
+        use strict;
+        use Digest::MD5 qw(md5_hex);
+        use File::Temp qw(tempdir);
+        use HTML::Entities;
+        use Encode;
+        use IkiWiki 3.00;
+
+        sub import {
+                hook(type => "getsetup", id => "asymptote", call => \&getsetup);
+                hook(type => "preprocess", id => "asymptote", call => \&preprocess);
+        }
+
+        sub getsetup () {
+                return
+                        plugin => {
+                                safe => 1,
+                                rebuild => undef,
+                                section => "widget",
+                        },
+        }
+
+        sub preprocess (@) {
+                my %params = @_;
+
+                my $code = $params{src};
+                if (! defined $code && ! length $code) {
+                        error gettext("missing src attribute");
+                }
+                return create($code, \%params);
+        }
+
+        sub create ($$$) {
+                # This function calls the image generating function and returns
+                # the <img .. /> for the generated image.
+                my $code = shift;
+                my $params = shift;
+
+                my $digest = md5_hex(Encode::encode_utf8($code));
+
+                my $imglink= $params->{page} . "/$digest.png";
+                my $imglog =  $params->{page} .  "/$digest.log";
+                will_render($params->{page}, $imglink);
+                will_render($params->{page}, $imglog);
+
+                my $imgurl=urlto($imglink, $params->{destpage});
+                my $logurl=urlto($imglog, $params->{destpage});
+
+                if (-e "$config{destdir}/$imglink" ||
+                    gen_image($code, $digest, $params->{page})) {
+                        return qq{<img src="$imgurl}
+                                .(exists $params->{alt} ? qq{" alt="} . $params->{alt} : qq{})
+                                .qq{" class="asymptote" />};
+                }
+                else {
+                        error qq{<a href="$logurl">}.gettext("failed to generate image from code")."</a>";
+                }
+        }
+
+        sub gen_image ($$$$) {
+                # Actually creates the image.
+                my $code = shift;
+                my $digest = shift;
+                my $imagedir = shift;
+
+                my $tmp = eval { create_tmp_dir($digest) };
+                if (! $@ &&
+                    writefile("$digest.asy", $tmp, $code) &&
+                    writefile("$imagedir/$digest.png", $config{destdir}, "") &&
+                    system("asy -render=2 -offscreen -f png -o $config{destdir}/$imagedir/$digest.png $tmp/$digest.asy &>$tmp/$digest.log") == 0
+                   ) {
+                        return 1;
+                }
+                else {
+                        # store failure log
+                        my $log="";
+                        {
+                                if (open(my $f, '<', "$tmp/$digest.log")) {
+                                        local $/=undef;
+                                        $log = <$f>;
+                                        close($f);
+                                }
+                        }
+                        writefile("$digest.log", "$config{destdir}/$imagedir", $log);
+
+                        return 0;
+                }
+        }
+
+        sub create_tmp_dir ($) {
+                # Create a temp directory, it will be removed when ikiwiki exits.
+                my $base = shift;
+
+                my $template = $base.".XXXXXXXXXX";
+                my $tmpdir = tempdir($template, TMPDIR => 1, CLEANUP => 1);
+                return $tmpdir;
+        }
+
+        1
+
diff --git a/doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn b/doc/plugins/contrib/asymptote/ikiwiki/directive/asymptote.mdwn
new file mode 100644 (file)
index 0000000..c6bdb1a
--- /dev/null
@@ -0,0 +1,27 @@
+The `asymptote` directive is supplied by the [[!iki plugins/contrib/asymptote
+desc=asymptote]] plugin.
+
+This directive allows embedding [asymptote](http://asymptote.sourceforge.net/)
+diagrams in a page. Example usage:
+
+       \[[!asymptote src="""
+        import geometry;
+        unitsize(1cm);
+        triangle t = triangle((0,0), (4,0), (0.5,2));
+        show(La="$D$", Lb="$E$", Lc="", t);
+        dot(t.A^^t.B^^t.C);
+        point pD = midpoint(t.BC); dot(pD);
+        point pE = midpoint(t.AC); dot(pE);
+        draw(pD--pE);
+        point A_ = (pD-t.A)*2+t.A; dot("$A'$", A_, NE);
+        draw(t.B--A_--t.C, dashed);
+        draw(t.A--A_, dashed);
+        point E_ = midpoint(line(t.B,A_)); dot(Label("$E'$", E_, E));
+        draw(E_--pD, dashed);
+        """]]
+
+The `asymptote` directive supports the following parameters:
+
+- `src` - The asymptote source code to render.
+
+[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/contrib/created_in_future.mdwn b/doc/plugins/contrib/created_in_future.mdwn
new file mode 100644 (file)
index 0000000..5768057
--- /dev/null
@@ -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]].
index 5f7fffead805088b777303dabeacb5d32410c0a0..13ea8b1b3aa2fdefeb2f678ce51269d36d2857d3 100644 (file)
@@ -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]]
index 9d21a6b7ac74c7e51fcac04addb1b0071f14b5b8..c43490b1305ec57f409e9788dbfe3528b1ca2063 100644 (file)
@@ -18,4 +18,4 @@ It can be [found here][3].
 
 [3]: http://www.tahina.priv.at/hacks/googlemaps.html
 
-See also [[plugins/contrib/osm]].
+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 (file)
index 91d8a4e..0000000
+++ /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/trailitem.mdwn b/doc/plugins/contrib/ikiwiki/directive/trailitem.mdwn
deleted file mode 100644 (file)
index 73b1985..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-The `trailitem` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]] plugin. It is used like this:
-
-    \[[!trailitem some_other_page]]
-
-to add `some_other_page` to the trail represented by this page, without
-generating a visible hyperlink.
-
-[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/contrib/ikiwiki/directive/trailitems.mdwn b/doc/plugins/contrib/ikiwiki/directive/trailitems.mdwn
deleted file mode 100644 (file)
index 4106ed3..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-The `trailitems` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]] plugin. It adds pages
-to the trail represented by the current page, without producing any output
-on that page.
-
-    \[[!trailitems pages="posts/*" sort="age"]]
-
-    \[[!trailitems pagenames="a b c"]]
-
-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`)
-
-* `sort`: add the pages matched by `pages` to the trail in this
-  [[ikiwiki/pagespec/sorting]] order (cannot be used with `pagenames`)
-
-* `reverse`: reverse the order of `sort` (cannot be used with `pagenames`)
-
-[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/contrib/ikiwiki/directive/traillink.mdwn b/doc/plugins/contrib/ikiwiki/directive/traillink.mdwn
deleted file mode 100644 (file)
index 0e40e24..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-The `traillink` directive is supplied by the
-[[!iki plugins/contrib/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.
-
-In its simplest form, the first parameter is like the content of a WikiLink:
-
-    \[[!traillink some_other_page]]
-
-The displayed text can also be overridden, either with a `|` symbol or with
-a `text` parameter:
-
-    \[[!traillink Click_here_to_start_the_trail|some_other_page]]
-    \[[!traillink some_other_page text="Click here to start the trail"]]
-
-[[!meta robots="noindex, follow"]]
diff --git a/doc/plugins/contrib/ikiwiki/directive/trailoptions.mdwn b/doc/plugins/contrib/ikiwiki/directive/trailoptions.mdwn
deleted file mode 100644 (file)
index e1603f1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-The `trailoptions` directive is supplied by the
-[[!iki plugins/contrib/trail desc=trail]] plugin. It sets options for the
-trail represented by this page.
-
-    \[[!trailoptions sort="meta(title)" circular="no"]]
-
-Options available:
-
-* `sort`: sets a [[ikiwiki/pagespec/sorting]] order for the entire trail,
-  overriding the order in which they were added
-
-* `reverse`: reverses the order of the trail
-
-* `circular`: if set to `yes` or `1`, the trail is made into a loop by
-  making the last page's "next" link point to the first page, and the first
-  page's "previous" link point to the last page
-
-[[!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 (file)
index 0000000..f49c850
--- /dev/null
@@ -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 (file)
index 0000000..a320a05
--- /dev/null
@@ -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 (file)
index 0000000..66c9fdf
--- /dev/null
@@ -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 (file)
index 0000000..d48e4d6
--- /dev/null
@@ -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)
index e23a4ced441508a8dad517cc164f0f9ecb5d3cd1..419c4bca62898c3539f4a9a08e1a4dc006076c39 100644 (file)
@@ -73,3 +73,8 @@ to select pages? How does it relate to [[todo/wikitrails]] or
 >>>>> It might be that adding arrays to the `field` plugin is a good way to go: after all, even though field=value is the most common, with the flexibility of things like YAML, one could define all sorts of things.  What I'm not so sure about is how to return the values when queried, since some things would be expecting scalars all the time.  Ah, perhaps I could use wantarray?
 >>>>> Is there a way of checking a HTML::Template template to see if it expecting an array for a particular value?
 >>>>> --[[KathrynAndersen]]
+
+How about arrays?
+-----------------
+
+In [[plugins/contrib/getfield/discussion]], I outline how there's a problem in getfield displaying array refs when the data is a YAML array. I also propose a patch there so that arrays are join'd with a space separator, which is less than ideal, but at least works for getfield. However, for report, I am not sure it's as good. Should it make two rows for those? How should we parse this? Thanks. -- [[anarcat]]
index 5ca6311f9d63c6151de5f6a17c103a827f608e2e..da42130000f7229d9be6b8bd1443841ec3832d72 100644 (file)
@@ -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 (file)
index bfd4d3d..0000000
+++ /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]]`).
index 151af8d92b31b827836b4d12a7063ca440654162..eaf111f4ee1162a49ed4f1b4de4d4135d51ae9ce 100644 (file)
@@ -31,3 +31,19 @@ A patch to make it more like MediaWiki:
  </pre>
 
 --Changaco
+
+----
+
+I think using this below would let the source html clear for the browser
+without changing the render:
+
+        #use URI::Escape
+        .
+        .
+
+        #$str = uri_escape_utf8($str);
+        $str = Encode::decode_utf8($str);
+        #$str =~ s/%/./g;
+
+Don't you think ?
+[[mathdesc]]
index 556b0414515ab69f11b8656e0957c5beabb9ed64..a258f21fd20d3ab015ab33d03f4cbb21af438350 100644 (file)
@@ -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)
index 0eda5554f452ea41b2e6f7eb451d5fa04e9e62dd..2fae07739ea7c33abe4117d816f883b26c949ced 100644 (file)
@@ -2,7 +2,9 @@
 [[!tag type/auth]]
 
 This plugin allows HTTP basic authentication to be used to log into the
-wiki. 
+wiki. In this mode, the web browser authenticates the user by some means,
+and sets the `REMOTE_USER CGI` environment variable. This plugin trusts
+that if that variable is set, the user is authenticated.
 
 ## fully authenticated wiki
 
index 6811632038953fca491d896c07768a9e3f0ea1ee..8569238b11262fe440b58ec73671f71a058baadf 100644 (file)
@@ -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
index aedc1f4a063b6ba346c16031d51c4e31fcc61229..b636858132b74b12294279aba1c4afa882f679b1 100644 (file)
@@ -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.
index f9466e833f49c446e95e8d38d572f3a682269141..85bcf652b57a21aea45628bed265c4eec9f18bc4 100644 (file)
@@ -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 (file)
index 0000000..302979e
--- /dev/null
@@ -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]].
index 703244947b9a99aabc7c285685cce4eeebb3f1b2..b7c1582ca4e1348cef265f06ddbf0579389772c4 100644 (file)
@@ -229,6 +229,14 @@ are not rendered correctly on the slave pages:
   could be used to support it, but it would need a security audit
 * other markup languages have not been tested.
 
+Renaming a page
+---------------
+
+A translatable page may be renamed using the web interface and the
+[[rename plugin|plugins/rename]], or using the VCS directly; in
+the latter case, *both* the "master" page and every corresponding
+`.po` file must be renamed in the same commit.
+
 Security
 ========
 
diff --git a/doc/plugins/poll/discussion.mdwn b/doc/plugins/poll/discussion.mdwn
new file mode 100644 (file)
index 0000000..eed3f6e
--- /dev/null
@@ -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]]
index 57299f92dd17c0e2fc9e9ac236cdc7a2ca90090d..660a430b956f4848191d19588624317f0e3d970e 100644 (file)
@@ -2,6 +2,8 @@
 [[!tag type/meta]]
 
 This plugin extends the [[recentchanges]] plugin, adding a diff for each
-change. The diffs are by default hidden from display on the recentchanges
-page, but will display in its feeds. The [[rcs]] must have implemented
-support for the `rcs_diff()` function for any diffs to be generated.
+change. The diffs can be toggled on the recentchanges page (requires
+javascript), and are also included in its feeds.
+
+The [[rcs]] must have implemented support for the `rcs_diff()` function for
+any diffs to be generated.
index 42bc6a3e185314573c1d08ac7604c884f5640af4..245fb15445be3eb9961c93dfb0754aec706fa7c3 100644 (file)
@@ -8,3 +8,5 @@ I needed to include inline directives into sidebars at different site sections t
 
 Then I came across the tip to include the quick=yes variable with the inline directive, where it is described as not showing page titles included with the meta-directive, and I thought, well if it lets me have it only this way, maybe I can restrain from using meta titles.   
 But to my surprise, even with the quick=yes variable included into the inline directive in the sidebars meta titles still are shown, no more forced rebuild when editing via cgi, which is amazing, but maybe it should be noted somewhere. One more time ikiwiki showed its bright face, thank you. --Boris
+
+How to use a different sidebar and its own CSS for SubPages under a certain directory?  -- Joe
index f3cade85fed00d37dd5df5dd80421247c1ce55f7..866b1ee059b88cdbc9ef52dc58099be0ee0e561d 100644 (file)
@@ -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/trail.mdwn b/doc/plugins/trail.mdwn
new file mode 100644 (file)
index 0000000..14b97e3
--- /dev/null
@@ -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 (file)
index 0000000..6c0b790
--- /dev/null
@@ -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 (file)
index 0000000..6eaa2c2
--- /dev/null
@@ -0,0 +1 @@
+These plugins relate to [[plugins/comments]].
index 2eac0788c56fcf8faf9f021f96db00729c28beb6..7202aece6fa34aece2cc05dfd61fc4e8e8504e4d 100644 (file)
@@ -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
index dcab041dc285b0ae9214a629c692d1f8e747b7d9..2b820265582aaabf140e2b1457ce124b0e800122 100644 (file)
@@ -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);
index 5345f71f257c2979065189942ac77ce1074fa1e6..1912c8a2f37041ee54d4187957d7a664c6909573 100644 (file)
@@ -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 (file)
index 0000000..19f7e40
--- /dev/null
@@ -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.
index b4f639c614f199dc56f1e61d09057769df288d22..c82adbd049258d7cf49ead1ac8d043138b5ef5fc 100644 (file)
@@ -116,3 +116,38 @@ pulling changes from the bare root repository, you will need to
 manually update the local wiki, with a command such as `ikiwiki
 -setup localwiki.setup -refresh`. You could use git's `post-merge` hook
 to automate that command.
+
+## Using ikiwiki with Gerrit
+
+[Gerrit Code Review](https://code.google.com/p/gerrit/) manages a set of Git
+repositories and provides a web interface to review and merge commits.  You can
+configure ikiwiki to work with a Gerrit-managed repository, allowing you to
+review and merge commits to your wiki.
+
+First, create your initial wiki repository with Gerrit.  On the server, as the
+user that will own the wiki, clone that repository to create a working
+directory for ikiwiki, such as /srv/wiki/ikiwiki-checkout.  Create a setup file
+and target directory as usual, referencing that working directory path, and
+creating a post-update hook in Gerrit's repository.  You'll need to set
+appropriate permissions on the hook directory for the repository so that the
+user running ikiwiki can compile and install the post-update hook.  Also note
+that you must disable web editing by disabling the editpage plugin, and you
+must not enable any other plugin that commits to the repository, since ikiwiki
+will not have permission to push to the repository.  (Allowing web edits to
+have such permission would bypass Gerrit's code review, defeating the purpose.)
+
+Gerrit does not run per-repository hooks, such as the post-update hook ikiwiki
+installs to update the wiki after pushes.  However, Gerrit has site-wide hooks,
+including a ref-updated hook that runs whenever a ref changes.  You can use
+that hook to trigger ikiwiki's post-update hook.  The following script,
+installed as Gerrit's ref-updated hook, will run the post-update hook on any
+repository that has a "gerrit-run-post-update-hook" file in it:
+
+    #!/bin/sh
+    if [ -e "$GIT_DIR/gerrit-run-post-update-hook" ] ; then
+        exec "$GIT_DIR/hooks/post-update"
+    fi
+
+Then just create gerrit-run-post-update-hook in the wiki repository, run
+ikiwiki --setup on the setup file, add your wiki to /etc/ikiwiki/wikilist, and
+start reviewing and committing wiki changes via Gerrit.
index 134ebcb7b11b63360ba65483141ee6778ff096c4..f2ff5802ec30747584ba9510fcad679e4213e3af 100644 (file)
@@ -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]], ...
index 502bc4feca5d4d46a41452feb4eef70d4d973085..8b137891791fe96927ad78e64b0aad7bded08bdc 100644 (file)
@@ -1,191 +1 @@
-# Sandbox
 
-[[!pagestats  pages="/tags/*"]]
-<<<<<<< HEAD
-ttt
-[[!sidebar  content="dfdsfsf""
-This is my custom sidebar for this page.
-
-\[[!calendar pages="posts/*"]]
-"""]]
-
-
-asdfasdf asdfasldkfj asdf
-
-[[!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 ]]
-
-See, online editing :-p
-
-Let's try this~!
-
-w00t, how does this look on the **git** end? Well, as a commit of course.
-
-Testing this sandbox thing.
-
-## Blockquotes
-
-> This is a blockquote.
->
-> This is the first level of quoting.
->
-> > This is a nested blockquote.
->
->> Without a space works too.
->>> to three levels
->
-> Back to the first level.
-
-> It's kinda like e-mail...
->> ...but without the cool colored lines...
->>> ...and different font colors.
->>>> ...but it's nothing a little CSS can't fix.
-
-# Pointless heading
-
-Let's see a table:
-
-[[!table data="""
-Heading 1|Heading 2|Heading 3
-Item 1| Item 2| Item 3"""]]
-
-
-Numbered list 
-
-1. First item.
- 1. Sub item.
-1. Another.
-1. And another..
- 1. foo
- 2. bar
- 3. quz
-
-Bulleted list
-
-* item
-* *item*
-* item
-* one
-  * footballs; runner; unices
-  * Cool !
-  * Indeed.
-
-[[new link]]
-
-----
-
-[[!template id=note text="this is generated by the [[plugins/haiku]] plugin"]]
-[[!haiku hint="sandbox play"]]
-
-----
-
-## Different sorts of links:
-
-* [[Features]]
-* <http://ikiwiki.info/ikiwiki/formatting/>
-* [[different_name_for_a_WikiLink|ikiwiki/WikiLink]]
-* <http://www.gnu.org/>
-* [GNU](http://www.gnu.org/)
-* <a href="http://kitenet.net/~joey/">Joey's blog</a>
-
-----
-
-# header1
-
-## header2
-
-### header3
-
-#### header4
-
-##### header 5
-
-**bold**
-
-_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
-
-
-Oh, let's try to do the same thing using sane syntax instead:
-
-~~~
-# test 1,2,3
-$ another test
-~~~
-
-Now let's write the same block, with a bullest list preceding it.
-
-
-* This is a bullet list
-
-    # test 1,2,3
-    $ another test
-
-
-----
-
-Test some tags
-[[!tag  tech life linux]]
-[[!taglink tech life linux]]
-
-Toggle:
-[[!toggle  id="ipsum" text="show"]]
-
-[[!toggleable  id="ipsum" text="""
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
-eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
-ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
-aliquip ex ea commodo consequat.
-
-[[!toggle id="ipsum" text="hide"]]
-"""]]
-----
-
-This **SandBox** is also a [[blog]]! xxx
-
-[[!inline pages="sandbox/* and !*/Discussion" rootpage="sandbox" show="4" archive="yes"]]a
-
-[[!format  verilog """
-module vc_Mux2 #( parameter W = 1 )
-(
-  input      [W-1:0] in0, in1,
-  input              sel,
-  output reg [W-1:0] out
-);
-
-  always @(*)
-  begin
-    case ( sel )
-      1'd0 : out = in0;
-      1'd1 : out = in1;
-      default : out = {W{1'bx}};
-    endcase
-  end
-
-endmodule
-"""]]
-
-#<asd>
-
-This is simple enough for now [[sandbocen]] no?
-
-    Do code tags work?
-
-test by max
diff --git a/doc/sandbox/Fantasia.mdwn b/doc/sandbox/Fantasia.mdwn
deleted file mode 100644 (file)
index 8845ec9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
->> Block
->>> Two Block
-
-[[blog]] blog
-
-* one
-* two
-
-# one
-# two
diff --git a/doc/sandbox/Hey__33__.mdwn b/doc/sandbox/Hey__33__.mdwn
deleted file mode 100644 (file)
index 6902ee3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Don't you love it...
diff --git a/doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn b/doc/sandbox/Just_a_new_post_with_non-latin_characters:_日本語.mdwn
deleted file mode 100644 (file)
index 44b139a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Ελληνικά
diff --git a/doc/sandbox/Mooooo.mdwn b/doc/sandbox/Mooooo.mdwn
deleted file mode 100644 (file)
index 6f11d35..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Hrm.
diff --git a/doc/sandbox/NewPage.mdwn b/doc/sandbox/NewPage.mdwn
new file mode 100644 (file)
index 0000000..18e27fc
--- /dev/null
@@ -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 (file)
index 32c9f23..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Das ist ein Test.
diff --git a/doc/sandbox/Nyus_of_se_däi.mdwn b/doc/sandbox/Nyus_of_se_däi.mdwn
deleted file mode 100644 (file)
index 6205f18..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Sies ahr se nyus of se däi...... säi ahr väri interesting, for schur.
diff --git a/doc/sandbox/Test_it.mdwn b/doc/sandbox/Test_it.mdwn
deleted file mode 100644 (file)
index 5478d7a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Test it just now!
diff --git a/doc/sandbox/Testing_blog_entry.mdwn b/doc/sandbox/Testing_blog_entry.mdwn
deleted file mode 100644 (file)
index aa5fa5b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# Be cool, this is a test!
-
-Hello guys, this is *just a test* entry.
-
-* Did I say
-* that I love
-* bulleted lists?
diff --git a/doc/sandbox/adding_a_new_post.mdwn b/doc/sandbox/adding_a_new_post.mdwn
deleted file mode 100644 (file)
index b42ae70..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-Bob has many drives to archive his data, most of them kept offline, in a safe place.
-
-With git-annex, Bob has a single directory tree that includes all his files, even if their content is being stored offline. He can reorganize his files using that tree, committing new versions to git, without worry about accidentally deleting anything. 
diff --git a/doc/sandbox/ainvyu.mdwn b/doc/sandbox/ainvyu.mdwn
deleted file mode 100644 (file)
index 7c96095..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-## 룰루랄라 잘되나 테스트
-
-### 두번째
-
-#### 세번째
-
-[[link test]]
-
-    code test
-    basic
-
-----
-
-몸에 좋고 맛도 좋은 소고기
diff --git a/doc/sandbox/bullet_list_and_code_test.mdwn b/doc/sandbox/bullet_list_and_code_test.mdwn
deleted file mode 100644 (file)
index a17729c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-paragraph.
-
-    code
-
- * bullet list
- * bullet list
-
-    more code
-
- * bullet list continued
-
-    tailing code
diff --git a/doc/sandbox/danc.mdwn b/doc/sandbox/danc.mdwn
deleted file mode 100644 (file)
index 9766475..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ok
diff --git a/doc/sandbox/dateenumeration.mdwn b/doc/sandbox/dateenumeration.mdwn
deleted file mode 100644 (file)
index adc40bd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-* 1. January
-* 23. February
-* 99. March
-* 7. November
diff --git a/doc/sandbox/hey.mdwn b/doc/sandbox/hey.mdwn
deleted file mode 100644 (file)
index a955185..0000000
+++ /dev/null
@@ -1 +0,0 @@
-* Hello
diff --git a/doc/sandbox/plop.mdwn b/doc/sandbox/plop.mdwn
deleted file mode 100644 (file)
index e8b7c91..0000000
+++ /dev/null
@@ -1 +0,0 @@
-plop
diff --git a/doc/sandbox/revert_me.mdwn b/doc/sandbox/revert_me.mdwn
deleted file mode 100644 (file)
index 2b1cd2f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-this looks good
diff --git a/doc/sandbox/sandbocen.mdwn b/doc/sandbox/sandbocen.mdwn
deleted file mode 100644 (file)
index 8f7e049..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Great!
-
-<code>
-if (sample == test) goto Dijkstra
-</code>
diff --git a/doc/sandbox/sidebar.mdwn b/doc/sandbox/sidebar.mdwn
deleted file mode 100644 (file)
index 9daeafb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-test
index b573b5f2348a3bea028706f1af7d5433b3b0f9a7..afefd1bc300eb4d18811c42f72931d9dfd7b7860 100644 (file)
@@ -110,7 +110,7 @@ runs ikiwiki to update a given wiki. The wrapper can in turn be made suid,
 for example to be used in a [[post-commit]] hook by people who cannot write
 to the html pages, etc.
 
-If the wrapper script is made suid, then any bugs in this wrapper would be
+If the wrapper program is made suid, then any bugs in this wrapper would be
 security holes. The wrapper is written as securely as I know how, is based
 on code that has a history of security use long before ikiwiki, and there's
 been no problem yet.
@@ -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.
index 722c6b141b06aee390b82cf10e216f5dfdbfbb4b..b4f6d8ef47b4fb0ec1a067743c8732c6eb6f7d24 100644 (file)
@@ -7,7 +7,7 @@ Some examples of using shortcuts include:
        \[[!google foo]]
        \[[!wikipedia War_of_1812]]
        \[[!debbug 12345]]
-       Check the \[[!cia ikiwiki desc="CIA page for %s"]].
+       Check the \[[!google ikiwiki desc="google search for %s"]].
 
 This page controls what shortcut links the wiki supports.
 
@@ -54,8 +54,6 @@ This page controls what shortcut links the wiki supports.
 * [[!shortcut name=perldoc url="http://perldoc.perl.org/search.html?q=%s"]]
 * [[!shortcut name=whois url="http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain"]]
 * [[!shortcut name=cve url="https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s"]]
-* [[!shortcut name=cia url="http://cia.vc/stats/project/%s"]]
-* [[!shortcut name=ciauser url="http://cia.vc/stats/user/%s"]]
 * [[!shortcut name=flickr url="https://secure.flickr.com/photos/%s"]]
 * [[!shortcut name=man url="http://linux.die.net/man/%s"]]
 * [[!shortcut name=ohloh url="https://www.ohloh.net/p/%s"]]
index 635ca755c97f5a4dc5488183f4dba0717201da0d..5cdb10bb72fce91161bcc81eff52963a5a3419f3 100644 (file)
@@ -47,7 +47,7 @@ Based on ["What should a mentoring organization application look like?"](http://
     The ikiwiki project strongly encourages collaboration through ikiwiki itself, and thus does not have a mailing list.
     Anyone can create an account on ikiwiki's own wiki.  ikiwiki provides a bug tracker, a TODO list, and the ability
     to create a weblog on any page.  ikiwiki also includes "discussion" sub-pages on every page.  The developers and mentors
-    monitor RecentChanges closely, via the webpage, email, and [CIA](http://cia.navi.cx), and will respond in a timely fashion.
+    monitor RecentChanges closely, via the webpage, email, and CIA, and will respond in a timely fashion.
 
 9. **What is the main IRC channel for your organization?**
 
index 7bbfe5d2a8b76bd682817b4e3c60aebd74aee93b..424d438167dd9ee5272ec55971f261515a4d95ff 100644 (file)
@@ -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;
+}
index d189fa073468dce570508c2d5fefa2c6b5c0afb6..d0f891c21320243125f2b5b7d26fc278c6292dde 100644 (file)
@@ -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"]]
index 57f899677f8bade0c71f21d350414cd09e5adaa8..7df25e66b6528f64a342ffc59c3f718e17dcc91d 100644 (file)
@@ -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/monochrome_small.png b/doc/themes/monochrome_small.png
new file mode 100644 (file)
index 0000000..6c98100
Binary files /dev/null and b/doc/themes/monochrome_small.png differ
index ae612e129d8812bd2c9b8e1d12570b11bb27f623..6d65a0a70a87447fc819d810fba6425436a224e3 100644 (file)
@@ -19,6 +19,7 @@ Thanks to the following people for their kind contributions:
 * Nico Schottelius
 * Jon Dowland
 * Amitai Schlair
+* Luca Capello
 
 (Note that this page is locked to prevent anyone from tampering with the PayPal button.
 If you prefer your donation *not* be listed here, let [[Joey]] know.)
index 01447b009016b016292ce6259dcce7d2e077a452..3fd3a647dea495410661428f9b321ecd91c2e79f 100644 (file)
@@ -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/).
index 09e6f67424fa3c190ddf24bf37b8766fbc731a2a..f1028bc3884b58c4dffc6147cfc1f8bd3e88a91b 100644 (file)
@@ -1,3 +1,18 @@
+Using a new debian 6.0.5 system, I get the following error trying to run the script:
+
+    ~/bin/ikiwiki-wordpress-import.py "Name" email@domain log < ~/share/wordpress.2012-08-23.xml.edited | git-fast-import
+    Traceback (most recent call last):
+      File "/home/luke/bin/ikiwiki-wordpress-import.py", line 139, in <module>
+        main(*sys.argv[1:])
+      File "/home/luke/bin/ikiwiki-wordpress-import.py", line 65, in main
+        content += x.find('content:encoded').string.replace('\r\n', '\n')
+    AttributeError: 'NoneType' object has no attribute 'replace'
+    git-fast-import statistics:
+
+Any ideas on what I am doing wrong would be appreciated.
+
+-----
+
 When I attempt to use this script, I get the following error:
 warning: Not updating refs/heads/master (new tip 26b1787fca04f2f9772b6854843fe99fe06e6088 does not contain fc0ad65d14d88fd27a6cee74c7cef3176f6900ec).  I have git 1.5.6.5, any ideas?
 
diff --git a/doc/tips/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 (file)
index 0000000..3b9f29e
--- /dev/null
@@ -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/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn b/doc/tips/convert_MoinMoin_and_TWiki_to_ikiwiki.mdwn
deleted file mode 100644 (file)
index 5565dbd..0000000
+++ /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_moinmoin_to_ikiwiki.mdwn b/doc/tips/convert_moinmoin_to_ikiwiki.mdwn
new file mode 100644 (file)
index 0000000..ec45749
--- /dev/null
@@ -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 (file)
index 0000000..2fe55d9
--- /dev/null
@@ -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]]
index 42a0aa7bf16350d8dde600bf125c05a55f5de3a7..bb0a4fd974dab57fabcf50abec9485934cc78a71 100644 (file)
@@ -60,7 +60,44 @@ If you have any thought about it, feel free to let me know.
 
 ## nginx
 
-* To run CGI under nginx, just use a FastCGI wrapper like [this one](http://technotes.1000lines.net/?p=23). The wrapper must be started somehow just like any other FastCGI program. I use launchd on OSX.
+To run CGI under nginx, you need to use a FastCGI wrapper. The wrapper must be started somehow just like any other FastCGI program. You can use launchd on OSX.
+
+In Linux, you will need the spawn-fcgi and fcgiwrap packages and start
+them with:
+
+    spawn-fcgi -s /tmp/fcgi.socket -n -- /usr/sbin/fcgiwrap
+
+This needs to be ran as your user. It can be added to `inittab` or
+made into a startup script in `init.d`. You may also need to make this file writable by the webserver, if that's running as a different user, e.g.:
+
+    chmod a+w /tmp/fcgi.socket
+
+Then you need an nginx config plugged in that wrapper. Here's an
+example virtual host configuration:
+
+    server {
+        #listen   80; ## listen for ipv4; this line is default and implied
+        #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6
+
+        root /home/anarcat/public_html/wiki.reseaulibre.ca/;
+        index index.html index.htm;
+
+        # Make site accessible from http://localhost/
+        server_name wiki.reseaulibre.ca;
+
+        location / {
+                try_files $uri $uri/ /index.html;
+        }
+        location /ikiwiki.cgi {
+                fastcgi_pass  unix:/tmp/fcgi.socket;
+                fastcgi_index ikiwiki.cgi;
+                fastcgi_param SCRIPT_FILENAME   /home/anarcat/public_html/ikiwiki.cgi;
+                fastcgi_param  DOCUMENT_ROOT      /home/anarcat/public_html/wiki.reseaulibre.ca;
+                include /etc/nginx/fastcgi_params;
+        }
+    }
+
+Also, note that the `/tmp/fcgi.socket` file needs to be writable by the webserver. I am also unsure as to the security of this setup, as I am using this only on my dev server. Needless to say that [[real fastcgi support|todo/fastcgi_or_modperl_installation_instructions]] would be great. ;) --[[anarcat]]
 
 ## boa
 
index a8854565ca502794e95f8a27b82087e5df547cbe..0e23e3a0834ba8388b21817ebdff75ec303db0cd 100644 (file)
@@ -1,3 +1,8 @@
+## Alt explanation/instructions
+For whatever reason, I found the info on the dot cgi page very confusing.  The instructions on [[http://maketecheasier.com/install-and-configure-apache-in-ubuntu/2011/03/09]] were a lot easier to follow, and ultimately got me over the ubuntu-apache hump.
+
+Following this method the wiki won't be at the same url, it will be at localhost/*wiki_name*
+
 ## warning: lighttpd only or both?
 
 Is your warning at the bottom (you don't know how secure it is) only about
index 94f0f8b4ba652e5e51afe0a9cde756ec09b02ac3..26eae28a5e6c554083d51bb8be895ee7850ec8b7 100644 (file)
@@ -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 (file)
index 0000000..196f203
--- /dev/null
@@ -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 (file)
index 0000000..6f5b056
--- /dev/null
@@ -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? 
index 536980ea8e9cd4e44e5e8ad6b98f50473d91c56b..e07ad8ef9588eee70910bea361d16742dfa1db47 100644 (file)
@@ -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/FormattingHelp_should_open_new_window.mdwn b/doc/todo/FormattingHelp_should_open_new_window.mdwn
new file mode 100644 (file)
index 0000000..58b4b68
--- /dev/null
@@ -0,0 +1 @@
+Currently the FormattingHelp link on the editing page takes you away from the editing page. The formattinghelp link should open in a new window, to allow the user to continue editing; wikipedia's edit page behaves this way.
diff --git a/doc/todo/Javascript_calendar.mdwn b/doc/todo/Javascript_calendar.mdwn
deleted file mode 100644 (file)
index 1b6eee4..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-[[!meta title="Javascript equivalent of plugin 'calendar'"]]
-[[!tag patch]]
-
-Hello,
-we ([[Grésille|http://www.gresille.org]]) have a calendar (built using the [[calendar|plugins/calendar]] plugin) in the sidebar of our website. This caused the whole website to be rebuilded each night, and we did not like it. So I wrote a javascript equivalent of the calendar plugin.
-
-Here are the differences compared to the [[calendar|plugins/calendar]] 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 :( .
-
-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.
-
-I do not know how contributions are processed, but if you want to include this plugin in Ikiwiki, I made a copy of Ikiwiki repository, with this new plugin (as well as the documentation for the plugin and the directive).
-
-    git clone http://spalax.homedns.org/git/ikiwiki
-
--- Spalax
index 5fd787607198a234c0277045d28d5b4667de2d5c..b7723f91960e74286ef83f266448faefa85bc0c5 100644 (file)
@@ -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]]
index 9c1889d63b88d40cba94cd58cc1e464e0962c2fb..20b59cb13f396566a4d33f7fa21c203caacbdec0 100644 (file)
@@ -37,3 +37,6 @@ much more maintainable htaccess file.
 
 >>>> Yes, I think this could probably be used in combination with ikiwiki's
 >>>> httpauth and openid plugins. --[[Joey]] 
+
+>>>>> If you use the httpauth and the cgiauthurl method, you can restrict a path 
+>>>>> like /private/* to be accessible only under the authenticated request uri.
diff --git a/doc/todo/Track_Markdown_Standardisation_Efforts.mdwn b/doc/todo/Track_Markdown_Standardisation_Efforts.mdwn
new file mode 100644 (file)
index 0000000..54a6159
--- /dev/null
@@ -0,0 +1,7 @@
+Just a quick note that some people are making noise about Markdown standardisation.  Specifically:
+
+  * <http://markdown.github.com/>
+  * <http://www.codinghorror.com/blog/2012/10/the-future-of-markdown.html>
+  * <http://johnmacfarlane.net/babelmark2/faq.html#what-are-some-big-questions-that-the-markdown-spec-does-not-answer>
+
+It might be worth following...
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 (file)
index 0000000..6e1438b
--- /dev/null
@@ -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 (file)
index 0000000..26260b2
--- /dev/null
@@ -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 (file)
index 0000000..da28c1b
--- /dev/null
@@ -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 (file)
index 0000000..890c4cf
--- /dev/null
@@ -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 (file)
index 0000000..c0b85ec
--- /dev/null
@@ -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]]
index b0524be5fcabfba5b66ef671ddebab6eb0645eb4..e39d4c19b1d15a8680d96fbd7645810aaa5a9c37 100644 (file)
@@ -24,7 +24,7 @@ You might look at the Wikipedia page on "Spam\_in\_blogs" for more ideas.  In pa
 Ikiwiki now has a checkcontent hook that plugins can use to see content
 that is being entered and check it for spam/whatever.
 
-There is a blogspam plugin that uses the blogspam.org service
+There is a [[plugins/blogspam]] plugin that uses the blogspam.org service
 to check for common spam signatures. --[[Joey]] 
 
 [[done]]
diff --git a/doc/todo/avatar/discussion.mdwn b/doc/todo/avatar/discussion.mdwn
new file mode 100644 (file)
index 0000000..568866f
--- /dev/null
@@ -0,0 +1 @@
+It seems that this thing is on by default. How to turn it off?
diff --git a/doc/todo/break_up_page_template_into_subfiles.mdwn b/doc/todo/break_up_page_template_into_subfiles.mdwn
new file mode 100644 (file)
index 0000000..e9f2e31
--- /dev/null
@@ -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 (file)
index 0000000..3ccfa29
--- /dev/null
@@ -0,0 +1,17 @@
+In the [[plugins/osm]], we use an absolute URL to download the OpenLayers.js script file. This has two downsides:
+
+ 1. if the wiki is behind HTTPS, this will create a nasty SSL warning in the browser and we don't want that
+ 2. if we want the map to work offline, we need to load the js locally
+
+For those reasons, I think the location of that script should be customizable. --[[anarcat]]
+
+[[!template  id=gitbranch branch=anarcat/master author="[[anarcat]]"]]
+
+There is now a [[patch]] for this, thanks to Genevieve, available in my master branch.
+
+Note that there's an update to the patch in my master branch, that allows changing the URL for tiles too.
+
+> There's a lot of stuff in your master branch. Which commit is it,
+> or if you want me to merge it, spin a branch I can merge. --[[Joey]]
+
+> > I believe this was already fixed, actually - it's commit 409c4e48f983d10aceb6321148d7f440d17eb28f, which you cherry-picked on August 5th in d926c4a. So this is [[done]], thanks! -- [[anarcat]]
index 55db32b4f49e856ffd1cc229aed74a4d236928e2..4059d8e2ac83d092bb5210549159082a581ef0f3 100644 (file)
@@ -54,11 +54,18 @@ There's a caveat: we can't have a per-wiki backwards_links option, because of th
 >>> 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.
diff --git a/doc/todo/ease_archivepage_styling.mdwn b/doc/todo/ease_archivepage_styling.mdwn
new file mode 100644 (file)
index 0000000..67415c1
--- /dev/null
@@ -0,0 +1,59 @@
+Hi! Please apply the following [[patch]] to make the
+`archivepage.tmpl` template more semantic and easier to style with
+a local CSS:
+
+       From 4e5cc0d9e5582f20df9f26dd5b1937ead0b46827 Mon Sep 17 00:00:00 2001
+       From: intrigeri <intrigeri@boum.org>
+       Date: Sat, 18 Aug 2012 10:34:36 +0200
+       Subject: [PATCH] Ease archivepage styling by using named classes, move
+        styling to the CSS.
+       
+       ---
+        doc/style.css              |    4 ++++
+        templates/archivepage.tmpl |    8 ++++----
+        2 files changed, 8 insertions(+), 4 deletions(-)
+       
+       diff --git a/doc/style.css b/doc/style.css
+       index 6e2afce..5fb4100 100644
+       --- a/doc/style.css
+       +++ b/doc/style.css
+       @@ -202,6 +202,10 @@ div.recentchanges {
+               margin-top: 1em;
+        }
+        
+       +.archivepagedate {
+       +       font-style: italic;
+       +}
+       +
+        .error {
+               color: #C00;
+        }
+       diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl
+       index 93bdd9c..3e0bd9b 100644
+       --- a/templates/archivepage.tmpl
+       +++ b/templates/archivepage.tmpl
+       @@ -1,10 +1,10 @@
+       -<p>
+       +<div class="archivepage">
+        <TMPL_IF PERMALINK>
+        <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a><br />
+        <TMPL_ELSE>
+        <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a><br />
+        </TMPL_IF>
+       -<i>
+       +<span class="archivepagedate">
+        Posted <TMPL_VAR CTIME>
+        <TMPL_IF AUTHOR>
+        by <span class="author">
+       @@ -15,5 +15,5 @@ by <span class="author">
+        </TMPL_IF>
+        </span>
+        </TMPL_IF>
+       -</i>
+       -</p>
+       +</span>
+       +</div>
+       -- 
+       1.7.10.4
+
+> [[done]] --[[Joey]]
diff --git a/doc/todo/etherpad_support.mdwn b/doc/todo/etherpad_support.mdwn
new file mode 100644 (file)
index 0000000..c11243f
--- /dev/null
@@ -0,0 +1,22 @@
+[[Other wikis are doing it|https://www.mediawiki.org/wiki/Extension:EtherEditor]], why not jump the fray? The idea here would be to make the main editor hook into etherpad. 
+
+Trivial implementation
+----------------------
+
+There are a lot of funky things that would be done here, but the basic functionality would be to throw the document in etherpad and make everyone that edits the same page join the same etherpad. Only one person would need to save the document, but the last person to save it would save the last version. Documents would be left on the etherpad server. That's what I would call the trivial way to go around this.
+
+This would translate in a simple javascript hook for the editor page. The pad name could simply be the page name, which makes it insecure for private wikis.
+
+Garbage-collecting implementation
+---------------------------------
+
+This would require a bit more work. With this implementation, a "counter" would be implemented for every user that would edit the page simultaneously. Once a user saves the page, the counter goes down, when the counter reaches zero, the pad is deleted.
+
+Resources
+---------
+
+ * [etherpad jquery plugin](https://github.com/ether/etherpad-lite-jquery-plugin) - for embeding in any page
+ * [embed parameters](https://github.com/ether/etherpad-lite/wiki/Embed-Parameters) - for embeding using an iframe, probably not what we want
+ * [other integrations](https://github.com/ether/etherpad-lite/wiki/Third-party-web-services-that-have-support-for-Etherpad-Lite) - document us here when done
+ * [no Perl API implementation](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) - we'll have to write our own?
+ * [API documentation](http://etherpad.org/doc/v1.2.0/)
index 74dcaeb61b8ff7f1ac075233cdae087ec4db763a..ad791095638a2b74ae7331112d7420cd551faab3 100644 (file)
@@ -9,4 +9,10 @@ There has got to be a way to run the CGI wrapper under fastcgi or modperl (apach
 > I've not looked at what code changes fastcgi or modperl would require in
 > ikiwiki. --[[Joey]]
 
+> > Looking at nginx support in [[tips/dot_cgi]], I had to figure that out, and it's not so complicated. The hackish way that's documented there right now (and also supported by [answers on serverfault.com](http://serverfault.com/questions/93090/installing-ikiwiki-on-nginx-fastcgi-fcgi-wrapper) or [other](http://vilain.net/comp/ikiwiki_setup.html) [guides](https://library.linode.com/web-applications/wikis/ikiwiki/arch-linux)), and involves starting up a fcgi wrapper, which I find personnally quite weird.
+> > 
+> > Otherwise the general idea would be to launch a daemon per site that would have a pool of fastcgi processes to answer requests. The common setup pattern here is that users have a fixed quota of processes running as their user, listening either on the network (hackish: a port need to be allocated for each user) or on a socket (documented above, but then the webserver needs write access).
+> >
+> > Perl has had extensive support for FastCGI for quite a while. It seems to me a simple daemon could be written to wrap around the `.cgi`, it's a common way things are deployed. [RT](http://rt.bestpractical.com/) for example can run as a regular CGI, under `mod_perl` or `FastCGI` indiscrimenatly, the latter being more reliable and faster. They use [Plack](http://search.cpan.org/dist/Plack/) to setup that server (see the [startup script](https://github.com/bestpractical/rt/blob/stable/sbin/rt-server.in) for an example). But of course, [TIMTOWTDI](http://search.cpan.org/search?query=fastcgi&mode=all). --[[anarcat]]
+
 [[!tag wishlist]]
index b48c37d7bb9a17c2901cf9c32db6c49ac7774cf2..f13213dc2e1b108cf9436297e45679b3c047236e 100644 (file)
@@ -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.
index 4dbbc1cc811aae40184df3769c75cdf60566b88e..bedf21d0ca5c07d68c11e8eb566957224b5d3d1e 100644 (file)
@@ -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 (file)
index 0000000..68cbcf7
--- /dev/null
@@ -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]] 
index 4550e4e3232b2c54463b29c0493aa4a32042d514..f87dc653f70416a1a34334819eba182d5db006f4 100644 (file)
@@ -1,4 +1,4 @@
-While ikiwiki can support definition lists (`dl/dt/dd`) through [[multimarkdown|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.
+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:
 
@@ -21,7 +21,7 @@ would result in a data structure like this:
 
 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/contrib/osm]] plugin to tap into those lists, so that I could have this data in the page, visible to the user:
+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
@@ -34,7 +34,21 @@ 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]].
+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.
+> 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 (file)
index 0000000..5dcef3c
--- /dev/null
@@ -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.
index c20314c2828a447372e3efd5ba297f2cf5f71141..fa69bad47d77836337394e2484557aa15fad71f3 100644 (file)
@@ -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
index baad063ef53d78c48bd6f184cae6ffa49e8a62bc..5701d8e2b7b677b56cb13a23ee7160e83753f05f 100644 (file)
@@ -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 (file)
index 0000000..eaf51c0
--- /dev/null
@@ -0,0 +1,48 @@
+[[!template id=gitbranch branch=jmtd/monochrome_theme author="[[Jon]]"
+
+]][As requested](http://jmtd.net/log/goodreads/), please find a new theme named
+'monochrome' in listed git repo/branch. [Here's the screenshot of what it looks like](https://github.com/jmtd/ikiwiki/blob/30af2437cd41d394930864e93b3c2319d1ec2b06/doc/themes/monochrome.png). — [[Jon]]
+
+Perhaps controversially, I think that this would be a good basis for a default theme for the ikiwiki website. (I suspect more work is needed, I have not tested the theme against every plugin which provides theme-able bits and pieces, nor with e.g. HTML5 mode turned on, etc. etc.) Whilst the anti-theme is the best default for an ikiwiki instance (although an argument could be made against that, too!), the site needs to try to advertise some of the potential of ikiwiki to visitors, and serve as an example of what can be done. I'd appreciate thoughts of frequent ikiwiki contributors on this proposal ☺  — [[Jon]]
+
+> I appreciate you putting that branch together. I was ready to merge it,
+> but `themes/monochrome/style.css` seems to contain a lot of redundant
+> things that are in ikiwiki's normal style.css. This is especially
+> redundant since ikiwiki's style.css gets prepended to the theme's stylesheet
+> at build time! Can you remove those redundant bits please? (PITA I know,
+> but it will make maintaining this much easier.) --[[Joey]]
+
+>> Sure I'll sort that out.  Sorry, I didn't realise the prepending was an automatic process. I did it manually. It should be quick for me to fix. — [[Jon]]
+
+>>> Fixed. I rebased the branch; hopefully that won't cause your script issues.  — [[Jon]]
+
+>>>> I've merged your branch.
+>>>> 
+>>>> Looking more closely at the css, I do have a few questions:
+>>>> 
+>>>> * Is the google-provided font really necessary? I consider that a sort
+>>>>   of web bug, I would prefer users of ikiwiki not need to worry that
+>>>>   their referer information is being sent to some third party.
+>>>>   I'd also prefer for ikiwiki sites to always be functional when
+>>>>   viewed offline.
+>>>> * The external link markup needs the local url to be put into
+>>>>   local.css to work right, correct? I wonder if this is too much of a
+>>>>   complication to ask of users. It seems to be it could either be left
+>>>>   out of the theme, or perhaps ikiwiki could be made to expand
+>>>>   something in the css to the site's url at build time.
+>>>> 
+>>>> --[[Joey]]
+
+>>>>>Thanks for merging!
+>>>>>
+>>>>> * the font is not necessary. I will check, it might be license-compatible
+>>>>>   and thus could be bundled. As things stand, if people have no 'net connection
+>>>>>   or the font fails to load, the theme still "works". Good point RE the referral
+>>>>>   situation.
+>>>>>
+>>>>> * The external link markup works without customizing the CSS, but if something
+>>>>>   generates a non-relative link within the content area of a page, it will be
+>>>>>   styled as an external link.  By default, nothing does this in ikiwiki afaik,
+>>>>>   so the impact is pretty small. (except perhaps if someone specifies an absolute
+>>>>>   `cgiurl` path?)  The additional customization is belt-and-braces.
+>>>>>   — [[Jon]]
index ef7f4dbafc0a7fda92db13b9fc64615e4f1e69a9..bb3b7dec0f0a1b170a7d98cf1e680637ba5b2aa3 100644 (file)
@@ -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 (file)
index 0000000..fa74d31
--- /dev/null
@@ -0,0 +1,27 @@
+[[!template  id=gitbranch branch=anarcat/osm_kml_formatting author="[[anarcat]]"]]
+[[!template  id=gitbranch branch=anarcat/osm_openlayers_misc author="[[anarcat]]"]]
+
+I have accumulated a small series of patches to the OSM plugin along with the [[other|todo/osm_arbitrary_layers]] [[fixes|bugs/osm_KML_maps_do_not_display_properly_on_google_maps]] I have submitted here. They have lived in a tangled mess on my master branch so far, but not anymore!
+
+I have two main branches that need merging (on top of [[todo/osm_arbitrary_layers]]):
+
+ * `osm_kml_formatting` - indentation of the KML, optimisation: remove duplicate style declarations, folders support (even though [[it's not supported by openlayers just yet|https://trac.osgeo.org/openlayers/ticket/2195]])
+
+> If it's not supported yet, does it break something? Seems it must be hard
+> to test the change at least if it's not supported. --[[Joey]]
+
+> > Good point. Maybe that can be skipped for now, it sure doesn't look like it will be merged any time soon anyways. I do think that the optimisation needs to be merged, it's quite important because if halves the size of the resulting KML file. --[[anarcat]]
+
+> > > The merge you just did is fine, the only thing missing is folder support, I'll keep it in a separate branch for now, maybe it will be useful later! This is [[done]]. --[[anarcat]]
+
+ * `osm_openlayers_misc` - do not override the sorting of layers (so that the order defined in [[todo/osm_arbitrary_layers]] takes effect) and tell Emacs about the non-default indentation policies of the file.
+
+> I prefer not to pollute files with editor-specific garbage, and that goes
+> doubly for files served over the network. Cherry-picked the layer sorting
+> change. --[[Joey]]
+
+> > Alright, I am fine with that, thanks. -- [[anarcat]]
+
+Those two branches are also merged directly on my master branch... along with [[todo/osm_arbitrary_layers]].
+
+I am filing this as one todo to simplify matter, but I can also split it further if needs be. --[[anarcat]]
diff --git a/doc/todo/osm_arbitrary_layers.mdwn b/doc/todo/osm_arbitrary_layers.mdwn
new file mode 100644 (file)
index 0000000..d59f394
--- /dev/null
@@ -0,0 +1,43 @@
+[[!template  id=gitbranch branch=anarcat/osm_arbitrary_layers author="[[anarcat]]"]]
+
+I got tired of hacking at the osm.pm every time I wanted to change the layers, so I made it so the layers can be changed in the .setup file. In my master branch, there are now two new configuration settings: `osm_layers` and `osm_layers_order` which replace the hackish `osm_mapurl`. The variables are a hash and an array that allow the operator to define the list of URLs to be loaded as layers and also to change the order of layers. -- [[users/anarcat]]
+
+> I try to avoid adding hashes to config, because websetup does
+> not allow configuring hashes.
+> 
+> The example for `osm_layers_order` is confusing, it makes
+> it look like a perl hash, but it appears to really be a javascript
+> code fragement string, and one that is tightly bound to other
+> configuration too. Why not generate that javascript code from
+> data in a robust way?
+>
+> Does it even make sense to configure this stuff globally?
+> Could the layers be passed as parameters to the osm direction? --[[Joey]]
+>
+> > The reason for `osm_layers_order` is that order is important in the layers: the default layer is the first one and it's not possible to force Perl to have arrays generated in a reliable, reproducable order. Maybe an alternative would be to just set the default layer.
+> > 
+> > That said - maybe you're right and this should be passed as an argument to the OSM directive. The problem then is that you need to pass this stuff around the waypoint directive too. It also makes it hard to have a consistent set of maps all across the wiki. On our site, we have map inserts here and there, and it's nice to have them consistent all around.
+> > 
+> > In closing, I would say that I agree that `.._order` is confusing: maybe I should just have a `_default` to choose the first one? -- [[anarcat]]
+
+>>> If there's no reason to order the other layers, that makes some sense.
+>>> --[[Joey]]
+
+>>>> The layers are ordered because that's the way they are displayed in the menu. Take a look at the base layers on the top left here for an idea: <http://wiki.reseaulibre.ca/ikiwiki.cgi?map=map&do=osm&zoom=12&lat=45.5227&lon=-73.59554>. -- [[anarcat]]
+
+>>>> After sleeping over this - maybe it would be simpler if `osm_layers` was just an array. First, it would get rid of the duplication with `osm_layers_order`. Then I do not feel that having the keys in that hash is worth the duplication anymore. The only reason this is a hash is to provide an arbitrary string description for the layers. We could replace this with an automated description based on the path to the tiles provided.
+>>>> 
+>>>> If that's an acceptable solution for you, I'll go right ahead and rewrite this in a separate branch for merging. Note that on my master branch, there are now 3 main  changes that are not merged: arbitrary OSM layers (includes Google Maps support), KML formatting improvements (indentation, non-duplication of tags), minor OpenLayers improvements (don't sort layers arbitrarily, folders support, higher default zoom level and projection fixes). I can either make a branch for those three things or leave it on my master branch, but be warned that it will be hard to separate those as distinct/orthogonal patches as they mangle each other quite a bit.
+>>>>
+>>>> So basically, I need to know two things from you:
+>>>>
+>>>> 1. on the layers design: a) hash (which include arbitrary descriptions) + default value or b) a simple array with automated descriptions
+>>>> 2. the above changes on a single branch or on 3 different ones?
+>>>>
+>>>> Thanks for your time.  -- [[anarcat]]
+
+>>>>> I have implemented 1.b) and 2. (ie. it's a simple array now, and I split this stuff in different branches.) I'll open another todo for the other branches. --[[anarcat]]
+
+>>>>>> [[merged|done]] --[[Joey]] 
+
+Confirmed, thanks!! --[[anarcat]]
diff --git a/doc/todo/per_page_ACLs.mdwn b/doc/todo/per_page_ACLs.mdwn
new file mode 100644 (file)
index 0000000..82acac2
--- /dev/null
@@ -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 (file)
index 0000000..1308e19
--- /dev/null
@@ -0,0 +1,8 @@
+[[!template id=gitbranch branch=jmtd/tablestyle author="[[Jon]]"
+
+]]The [[plugins/table]] plugin's "`class`" argument is a pretty useful
+shortcut, and it would be nice to provide at least one example class
+designed for use with tables pre-defined in ikiwiki. I've written a
+quick, minimal one that makes the table full-width (and some very
+minimal, useful table styling) called `fullwidth_table` — please
+consider merging it. Thanks! — [[Jon]][[!tag wishlist patch]]
index 7e95791c6467127c8095d4da89f50ad6fbd3e03d..3bf1bdc33ea56fea6a59d7955d68be8c6f04db78 100644 (file)
@@ -11,13 +11,17 @@ It would rock if I could view diffs from the web without going via feeds. I envi
 > > 
 > > Unfortunately it has some issues:
 > > 
-> > 1. it assumes the toggle.js code is loaded somehow
-> > 2. if the toggle code isn't loaded the diffs are displayed (which is arguably better than showing nothing since we ship the diff to the UA anyways...)
+> > 1. <del>it assumes the toggle.js code is loaded somehow</del> - now loaded manually
+> > 2. <del>if the toggle code isn't loaded the diffs are displayed (which is arguably better than showing nothing since we ship the diff to the UA anyways...)</del> - i actually think that's fine
 > > 3. <del>it will show only if there's a revert URL, which is backwards, but otherwise the display is weird, with each button on its own line</del> fixed!
-> > 4. if the diffurl parameter is set in the template, we'd actually see two sets of glasses, which is silly. 
+> > 4. <del>if the diffurl parameter is set in the template, we'd actually see two sets of glasses, which is silly.</del> - just added a tmp_unless to fix this.
 > >
 > > I feel this should nevertheless be implemented because if we're going to compile all this crap in the page anyways and send it to the client, why not allow the user to show it? I also feel that showing it by default is a lesser evil for non-javascript users.
 > >
 > > -- [[anarcat]] 2012-03-03
 
+> > > I have pushed a new version of this patch to my branch, which fixes all the above issues. I think this is ready to be merged now. -- [[anarcat]] 2012-07-19
+
+>>>> [[done]] --[[Joey]] 
+
 [[!tag wishlist patch]]
diff --git a/doc/todo/publishing_in_the_future.mdwn b/doc/todo/publishing_in_the_future.mdwn
new file mode 100644 (file)
index 0000000..55fe3aa
--- /dev/null
@@ -0,0 +1,127 @@
+[[!tag wishlist]]I would quite like the ability to write a page (blog post in
+practice) but for the page to not be displayed until a date and time after it
+is added to the wiki. I've thought this through a bit, but would appreciate
+feedback from people before I go any further. Would anyone else find this
+useful?
+
+Thinking about how to implement this in ikiwiki, perhaps a conditional
+pagespec would be best (which could be tidied up into a template)
+
+    \[[!if test="current_date_before(<TMPL_VAR date>)"
+    then="""[[!tag draft]]"""
+    else="""[[!meta date="<TMPL_VAR date>"]]"""
+    ]]
+
+…pre-supposing a scheme whereby tagging 'draft' hides the page from an
+aggregation somewhere.  With a template, this could collapse to
+
+    \[[!template id=publishafter date="Thu Aug 30 14:13:06 BST 2012"]]
+
+This would require implementing the `current_date_before` pagespec.
+
+You would also need a regularly scheduled wiki refresh and a way of marking the
+unpublished pages as 'dirty' so they were always scanned on refresh until their
+publish date has occurred. That could perhaps be implemented via a small plugin
+which defined a pagespec which ensured the page was 'dirty':
+
+    \[[!meta date="<TMPL_VAR date>"]]
+    \[[!if test="!current_date_before(<TMPL_VAR date>)"
+    then="""[[!tag draft]][[!dirty]]"""
+    ]]
+
+The following is an attempt at the dirty part:
+
+    #!/usr/bin/perl
+    package IkiWiki::Plugin::dirty;
+    # provides a pagespec 'dirty' which ensures the page will always be
+    # re-scanned for content on wiki refresh.
+    
+    use warnings;
+    use strict;
+    use IkiWiki 3.00;
+    
+    hook(type => "preprocess", id => "dirty", call => \&preprocess);
+    hook(type => "needsbuild", id => "dirty", call => \&needsbuild);
+    
+    sub preprocess (@) {
+      my %params = @_;
+      $pagestate{$params{page}}{dirty}{dirty} = 1;
+      return '';
+    }
+    
+    sub needsbuild (@) {
+      my $pages= shift;
+      my %p2 = map { $_ => 1 } @$pages;
+      my %d2 = map { $_ => 1 } @$deleted;
+    
+      foreach my $page (keys %pagestate) {
+        if(exists $pagestate{$page}{dirty}{dirty}) {
+          push @$pages, $pagesources{$page} unless
+            (exists $p2{$pagesources{$page}} or exists $d2{$pagesources{$page}});
+          delete $pagestate{$page}{dirty}{dirty};
+        }
+      }
+    
+      return $pages;
+    }
+    
+    1
+
+Although it doesn't fit, the `current_date_before` pagespec could be implemented
+in the same plugin. I tried the following (before the trailing `1`):
+
+    package IkiWiki::PageSpec;
+    use Date::Parse;
+    
+    sub match_current_date_before ($$;@) {
+      shift;
+      my $date = shift;
+      my $out = str2time($date);
+      if(defined $out) {
+        return IkiWiki::SuccessReason->new("time before now") if $out < time();
+        return IkiWiki::FailReason->new("time not before now");
+      } else { return IkiWiki::ErrorReason->new("couldn't parse time $date")};
+    }
+
+I always hit the `ErrorReason` branch when I try to use it, even with strings
+which work fine in test scripts.  If anyone can help me debug that I'd be very
+grateful.
+If anyone has any clues as to why this doesn't work 
+
+Thoughts on the whole idea? — [[Jon]]
+
+> There is an old todo about it: [[tagging_with_a_publication_date]].
+> I feel my idea there about making a pagespec that is limited to
+> items in the present/past, combined with setting the meta data, is a good
+> way.. --[[Joey]]  
+
+>> Thanks for your response Joey. Should I merge these two TODOs, then?
+>> So if I understand you correctly, you would prefer some new pagespecs
+>> to match future/past dates, and a plugin which kept track of pages with
+>> a future date and kept them 'dirty' (similar to the above), which means
+>> avoiding the need for a `dirty` pagespec in the page itself. Is that
+>> about right?
+>> 
+>> I came up with the following, but I haven't adapted `dirty.pm` inline
+>> with my understanding above, yet.
+
+    sub match_infuture ($$;@) {
+      my $page = shift;
+      return IkiWiki::SuccessReason->new("page time is in the future")
+        if $IkiWiki::pagectime{$page} > time;
+      return IkiWiki::FailReason->new("page time is not in the future");
+    }
+
+>> I've managed to get my original suggestion working. The problem was
+>> I was using quotes when invoking the pagespec, which stopped `str2time`
+>> working. 
+>> 
+>> Let me know if I've understood your POV correctly and I'll see about
+>> tidying this up and putting it in a branch.
+>> 
+>> Finally, a way of scheduling future runs of ikiwiki *within ikiwiki
+>> itself* might be useful for other things too, and would avoid the 
+>> need for a cron job in this case. (I'm thinking of a plugin that
+>> implemented itself in terms of cron, or at, or both, or possibly
+>> other things depending on what people want to support). But that would
+>> be substantially more work, more than I can afford atm at least. — [[Jon]]
diff --git a/doc/todo/recentchanges_feed_with_comment.mdwn b/doc/todo/recentchanges_feed_with_comment.mdwn
new file mode 100644 (file)
index 0000000..4c32b9c
--- /dev/null
@@ -0,0 +1,5 @@
+There is currently know clean way to extract the actual "description" the user provided for a change in the recent changes. They get displayed in the "description" blob of the recent changes, but only as HTML and alongside the diff blob and other things.
+
+It would be nice if the user's "description" (the git commitlog, really) would be a first class citizen, because right now the RSS feed titles only say "user: change to page/blah", which is really not informative. We should at least have the commitlog available as a field. -- [[anarcat]]
+
+[[!tag wishlist]]
index f6ccaf538dd286bb6ae28323c0d2eac4f42b687e..b07ea33f173641f94f1a9822e6e965c9178bc7a7 100644 (file)
@@ -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 (file)
index 0000000..1297be6
--- /dev/null
@@ -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 (file)
index 0000000..e89c54f
--- /dev/null
@@ -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 (file)
index 0000000..6e9f27a
--- /dev/null
@@ -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]]
index 839986c7b69a96c7980941a74cb128a1c959dd3b..602a1b436882475aee75b0f76d04a1a28952bdfc 100644 (file)
@@ -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]]
index 304b3962095361a549a68f8c3ef199f69490146e..11c96a8b5d83fd9ceab07bbcab677091623a8694 100644 (file)
@@ -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/users/GiuseppeBilotta.mdwn b/doc/users/GiuseppeBilotta.mdwn
new file mode 100644 (file)
index 0000000..7b15da9
--- /dev/null
@@ -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 (file)
index 0000000..5ddccbf
--- /dev/null
@@ -0,0 +1,5 @@
+[Debian Developer](http://wiki.debian.org/LucaCapello)
+
+[homepage](http://luca.pca.it)
+
+[write me](mailto:luca@pca.it)
diff --git a/doc/users/Olea.mdwn b/doc/users/Olea.mdwn
new file mode 100644 (file)
index 0000000..1db2a7c
--- /dev/null
@@ -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 (file)
index 0000000..7ece36d
--- /dev/null
@@ -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 (file)
index 0000000..c619569
--- /dev/null
@@ -0,0 +1 @@
+I'm a Systems Analyst in Montana.  I use ikiwiki as a private notebook/journal/worklog/etc.
index 5273c6439f8d76894d7f389303902e47c3045341..acb2290ca550fc524aba3cafc54a4cb80bf4ae78 100644 (file)
@@ -2,14 +2,6 @@
 
 New ikiwiki user (well not really "new" anymore), long time wiki user. :-)
 
-<http://adam.shand.net/iki/>
+<http://adam.shand.net/>
 
 [[!map pages="link(AdamShand)"]]
-
-<!-- for map bug
-## Correct? (No extra ULs)
-\[[!map pages="setup*" show="title"]]
-
-## Bug? (Extra UL for each LI)
-\[[!map pages="tagged(done) and tagged(patch)" show="title"]]
--->
index d868d74934f0c5769da9a7e90420cfee75da4bbb..2bd50c76b9ec7888f1463d74316c5332089a09be 100644 (file)
@@ -1 +1,31 @@
 See <https://wiki.koumbit.net/TheAnarcat>
+
+[[!toc]]
+
+My todos
+========
+
+... or the ones I commented it, to be more precise.
+
+[[!inline pages="todo/* and !todo/done and !link(todo/done) and
+link(users/anarcat) and !todo/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+
+Done
+----
+
+[[!inline pages="todo/* and !todo/done and link(todo/done) and
+link(users/anarcat) and !todo/*/*" feeds=no actions=yes archive=yes show=0]]
+
+My bugs
+=======
+
+... same.
+
+[[!inline pages="bugs/* and !bugs/done and !link(bugs/done) and
+link(users/anarcat) and !bugs/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+
+Fixed
+-----
+
+[[!inline pages="bugs/* and !bugs/done and link(bugs/done) and
+link(users/anarcat) and !bugs/*/*" feeds=no actions=yes archive=yes show=0]]
index 15c065e45f6bbb9239477c3b27273bbc2c81b2d9..3214e15219ae3a7cf41864694b9aa4da55def628 100644 (file)
@@ -3,3 +3,4 @@ consider documenting them?  Perhaps we could turn the result into a
 [[tip|tips]]. -[[JoshTriplett]]
 > Well, certainly. Basically it's just inline + tag feature. I'm going to have more time in May for ikiwiki, I hope. 
 > > Any news about that ?
+> > > I am also interested if you do not mind to share with us. [[cstamas]]
index 16e9be057afe720cb011a3e69c71cef965255270..bbe0ed7c18c5c17abc0e5487a3887509e59437eb 100644 (file)
@@ -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 (file)
index 0000000..acb2a07
--- /dev/null
@@ -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 (file)
index 0000000..15ded83
--- /dev/null
@@ -0,0 +1 @@
+<http://greptilian.com>
diff --git a/doc/users/tbm.mdwn b/doc/users/tbm.mdwn
new file mode 100644 (file)
index 0000000..cd7491c
--- /dev/null
@@ -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/undx.mdwn b/doc/users/undx.mdwn
new file mode 100644 (file)
index 0000000..9b62209
--- /dev/null
@@ -0,0 +1,7 @@
+![undx](http://www.undx.net/images/site/undx_original.png)
+
+IRL, I'm Emmanuel GALLOIS.
+
+This is my temporary ikiwiki user's page.
+
+Ciao. 
diff --git a/doc/users/wiebel.mdwn b/doc/users/wiebel.mdwn
new file mode 100644 (file)
index 0000000..4d6997a
--- /dev/null
@@ -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
+
index 1976f7ed1e3c3a65bc517abbb34aaafac103c147..56d6e07319094dcc77d8fea283bcdf4b0b0b734d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -t
 # Add a user to the system wide wikilist.
-# This script can safely be made suid.
+# This script can safely be made suid or put in /etc/sudoers.
 use warnings;
 use strict;
 use English;
index 0c7f435d934a81fb9dfb9056453caa9c25242f57..c353aa7bdfd956e4afdc3b1cc6f63d9c0e92efef 100644 (file)
@@ -1,5 +1,5 @@
 Name:           ikiwiki
-Version: 3.20120202
+Version: 3.20121017
 Release:        1%{?dist}
 Summary:        A wiki compiler
 
old mode 100644 (file)
new mode 100755 (executable)
index c2e9bd6..41cc457
@@ -3,8 +3,10 @@
 #
 # proxy.py — helper for Python-based external (xml-rpc) ikiwiki plugins
 #
-# Copyright © martin f. krafft <madduck@madduck.net>
-# 
+# Copyright © 2008      martin f. krafft <madduck@madduck.net>
+#             2008-2011 Joey Hess <joey@kitenet.net>
+#             2012      W. Trevor King <wking@tremily.us>
+#
 #  Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
 # are met:
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
-# 
+#
 __name__ = 'proxy.py'
 __description__ = 'helper for Python-based external (xml-rpc) ikiwiki plugins'
-__version__ = '0.1'
+__version__ = '0.2'
 __author__ = 'martin f. krafft <madduck@madduck.net>'
 __copyright__ = 'Copyright © ' + __author__
 __licence__ = 'BSD-2-clause'
 
 import sys
 import time
-import xmlrpclib
 import xml.parsers.expat
-from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
+try:  # Python 3
+    import xmlrpc.client as _xmlrpc_client
+except ImportError:  # Python 2
+    import xmlrpclib as _xmlrpc_client
+try:  # Python 3
+    import xmlrpc.server as _xmlrpc_server
+except ImportError:  # Python 2
+    import SimpleXMLRPCServer as _xmlrpc_server
+
+
+class ParseError (Exception):
+    pass
+
+
+class PipeliningDetected (Exception):
+    pass
+
+
+class GoingDown (Exception):
+    pass
+
+
+class InvalidReturnValue (Exception):
+    pass
+
 
-class _IkiWikiExtPluginXMLRPCDispatcher(SimpleXMLRPCDispatcher):
+class AlreadyImported (Exception):
+    pass
+
+
+class _IkiWikiExtPluginXMLRPCDispatcher(_xmlrpc_server.SimpleXMLRPCDispatcher):
 
     def __init__(self, allow_none=False, encoding=None):
         try:
-            SimpleXMLRPCDispatcher.__init__(self, allow_none, encoding)
+            _xmlrpc_server.SimpleXMLRPCDispatcher.__init__(
+                self, allow_none, encoding)
         except TypeError:
             # see http://bugs.debian.org/470645
             # python2.4 and before only took one argument
-            SimpleXMLRPCDispatcher.__init__(self)
+            _xmlrpc_server.SimpleXMLRPCDispatcher.__init__(self)
 
     def dispatch(self, method, params):
         return self._dispatch(method, params)
 
+
 class XMLStreamParser(object):
 
     def __init__(self):
@@ -74,14 +105,15 @@ class XMLStreamParser(object):
     def _pop_tag(self, tag):
         top = self._stack.pop()
         if top != tag:
-            raise ParseError, 'expected %s closing tag, got %s' % (top, tag)
+            raise ParseError(
+                'expected {0} closing tag, got {1}'.format(top, tag))
 
     def _request_complete(self):
         return self._first_tag_received and len(self._stack) == 0
 
     def _check_pipelining(self, *args):
         if self._first_tag_received:
-            raise PipeliningDetected, 'need a new line between XML documents'
+            raise PipeliningDetected('need a new line between XML documents')
 
     def parse(self, data):
         self._parser.Parse(data, False)
@@ -91,11 +123,6 @@ class XMLStreamParser(object):
             self._reset()
             return ret
 
-    class ParseError(Exception):
-        pass
-
-    class PipeliningDetected(Exception):
-        pass
 
 class _IkiWikiExtPluginXMLRPCHandler(object):
 
@@ -129,21 +156,26 @@ class _IkiWikiExtPluginXMLRPCHandler(object):
                 return ret
 
     def send_rpc(self, cmd, in_fd, out_fd, *args, **kwargs):
-        xml = xmlrpclib.dumps(sum(kwargs.iteritems(), args), cmd)
-        self._debug_fn("calling ikiwiki procedure `%s': [%s]" % (cmd, xml))
+        xml = _xmlrpc_client.dumps(sum(kwargs.items(), args), cmd)
+        self._debug_fn(
+            "calling ikiwiki procedure `{0}': [{1}]".format(cmd, xml))
         _IkiWikiExtPluginXMLRPCHandler._write(out_fd, xml)
 
         self._debug_fn('reading response from ikiwiki...')
 
         xml = _IkiWikiExtPluginXMLRPCHandler._read(in_fd)
-        self._debug_fn('read response to procedure %s from ikiwiki: [%s]' % (cmd, xml))
+        self._debug_fn(
+            'read response to procedure {0} from ikiwiki: [{1}]'.format(
+                cmd, xml))
         if xml is None:
             # ikiwiki is going down
             self._debug_fn('ikiwiki is going down, and so are we...')
-            raise _IkiWikiExtPluginXMLRPCHandler._GoingDown
+            raise GoingDown()
 
-        data = xmlrpclib.loads(xml)[0][0]
-        self._debug_fn('parsed data from response to procedure %s: [%s]' % (cmd, data))
+        data = _xmlrpc_client.loads(xml)[0][0]
+        self._debug_fn(
+            'parsed data from response to procedure {0}: [{1}]'.format(
+                cmd, data))
         return data
 
     def handle_rpc(self, in_fd, out_fd):
@@ -152,18 +184,18 @@ class _IkiWikiExtPluginXMLRPCHandler(object):
         if xml is None:
             # ikiwiki is going down
             self._debug_fn('ikiwiki is going down, and so are we...')
-            raise _IkiWikiExtPluginXMLRPCHandler._GoingDown
+            raise GoingDown()
 
-        self._debug_fn('received procedure call from ikiwiki: [%s]' % xml)
-        params, method = xmlrpclib.loads(xml)
+        self._debug_fn(
+            'received procedure call from ikiwiki: [{0}]'.format(xml))
+        params, method = _xmlrpc_client.loads(xml)
         ret = self._dispatcher.dispatch(method, params)
-        xml = xmlrpclib.dumps((ret,), methodresponse=True)
-        self._debug_fn('sending procedure response to ikiwiki: [%s]' % xml)
+        xml = _xmlrpc_client.dumps((ret,), methodresponse=True)
+        self._debug_fn(
+                'sending procedure response to ikiwiki: [{0}]'.format(xml))
         _IkiWikiExtPluginXMLRPCHandler._write(out_fd, xml)
         return ret
 
-    class _GoingDown:
-        pass
 
 class IkiWikiProcedureProxy(object):
 
@@ -196,7 +228,7 @@ class IkiWikiProcedureProxy(object):
                     yield i
 
         args = list(subst_none(args))
-        kwargs = dict(zip(kwargs.keys(), list(subst_none(kwargs.itervalues()))))
+        kwargs = dict(zip(kwargs.keys(), list(subst_none(kwargs.values()))))
         ret = self._xmlrpc_handler.send_rpc(cmd, self._in_fd, self._out_fd,
                                             *args, **kwargs)
         if ret == IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL:
@@ -205,7 +237,7 @@ class IkiWikiProcedureProxy(object):
 
     def hook(self, type, function, name=None, id=None, last=False):
         if self._imported:
-            raise IkiWikiProcedureProxy.AlreadyImported
+            raise AlreadyImported()
 
         if name is None:
             name = function.__name__
@@ -217,11 +249,12 @@ class IkiWikiProcedureProxy(object):
 #            curpage = args[0]
 #            kwargs = dict([args[i:i+2] for i in xrange(1, len(args), 2)])
             ret = function(self, *args)
-            self._debug_fn("%s hook `%s' returned: [%s]" % (type, name, ret))
+            self._debug_fn(
+                    "{0} hook `{1}' returned: [{2}]".format(type, name, ret))
             if ret == IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL:
-                raise IkiWikiProcedureProxy.InvalidReturnValue, \
-                        'hook functions are not allowed to return %s' \
-                        % IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
+                raise InvalidReturnValue(
+                    'hook functions are not allowed to return {0}'.format(
+                        IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL))
             if ret is None:
                 ret = IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
             return ret
@@ -231,7 +264,7 @@ class IkiWikiProcedureProxy(object):
 
     def inject(self, rname, function, name=None, memoize=True):
         if self._imported:
-            raise IkiWikiProcedureProxy.AlreadyImported
+            raise AlreadyImported()
 
         if name is None:
             name = function.__name__
@@ -263,7 +296,7 @@ class IkiWikiProcedureProxy(object):
     def error(self, msg):
         try:
             self.rpc('error', msg)
-        except IOError, e:
+        except IOError as e:
             if e.errno != 32:
                 raise
         import posix
@@ -272,30 +305,26 @@ class IkiWikiProcedureProxy(object):
     def run(self):
         try:
             while True:
-                ret = self._xmlrpc_handler.handle_rpc(self._in_fd, self._out_fd)
+                ret = self._xmlrpc_handler.handle_rpc(
+                    self._in_fd, self._out_fd)
                 time.sleep(IkiWikiProcedureProxy._LOOP_DELAY)
-        except _IkiWikiExtPluginXMLRPCHandler._GoingDown:
+        except GoingDown:
             return
 
-        except Exception, e:
+        except Exception as e:
             import traceback
-            self.error('uncaught exception: %s\n%s' \
-                       % (e, traceback.format_exc(sys.exc_info()[2])))
+            tb = traceback.format_exc()
+            self.error('uncaught exception: {0}\n{1}'.format(e, tb))
             return
 
     def _importme(self):
         self._debug_fn('importing...')
         for id, type, function, last in self._hooks:
-            self._debug_fn('hooking %s/%s into %s chain...' % (id, function, type))
+            self._debug_fn('hooking {0}/{1} into {2} chain...'.format(
+                    id, function, type))
             self.rpc('hook', id=id, type=type, call=function, last=last)
         for rname, function, memoize in self._functions:
-            self._debug_fn('injecting %s as %s...' % (function, rname))
+            self._debug_fn('injecting {0} as {1}...'.format(function, rname))
             self.rpc('inject', name=rname, call=function, memoize=memoize)
         self._imported = True
         return IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
-
-    class InvalidReturnValue(Exception):
-        pass
-
-    class AlreadyImported(Exception):
-        pass
index 0fe91c58b7e79636b9c5be528a10e07a4fbf20b8..ba0f543f9244a04a10bc8b35b926cc0f30743e19 100755 (executable)
@@ -5,8 +5,12 @@
 #
 # based a little bit on rst.pm by Sergio Talens-Oliag, but only a little bit. :)
 #
-# Copyright © martin f. krafft <madduck@madduck.net>
-# 
+# Copyright © 2007-2008 martin f. krafft <madduck@madduck.net>
+#             2007-2011 Joey Hess <joey@kitenet.net>
+#             2009      Ulrik Sverdrup <ulrik.sverdrup@gmail.com>
+#             2011      Simon McVittie <smcv@debian.org>
+#             2012      W. Trevor King <wking@tremily.us>
+#
 #  Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
 # are met:
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
-# 
+#
 __name__ = 'rst'
 __description__ = 'xml-rpc-based ikiwiki plugin to process RST files'
-__version__ = '0.3'
+__version__ = '0.4'
 __author__ = 'martin f. krafft <madduck@madduck.net>'
 __copyright__ = 'Copyright © ' + __author__
 __licence__ = 'BSD-2-clause'
 
+import sys as _sys
+
 from proxy import IkiWikiProcedureProxy
 
+
 publish_parts = None
 
+
 def rst2html(proxy, *args):
     # delayed import so docutils is only needed if you *use* rst -
     # http://bugs.debian.org/637604
@@ -47,9 +55,9 @@ def rst2html(proxy, *args):
     if publish_parts is None:
         try:
             from docutils.core import publish_parts
-        except ImportError, e:
-            proxy.error('cannot import docutils.core: %s: %s' %
-                        (e.__class__.__name__, e))
+        except ImportError as e:
+            proxy.error('cannot import docutils.core: {0}: {1}'.format(
+                    e.__class__.__name__, e))
             raise
 
     kwargs = _to_dict(args)
@@ -68,10 +76,9 @@ def _to_dict(args):
 def getsetup(proxy, *kwargs):
     return 'plugin', { 'safe' : 1, 'rebuild' : 1, 'section' : 'format' }
 
-import sys
 def debug(s):
-    sys.stderr.write(__name__ + ':DEBUG:%s\n' % s)
-    sys.stderr.flush()
+    _sys.stderr.write(__name__ + ':DEBUG:{0}\n'.format(s))
+    _sys.stderr.flush()
 
 proxy = IkiWikiProcedureProxy(__name__, debug_fn=None)
 proxy.hook('getsetup', getsetup)
index dfb018c81eea6377d901a65d11b783f1de0c6883..5ec4a157c6ddbb0fdfcdea3d117730b3cb2ea266 100644 (file)
@@ -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 \
index 4963f86bed2d581f4bf613cb494c987e1ff1b234..2ab4f5cdf9367064361b0c75b4c4e8aa6c151b92 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki-bg\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 5cb42b937ef68566c69cbce6e8ac684c64c13f32..a43b035cddd4ad9914b693e2da84bc2691dff620 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 5d612c662d36bb915450e98bb9ea7852a6997a3b..2a05ba2156e5136ba55501eefec845ca19c9ddc5 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.20110430\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 9cc9e388b478c745a3fe6bc2bdea2ca3bf16536b..c19fedb5ac7bab7f5a42e5a29a5820b4c1770d30 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.14159\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 86f49f2c29b15d6a69d3518c4253da29c6e692f4..d215c1b4ee23bac860f04a99bb1dfaa2e5c5da12 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index a1fa14f9d6b1ad3808c9ae26d89b51ef16907c92..aef6a2a1da04b460d09345a030b62532c04b3316 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.141\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 123cadd4ac4e1d2cfe942cce80c130b2b3e2c777..9d2d53fada094ba05ca8c308d57decb16e53cd3e 100644 (file)
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki-gu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 970b9472443da0d2910c443e3e5cccd4b58b7f6f..1ed277e37c7e01363699ff0608976e5876b9e1ea 100644 (file)
@@ -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-10-16 15:16-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 ""
index 872a39e6218d1cb0759999c8911db99f2ceb03cd..062f1c2a71f26e1956e5eb8ad934eca4e254a8ad 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 902ae82603bac79484b023922050ec4f1bbb2203..3b645d23eae2580e9bca61c3ef795e972ae561a8 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 1.51\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index 666524d03833a17afa99ea147409356d507db2fa..cebd63d86904797d0b9da50c9b5b17227e04e02f 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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"
index ecf76c6ece88c598b8da76c9d53b9b8672c831e3..b29e2c6d8587061711a188a662098b99efc04a05 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.20091031\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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 ""
index 47c34effaa84091fa4e09f8e471b3e578106d169..0d9f5736fc87f59b3753e698b0d16ebb1722a840 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 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 (executable)
index 0000000..8c3925e
--- /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");
index a3760a2b2aa956b48bc1764dbff141335b0247ff..b7c6efd58345de974628f6e55dab4424336c9c09 100755 (executable)
@@ -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 (executable)
index 0000000..2e4b927
--- /dev/null
+++ b/t/trail.t
@@ -0,0 +1,221 @@
+#!/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;
+       my $blob=readfile("t/tmp/out/$file");
+       my ($trailline)=$blob=~/^trail=$trailname\s+(.*)$/m;
+       $trailline="" unless defined $trailline;
+       ok($trailline !~ /^trail=$trailname\s+/, "no $trailname in $file");
+}
+
+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("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");
+
+# 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"]]'); 
+
+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");
+
+ok(! system("rm -rf t/tmp"));
index 93bdd9ce0e50135eec16dd4b7b6a9c5c5969a190..3e0bd9bc20c2d228ce2958ca2d80496c8aec5190 100644 (file)
@@ -1,10 +1,10 @@
-<p>
+<div class="archivepage">
 <TMPL_IF PERMALINK>
 <a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a><br />
 <TMPL_ELSE>
 <a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a><br />
 </TMPL_IF>
-<i>
+<span class="archivepagedate">
 Posted <TMPL_VAR CTIME>
 <TMPL_IF AUTHOR>
 by <span class="author">
@@ -15,5 +15,5 @@ by <span class="author">
 </TMPL_IF>
 </span>
 </TMPL_IF>
-</i>
-</p>
+</span>
+</div>
index d7ec9087534af331eb53ee1c4f9ab6f786a76e6f..cb022220e9510ab81ec2896d0ae5a396f71b9232 100644 (file)
@@ -9,6 +9,11 @@
 <div id="change-<TMPL_VAR REV>" class="metadata">
 <span class="desc"><br />Changed pages:</span>
 <span class="pagelinks">
+<TMPL_UNLESS HAS_DIFFURL>
+<TMPL_IF DIFF>
+<a href="#diff-<TMPL_VAR REV>" class="toggle" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a>
+</TMPL_IF>
+</TMPL_UNLESS>
 <TMPL_LOOP PAGES>
 <TMPL_IF DIFFURL><a href="<TMPL_VAR DIFFURL>" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a><TMPL_VAR LINK>
 <TMPL_ELSE><TMPL_VAR LINK></TMPL_IF>
 </TMPL_LOOP>
 </div>
 <TMPL_IF DIFF>
+<TMPL_IF HAS_DIFFURL>
 <div class="diff">
+<TMPL_ELSE>
+<div class="toggleable" id="diff-<TMPL_VAR REV>">
+</TMPL_IF>
 <pre>
 <TMPL_VAR DIFF>
 </pre>
index a2edc691e7cf98dedbfe6195f10791f678842f07..e177db959412355240ccb2c83fc016ff7c477ca1 100644 (file)
@@ -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>
 
index 696c8dcad197134bb7264d17d9f5cf950c24aba0..4736c95d0a8197d32d37f72fd7ab27ae48788553 100644 (file)
 <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 (file)
index 0000000..5087668
--- /dev/null
@@ -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>
index 8659018a05fef3d2915287e66dcf23b6140b65aa..89b4f3a06805e65d832a3ab279baf8e7e29675ea 100644 (file)
 <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>
 
 <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>
 <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 (file)
index 0000000..54c0460
--- /dev/null
@@ -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>
index 749d9b21e1ca9c1efae9195f04d07242388557e7..f6cb5c04e1e0e011641464d54fcb718297c7eae6 100644 (file)
@@ -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;
+}
index c07d1cdfa4b305e8a336575c6c0ac5cc9626fda3..40a940f265a94f77be5191b124bbb321f3080b45 100644 (file)
@@ -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 (file)
index 0000000..7363185
Binary files /dev/null and b/themes/monochrome/gradient.png differ
diff --git a/themes/monochrome/style.css b/themes/monochrome/style.css
new file mode 100644 (file)
index 0000000..41a3a44
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * monochrome - ikiwiki theme © Jon Dowland 2012
+ * based on ikiwiki style.css and bits from jmtd.net at the time
+ * License: GPL-2+
+ */
+
+@import url(http://fonts.googleapis.com/css?family=Lato&v2);
+
+body {
+       margin-left: auto;
+       margin-right: auto;
+       width: 48em;
+
+       background: url(gradient.png) repeat-x white 0px -16px;
+       margin-top: 48px; /* height of gradient.png that we want to see */
+
+       color: #555;
+       font-family: 'Lato', sans-serif;
+}
+
+.header {
+       margin-bottom: 0.5em;
+}
+.pageheader .actions ul {
+       border-bottom: 2px solid #c00040;
+}
+
+#pageinfo {
+       border-top: 2px solid #c00040;
+       text-align: center;
+       color: #aaa;
+}
+
+/*
+ * css3 external links stuff
+ * thanks to <http://www.kryogenix.org/days/2002/08/30/external>
+ */
+#content a[href^="http:"]:after,
+#content a[href^="https:"]:after {
+  content: "↗";
+}
+/* you will want to replicate this for your own domain in local.css */
+#content a[href^="http://localhost"]:after,
+#content a[href^="http://ikiwiki.info"]:after {
+  content: none;
+}
+
+/* colouring */
+a:link    { color: #c00040; font-weight: bold; text-decoration: none; }
+a:hover   { color: #f01070; text-decoration: underline;}
+a:active  { color: #c00040; }
+a:visited { color: #c08080; font-weight: normal; font-style: italic; }
+hr { border: none; border-top: 2px solid #c00040; clear: both; }
index 7994c62fc8ff61bb795391aeae3587d9dac91a35..37e588f7b5bba4c1125052f82c358359a3459705 100644 (file)
@@ -34,34 +34,72 @@ function mapsetup(divname, options) {
                        new OpenLayers.Control.Permalink(permalink)
                ],
                displayProjection: new OpenLayers.Projection("EPSG:4326"),
-               numZoomLevels: 18
+               maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
+               projection: "EPSG:900913",
+               units: "m",
+               maxResolution: 156543.0339,
+               numZoomLevels: 19
        });
 
+       for (x in options.layers) {
+               layer = options.layers[x];
+               console.log("setting up layer: " + layer);
+               if (layer.indexOf("Google") >= 0) {
+                       if (options.google_apikey && options.google_apikey != 'null') {
+                               var gtype = G_NORMAL_MAP;
+                               if (layer.indexOf("Satellite") >= 0) {
+                                       gtype = G_SATELLITE_MAP;
+                               } else if (layer.indexOf("Hybrid") >= 0) {
+                                       gtype = G_HYBRID_MAP // the normal map overlaying the satellite photographs
+                               } else if (layer.indexOf("Physical") >= 0) {
+                                       gtype = G_PHYSICAL_MAP // terrain information
+                               }
+                               // this nightmare is possible through http://docs.openlayers.org/library/spherical_mercator.html
+                               googleLayer = new OpenLayers.Layer.Google(
+                                       layer,
+                                       {type: gtype,
+                                        'sphericalMercator': true,
+                                        'maxExtent': new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
+                                        projection: new OpenLayers.Projection("EPSG:3857")}
+                               );
+                               map.addLayer(googleLayer);
+                       } else {
+                               console.log("no API key defined for Google layer, skipping");
+                       }
+               } else if (layer == 'OSM') { // OSM default layer
+                       map.addLayer(new OpenLayers.Layer.OSM("OSM (Mapnik)"));
+               } else { // assumed to be a URL
+                       text = layer.match(/([^.\/]*\.[^.\/]*(\/[^\$]*)?)\/.*$/i) // take the first two parts of the FQDN and everything before the first $
+                       map.addLayer(new OpenLayers.Layer.OSM("OSM (" + text[1]  + ")", layer));
+               }
+       }
 
-       map.addLayer(new OpenLayers.Layer.OSM());
        if (options.format == 'CSV') {
                pois = new OpenLayers.Layer.Text( "CSV",
-                       { location:"/" + options.map + "/pois.txt",
-                         projection: map.displayProjection
+                       { 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.map + "/pois.json",
+                               url: options.jsonurl,
                                format: new OpenLayers.Format.GeoJSON()
                        }),
-                       strategies: [new OpenLayers.Strategy.Fixed()]
+                       strategies: [new OpenLayers.Strategy.Fixed()],
+                       projection: new OpenLayers.Projection("EPSG:4326")
                });
        } else {
                pois = new OpenLayers.Layer.Vector("KML", {
                        protocol: new OpenLayers.Protocol.HTTP({
-                               url: "/" + options.map + "/pois.kml",
+                               url: options.kmlurl,
                                format: new OpenLayers.Format.KML({
                                        extractStyles: true,
                                        extractAttributes: true
                                })
                        }),
-               strategies: [new OpenLayers.Strategy.Fixed()]});
+                       strategies: [new OpenLayers.Strategy.Fixed()],
+                       projection: new OpenLayers.Projection("EPSG:4326")
+                });
        }
        map.addLayer(pois);
        select = new OpenLayers.Control.SelectFeature(pois);
@@ -98,7 +136,7 @@ function mapsetup(divname, options) {
 
        if (options.fullscreen) {
                map.addControl(new OpenLayers.Control.PanZoomBar());
-               map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
+               map.addControl(new OpenLayers.Control.LayerSwitcher());
                map.addControl(new OpenLayers.Control.MousePosition());
                map.addControl(new OpenLayers.Control.KeyboardDefaults());
        } else {