ikiwiki/doc/todo/preview_changes.mdwn

86 lines
3.3 KiB
Plaintext
Raw Normal View History

When editing a page, it would help to have a "preview changes" or "show diff" button, which brings up a diff from the current page content to the proposed new page content. --[[JoshTriplett]]
Some discussion from the main [[/index/discussion]] page:
>It would be nice to be able to have a button to show "Differences" (or "Show Diff") when
>editing a page. Is that an option that can be enabled?
>
>> It's doable, it could even be done by a [[todo/plugin]], I think.
>> --[[Joey]]
---
I need help with this. Supposedly, such a plugin would provide a `formbuilder_setup`
hook which would add the button, and a cgi hook which would interecept
"Show Diff" clicks. This would show a diff between
`titlepage(possibly_foolish_untaint($form->field("page")))`
and the provided `$form->field("editcontent")`.
But:
* How could the case of concurrent editing be handled ?
Especially as (I think) only the RCS backend can know that
this has happened.
* May I hijack the `page_preview` template variable to show
my diff output? (the patch below assumes this).
* Using the formbuilder hook to add a button, and coerce `editpage()`
into showing the edit form again rather that saving the page needs
the following patch. (note that this is not the only template which has
its submit buttons hardcoded; is this supposed to work around something?)
<pre>
Index: templates/editpage.tmpl
===================================================================
--- templates/editpage.tmpl (révision 4130)
+++ templates/editpage.tmpl (copie de travail)
@@ -57,9 +57,7 @@
Optional comment about this change:<br />
<TMPL_VAR FIELD-COMMENTS><br />
</TMPL_IF>
-<input id="_submit" name="_submit" type="submit" value="Save Page" />
-<input id="_submit_2" name="_submit" type="submit" value="Preview" />
-<input id="_submit_3" name="_submit" type="submit" value="Cancel" />
+<TMPL_VAR FORM-SUBMIT>
<TMPL_VAR HELPONFORMATTINGLINK>
<TMPL_VAR FORM-END>
Index: IkiWiki/CGI.pm
===================================================================
--- IkiWiki/CGI.pm (révision 4130)
+++ IkiWiki/CGI.pm (copie de travail)
@@ -304,6 +304,7 @@
eval q{use CGI::FormBuilder};
error($@) if $@;
my $form = CGI::FormBuilder->new(
+ title => "editpage",
fields => \@fields,
charset => "utf-8",
method => 'POST',
@@ -321,7 +322,8 @@
);
run_hooks(formbuilder_setup => sub {
- shift->(form => $form, cgi => $q, session => $session);
+ shift->(form => $form, cgi => $q, session => $session,
+ buttons => \@buttons);
});
decode_form_utf8($form);
@@ -402,12 +404,12 @@
preprocess($page, $page,
filter($page, $page, $form->field('editcontent')), 0, 1))));
}
- else {
+ elsif ($form->submitted eq "Save Page") {
$form->tmpl_param("page_preview", "");
}
$form->tmpl_param("page_conflict", "");
- if (! $form->submitted || $form->submitted eq "Preview" ||
+ if ($form->submitted ne "Save Page" ||
! $form->validate) {
if ($form->field("do") eq "create") {
my @page_locs;
</pre>
--[[JeremieKoenig]]