]> sipb.mit.edu Git - ikiwiki.git/blobdiff - doc/todo/preview_changes.mdwn
web commit by http://jeremie.koenig.myopenid.com/: update
[ikiwiki.git] / doc / todo / preview_changes.mdwn
index 29c39210d8b7f2a740dd688f51ec19d33b1817a4..d04c32314e3632772b47b7856b860302ebc6d0ec 100644 (file)
@@ -1 +1,86 @@
-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.
\ No newline at end of file
+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]]
\ No newline at end of file