From 2bd104da6151ff682843774bf8ffd44501dd785e Mon Sep 17 00:00:00 2001 From: takezoe Date: Tue, 26 Jul 2011 23:04:31 +0000 Subject: [PATCH] =?utf8?q?=E3=82=B3=E3=83=B3=E3=83=95=E3=83=AA=E3=82=AF?= =?utf8?q?=E3=83=88=E6=99=82=E3=81=AB=E5=B7=AE=E5=88=86=E3=82=92=E8=A1=A8?= =?utf8?q?=E7=A4=BA=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?utf8?q?=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- plugin/core/Diff.pm | 22 +++++++++------ plugin/core/EditPage.pm | 72 +++++++++++++++++++++++++++++++------------------ 2 files changed, 60 insertions(+), 34 deletions(-) diff --git a/plugin/core/Diff.pm b/plugin/core/Diff.pm index 9963e68..c3faea3 100644 --- a/plugin/core/Diff.pm +++ b/plugin/core/Diff.pm @@ -226,19 +226,25 @@ sub get_diff_html { $source1 = $wiki->convert_from_fswiki($source1, $format); $source2 = $wiki->convert_from_fswiki($source2, $format); - my $diff_text = ""; -=pod - my @msg1 = split(/\n/,$source1); - return "¥Ú¡¼¥¸¤¬Â礭¤¹¤®¤ë¤¿¤áº¹Ê¬¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó¡£" if($#msg1 >= 999); - my @msg2 = split(/\n/,$source2); - return "¥Ú¡¼¥¸¤¬Â礭¤¹¤®¤ë¤¿¤áº¹Ê¬¤òɽ¼¨¤Ç¤­¤Þ¤»¤ó¡£" if($#msg2 >= 999); -=cut + return (&_get_diff_html($source1, $source2), $source2 ne ""); +} + +#============================================================================== +# º¹Ê¬HTML¤òÀ¸À®¤¹¤ë´Ø¿ô +#============================================================================== +sub _get_diff_html { + my $self = shift; + my $source1 = shift; + my $source2 = shift; + my @msg1 = _str_jfold($source1, 1); my @msg2 = _str_jfold($source2, 1); my $msgrefA = \@msg2; my $msgrefB = \@msg1; + my $diff_text = ""; + traverse_sequences($msgrefA, $msgrefB, { MATCH => sub { @@ -255,7 +261,7 @@ sub get_diff_html { } }); - return ($diff_text, $source2 ne ""); + return $diff_text; } #============================================================================== diff --git a/plugin/core/EditPage.pm b/plugin/core/EditPage.pm index bc1d3f0..381d783 100644 --- a/plugin/core/EditPage.pm +++ b/plugin/core/EditPage.pm @@ -5,6 +5,7 @@ ############################################################################### package plugin::core::EditPage; use strict; +use plugin::core::Diff; #============================================================================== # ¥³¥ó¥¹¥È¥é¥¯¥¿ #============================================================================== @@ -46,36 +47,55 @@ sub do_action { #-------------------------------------------------------------------------- # Êݸ½èÍý if($cgi->param("save") ne ""){ - if($wiki->page_exists($pagename)){ - if($cgi->param("lastmodified") != $time){ - return $wiki->error("¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£"); - } - } - #my $save_content = $content; - my $mode = $wiki->get_edit_format(); - my $save_content = $wiki->convert_to_fswiki($content,$mode); + if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){ + $buf .= "

¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

"; + + my $mode = $wiki->get_edit_format(); + my $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode); + my $your_source = $content; + $your_source =~ s/\r\n/\n/g; + $your_source =~ s/\r/\n/g; + + my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source); + $diff =~ s/\n/
/g; + + $buf .= qq| + +
$diff
+ |; + + $content = $orig_source; + + } else { + #my $save_content = $content; + my $mode = $wiki->get_edit_format(); + my $save_content = $wiki->convert_to_fswiki($content,$mode); - # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç - if($artno ne ""){ - $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki); - } - # FrontPage¤Ïºï½üÉÔ²Ä - if($pagename eq $wiki->config("frontpage") && $save_content eq ""){ - $buf = "".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£\n"; + # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç + if($artno ne ""){ + $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki); + } + # FrontPage¤Ïºï½üÉÔ²Ä + if($pagename eq $wiki->config("frontpage") && $save_content eq ""){ + $buf = "".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£\n"; - # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ - } else { - $wiki->save_page($pagename,$save_content,$sage); - - if($content ne ""){ - $wiki->redirect($pagename); + # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ } else { - if($artno eq ""){ - $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿"); - return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£"; + $wiki->save_page($pagename,$save_content,$sage); + + if($content ne ""){ + $wiki->redirect($pagename); } else { - $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿"); - return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£"; + if($artno eq ""){ + $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿"); + return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£"; + } else { + $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿"); + return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£"; + } } } } -- 2.11.0