From 683c1ebb4c510eac5bb2c2b4e85c3f7b5ded3146 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Mon, 29 Oct 2007 17:16:10 -0400 Subject: * Fix some issues with toggles in preview mode. --- IkiWiki/Plugin/toggle.pm | 8 ++++++- debian/changelog | 6 ++++++ doc/bugs/bug_when_toggling_in_a_preview_page.mdwn | 26 +++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/IkiWiki/Plugin/toggle.pm b/IkiWiki/Plugin/toggle.pm index 3f9c48672..df5a2a737 100644 --- a/IkiWiki/Plugin/toggle.pm +++ b/IkiWiki/Plugin/toggle.pm @@ -80,7 +80,13 @@ sub preprocess_toggle (@) { #{{{ my %params=(id => "default", text => "more", @_); my $id=genid($params{page}, $params{id}); - return "$params{text}"; + if (! $params{preview}) { + return "$params{text}"; + } + else { + return "$params{text} ". + gettext("(not toggleable in preview mode)"); + } } # }}} sub preprocess_toggleable (@) { #{{{ diff --git a/debian/changelog b/debian/changelog index 15d60114e..9684a02d5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ikiwiki (2.12) UNRELEASED; urgency=low + + * Fix some issues with toggles in preview mode. + + -- Joey Hess Mon, 29 Oct 2007 17:15:04 -0400 + ikiwiki (2.11) unstable; urgency=low * Correct a pair of logic errors that triggered if svnpath was empty. diff --git a/doc/bugs/bug_when_toggling_in_a_preview_page.mdwn b/doc/bugs/bug_when_toggling_in_a_preview_page.mdwn index 2d5b881c2..2f1b5f68c 100644 --- a/doc/bugs/bug_when_toggling_in_a_preview_page.mdwn +++ b/doc/bugs/bug_when_toggling_in_a_preview_page.mdwn @@ -1,3 +1,29 @@ When toggling an item while being in a web-editing session in the *Preview* frame, you'll lose the context of the editing session and will be directed to the wiki's main page instead. --[[tschwinge]] + +Making toggles actually work in preview is hard: The toggle plugin uses +a format hook to add javascript to the page, after htmlscrubber runs. Page +preview does not currently run the format hook. + +I think that is not done because the format hook is supposed to get the +entire html file contents, including the html head and body elements, and +in the case of page preview, such a full page is not being generated, +instead it's just inlining the previewed page into the edit form. + +If the format hook were called on this partial data, hooks that looked for +body tags etc would break. OTOH, if in preview mode it were run on the +whole edit form page, ones like toc that parse the page would have +unexpected results, since they would also parse the edit form. + +(Also, if format were run in preview mode then plugins like linkmap, which +generate object files in their format hook, would need to be changed to not +do this during preview (to avoid preview mode writing files to the wiki). +So the format hook would need to be passed a flag indicating preview mode.) + +So I don't see a good way to call the format hook in preview mode. +Failing that, the best I can do is make the toggle plugin detect preview +mode, and generate nonfunctional toggles that warn they're not toggleable +in preview mode. I've [[done]] that, which also fixes the incidental issue of +the toggle link pointing to the wrong place, which was due to the use of the +<base> tag in the preview page template. --[[Joey]] -- cgit v1.2.3